如何更改函数中变量的范围? 蟒蛇

这个问题在这里已经有了答案:

  • 如何通过引用传递变量? 23个答案
  • 在Python中,为什么函数可以修改调用者感知的某些参数,而不是其他参数? 9个答案

  • 将它们视为功能的一部分。 当函数结束时,它的所有变量也会死掉。

    x=2
    y=3
    
    def func(x,y):
        x=200
        y=300
    
    func(x,y) #inside this function, x=200 and y=300
    #but by this line the function is over and those new values are discarded
    print(x,y) #so this is looking at the outer scope again
    

    如果你想让一个函数按照你写的方式修改一个值,你可以使用global但这是非常糟糕的做法。

    def func(x,y):
        global x #these tell the function to look at the outer scope 
        global y #and use those references to x and y, not the inner scope
        x=200
        y=300
    
    func(x,y)
    print(x,y) #prints 200 300
    

    这样做的问题在于,它使得在最好的情况下调试恶梦,而在最坏的情况下完全不可理解。 像这些东西通常被称为函数中的“副作用” - 设置一个你不需要设置的值,而不显式地返回它是一件坏事。 一般来说,你应该编写的就地修改项的唯一函数是对象方法(比如[].append()修改列表,因为它返回一个新列表是愚蠢的!)

    做这种事情的正确方法是使用返回值。 尝试类似

    def func(x,y):
        x = x+200 #this can be written x += 200
        y = y+300 #as above: y += 300
        return (x,y) #returns a tuple (x,y)
    
    x = 2
    y = 3
    func(x,y) # returns (202, 303)
    print(x,y) #prints 2 3
    

    为什么没有工作? 那么因为你从来没有告诉程序用这个元组(202, 303)任何事情,只是为了计算它。 我们现在分配它

    #func as defined above
    
    x=2 ; y=3
    x,y = func(x,y) #this unpacks the tuple (202,303) into two values and x and y
    print(x,y) #prints 202 303
    
    链接地址: http://www.djcxy.com/p/20837.html

    上一篇: How to change the scope of a variable in a function? Python

    下一篇: How does python assign values after assignment operator