2013-12-24 2 views
3

У меня есть следующий код:Как сохранить переменную внутри определения в python?

def thingy(res) 

    if res=="food": 
     res=0 
    if res=="wood": 
     res=1 
    if res=="metal": 
     res=2 
    if res=="gold": 
     res=3 
    if res=="oil": 
     res=3 

res="food" 

thingy(res) 

print(res) 

При запуске этого он приходит с «едой», когда я хочу сказать, «0». как я могу заставить это работать? Большое спасибо, если вы в состоянии мне помочь.

+1

сделать вас означает 1 или 0? вопрос не ясен, так как он стоит – Vorsprung

+0

Python использует Pass By Value not Pass By Reference - вы можете найти [этот существующий вопрос по теме полезен] (http://stackoverflow.com/questions/986006/python-how-do-i -pass-a-variable-by-reference) – Gagravarr

+0

извините, мой плохой, я имею в виду 0 – user3132416

ответ

2

Обычно, что вы хотите, чтобы присвоить возвращаемое значение переменной:

res = thingy(res) # instead of thingy(res) 

Но если вы хотите еще один вариант, возможно, вы ищете глобальной переменной?

def thingy(): 
    global res 
    if res=="food": 
     res=0 
    if res=="wood": 
     res=1 
    if res=="metal": 
     res=2 
    if res=="gold": 
     res=3 
    if res=="oil": 
     res=3 

res = "food" 
thingy() 
print(res) # prints "0" 

В вашем примере, res внутри вашей функции не то же самое, что res вы определили за пределами вашей функции (вы могли бы дать один из них другое название, и это не имеет значения). В этом примере это из-за строки global res.

Но в большинстве случаев проще и понятнее использовать возвращаемое значение.

5

Назначение res внутри функции изменяет только параметр res; это не влияет на res вне функции.

Сделать функцию возвратом результата. Назначьте значение функции переменной.

def thingy(res): 
    if res=="food": 
     res=0 
    if res=="wood": 
     res=1 
    if res=="metal": 
     res=2 
    if res=="gold": 
     res=3 
    if res=="oil": 
     res=3 
    return res # <--- 

res="food" 
res = thingy(res) # <--- 
print(res) 
+0

Спасибо, что действительно помогло. Соз для того, чтобы быть нуб: р :) – user3132416

+0

ли это по-прежнему будет работать, если я заменить Рез = "пища" разреш = пимпочка (Res) # <--- печать (разрешение) с BES = "пищевые" BES = thingy (bes) # <--- печать (bes) ? – user3132416

+0

@ пользователь3132416, да. – falsetru

8

Вы должны возвращать значение, и почему бы не использовать dictionary вместо всех if заявления, они являются лучшими для такого рода проблем:

Пример:

def thingy(res): 
    myOptions = {'food':0, 'wood':1, 'metal': 2, 'gold': 3, 'oil': 3} 
    return myOptions[res] 

res = "food" 
res = thingy(res) 
print(res) 
Смежные вопросы