从函数在python3中创建全局变量

2024-09-30 16:34:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我想知道为什么在函数结束后不能访问变量:“variable_for_raw_data”。代码是这样的:

def htmlfrom(Website_URL):
    import urllib.request
    response = urllib.request.urlopen(Website_URL)
    variable_for_raw_data =(input("What will this data be saved as: "))
    global variable_for_raw_data
    variable_for_raw_data = response.read()

为什么在函数结束后不能访问变量“variable_for_raw_data”?在

注意事项:

Python 3.3 urllib不是urllib2


Tags: 函数代码importurlfordatarawresponse
1条回答
网友
1楼 · 发布于 2024-09-30 16:34:55

看起来你在尝试动态创建变量,我可以想象你的代码是这样的。在

def htmlfrom(website_url):
    import urllib.request
    response = urllib.request.urlopen(website_url)
    variable_for_raw_data =(input("What will this data be saved as: "))
    global variable_for_raw_data
    variable_for_raw_data = response.read()


if __name__ == "__main__":

    htmlfrom("www.stackoverflow.com")

    #html_stackoverflow is never created it is the value
    #of variable_for_raw_data before variable_for_raw_data
    #is overridden by response.read()

    #entering information into input doesn't create a variable
    print(html_stackoverflow)

我可以这样做:

^{pr2}$

说明

如果在函数中包含import语句,则只能在 功能(即其他功能无法访问)

import urllib.request

PEP 8有关于在python中如何命名事物的指导原则 CamelCase通常是为类名保留的

def htmlfrom(website_url): 
    '''
        docstring 
    '''

Docstrings通常是个好主意。在

有关正确使用globals的详细信息,请查看此问题。 根据我对你情况的了解,我认为你不需要使用它们。在

    response = urllib.request.urlopen(website_url)
    variable_for_raw_data = response.read()
    return variable_for_raw_data

如果你不知道`if name == 'main':,你应该好好读一读。在

if __name__ == "__main__":

不要忘记使用有意义的变量名,不要重写 builtins(即文件=“食品.txt“将重写文件内置)

    file_name = input("What will this data be saved as: ")
    html_from_website = htmlfrom("www.stackoverflow.com")

您可以了解有关上下文管理器的更多信息here

    with open(file_name, 'w') as f: 
        f.write(html_from_website)

使用globals()进行的编辑,其根本不存在用例。在

def htmlfrom(website_url):
    import urllib.request
    response = urllib.request.urlopen(website_url)
    variable_for_raw_data =(input("What will this data be saved as: "))
    globals()[variable_for_raw_data] = response.read()

相关问题 更多 >