,如果你有基本的Python功能和輸出
def dog(x):
x = 5
x = 7
dog(x)
print(x)
將這種打印5或7?我可以看到爲什麼它會打印5,因爲x被重新分配,但是當我在終端運行它,我得到7
,如果你有基本的Python功能和輸出
def dog(x):
x = 5
x = 7
dog(x)
print(x)
將這種打印5或7?我可以看到爲什麼它會打印5,因爲x被重新分配,但是當我在終端運行它,我得到7
當你調用dog(x)
,你要複製你的變量x
價值爲dog
的變量x
。但將dog
的x
更改爲另一個值不會改變函數外部的x
的值。它們是您賦予相同標識符的兩個單獨變量。
在函數體內定義的變量具有局部範圍,而在外部定義的變量具有全局範圍。
這意味着局部變量只能在聲明它的函數內部訪問,而全局變量可以通過所有函數在整個程序體中訪問。當你調用一個函數時,在它內部聲明的變量被引入到作用域中。因此,當您撥打dog(x)
時,只需在dog
中的x等於5
。
更好地瞭解見下面演示:
>>> def dog(x):
... x = 5
... print x+5
...
>>> x = 7
>>> dog(x)
10
>>> x
7
這是因爲範圍。
使用dir
您可以看到當前範圍中的名稱。以下是一些理解範圍概念的例子。
當啓動解釋:
>>> dir()
['__builtins__', '__doc__', '__name__', '__package__']
讓我們增加x變量:
>>> x=5
>>> dir()
['__builtins__', '__doc__', '__name__', '__package__', 'x']
什麼是與自變量的函數的範圍:
>>> def dog(y):
... print dir()
...
>>> dog(1)
['y']
正如你可以看到,x
不在其中。所以,當你定義def dog(x)
時,你以後使用的x
只在函數的範圍之內。
如果你想使用x
定義外dog
,使用global
關鍵字:
>>> def dog(y):
... global x
... print dir()
...
>>> dog(1)
['y']
正如你所看到的,x
仍然沒有在dog
範圍限定。但是:
>>> x
5
>>> def dog(y):
... global x
... print x
...
>>> dog(1)
5
當編寫X = 7,Python中創建一個整數對象7和名字「x」的分配給它具有全局範圍
當調用狗和通過x到它,要傳遞的指針整數對象7
內部狗,當你做X = 5,一個新的名字的「x」具有本地範圍(函數內)分至5
由於,你是它打印7
函數外部打印X 請注意,這隻發生在不可變對象(字符串,整數,元組等)和不可變對象(列表,字典)
如果x是一個列表:
DEF狗(X):
x.append(5)
X = [7]
狗(x)的
打印(X)
輸出將是[7,5]
我認爲它總是打印'7'。 – HuStmpHrrr 2014-09-26 20:44:48