Python默认参数如何才能进行求值操作

开发 后端
Python默认参数在使用的时候需要我们注意的东西有很多,其中我们需要不断的进行相关知识的学习,下面我们就详细的看看如何才能更好的进行相关问题的解决。

和很多高级编程语言一样,Python默认参数也有很大的用处。但是我们在使用的时候会出现不少的问题,这些问题就需要我们用相关的知识进行解答。当默认参数是数值类型时,一切都很美好:

  1. >>> def function(a, b = 1000000):  
  2. b +=a 

return b 如果你喜欢,你可以在一段代码中无数次的调用这个函数,只要你参数一样,结果应该都一样。比如:function(1)总是会返回1000001。但是默认参数是其他类型(如列表)时就没那么美好了:

  1. >>> def function(a, b = []):  
  2. b.append(a)  
  3. print(b) 

这时你如果在一段代码中持续的调用该函数,将会发生或许令人意外的情况:第一次调用function(1)的时候,很正常,会打印出[1],但是第二次再调用function(1),将会打印出[1,1]。这是为什么呢?不要紧,使用Python默认参数我们有办法检查一下是哪里出了毛病。这里我们可以在每一次调用函数的时候打印出b的ID。Python中一个对象的ID在其生命周期中是唯一的,和其他高级语言中所说的对象的地址一样。如果第二段代码中的b对象其ID一样,说明两次调用都使用的同一个对象,换句话说,Python默认参数的求值操作在其生命周期中只发生一次(第一次)。可以使用以下的代码测试我们的想法:

  1. def function1(a,b=100000):  
  2. b+=a  
  3. print("b = {0} with the id of {1}".format(b,id(b)))  
  4. def function2(a,b=[]):  
  5. b.append(a)  
  6. print("b = {0} with the id of {1}".format(b,id(b)))  
  7. def test():  
  8. function1(1)  
  9. function1(1)  
  10. function2(1)  
  11. function2(1)  
  12. if __name__ == '__main__':  
  13. test() 

得到的输出如下:

 

  1. b = 100001 with the id of 33384304   
  2. b = 100001 with the id of 33384304   
  3. b = [1] with the id of 33341848   
  4. b = [1, 1] with the id of 33341848  

以上就是对Python默认参数的详细介绍。果然,从后面两条结果中可以看到列表b在两次调用时都是使用的同一个对象,看来之前的猜想是正确的。对非数值类型的默认参数,只会在第一次调用时进行求值(取地址)操作。后面的所有调用都发生在同一个位置的对象上。只有字符串类型不受此限制,因为string本身是不可变的(immutable)的,每一次修改它都会创建一个新的对象。
 

【编辑推荐】

  1. Python命令行代码强化记忆宝典
  2. Python编程语言在Java中的使用效果
  3. Python编程语言与其他语言的学习区别
  4. Python编程语言使用者心得
  5. Python循环如何解决无限循环
责任编辑:张浩 来源: IT专家网
相关推荐

2010-03-12 18:29:56

Python字符串替换

2023-03-28 08:07:12

2010-03-04 17:50:42

Android操作系统

2010-02-22 17:12:34

Python对象

2010-02-05 16:35:35

Android操作系统

2023-12-11 16:34:35

人工智能GenAI精确编码

2024-11-20 10:00:00

Python文件读写

2010-02-01 16:22:36

Python字符串操作

2022-10-10 12:31:37

服务器性能

2023-11-13 10:17:56

2022-11-08 09:44:45

2024-11-13 15:22:36

Python列表切片

2013-05-24 10:22:07

Python默认参数值

2013-08-03 17:59:37

Nginx

2020-10-28 09:40:04

CIO远程工作技术

2010-03-25 16:31:55

Python代码

2010-08-31 08:57:02

谷歌即时搜索功能

2010-03-12 18:45:24

Python匹配

2010-03-12 13:44:31

Python whil

2009-11-03 09:22:36

jQuery
点赞
收藏

51CTO技术栈公众号