介绍
这期内容当中小编将会给大家带来有关怎么避免乱用表达式,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
<强> 强>
在祝辞祝辞,def foo (bar=[]):,,,,,,,, #,酒吧是可选参数,如果没有指明的话,默认值是[] ,,,,,bar.append (“baz"),,,, #,但是这行可是有问题的,走着瞧… …,,,,return 酒吧
人们常犯的一个错误是认为每次调用这个函数时不给这个可选参数赋值的话,它总是会被赋予这个默认表达式的值,例如,在上面的代码中,程序员可能会认为重复调用函数foo()(不传参数酒吧给这个函数),这个函数会总是返回“记者”,因为我们假定认为每次调用foo()的时候(不传bar),参数栏会被置为[](即,一个空的列表)。
那么我们来看看这么做的时候究竟会发生什么:
在祝辞祝辞,foo () (“baz") 在祝辞祝辞,foo () (“baz",,“baz"】 在祝辞祝辞,foo () (“baz",,“baz",,“baz"]
嗯?为什么每次调用foo()的时候,这个函数总是在一个已经存在的列表后面添加我们的默认值“记者”,而不是每次都创建一个新的列表?
答案是一个函数参数的默认值,仅仅在该函数定义的时候,被赋值一次。如此,只有当函数foo()第一次被定义的时候,才讲参数酒吧的默认值初始化到它的默认值(即一个空的列表)。当调用foo()的时候(不给参数bar),会继续使用酒吧最早初始化时的那个列表。
由此,可以有如下的解决办法:
在祝辞祝辞,def foo (bar=None): ,,,,,if bar is 没有:,,,,,, #,或者用,if not 酒吧: ,,,,,,,,,bar =, [] ,,,,,bar.append (“baz") …,,,,return 酒吧 … 在祝辞祝辞,foo () (“baz") 在祝辞祝辞,foo () (“baz") 在祝辞祝辞,foo () (“baz")
上述就是小编为大家分享的怎么避免乱用表达式了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注行业资讯频道。