为什么函数内用global声明的变量调用时提示未定义?
错误原因解析
- Python代码遵循从上到下逐行执行的规则,函数定义阶段仅会校验语法合法性,不会执行函数内部的任何代码。你第一段代码中
global YT的作用域声明、YT = 'youtube.com'的赋值逻辑,都只有在go_to_url函数被调用时才会运行。 - 你调用函数的语句为
go_to_url(YT),Python执行这行代码时需要先对入参YT做取值运算,此时go_to_url还未启动执行,函数内部的变量定义逻辑完全没有运行,全局作用域中也没有提前定义YT变量,因此直接抛出未定义错误。 global关键字的作用仅为声明「当前函数内使用的该变量指向全局作用域的变量,而非函数内部的局部变量」,它不会提前创建全局变量,也不会修改代码的执行顺序。
如果你想保留函数内部声明全局变量的写法,可以参考下面的调整方案:
import webbrowser def go_to_url(link): global YT, Reddit, SO YT = 'youtube.com' Reddit = 'reddit.com' SO = 'stackoverflow.com' webbrowser.open(link) # 先给参数传字面量调用一次函数,完成全局变量初始化 go_to_url('youtube.com') # 此时全局作用域已经生成YT变量,后续调用可直接使用 print(YT)
内容的提问来源于stack exchange,提问作者Andrew
相关产品推荐
相关产品推荐

