您通常提到了空格,而不仅仅是空格。我偶然发现了isidentifier 的解决方案。每个 W3 学校:
如果字符串仅包含字母数字字母 (a-z) 和 (0-9) 或下划线 (_),则该字符串被视为有效标识符。有效的标识符不能以数字开头,也不能包含任何空格。
因此,如果这符合您的要求,那么 isidentifier 将快速且易于使用。
有人提到了正则表达式的效率,我很好奇:
import timeit
setup='import re; rs="\s"; rc=re.compile(rs); s="applebananacanteloupe"'
stm1='re.search(rs,s)'
stm2='re.search(rc,s)'
stm3='" " in s'
stm4='s.isidentifier()'
timeit.repeat(stm1,setup)
# result: [0.9235025509842671, 0.8889087940042373, 0.8771460619755089, 0.8753634429886006, 1.173506731982343]
timeit.repeat(stm2,setup)
# results: [1.160843407997163, 1.1500899779784959, 1.1857644470001105, 1.1485740720236208, 1.2856045850203373]
# compiled slower than uncompiled? Hmm, I don't get regex...
timeit.repeat(stm3,setup)
# [0.039073383988579735, 0.03403249100665562, 0.03481135700712912, 0.034628107998287305, 0.03392893000273034]
timeit.repeat(stm4,setup)
# [0.08866660299827345, 0.09206177099258639, 0.08418851799797267, 0.08478381999884732, 0.09471498697530478]
所以,isidentifier 几乎和in 一样快,比正则表达式快 10 倍。请注意,从技术上讲,不能保证 python 关于标识符的概念不会改变 - 但如果改变了,您的代码也可能需要重新修改。