Python-将函数分配给变量

Python-将函数分配给变量,python,Python,我有一个元组列表 student_tuples = [ ('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10), ] 我一直在尝试不同的方法来排序,使用itemgetter和lambda函数。可以使用itemgetting和lambda函数按元组的两个索引进行排序,但它必须返回元组。我似乎在文档中找不到关键函数对元组起作用的地方 无论如何,我想知道itemgetter()实际返回的是什么,所以这是可行的(从item

我有一个元组列表

student_tuples = [
    ('john', 'A', 15),
    ('jane', 'B', 12),
    ('dave', 'B', 10),
]
我一直在尝试不同的方法来排序,使用itemgetter和lambda函数。可以使用itemgetting和lambda函数按元组的两个索引进行排序,但它必须返回元组。我似乎在文档中找不到关键函数对元组起作用的地方

无论如何,我想知道itemgetter()实际返回的是什么,所以这是可行的(从itemgetter文档复制):

有没有什么方法可以做到这一点,而不必将itemgetter重新分配给变量?看起来有两个参数正在被传递,但类似于

print itemgetter(1, student_tuples[0])
-----><operator.itemgetter object at 0xf7309c8c>
print itemgetter(1,student\u元组[0])
----->
没有给我任何有用的东西


我只是在尝试学习Python,这让我很困惑。我不知道itemgetter student\u元组[0]作为参数添加到何处。

您需要再次调用
itemgetter()
的返回值,而不是作为第二个参数传入列表。范例-

itemgetter(1)(student_tuples[0])
>>> l =[1,2,3,4,5]
>>> operator.itemgetter(1,2,4)(l)
(2, 3, 5)
从文档中可以看出-

运算符.itemgetter(*项)

返回一个可调用的对象,该对象使用操作数的
\uuuu getitem\uuuuuuu()
方法从其操作数中获取项

itemgetter()
返回一个函数,您可以再次调用该函数传递实际的iterable,以从该iterable中的特定索引中获取值

当您将多个值传递给
itemgetter()
时,它仍然返回一个函数,调用该函数将尝试使用最初作为元组传递给
itemgetter()
的索引从iterable中获取元素。范例-

itemgetter(1)(student_tuples[0])
>>> l =[1,2,3,4,5]
>>> operator.itemgetter(1,2,4)(l)
(2, 3, 5)

您需要再次调用
itemgetter()
的返回值,而不是作为第二个参数传入列表。范例-

itemgetter(1)(student_tuples[0])
>>> l =[1,2,3,4,5]
>>> operator.itemgetter(1,2,4)(l)
(2, 3, 5)
从文档中可以看出-

运算符.itemgetter(*项)

返回一个可调用的对象,该对象使用操作数的
\uuuu getitem\uuuuuuu()
方法从其操作数中获取项

itemgetter()
返回一个函数,您可以再次调用该函数传递实际的iterable,以从该iterable中的特定索引中获取值

当您将多个值传递给
itemgetter()
时,它仍然返回一个函数,调用该函数将尝试使用最初作为元组传递给
itemgetter()
的索引从iterable中获取元素。范例-

itemgetter(1)(student_tuples[0])
>>> l =[1,2,3,4,5]
>>> operator.itemgetter(1,2,4)(l)
(2, 3, 5)

itemgetter(1)
的返回值是一个函数(实际上是一个可调用的对象,但它的使用方式与函数类似)

它返回的函数大致相当于表达式生成的函数:

lambda x: x[1]
student\u tuples[0]
不会作为参数添加到
itemgetter
中的任何位置。它作为参数传递给调用
f(student\u tuples[0])
时返回的函数

由于
f
itemgetter(1)
的结果,因此可以在一行中执行此操作,如下所示:

itemgetter(1)(student_tuples[0])

itemgetter(1)
的返回值是一个函数(实际上是一个可调用的对象,但它的使用方式与函数类似)

它返回的函数大致相当于表达式生成的函数:

lambda x: x[1]
student\u tuples[0]
不会作为参数添加到
itemgetter
中的任何位置。它作为参数传递给调用
f(student\u tuples[0])
时返回的函数

由于
f
itemgetter(1)
的结果,因此可以在一行中执行此操作,如下所示:

itemgetter(1)(student_tuples[0])

谢谢,这就澄清了。通常使用itemgetter、attrgetter等更好,还是使用lambda函数更好?它们在排序方面似乎都相当紧凑,但我是一个新手,所以也许itemgetter在其他方面的用途要高得多。@jktstance:我个人认为它没有什么用处,但有些人非常不喜欢lambdas,并认为在语言中根本不需要它们。通常,我不会只为一次使用
itemgetter
而导入
operator
,但如果我使用
operator
,那么我认为这是值得的。在某些情况下,您可能还想比较两者的性能并选择更快的。谢谢,这就解决了问题。通常使用itemgetter、attrgetter等更好,还是使用lambda函数更好?它们在排序方面似乎都相当紧凑,但我是一个新手,所以也许itemgetter在其他方面的用途要高得多。@jktstance:我个人认为它没有什么用处,但有些人非常不喜欢lambdas,并认为在语言中根本不需要它们。通常,我不会只为一次使用
itemgetter
而导入
operator
,但如果我使用
operator
,那么我认为这是值得的。在某些情况下,您可能还希望比较两者的性能并选择更快的。