python - 为什么我的函数内部的变量即使是全局变量也没有定义?
问题描述
所以我做了一个打开网站的功能:
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(YT)
运行时没有语法错误,但返回结果:
NameError:名称“YT”未定义
后来我尝试在函数之外定义变量并且它起作用了:
import webbrowser
def go_to_url(link):
webbrowser.open(link)
YT = 'youtube.com'
Reddit = 'reddit.com'
SO = 'stackoverflow.com'
go_to_url(YT)
我只是不明白为什么我不能在我的函数中定义它,即使它们是全局的。请给我解释一下,提前谢谢!
解决方案
您在这里遇到的问题是该变量在您实际运行该函数之前没有定义,因此YT
在您尝试进行调用时不存在。举个例子:
In [144]: def make_vars():
...: global hello
...: hello = "world"
...:
In [145]: print(hello)
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-145-1cd80308eb4c> in <module>
----> 1 print(hello)
NameError: name 'hello' is not defined
In [146]: make_vars()
In [147]: print(hello)
world
推荐阅读
- elasticsearch - 弹性搜索文件名搜索不适用于文件名中的点
- c# - Newtonsoft.Json.JsonSerializationException:
发生了 - reactjs - 如何用 Jest 和酵素用 Relay modern 进行测试?
- jsf - 如何在错误页面上修复 FacesContext 注入
- php - 如何在我的应用程序中集成 laravel 包
- spring - 为什么我不能将 SessionFactory 注册为 bean?
- python - Black Karasinski 模型的校准
- c# - Dropbox API UploadAsync 永远不会返回
- ios - 为什么pdf注解Y位置在ios、pdfkit、swift中从页面底部开始
- mainframe - Can we connect TN3270 emulator by Mochasoft using VBA?