g = lambda x:[lambda x:x*1, lambda x:x*x, lambda x:x*x*x, lambda x:42][x%4](x)
[g(x) for x in xrange(12)]
这是什么顺序的下一个值?Python的拉姆达在lambda
g = lambda x:[lambda x:x*1, lambda x:x*x, lambda x:x*x*x, lambda x:42][x%4](x)
[g(x) for x in xrange(12)]
这是什么顺序的下一个值?Python的拉姆达在lambda
你尝试了吗?
>>> g = lambda x:[lambda x:x*1, lambda x:x*x, lambda x:x*x*x, lambda x:42][x%4](x)
>>> [g(x) for x in xrange(12)]
[0, 1, 8, 42, 4, 25, 216, 42, 8, 81, 1000, 42]
下面是每个价值是如何计算的:
[
0, # x is 0, x%4 is 0, so g(x) becomes (lambda x:x*1)(0) or 0*1
1, # x is 1, x%4 is 1, so g(x) becomes (lambda x:x*x)(1) or 1*1
8, # x is 2, x%4 is 2, so g(x) becomes (lambda x:x*x*x)(2) or 2*2*2
42, # x is 3, x%4 is 3, so g(x) becomes (lambda x:42)(3) or 42
4, # x is 4, x%4 is 0, so g(x) becomes (lambda x:x*1)(4) or 4*1
25, # x is 5, x%4 is 1, so g(x) becomes (lambda x:x*x)(5) or 5*5
216, # x is 6, x%4 is 2, so g(x) becomes (lambda x:x*x*x)(6) or 6*6*6
42, # x is 7, x%4 is 3, so g(x) becomes (lambda x:42)(7) or 42
8, # x is 8, x%4 is 0, so g(x) becomes (lambda x:x*1)(8) or 8*1
81, # x is 9, x%4 is 1, so g(x) becomes (lambda x:x*x)(9) or 9*9
1000, # x is 10, x%4 is 2, so g(x) becomes (lambda x:x*x*x)(10) or 10*10*10
42 # x is 11, x%4 is 3, so g(x) becomes (lambda x:42)(11) or 42
]
基本上g(x)
调用列表中的其中一个功能与x
作为参数,在列表理解与xrange
它会循环调用时功能,每第四次调用都是相同的功能。
我知道这只是一个练习来帮助理解Python,但是您应该注意,这是非常低效的代码,因为在每次调用g()
时都会重新创建所有四个函数。如果你真的需要这种行为会更好,只是创建def
功能包含几个if
语句(这将使代码更具可读性以及)。
这是一个从这里得克萨斯州奥斯汀的学习Python聚会组一门功课的考试。这是一个非常有用的答案。教练将其描述为一种被动的侵略性运动,我很难回答它。 – user1893012
我想这样做是为了得到一个更好的主意来发生的事情(发表评论,如果您需要进一步的说明)
In [44]: g = lambda x:[lambda x:x*1, lambda x:x*x, lambda x:x*x*x, lambda x:42][x%4](x)
In [45]: {x:g(x) for x in xrange(12)}
Out[45]:
{0: 0,
1: 1,
2: 8,
3: 42,
4: 4,
5: 25,
6: 216,
7: 42,
8: 8,
9: 81,
10: 1000,
11: 42}
那你试试? – glglgl
线'[X%4](x)的误差'出来。你想在那一行做什么? –
这是一门功课考试或问题? –