假设我有这个代码(在Python上):
a,b,c
输出将是:1 2 3
我的问题是:
有一个原因可以更改x(a,b,c)
Chrome: Version 58.0.3029.81 (64-bit)
的值(没有返回)?
谢谢!
答案 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