请帮忙看下这段程序变量使用,万分感谢!

bigdog1984
  • 8

如图,是一个tkinter代码片段,是可以正常运行的,我的问题是:
19行调用了一个selection方法,这个方法中使用了name_var变量,但是这个name_var变量在22行才被定义,那在前面调用的使用怎么没报错呢?
微信截图_20200714223410.png

回复
阅读 469
3 个回答

我没有用过这个tkinter库,不过看你的代码在19行并没有调用函数selection,只是当做一个参数传入其他函数中,你可以尝试在19行之前调用selection(),如果不传参肯定会报错的

我并没有深入了解过 tkinter, 但是可以看出来 selection 在这里应该是一个事件处理的回调函数, 响应一个 Combobox 被选中的事件, 所以它的执行实际上是滞后的.

由于 Python 是解释运行(产生的.pyc是平台无关的字节码), 所以实际上在运行时, selection 函数才会去访问 name_var 这个全局变量, 所以确实是可用的.

你可以自己运行这两个简化的例子:

def test():
    print(hello)
    
test()  # 报错, 全局变量未定义
def test():
    print(hello)
    
hello = "world"
test()  # 不会报错, 正常运行

只是这种风格代码的确写的不好, 在绝大多数语言中, 使用全局变量都不是一个良好的习惯. (很容易被不清楚的地方意外引用, 所以不建议使用)

19行不是调用吧,只是传入了函数的引用,并没有调用

你知道吗?

宣传栏