Python编写键盘程序时函数调用变量取值异常问题咨询
问题原因
这是Python变量作用域规则导致的:
- 函数内部直接赋值的变量默认属于当前函数的局部变量,仅在函数内部生效,不会覆盖同名的全局变量
- 你在
letter001()中赋值的letter1是该函数的局部变量,全局作用域下的letter1始终是初始值"a",而letter002()中读取的letter1就是全局变量,因此打印结果始终带a
解决方案
方案1:用global声明修改全局变量
如果需要在函数内部修改全局变量,提前用global关键字声明即可,保留原有初始赋值逻辑,修改后代码如下:
baseLetter = ("a") letter1 = (baseLetter) letter2 = (baseLetter) def letter002(): global letter1 letter2 = input("") if letter2 == ("a"): letter2 = ("a") print("{}{}".format(letter1, letter2)) elif letter2 == ("b"): letter2 = ("b") print("{}{}".format(letter1, letter2)) elif letter2 == ("c"): letter2 = ("c") def letter001(): global letter1 letter1 = input("") if letter1 == ("a"): letter1 = ("a") print("output - {}".format(letter1)) letter002() elif letter1 == ("b"): letter1 = ("b") print("output - {}".format(letter1)) letter002() elif letter1 == ("c"): letter1 = ("c") print("output - {}".format(letter1)) letter002()
方案2:通过参数传值(更推荐,避免全局变量污染)
不需要修改全局变量,直接把letter1作为参数传递给letter002()即可,代码修改如下:
baseLetter = ("a") letter1 = (baseLetter) letter2 = (baseLetter) def letter002(l1): letter2 = input("") if letter2 == ("a"): letter2 = ("a") print("{}{}".format(l1, letter2)) elif letter2 == ("b"): letter2 = ("b") print("{}{}".format(l1, letter2)) elif letter2 == ("c"): letter2 = ("c") def letter001(): letter1 = input("") if letter1 == ("a"): letter1 = ("a") print("output - {}".format(letter1)) letter002(letter1) elif letter1 == ("b"): letter1 = ("b") print("output - {}".format(letter1)) letter002(letter1) elif letter1 == ("c"): letter1 = ("c") print("output - {}".format(letter1)) letter002(letter1)
两种方案运行后,输入c作为letter1、输入b作为letter2时,都会输出你预期的cb。
内容的提问来源于stack exchange,提问作者Cameron
相关产品推荐
相关产品推荐

