【问题标题】:Python 3 syntax should work, but doesn'tPython 3 语法应该可以工作,但不能
【发布时间】:2013-12-02 15:35:56
【问题描述】:
它是如此基本,它应该可以工作。我想要一个为某物增加价值的函数
关于 python 3 一定有什么我不知道的,所以我们开始吧。
x = 0
def foo(x=x): ##### with out x=x there is a error
x = x + 1 # option one
x = 1 # option two
# when we run it
foo()
print(x)
# it returns 0, it should return 1
【问题讨论】:
标签:
python
function
python-3.x
syntax
【解决方案1】:
x 是foo() 中的一个本地 变量;将 x 分配为关键字参数的默认值不会使其不再是本地的。
如果您希望它是全局的,请将其标记为:
x = 0
def foo():
global x
x = x + 1
print(x)
foo()
print(x)
但您可能只是想将值作为参数传递:
def foo(value):
return value + 1
x = 0
print(x)
x = foo(x)
print(x)
【解决方案2】:
这基本上是范围规则的示例。 foo 中的变量 x 是 foo 的本地变量,因此本地 x 发生的任何事情都不会改变 foo 之外的任何内容,包括实际上是不同变量的全局 x。当解释器退出 foo 时,全局 x 又回到作用域中,并且它没有从初始值 0 改变。函数头 foo(x=x) 定义了一个局部 x,其默认值为全局 x。解释器允许这样做,但通常认为使用相同的变量名表示两个变量是不好的编程习惯,因为这会导致这种混淆。