如何在Python上更改函数的变量

时间:2017-04-21 20:20:16

标签: python python-3.x function

假设我有这个代码(在Python上):

a,b,c

输出将是:1 2 3

我的问题是:
有一个原因可以更改x(a,b,c) Chrome: Version 58.0.3029.81 (64-bit)的值(没有返回)?

谢谢!

4 个答案:

答案 0 :(得分:2)

使用全球关键字:

a=1
b=2
c=3

def x():
    global a, b, c
    a = 5
    b = 6
    c = 7

x()
print(a,b,c)
# -> 5 6 7

使用

class Foo(object):
    def __init__(self, a, b, c):
        self.a = a
        self.b = b
        self.c = c

    def x(self):
        self.a = 5
        self.b = 6
        self.c = 7


foo = Foo(1, 2, 3)
print(foo.a, foo.b, foo.c)
# -> 1 2 3

foo.x()
print(foo.a, foo.b, foo.c)
# -> 5 6 7

答案 1 :(得分:0)

因此,您可以在函数内部使用全局修饰符使变量引用函数外部的变量;但是,这可能会导致代码异味"。

所以在函数内部,在这些赋值之前放置全局,这应该可以解决你的问题。

答案 2 :(得分:0)

解决方法是将其转换为列表,如下所示:

a = 1
b = 2
c = 3
l = [a, b, c]

def x(list):
    list[:] = [5, 6, 7]

x(l)

a, b, c = l
print(a, b, c)

答案 3 :(得分:0)

作为一名新的Python程序员,请避免使用global Globals可能对配置等内容很有用,但在大多数情况下,如果你开始它们会导致危险的副作用将它们用作默认的编程范例。我建议你尝试一种类模式或变量赋值模式。

课程作业

class Foo(object):
    def __init__(self, a, b, c):
        self.a = a
        self.b = b
        self.c = c

    def update(self, a, b, c):
        self.a = a
        self.b = b
        self.c = c

foo = Foo(1,2,3)
foo.update(5,6,7)
print "a: %d, b: %d, c: %d" % (foo.a, foo.b, foo.c)

变量分配

a=1
b=2
c=3

def x():
    a_prime = 5
    b_prime = 6
    c_prime = 7
    return a_prime, b_prime, c_prime
a, b, c = x()
print a, b, c