如何获取Python中所有内置函数的列表?

5
我正在尝试编写一个Python内置函数列表的规范示例。虽然文档很好,但我想用一种可证明的方法来演示它。
在这里,我基本上将内置函数定义为默认命名空间的成员,具有可用性和与模块中使用的函数风格特征一致的特点,即:它们提供了一些有用的功能并以字母表中的小写字母开头。
我所做的好处是展示了列表推导式的过滤部分,但它似乎有点不太正当的哈克,应该有更直接的方法来实现这一点。到目前为止,以下是我所做的:
import string
alc = string.ascii_lowercase
bif = [i for i in dir(__builtins__) if 
       any(i.startswith(j) for j in alc)]

这给了我:

['abs', 'all', 'any', 'apply', 'basestring', 'bin', 'bool', 'buffer', 'bytearray', 'bytes', 'callable', 'chr', 'classmethod', 'cmp', 'coerce', 'compile', 'complex', 'copyright', 'credits', 'delattr', 'dict', 'dir', 'divmod', 'enumerate', 'eval', 'execfile', 'exit', 'file', 'filter', 'float', 'format', 'frozenset', 'getattr', 'globals', 'hasattr', 'hash', 'help', 'hex', 'id', 'input', 'int', 'intern', 'isinstance', 'issubclass', 'iter', 'len', 'license', 'list', 'locals', 'long', 'map', 'max', 'memoryview', 'min', 'next', 'object', 'oct', 'open', 'ord', 'pow', 'print', 'property', 'quit', 'range', 'raw_input', 'reduce', 'reload', 'repr', 'reversed', 'round', 'set', 'setattr', 'slice', 'sorted', 'staticmethod', 'str', 'sum', 'super', 'tuple', 'type', 'unichr', 'unicode', 'vars', 'xrange', 'zip']

我相信它们都是可调用的,就像这样:

bi2 = [i for i in dir(__builtins__) if 
       any(i.startswith(j) for j in alc) 
       and callable(getattr(__builtins__, i, None))]
set(bif).symmetric_difference(bi2)

我理解为:

set([])

那么有没有更好的方法来列出Python内置函数呢?到目前为止,我的谷歌和stackoverflow搜索都失败了。

我正在寻找一种可演示且可重复的实验指导方法。谢谢!


1
为什么需要在Python中列出它们,而不是只查看文档? - BrenBarn
1
我正在展示一种规范的方法来回答有多少内置函数以及如何跟踪它们以确定是否已经掌握了所有函数的问题。 - Russia Must Remove Putin
@AaronHall:这听起来像是你想要文档中的列表。这是一个人类任务,而不是编码任务。 - user2357112
1个回答

7
import __builtin__
import inspect

[name for name, function in sorted(vars(__builtin__).items())
 if inspect.isbuiltin(function) or inspect.isfunction(function)]

还有一份清单在文档中。


差异 `>>> builtin = builtins
bi4 = [name for name, function in sorted(vars(builtin).items()) ... if inspect.isbuiltin(function) or inspect.isfunction(function)] set(bif).symmetric_difference(bi4) set(['bytearray', 'enumerate', 'set', 'help', 'int', 'import', 'float', 'unicode', 'memoryview', 'bool', 'quit', 'basestring', 'slice', 'complex', 'long', 'xrange', 'tuple', 'exit', 'type', 'file', 'bytes', 'buffer', 'reversed', 'object', 'dict', 'credits', 'frozenset', 'super', 'copyright', 'license', 'classmethod', 'list', 'staticmethod', 'str', 'property'])`
- Russia Must Remove Putin
@AaronHall:其中一些是类型,例如listint。其他的像版权声明那样。__import__出现在我的列表中,但不在你的列表中;它是一个内置函数。如果你想要所有可调用的东西,那很简单,尽管这会把异常放回列表中。 - user2357112
好的,为你的努力点个赞,但是虽然我的列表中缺少dunder import(有趣的是,我最近使用了它),但它获取了命名空间中所有其他可调用项,这些项在使用Python时人们应该注意。对我来说,重点是向Python的新用户传授知识。 - Russia Must Remove Putin
1
@AaronHall:如果你想要有指导性的内容,那么你需要阅读文档。这比试图寻找“对新用户有指导意义”的公式要容易得多,而且比名称列表更有帮助和可读性。 - user2357112
让我们[在聊天中继续这个讨论](http://chat.stackoverflow.com/rooms/43396/discussion-between-aaron-hall-and-user2357112) - Russia Must Remove Putin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接