def loop():
d = 0
for x in range(12):
d+=1 #this 'd' is not the same as the one above.
print(d)
在上面的代碼中,函數的局部變量仍然不是0嗎?我怎樣才能改變這個使用函數變量而不是循環的內部變量?循環內部使用本地函數變量
def loop():
d = 0
for x in range(12):
d+=1 #this 'd' is not the same as the one above.
print(d)
在上面的代碼中,函數的局部變量仍然不是0嗎?我怎樣才能改變這個使用函數變量而不是循環的內部變量?循環內部使用本地函數變量
我想你已經得到了範圍之間的混淆在一個函數之外並且在它之內。
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
你可能讀過關於局部範圍的變量,但已經變得困惑。縮進行不會創建「新的本地範圍」。發生的唯一時間是在功能內。
這不是Python在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
。
輸出:
...您的代碼你想要做什麼。請在運行之前查看代碼並查看輸出。
從總體上看,Python不改變的變量內環路範圍(for
,while
)或if
結構:
你在你的功能單一d
變量,無論使用它的循環內或不。
雖然有一些例外 - 其中之一就是可以在列表解析或生成器表達式中使用循環 - 這些循環中使用的變量對錶達式來說是局部的 - 儘管它們是表達式,但它們不允許一般賦值變量:
def a():
d = 0
any(print(d) for d in range(12))
print("main d:", d)
(本例使用Python 3打印功能)。
另一個例外是 try
... except
塊中的異常被分配到的變量。該變量爲局部的,除了塊,並停止現有出它 - 但不是有一個嵌套的範圍,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
你的縮進是你想要的,因爲現在'd'將變成'12' – MooingRawr
「函數的局部變量仍然不是0嗎?」 - 哪個局部變量?我看到兩個,在循環結束時都不會是0。 – user2357112
@MooingRawr循環會影響函數中D的值。 – ihazgum