2016-03-24 2 views
1

Я столкнулся с проблемой 2 дня назад, и я не смог найти способ заставить ее работать, это просто, и мое решение кажется мне «хорошим». Вот что я получил:Переменная Python не изменена во время функции

leftKeyCounter = 0 

def sendCommand(): 
    # I want to get the counter back to 0. 
    leftKeyCounter = 0 
    return leftKeyCounter 

while True: 
... 
leftKeyCounter = leftKeyCounter + 1 

Функция SendCommand() вызывается автоматически каждые 5 секунд с «графиком» помощника. В моем терминале, например, «leftKeyCounter» не изменяется; если это 4, когда функция запускается, она сообщает мне, что переменная равна 0, но если я добавлю ее еще раз, это будет 5 ...

Все решения, которые я ищу, отправляют меня обратно в «глобальную переменную ", который был устаревшим, так что я не найти рабочее решение ...

Спасибо за любую помощь :)

+0

Вам просто нужно добавить 'глобальный leftKeyCounter' в' 'функции SendCommand(). –

ответ

2

Если вы хотите сослаться на глобальные переменные области видимости, и изменить их, то вам могут делать следующее:

leftKeyCounter = 0 

def sendCommand(): 
    # I want to get the counter back to 0. 
    global leftKeyCounter 
    leftKeyCounter = 0 
    return leftKeyCounter 

while True: 
... 
leftKeyCounter = leftKeyCounter + 1 

Th на вопрос был дан ответ: Using global variables in a function other than the one that created them

+0

Я попробую прямо сейчас, и я уже наткнулся на это сообщение, на которое вы ссылаетесь, но я думал, что это устарело, я прочитал его во многих местах, поэтому я не хотел использовать глобальный var way ... (сообщение с 2009 года, так ...), спасибо – ThaoD5

2

Это обзорный вопрос.

sendCommand -> leftKeyCounter - это не то же самое, что и leftKeyCounter - он скажет вам, что это 0, потому что в рамках функции он есть.

Этот вопрос с переполнением стека имеет несколько отличных ответов и информацию о том, как это работает. Short Description of the Scoping Rules?

+0

Спасибо! Посмотрите :) – ThaoD5

4

Причина, по которой это делается, заключается в том, что в вашем методе leftKeyCounter отличается от lefKeyCounter наружным - даже если у них одинаковое имя.

Один из способов сделать метод изменения leftKeyCounter, который определен снаружи, чтобы использовать global ключевое слово - так он знает, что он вносит изменения в глобальной версии переменной.

Другой способ передать переменную в и возвращает измененное значение, а затем сохранить возвращаемое значение:

def sendCommand(leftKeyCounter): 
    # do something here 
    if something_is_true: 
     leftKeyCounter = 0 
    return leftKeyCounter # this is the new value of leftKeyCounter 

leftKeyCounter = 0 # this is the starting value 
while True: 
    # do something here 
    leftKeyCounter = sendCommand(leftKeyCounter) 
+0

Спасибо большое, исправлено! – ThaoD5

Смежные вопросы