它是如此基本它应该工作。我想要一个为某些东西添加值的函数
关于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
答案 0 :(得分:3)
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)
答案 1 :(得分:1)
这基本上是范围规则的示例。 foo中的变量x是foo的本地变量,因此本地x发生的任何变化都不会改变foo之外的任何内容,包括实际上是另一个变量的全局x。当解释器退出foo时,全局x返回到作用域并且它没有从其初始值0改变。函数头foo(x = x)定义了一个局部x,其默认值是全局x。解释器允许它,但通常认为糟糕的编程习惯是使用相同的变量名来表示两个变量,因为它会导致这种混淆。