为何Python函数未识别String变量更新?默认参数问题问询
Python函数默认参数为何不随变量更新?
你的代码及输出如下:
my_string = "hello" def I_dont_understant (my_string_in_fonction=my_string): print((my_string_in_fonction)) my_string= "bye" I_dont_understant() I_dont_understant(my_string)
输出:
hello bye
核心原因
Python里函数的默认参数是在函数定义的那一刻就计算并绑定值的,不是每次调用函数时才去读取变量的当前值。
当你定义I_dont_understant函数时,全局变量my_string的值是"hello",所以默认参数my_string_in_fonction就被固定成了"hello"。之后你把my_string改成"bye",已经绑定好的默认参数不会跟着变,所以无参调用时还是输出"hello"。而显式传参时,函数直接用你传入的当前变量值"bye",自然输出"bye"。
想要动态获取变量值的处理方式
如果希望默认参数能跟着变量的最新值走,可以把默认参数设为None,在函数内部做判断:
my_string = "hello" def I_dont_understant(my_string_in_fonction=None): if my_string_in_fonction is None: # 每次调用时才读取my_string的当前值 my_string_in_fonction = my_string print(my_string_in_fonction) my_string = "bye" I_dont_understant() # 输出bye I_dont_understant(my_string) # 输出bye
内容的提问来源于stack exchange,提问作者fatsifat
相关产品推荐
相关产品推荐

