问个基础问题

问个基础问题



[Copy to clipboard] [ - ]
CODE:
#!/usr/bin/env python
abc=0
class S1:
        def __init__(self, data):
                data = 123

S1(abc)
print abc

为什么打印出来是0呢
python的参数传递方式是值参。对原来的值不会改变。
那有什么办法可以在对象里面改变对象外面的变量呢
最pythonic的做法就是:返回值,如:

[Copy to clipboard] [ - ]
CODE:
#!/usr/bin/env python
abc=0
class S1:
        def p(self, data):
                return 123 + 1

abc = S1().p(abc)
print abc

再有就是使用可变对象,如list, dict, object等,如:

[Copy to clipboard] [ - ]
CODE:
def p(a):
    a[0] = a[0] + 1
a = [1]
p(a)
print a[0]

而且python可以一次返回多个值,因此上能够使用返回值最好,不行再考虑使用其它的方法。
thanks a lot