不合法的python表达式,python常见的语法错误

  不合法的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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: