1

ですから、非常に単純な答えがあると確信している何かを疑問に思っていましたが、それについて頭を悩ませているようには見えません. 関数で、特定のタスクを実行するためにグローバル変数を設定するにはどうすればよいですか。たとえば、私は試しました:

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

注意事項:

  • パイソン3.3
  • GLOBAL 変数 (ローカルではない)
4

1 に答える 1

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

次に、この関数を複数のWebサイトに対して実行するとします。Webサイトごとに変数を作成する代わりに、HTMLをdictまたはlistまたは他のデータ構造に格納できます。例えば:

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)
于 2013-03-22T20:21:52.433 に答える