Как да извикам функция, която връща променлива няколко пъти, докато е вътре в друга функция?

Имам функция (текстобазирана игра), която иска въвеждане многократно в самата нея, от която всички бели интервали бих искал да бъдат премахнати веднага след това, преди да премина към проверка за грешки.

За да намаля излишъка, мислех да направя друга функция, която да прави и двете, и след това да върне променливата така:

def startGame():
    print("1, 2 or 3?")
    response = response()

def response():
    a = raw_input()
    a = a.strip()
    return a

startGame()

Проблемът е, че продължавам да получавам:

UnboundLocalError: локална променлива 'response', посочена преди присвояването.

Това няма смисъл за мен, тъй като на отговора е присвоена върнатата стойност на response().
Какво пропускам? Има ли по-прост начин да направите това?


person Joseph Webber    schedule 15.05.2013    source източник


Отговори (1)


Наименувахте локалната променлива response също; не можете да направите това, то маскира глобалната response() функция.

Преименувайте локалната променлива или функцията:

def get_response():
    # ...


response = get_response()

or

def response():
    # ....

received_response = response()
person Martijn Pieters    schedule 15.05.2013
comment
@Martijn_Pieters Благодаря. Не знаех, че Python прави това, но сега знам! - person Joseph Webber; 15.05.2013
comment
@JosephWebber: Във функциите всички имена, които директно присвоявате на (somename = ...), стават локални променливи (езиковият компилатор прави това). Това не се отнася за атрибути (somename.someattribute = ), а само за директни имена. Така response вече е дефинирано като локално име, но вие сте се опитали да го използвате, преди да му присвоите някаква стойност. Това води до изключение. - person Martijn Pieters; 15.05.2013