同一python版本的不同副本之间的行为不一致
我最近在玩下面的代码:同一python版本的不同副本之间的行为不一致,python,Python,我最近在玩下面的代码: print(getattr(__builtins__, "__import__")("random")) 在我本地版本的Python上,它似乎如预期的那样工作: <module 'random' from 'C:\\Users\\lkfjsa\\Programs\\Python3.6.1\\lib\\random.py'> 然后我继续在repl.it上尝试同样的方法: 我能找到的关于该版本的最多信息是: Python 3.6.1 (v3.6.1:69c0d
print(getattr(__builtins__, "__import__")("random"))
在我本地版本的Python上,它似乎如预期的那样工作:
<module 'random' from 'C:\\Users\\lkfjsa\\Programs\\Python3.6.1\\lib\\random.py'>
然后我继续在repl.it上尝试同样的方法:
我能找到的关于该版本的最多信息是:
Python 3.6.1 (v3.6.1:69c0db5, Mar 21 2017, 18:41:36) [MSC v.1900 64 bit (AMD64)] on win32
Python 3.6.1 (default, Dec 2015, 13:05:11)
[GCC 4.8.2] on linux
然后给出以下输出:
Traceback (most recent call last):
File "python", line 1, in <module>
AttributeError: 'dict' object has no attribute '__import__'
我真的很困惑。。。有人愿意解释吗?因为可能是由于repl。这是沙盒实现或类似的东西,他们的内置版本实际上是一个dict
因为可能是由于repl.it的沙盒实现或者类似的东西,他们的uuu内置的uuu实际上是一个dict 名称uu内置项uu的值是一个实现细节: 作为一个实现细节,大多数模块的名称_builtins_uuu作为其全局模块的一部分提供。_uuu内置项的值通常是此模块[内置项模块]或此模块的uuu dict_uuu属性的值。由于这是一个实现细节,Python的替代实现可能不会使用它 名称uu内置项的值是一个实现细节: 作为一个实现细节,大多数模块的名称_builtins_uuu作为其全局模块的一部分提供。_uuu内置项的值通常是此模块[内置项模块]或此模块的uuu dict_uuu属性的值。由于这是一个实现细节,Python的替代实现可能不会使用它
啊,我明白了。我想知道是否有一种方法可以在不导入导入或evalAhh的情况下导入文件。我想知道是否有一种方法可以在不导入或评估的情况下导入文件
type(__builtins__)
=> <class 'dict'>
__builtins__['__import__']
=> <built-in function __import__>
__builtins__['__import__']('random')
=> <module 'random' from '/usr/local/lib/python3.6/random.py'>