2013-03-22 51 views
1

所以我一直在想,我肯定有一個非常簡單的答案,但我似乎無法包圍我的頭。在函數中,如何設置全局變量來執行某個任務。例如,我想:如何在python 3.3中使用input()來設置自己的全局變量?

def function(): 
    global x 
    x = input("Name of variable: ") 
    x = print("Working") 

我也試過:


def function(Name_Of_Variable): 
    global Name_Of_Variable 
    Name_Of_Variable = print("Working") 

基本上,我只需要能夠設置一個全局變量的一個函數。我試圖去工作的實際代碼是這樣的:


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() 

這是發生了什麼:

>>> htmlfrom("http://www.google.com") 
What will this data be saved as: g 
>>> g 
Traceback (most recent call last): 
    File "<pyshell#1>", line 1, in <module> 
    g 
NameError: name 'g' is not defined 

事情要記住:

  • Pyt漢3.3
  • 全局變量(非本地)
+0

我真正好奇的Python教程告訴你使用全局變量... – bernie 2013-03-22 19:51:59

+0

您是否嘗試以另一種方式這不會需要一個全局變量逼近的問題? – bernie 2013-03-22 19:52:36

+0

我沒有遵循這個python教程。據我所知,全局變量只是一個可以在任何地方訪問的變量。爲什麼他們不會有用,還是有更有用的方法?請詳細說明。不,我沒有嘗試過另一種方式。有一個嗎? – user2070615 2013-03-22 19:58:36

回答

1

正如評論討論:據我可以告訴有沒有必要爲一個全局變量。 (如果這真的是你認爲你需要的東西,我會很高興)

一個更模塊化的編程方式是return這個變量,因此允許你在函數之間傳遞數據。例如: -

import urllib.request # `import` statements at the top! have a look at PEP 8 

def htmlfrom(website_url): 
    ''' reads HTML from a website 
     arg: `website_url` is the URL you wish to read ''' 
    response = urllib.request.urlopen(website_url) 
    return response.read() 

然後讓我們說你要運行這個功能在多個網站。您可以將HTML存儲在dictlist或其他數據結構中,而不是爲每個網站創建變量。 E.g:

websites_to_read = ('http://example.com', 
        'http://example.org',) 

mapping_of_sites_to_html = {} # create the `dict` 

for website_url in websites_to_read: 
    mapping_of_sites_to_html[website_url] = htmlfrom(website_url) 
+0

也許在FIRST函數中不需要全局變量,但是當我想要從多個網站獲得html時呢?這就是爲什麼我需要多個變量,對吧? – user2070615 2013-03-22 20:27:21

+0

你不需要多個變量。相反,請考慮將多個網站的HTML存儲在'dict','list'或其他數據結構中。 – bernie 2013-03-22 20:34:52

+0

代碼如何用字典查看?我不知道如何用字典中的不同變量來存儲它們。 – user2070615 2013-03-22 20:41:58