【问题标题】: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】:

    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)
    

    【讨论】:

      【解决方案2】:

      这基本上是范围规则的示例。 foo 中的变量 x 是 foo 的本地变量,因此本地 x 发生的任何事情都不会改变 foo 之外的任何内容,包括实际上是不同变量的全局 x。当解释器退出 foo 时,全局 x 又回到作用域中,并且它没有从初始值 0 改变。函数头 foo(x=x) 定义了一个局部 x,其默认值为全局 x。解释器允许这样做,但通常认为使用相同的变量名表示两个变量是不好的编程习惯,因为这会导致这种混淆。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-03-29
        • 2013-03-21
        • 1970-01-01
        • 2011-04-06
        • 1970-01-01
        • 1970-01-01
        • 2018-05-04
        相关资源
        最近更新 更多