2010-01-03 118 views
3

我正在通過Python 3書,並遇到字符串函數isidentifier()。文本描述是「s.isidentifier():如果s非空並且是有效標識符,則返回True」。我在Python Shell中測試瞭如下代碼:Python字符串函數isidentifier()

>>> s = 'test' 
>>> s.isidentifier() 
True 
>>> 'blah'.isidentifier() 
True 

我期望第二條語句返回false,因爲'blah'沒有保存在變量中。任何人都可以解釋嗎?謝謝。

回答

10

如果s非空並且是有效的標識符,則返回True。

他們的意思是,可能作爲一個標識符是有效的。這並不意味着它是一個正在使用的標識符。

您的第一個示例顯示了同樣的事情:'test'(isidentifier實際上正在檢查的內容)不是變量的名稱。我認爲你的意思是

>>> 's'.isidentifier() 
True 
+0

寫什麼rosscj2533 *認爲*是的,我想你可以做isIdentifier不同()第一,然後做一個eval(),看看它給你一個NameError或不。 – MatrixFrog 2010-01-03 22:13:10

+0

啊,我正在使用它作爲目前正在使用的有效標識符。謝謝。 – rosscj2533 2010-01-03 22:17:46

+1

@MatrixFrog - 更好地測試locals()和globals()中是否存在此標識符,而不是eval()。更快*和*更安全。 – PaulMcG 2010-01-04 00:07:00

5

「isidentifier」沒有提及被測試的字符串被引用的「變量」。所以

'blah'.isidentifier() 

是相同的

s = 'blah' 
s.isidentifier() 

在Python中,它從來沒有(或很少)有關 「變量」(Python沒有變量),它是關於對象。在這種情況下,字符串。

5

Python沒有「變量」。根據對象來思考更有幫助。

'blah'當時'blah'.isidentifier()被稱爲(畢竟這意味着「調用字符串對象'blah'isidentifier()法」)肯定存在。

所以,如果你的理解是正確的,string對象的isidentifier()方法應該總是返回True,因爲在調用的時候,對象肯定是存在的。

isidentifier()所做的是檢查字符串對象是否可用作有效標識符。嘗試在你的Python會話這兩條線路,例如:

>>> a = "$" 
>>> "$".isidentifier() 

即使"$"被分配到名稱a,該isidentifier()調用返回False因爲$在Python中並不是一個有效的標識符。

2

isidentifier是一個Python函數,它簡單地測試一個字符串是否僅包含某些字符(下劃線,數字和阿爾法)並以alpha或下劃線開頭,因此該字符串可用於有效的Python標識符。測試字符類別的其他函數是isalphaisalnumisdigit等。

ss = (
    'varABC123', 
    '123ABCvar', 
    '_123ABCvar', 
    'var_ABC_123', 
    'var-ABC-123', 
    'var.ABC.123', 
    # check your own strings 
) 

fmt = '%-15s%-10s%-10s%-10s%-10s' 
print(fmt % ('', 'isalpha', 'isalnum', 'isdigit', 'isidentifier')) 
for s in ss: 
    print(fmt % (s, s.isalpha(), s.isalnum(), s.isdigit(), s.isidentifier())) 

結果:

   isalpha isalnum isdigit isidentifier 
varABC123  False  True  False  True  
123ABCvar  False  True  False  False  
_123ABCvar  False  False  False  True  
var_ABC_123 False  False  False  True  
var-ABC-123 False  False  False  False  
var.ABC.123 False  False  False  False