Каков объем глобальных переменных между двумя функциями - PullRequest
0 голосов
/ 30 мая 2020

Я здесь сбит с толку. Следует ли объявить переменную глобальной переменной, если она уже установлена ​​в функции? Я имею в виду

def function1():
   global var1, var2
   var1 = 2
   var2 = 3

def function2():
   global var1, var2    <-------Should i mention in every function where I use those variable?
   ans = var1 + var 2

Если это не требуется, могу ли я сделать вот так?

def function 1():
    var1 = 2
    var2 = 4

def funciton2():
   ans = var1+var2

def function3():
   global var1, var2
   (no codes here)

Есть ли способ получить список всех переменных, используемых в скрипте, и отсортировать, какие из них глобальные?

Ответы [ 2 ]

0 голосов
/ 30 мая 2020

Вы можете использовать globals(), чтобы получить словарь глобальных переменных. Вам нужно использовать ключевое слово global только в том случае, если вы планируете обновить глобальную переменную, а не если вы пытаетесь получить доступ к ее значению

Вам нужно назначить их вне функции, поэтому в вашем случае

var1 = 1 # outside function, can be used as global variable
var2 = 2

def function1():
   global var1, var2
   var1 = 2 # as global is used, from here on var1 will have the value 2
   var2 = 3

def function2():
# as you are not assigning a value to var1,2 but only access their value so  
# you do not need to use the global keyword
   ans = var1 + var2  
0 голосов
/ 30 мая 2020

Вам нужно использовать global в любой функции, которая присваивает значение этой переменной. global сообщает функции, что имя не находится в ее локальном пространстве имен. Когда вы просто используете переменную, python попробует локальное пространство имен, не найдет переменную, а затем вернется к глобальному пространству имен. Когда вы пытаетесь установить переменную, python не может знать, имели ли вы в виду локальную переменную с таким же именем или глобальную. Следовательно, украшение global.

В вашем первом примере вам нужен global в function1, потому что вы назначаете переменные.

def function1():
   global var1, var2
   var1 = 2
   var2 = 3

Вам не нужно в function2, потому что вы используете только им, вы им ничего не назначаете.

def function2():
   ans = var1 + var2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...