2010-01-03 74 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