今天发现了Python一个坑。
我们知道Python中函数跟C++一样,可以设置默认参数,比如:
def func(x, y=1):
print(x, y)
func(x=10)
>> 10 1
y有一个默认值1,所以函数调用的结果是打印10 1但是如果默认值是这样的:
class Food:
def __init__(self):
self.name = "banana"
def eat(name, food=Food()):
print(name + " eat " + food.name + ": " + str(id(food)))
if __name__ == "__main__":
eat("kobe")
eat("james")
结果:
kobe eat banana: 38896200
james eat banana: 38896200
惊奇的发现调用了两次eat函数,实参food竟然是同一个(由id号相同看出),kobe和james吃的是同一个香蕉,不敢想象。
这也说明我自己python姿势水平还不够,还需不断修炼。