命令dir(__builtins__)
只列出所有151个内置库。
len(dir(__builtins__)) # output 151
但是,它列出了2. Built-in Functions — Python 3.6.2 documentation
中的68个内置函数我尝试从dir(__builtins__)
获取函数,如下所示:
#I hardtyped the functions as comparition.
officical_builtin_functions = ['abs','all',....]
y = official_builtin_functions
len(y) #output:68
# get official builtin functions from python_builtin_library
dir(__builtins__).index('abs') #output:79
qualified_functions = python_builtin_library[79:]
qualified_functions.pop('exit')
qualified_functions.pop('credits')
qualified_functions.pop('copyright')
qualified_functions.pop('quit')
qualified_functions.pop('license')
quilified_functions.append('__import__')
# then get the 68 qualified_functions from dir(__builtins__)
如何直接列出68个内置函数?
答案 0 :(得分:3)
Python 3.5中的一种方法是列出具有__module__
属性且设置为builtins
和小写名称的对象:
>>> sorted(k for k, v in vars(__builtins__).items()
if k.islower() and getattr(v, '__module__', '') == 'builtins')
['__build_class__', '__import__', 'abs', 'all', 'any', 'ascii', 'bin', 'bool', 'bytearray',
'bytes', 'callable', 'chr', 'classmethod', 'compile', 'complex', 'delattr', 'dict', 'dir',
'divmod', 'enumerate', 'eval', 'exec', 'filter', 'float', 'format', 'frozenset', 'getattr',
'globals', 'hasattr', 'hash', 'hex', 'id', 'input', 'int', 'isinstance', 'issubclass',
'iter', 'len', 'list', 'locals', 'map', 'max', 'memoryview', 'min', 'next', 'object', 'oct',
'ord', 'pow', 'print', 'property', 'range', 'repr', 'reversed', 'round', 'set', 'setattr',
'slice', 'sorted', 'staticmethod', 'str', 'sum', 'super', 'tuple', 'type', 'vars', 'zip']
请注意,__import__
列在文档中,但__build_class__
未列出。 Python 3.5上有67个名字。文档中的列表有68个名称...这也是因为文档中的help
和open
与我的过滤器不匹配,因为open
来自模块io
, help
来自网站内置;实际上文档是错误的,因为help
不需要可用:
% python3 -S
Python 3.5.3 (default, Jan 19 2017, 14:11:04)
[GCC 6.3.0 20170118] on linux
>>> help
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'help' is not defined
同样,许多异常类型始终可用,即使它们未在那里列出。
答案 1 :(得分:2)
我尝试过聪明但部分失败,但仍然是一个有趣的发现,所以这里是:
import types
b = [i for i in dir(__builtins__) if isinstance(eval(i), types.BuiltinFunctionType)]
这将在python 3.5.3中为我返回42个项目的列表
不使用types
,一个好的分隔符是检查__builtins__
中的项是否以小写字母开头,通常表示一个函数,所以
b = [i for i in dir(__builtins__) if i[0].islower()]
为我返回72项,或许它比文档更完整?我的猜测是肯定的。亲自检查以测试这些想法
答案 2 :(得分:1)
从技术上讲,Python中只有42个(在3.4中)内置函数和方法。列表的其余部分是内置变量和typess:
real_builtins = [e for e in dir(__builtins__) if isinstance(eval(e), type(vars))]
len(real_builtins)
# 42
real_builtins[:5] + real_builtins[-5:]
# ['__build_class__', '__import__', 'abs', 'all', 'any',
# 'round', 'setattr', 'sorted', 'sum', 'vars']
type(abs)
#<class 'builtin_function_or_method'>
请注意,zip
或int
不是真正的功能。它们是同名内置数据类型的构造函数:
type(zip)
# <class 'type'>
type(int)
# <class 'int'>
答案 3 :(得分:1)
我试图通过功能过滤它(主要是)并提出:
from inspect import isclass
documented_builtins = [x
for x in dir(__builtins__) if not x.startswith('__') and (
lambda y: callable(y) and not(isclass(y) and issubclass(y,
BaseException)))(eval(x))
]
print(documented_builtins)
它生成了与@ OferSadan的简单i[0].islower()
过滤器相同的72个项目! (1)
增加的内容有:copyright
,credits
,exit
,license
和quit
删除是:__import__
如果您取消not x.startswith('__')
测试,则会返回__import__
,但您还会获得__build_class__
和__loader__