不合法的python表达式,python常见的语法错误
在函数参数中乱用表达式作为默认值
Python允许您为函数的参数设置默认值,使其成为可选参数。虽然这是这种语言的一个很大的特点,但是当默认值是可变的时候就有些麻烦了。例如,查看以下Python函数定义:
deffoo(bar=[]):
#bar是可选参数。如果未指定,默认值为[]
.bar.append(baz )
#但是这一行有问题。我们会看到…
.returnbar人们常犯的一个错误是,如果每次调用这个函数时没有给这个可选参数赋值,它总是会被赋予这个默认表达式的值。比如上面的代码,程序员可能会认为函数foo()被重复调用(没有将参数栏传递给这个函数),这个函数总会返回 baz ,因为我们假设每次foo()被调用(没有传递栏),参数栏都会被设置为[](即空列表)。
相关:《Python视频教程》
让我们看看这样做会发生什么:
foo()
[巴兹]
foo()
[巴兹,巴兹]
foo()
[巴兹,巴兹,巴兹]嗯?为什么这个函数每次调用foo()总是在一个已有的列表后加上我们的默认值“baz”,而不是每次都创建一个新的列表?
答案是函数参数的默认值,只有在定义函数的时候才会赋值一次。因此,只有在第一次定义函数foo()时,参数栏的默认值才会初始化为其默认值(即空列表)。调用foo()时(bar没有作为参数给出),将继续使用bar第一次初始化时的列表。
因此,可以有以下解决方案:
deffoo(bar=None):
.ifbarisNone:
#或使用ifnotbar:
.bar=[]
.bar.append(baz )
.返回栏
.
foo()
[巴兹]
foo()
[巴兹]
foo()
[巴兹]
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。