Python3:如何在单个代码行中对所有 151 个内置函数进行分类?

抽象程序

(dir(__builtins__)) output:151

我用数字和字符串对它们进行分类:

# categorize with number
number_dict = {}
for i in all_builtins:
    if type(eval(i)) not in number_dict:
        number_dict[type(eval(i))] = 1
    else:
        number_dict[type(eval(i))] += 1
# get number_dict
{<class 'type'>: 92, <class 'ellipsis'>: 1, ....}

# categorize with string
string_dict = {}
for i in all_builtins:
    if type(eval(i)) not in string_dict:
        string_dict[type(eval(i))] = i
    else:
         string_dict[type(eval(i))] += "," + i
# get string_dict
string_dict = {...<class 'str'>: '__name__', <class'_sitebuiltins._Printer'>: 'copyright,credits,license',<class '_sitebuiltins.Quitter
'>: 'exit,quit', <class '_sitebuiltins._Helper'>: 'help'}

如何使用列表或更高级的pythonic对内置函数进行分类?

还有 D。

使用Counterand计数getattr而不是eval这样,这也适用于其他模块对象:

>>> import collections
>>> collections.Counter(type(getattr(__builtins__, name)) for name in dir(__builtins__))
Counter({<type 'type'>: 76, <type 'builtin_function_or_method'>: 52, <class 'site._Printer'>: 3, <type 'bool'>: 3, <type 'str'>: 2, <class 'site.Quitter'>: 2, <type 'NoneType'>: 2, <class 'site._Helper'>: 1, <type 'NotImplementedType'>: 1, <type 'ellipsis'>: 1})

第二个使用一个函数,将一个列表累积(k,v)到一个 dict 中k:[v]

def accumulate(kv):
    d = {}
    for k,v in kv:
        d.setdefault(k,[]).append(v)
    return d

accumulate((type(getattr(__builtins__, name)), name) for name in dir(__builtins__))

这是一个示例运行:

>>> accumulate((type(getattr(__builtins__, name)), name) for name in dir(__builtins__))
{<class 'site._Helper'>: ['help'], <type 'str'>: ['__doc__', '__name__'], <class 'site.Quitter'>: ['exit', 'quit'], <type 'type'>: ['ArithmeticError', 'AssertionError', 'AttributeError', 'BaseException', 'BufferError', 'BytesWarning', 'DeprecationWarning', 'EOFError', 'EnvironmentError', 'Exception', 'FloatingPointError', 'FutureWarning', 'GeneratorExit', 'IOError', 'ImportError', 'ImportWarning', 'IndentationError', 'IndexError', 'KeyError', 'KeyboardInterrupt', 'LookupError', 'MemoryError', 'NameError', 'NotImplementedError', 'OSError', 'OverflowError', 'PendingDeprecationWarning', 'ReferenceError', 'RuntimeError', 'RuntimeWarning', 'StandardError', 'StopIteration', 'SyntaxError', 'SyntaxWarning', 'SystemError', 'SystemExit', 'TabError', 'TypeError', 'UnboundLocalError', 'UnicodeDecodeError', 'UnicodeEncodeError', 'UnicodeError', 'UnicodeTranslateError', 'UnicodeWarning', 'UserWarning', 'ValueError', 'Warning', 'ZeroDivisionError', 'basestring', 'bool', 'buffer', 'bytearray', 'bytes', 'classmethod', 'complex', 'dict', 'enumerate', 'file', 'float', 'frozenset', 'int', 'list', 'long', 'memoryview', 'object', 'property', 'reversed', 'set', 'slice', 'staticmethod', 'str', 'super', 'tuple', 'type', 'unicode', 'xrange'], <type 'NotImplementedType'>: ['NotImplemented'], <class 'site._Printer'>: ['copyright', 'credits', 'license'], <type 'bool'>: ['False', 'True', '__debug__'], <type 'NoneType'>: ['None', '__package__'], <type 'ellipsis'>: ['Ellipsis'], <type 'builtin_function_or_method'>: ['__import__', 'abs', 'all', 'any', 'apply', 'bin', 'callable', 'chr', 'cmp', 'coerce', 'compile', 'delattr', 'dir', 'divmod', 'eval', 'execfile', 'filter', 'format', 'getattr', 'globals', 'hasattr', 'hash', 'hex', 'id', 'input', 'intern', 'isinstance', 'issubclass', 'iter', 'len', 'locals', 'map', 'max', 'min', 'next', 'oct', 'open', 'ord', 'pow', 'print', 'range', 'raw_input', 'reduce', 'reload', 'repr', 'round', 'setattr', 'sorted', 'sum', 'unichr', 'vars', 'zip'], <class 'collections.Counter'>: ['_']}

这不是对象使用什么的问题,eval而是它如何查找名称的问题。并且getattr认为其参数只是一个名称的事实但是,eval将处理1+evil()不作为属性的名称,但作为一个呼叫。

考虑eval我设置后会做什么setattr(__builtins__, '1+evil()', '')

>>> setattr(__builtins__, '1+evil()', '')
>>> getattr(__builtins__, '1+evil()')
''
>>> eval('1+evil()')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<string>", line 1, in <module>
NameError: name 'evil' is not defined

如果有一个evil函数,它就会被调用。但是由于没有evil定义这样的函数,我们得到了一个NameError.

eval只有效,因为中的所有值__builtins__都在globals(). 一旦您替换__builtins__为任何其他模块,eval将无法解析名称,除非您将其vars(that_module)作为globals参数传递给 eval

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何配置OpenIndiana(151a8,又称“时髦”)进行开发?

来自分类Dev

如何控制Sony Vaio SVE151A11W的亮度?

来自分类Dev

如何在DS-Link WR151DN中启用PPPoE直通

来自分类Dev

如何在损坏的Sony SVE151C11M中访问BIOS

来自分类Dev

Hlookup用两个用于范围的变量填充151x499的工作表

来自分类Dev

STM32L151-调试器在错误的地址启动..有时

来自分类Dev

BSD 还有 58 个内置函数

来自分类Dev

如何在python中对目录中的所有文件或仅基于args的单个文件执行函数

来自分类Dev

如何在Python中为单个函数或封闭的代码行禁止“ UserWarning”

来自分类Dev

如何在不使用内置函数的情况下预测KNN分类器

来自分类Dev

python3中的下一个内置函数是什么意思?

来自分类Dev

使用React Router为151个不同的配置文件创建一个唯一的显示页面

来自分类Dev

如何在python中访问模块的所有内置函数的列表

来自分类Dev

如何在python中访问模块的所有内置函数的列表

来自分类Dev

`cmp -b file1 file2`响应:“ file1 file2不同:12字节,第2行是154 l 151 i”,'154'和'151'是指什么?

来自分类Dev

如何修复SQL Server Json文本格式不正确。在位置151处发现意外字符

来自分类Dev

如果内置函数的名称被另一个模块使用,如何使用内置函数?

来自分类Dev

创建一个函数,该函数从文本文件中读取所有代码行,并将每一行放入元组中。-Python 3

来自分类Dev

如何在javascript中对类,函数和函数属性进行分类?

来自分类Dev

使用 lodash groupBy 函数对数组中的对象进行分类

来自分类Dev

如何在Python3中的类中调用函数

来自分类Dev

为什么有两个内置的int()函数?

来自分类Dev

是否有在 python3 中删除的 python2 中的内置函数列表?

来自分类Dev

如何在vi / vim中对所有代码或代码块进行自动代码对齐?

来自分类Dev

如何在vi / vim中对所有代码或代码块进行自动代码对齐?

来自分类Dev

如何在python3中对字典元素进行分组

来自分类Dev

如何在不使用MATLAB中内置函数的情况下进行10倍交叉验证?

来自分类Dev

如何在不使用 Javascript 中的内置函数的情况下进行过滤?

来自分类Dev

Excel - 基于 3 个变量对数据行进行分类

Related 相关文章

  1. 1

    如何配置OpenIndiana(151a8,又称“时髦”)进行开发?

  2. 2

    如何控制Sony Vaio SVE151A11W的亮度?

  3. 3

    如何在DS-Link WR151DN中启用PPPoE直通

  4. 4

    如何在损坏的Sony SVE151C11M中访问BIOS

  5. 5

    Hlookup用两个用于范围的变量填充151x499的工作表

  6. 6

    STM32L151-调试器在错误的地址启动..有时

  7. 7

    BSD 还有 58 个内置函数

  8. 8

    如何在python中对目录中的所有文件或仅基于args的单个文件执行函数

  9. 9

    如何在Python中为单个函数或封闭的代码行禁止“ UserWarning”

  10. 10

    如何在不使用内置函数的情况下预测KNN分类器

  11. 11

    python3中的下一个内置函数是什么意思?

  12. 12

    使用React Router为151个不同的配置文件创建一个唯一的显示页面

  13. 13

    如何在python中访问模块的所有内置函数的列表

  14. 14

    如何在python中访问模块的所有内置函数的列表

  15. 15

    `cmp -b file1 file2`响应:“ file1 file2不同:12字节,第2行是154 l 151 i”,'154'和'151'是指什么?

  16. 16

    如何修复SQL Server Json文本格式不正确。在位置151处发现意外字符

  17. 17

    如果内置函数的名称被另一个模块使用,如何使用内置函数?

  18. 18

    创建一个函数,该函数从文本文件中读取所有代码行,并将每一行放入元组中。-Python 3

  19. 19

    如何在javascript中对类,函数和函数属性进行分类?

  20. 20

    使用 lodash groupBy 函数对数组中的对象进行分类

  21. 21

    如何在Python3中的类中调用函数

  22. 22

    为什么有两个内置的int()函数?

  23. 23

    是否有在 python3 中删除的 python2 中的内置函数列表?

  24. 24

    如何在vi / vim中对所有代码或代码块进行自动代码对齐?

  25. 25

    如何在vi / vim中对所有代码或代码块进行自动代码对齐?

  26. 26

    如何在python3中对字典元素进行分组

  27. 27

    如何在不使用MATLAB中内置函数的情况下进行10倍交叉验证?

  28. 28

    如何在不使用 Javascript 中的内置函数的情况下进行过滤?

  29. 29

    Excel - 基于 3 个变量对数据行进行分类

热门标签

归档