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)的,每一次修改它都会创建一个新的对象。

文章名称:Python默认参数如何才能进行求值操作
标题路径:http://www.csdahua.cn/qtweb/news48/270598.html

网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网