python 怪谈
今天在学习 python
的时候, 发现了很怪的现象, 那就是一个函数有返回值, 我调用的时候不去接收返回值, 但是依然可以获取返回值.
有点绕, 那具体是什么意思呢? 写个例子开整:
题干: 做一个加法运算, 调用一个函数执行相加操作, 然后改变我的 加数2
的值. 怎么做的?
看下面的代码
import numpy as np
def add_one(a, b):
b = a + b
return b
def add_two(a, b):
b += a
return b
def add_three(a, b):
b += a
if __name__ == '__main__':
a = 1
b = 10
add_one(a, b)
print("b1: %s" % b) # ??
add_two(a, b)
print("b2: %s" % b) # ??
aa = np.array([1, 2])
bb = np.array([10, 20])
cc = add_one(aa, bb)
print("bb1: %s" % bb) # ??
aaa = np.array([1, 2])
bbb = np.array([10, 20])
ccc = add_two(aaa, bbb)
print("bbb1: %s" % bbb) # ??
print("ccc == bbb 1: %s" % (ccc == bbb))
ccc = add_two(aaa, bbb)
print("bbb2: %s" % bbb) # ??
print("ccc == bbb 2: %s" % (ccc == bbb))
ccc = add_three(aaa, bbb)
print("bbb3: %s" % bbb) # ??
print("ccc == bbb 3: %s" % (ccc == bbb))
b1: 10
b2: 10
bb1: [10 20]
bbb1: [11 22]
ccc == bbb 1: [ True True]
bbb2: [12 24]
ccc == bbb 2: [ True True]
bbb3: [13 26]
ccc == bbb 3: [False False]
结论: 可以看到, add_two()
这个函数执行完相加的操作之后, 发现 bb
这个加数的值发生了改变, 好神奇啊. 不过, 需要注意的是:
- 参数需要保证是: 数组 这类传入地址类型的参数;
- 加法操作执行的是
+=
操作;
留疑: 不知道这样的操作有没有专业的术语…