2016-12-28 3 views
-3
def loop(): 
    d = 0 
    for x in range(12): 
     d+=1 #this 'd' is not the same as the one above. 
    print(d) 

В приведенном выше коде не будет ли локальная переменная функции 0? Как я могу изменить это, чтобы использовать функциональную переменную вместо внутренней переменной цикла?Использовать локальную переменную функции внутри петли

+0

Это ваш отступ, что вы хотите, потому что прямо сейчас 'd' станет' 12' – MooingRawr

+1

«не будет ли локальная переменная функции по-прежнему 0?» - какая локальная переменная? Я вижу два, ни один из которых не будет 0 в конце цикла. – user2357112

+0

@MooingRawr цикл повлияет на значение D в функции. – ihazgum

ответ

2

Я думаю, что вы получили путать между сферу вне функции и внутри нее.

d = 1 
def a(): 
    d = 0 # this is a different d from line 1 
    for x in range(12): 
     d += 1 # this is the same d as line 3 
    print(d) # same d as line 3 
print(d) # same d as line 1 

Возможно, вы, вероятно, прочитали о локальных переменных, но запутались. Отступы вашей линии не создают «новую локальную область». Единственное время, когда это происходит, - это функции.

1

Это не то, как область действия работает на Python. Функция d в функции доступна по петле внутри функции. Они одинаковые d.

def loop(): 
    d = 0 
    for x in range(12): 
     d+=1 #this 'd' IS the same as the one above. 
    print(d) 

loop() 

Выполнение кода доказывает, что это тот же самый d.

выход:

... Ваш код делает то, что вы хотите. Пожалуйста, запустите свой код и посмотрите результат, прежде чем спрашивать.

1

В общем случае Python не изменяет объем переменных внутри цикла (for, while) или if конструкции:

у вас есть один d переменных в функции, независимо от его использования внутри цикла или нет ,

Есть, однако, исключения: одним из них является то, что вы можете использовать циклы внутри понятий списка или выражений генератора - переменные, используемые в этих циклах, являются локальными для выражения - хотя t, будучи выражениями, они не позволяют использовать общие назначение переменных:

def a(): 
    d = 0 
    any(print(d) for d in range(12)) 
    print("main d:", d) 

(В этом примере используется функция печати Python 3).

Другое исключение - это переменная, для которой исключение назначается в try ... except блок. Эта переменная является локальной для блока, за исключением, и прекращает существующий из IT-, но вместо того, чтобы иметь вложенную сферу, Python делает удалить переменную из текущей области:

In [34]: def b(): 
    ...: a = 1 
    ...: try: 
    ...:  1/0 
    ...: except ZeroDivisionError as a: 
    ...:  print(a) 
    ...: print(a) 
    ...:  

In [35]: b() 
division by zero 
--------------------------------------------------------------------------- 
UnboundLocalError       Traceback (most recent call last) 
... 
----> 7 print(a) 
     8 
Смежные вопросы