[英]Str is already defined as a global variable
在使用函數時,我注意到一些非常奇怪的東西。 看起來變量名'str'已經定義為全局變量。 看一看:
def Example(x):
str = input()
return str
print (Example(str))
#When typing 'Hello!' Output --> Hello!
變量str在函數Example中定義。 那么為什么沒有NameError:未定義名稱'str'?
當我調用變量x或其他變量(在這種情況下為“ bar”)時:
def Example(x):
bar = input()
return bar
print (Example(bar))
#Output: NameError: name 'bar'is not defined
為什么名稱為“ str”的變量充當全局變量?
在python中,str()是字符串構造函數。 它用於將對象轉換為字符串。
您可以在本地使用它,但是它將覆蓋對功能的訪問。 您將無法再使用str()。
供參考: https : //docs.python.org/2/library/functions.html#str
類str(object ='')
返回一個字符串,其中包含對象的可很好打印的表示形式。 對於字符串,這將返回字符串本身。 與repr(object)的區別在於str(object)並不總是嘗試返回eval()可接受的字符串; 它的目標是返回可打印的字符串。 如果未提供任何參數,則返回空字符串“”。
出於一般知識的目的,如果刪除變量,則可以找回構造函數。 例如:
test = 1
str(test)
>>>'1'
str = 2
str(test)
>>>TypeError: 'int' object is not callable
del str
str(test)
>>>'1'
失敗的原因:
def Example(x):
bar = input()
return bar
print (Example(bar))
#Output: NameError: name 'bar'is not defined
是因為您試圖將變量bar
傳遞給Example()
方法,但是從未在調用之前的任何位置定義bar
。
我不確定如何用此方法完成什么,因為您傳遞了變量但根本不使用它。
評論回應:
str
不是內置函數(盡管已在頁面上列出),但它是內置類型str
的構造函數。 為了表明您只是簡單地重新分配了與關鍵字(不一定是保留的,但是仍然是關鍵字)關聯的方法,請考慮以下事項:
>>> str
<class 'str'>
>>> abs
<built-in function abs>
>>> str = abs
>>> str
<built-in function abs>
因此,您實際上已經覆蓋了對str
類構造函數的分配。 在此示例中,我使用了abs
,但對於input
同樣適用(略有不同):
>>> str
<class 'str'>
>>> input
<built-in function input>
>>> str = input
>>> str
<built-in function input>
>>> str = input()
hello world
>>> str
'hello world'
區別在於,您為關鍵字str
分配了一個字符串(類型為str
)。 因此,您永遠不能使用str(10)
來獲取'10'
因為這就像調用hello world(10)
失敗。
如果要使用關鍵字作為變量名,則按照慣例,使用單個的下划線來避免與Python關鍵字發生沖突,如下所示:
single_trailing_underscore_
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.