函数中def的用法是什么?

时间:2017-07-09 08:39:14

标签: python function python-3.6

关于attrgetter和itemgetter,只需阅读特别是this页面的Python文档。

我很难理解代码示例中defreturn的使用情况。 使用这些功能。

它似乎是lamdba,但我不知道如何解释它。

修改

我认为它只是点击了。 attrgetter就像resolve_attr函数的构造函数?这有点令人困惑,因为我通常希望def的代码介于defreturn之间。返回的代码就像一个lambda。为了增加混淆,arg ojb是传递给返回对象的参数。 Arhhhhh .....

我需要知道什么才有意义?

这是我所指的代码示例:

   def attrgetter(*items):
    if any(not isinstance(item, str) for item in items):
        raise TypeError('attribute name must be a string')
    if len(items) == 1:
        attr = items[0]
        def g(obj): #What is this
            return resolve_attr(obj, attr)
    else:
        def g(obj):#And this?
            return tuple(resolve_attr(obj, attr) for attr in items)
    return g

def resolve_attr(obj, attr):
    for name in attr.split("."):
        obj = getattr(obj, name)
    return obj

2 个答案:

答案 0 :(得分:3)

echo f|sudo tee /sys/class/net/eth0/queues/rx-0/rps_cpus 是定义函数的关键字。

这些只是在另一个函数def

中定义的函数

这就是为什么attrgetter()

中有多个return的原因

attrgetter()看起来像g,因为lambda会返回一个函数,而不会直接返回结果。

确实可以用lambda声明替换

attrgetter()

答案 1 :(得分:3)

在Python中,函数就像普通对象一样。你可以传递它们,并且(如上例所示)从其他函数返回它们。

示例函数,返回另一个函数作为其返回值。它通过定义一个函数(即def g(ojb):行)然后简单地返回它来实现。

你可以这样做,因为在Python中 - 一个函数就像任何其他对象一样。