Python 3语法应该可以工作,但不能

时间:2013-12-02 15:35:57

标签: python function python-3.x syntax

它是如此基本它应该工作。我想要一个为某些东西添加值的函数

关于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

2 个答案:

答案 0 :(得分:3)

xfoo()中的本地变量;将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。解释器允许它,但通常认为糟糕的编程习惯是使用相同的变量名来表示两个变量,因为它会导致这种混淆。