Python: изменение глобальной переменной и элементов глобального списка внутри функции
Задача
Я столкнулся с еще одной проблемой с моим кодом. Я создаю программу, которая манипулирует значением глобальной переменной по мере необходимости. Я искал, как использовать global для изменения значений глобальной переменной всякий раз, когда это необходимо внутри функции. любая помощь будет очень признательна. вы можете пересмотреть весь код, если хотите. Раз спасибо.
Код
verifier = 0
letters = ["A","B","C","D","E","F","G","H","I"]
if verifier == 0:
letters = ["A","B","C","D","E","F","G","H","I"]
if verifier == 1:
letters = newlist()
def newlist():
numbers = ["0","1","2","3","4","5","6","7","8"]
return animals
def main():
global verifier
# this should print ["A","B","C","D","E","F","G","H","I"]
print(letters)
# global variable should be changed to 1
verifier = 1
# this should print ["0","1","2","3","4","5","6","7","8"] now
print(letters)
main()
1 ответ:
Используйте глобальную переменную:
verifier = 0 def newlist(): if verifier == 0: return ["A","B","C","D","E","F","G","H","I"] elif verifier == 1: return ["0","1","2","3","4","5","6","7","8"] print newlist() def main(): global verifier verifier = 1 main() print newlist()У вас была неправильная структура кода. Вы ничего не добьетесь, изменив переменную.
Это объявление переменных:
verifier = 0 letters = ["A","B","C","D","E","F","G","H","I"]Во-первых, если и во-вторых, если код не будет проверяться только один раз, перед вызовом main. Также-читайте о
elif.if verifier == 0: letters = ["A","B","C","D","E","F","G","H","I"] elif verifier == 1: letters = newlist()"Буквы" в
mainfuinction всегда будут["A","B","C","D","E","F","G","H","I"]. Смотрите мой пример, если вы хотите исправить свой код.ifвыполняется только один раз. Вы не сможете повторно сканировать без необходимость перезапустить файл.В большинстве случаев
globalне нужно использовать-вы просто передаете переменную аргументам функции:def newlist(verifier): if verifier == 0: return ["A","B","C","D","E","F","G","H","I"] elif verifier == 1: return ["0","1","2","3","4","5","6","7","8"] def main(): print newlist(0) print newlist(1) main()Конкретно по этой задаче-нет даже необходимости использовать функции:
letters = { 0: ["A","B","C","D","E","F","G","H","I"], 1: ["0","1","2","3","4","5","6","7","8"] } print letters.get(0, None)
Comments