技术上
所有的一切都是为了
sys.modules
就我所知,“可导入”就是一个字符串
>>> sys.modules['where is your god now?'] = 42
>>> __import__('where is your god now?')
42
该限制是由
__import__
内置:
>>> __import__(42)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: __import__() argument 1 must be str, not int
>>> sys.modules['â'] = 'looking like christmas?'
>>> __import__('â')
'looking like christmas?'
尽管使用
import
你需要一个东西作为标识符:
>>> sys.modules['josé'] = ':wave:'
>>> import josé
>>> josé
':wave:'
isidentifier
方法(对于python2,如下所示
[a-zA-Z_][a-zA-Z0-9_]*
我相信):
>>> 'foo'.isidentifier()
True
>>> 'josé'.isidentifier()
True
>>> 'â'.isidentifier()
False
>>> 'hello world'.isidentifier()
False
如果要处理虚线名称:
def dotted_name_is_identifier(x):
return all(s and s.isidentifier() for s in x.split('.'))
>>> dotted_name_is_identifier('foo.bar')
True
>>> dotted_name_is_identifier('hello.josé')
True
>>> dotted_name_is_identifier('hello. world')
False
>>> dotted_name_is_identifier('hello..world')
False
>>> dotted_name_is_identifier('hello.world.')
False