在Python中,函数的“类型”的内置名称是什么?

时间:2009-09-17 16:11:24

标签: python types

Python内置函数返回<type 'function'>

>>> type(lambda: None)
<type 'function'>

是否有办法避免创建这个lambda函数,以便获得一般的函数类型?

有关详细信息,请参阅http://www.finalcog.com/python-memoise-memoize-function-type

谢谢,

克里斯。

4 个答案:

答案 0 :(得分:5)

您应该能够使用types.FunctionType做您想做的事情:

    Python 2.6.1 (r261:67515, Jul  7 2009, 23:51:51) 
    [GCC 4.2.1 (Apple Inc. build 5646)] on darwin
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import types
    >>> help(types.FunctionType)

    Help on class function in module __builtin__:

    class function(object)
     |  function(code, globals[, name[, argdefs[, closure]]])
     |  
     |  Create a function object from a code object and a dictionary.
     |  The optional name string overrides the name from the code object.
     |  The optional argdefs tuple specifies the default argument values.
     |  The optional closure tuple supplies the bindings for free variables.

但通常,def被视为function类型的默认构造函数。

答案 1 :(得分:3)

你应该放弃Python中'类型'的概念。大多数时候你不想检查某些东西的“类型”。明确检查类型很容易破损,例如:

>>> s1 = 'hello'
>>> s2 = u'hello'
>>> type(s1) == type(s2)
False

您要做的是检查对象是否支持您尝试对其执行的任何操作。

如果要查看给定对象是否为函数,请执行以下操作:

>>> func = lambda x: x*2
>>> something_else = 'not callable'
>>> callable(func)
True
>>> callable(something_else)
False

或者只是尝试调用它,并捕获异常!

答案 2 :(得分:1)

“Python内置函数返回<type 'function'>?”

功能

“有没有办法避免创建这个lambda函数,以便获得一般的函数类型?”

是,types.FunctionType。 或者只输入(任何功能)

如果你问如何摆脱lambdas(但重读告诉我你可能不是),你可以定义一个函数而不是lambda。

所以而不是:

>>> somemethod(lambda x: x+x)

你做

>>> def thefunction(x):
...     return x+x
>>> somemethod(thefunction)

答案 3 :(得分:0)

内置插件不是functionbuiltin_function_or_method。这不是命名的全部意义吗?

你可以做类似的事情:

>>> type(len)
<class 'builtin_function_or_method'>