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)]
이 시퀀스의 다음 값은 무엇입니까?람다의 파이썬 람다
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, # 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)
xrange
그것은 순환을 뜻 지능형리스트에서 호출 인수로 x
으로 목록에있는 기능 중 하나를 호출 여기
>>> 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]
각 값이 계산되는 방식입니다 함수는 매 4 번째 호출이 모두 같은 함수입니다.
이것은 파이썬을 이해하는 데 도움이되는 운동 일 뿐이지 만, g()
을 호출 할 때 네 가지 함수가 모두 다시 작성되므로이 코드는 대단히 비효율적이라는 점에 유의해야합니다. 실제로이 동작이 필요한 경우 def
에 몇 가지 if
문을 포함하는 함수를 만드는 것이 더 낫습니다 (코드를 훨씬 쉽게 읽을 수있게 해줍니다). (당신은 더 설명이 필요하면 댓글을 남기)
텍사스 오스틴에있는 Learn Python meetup 그룹의 숙제 시험입니다. 이것은 매우 유용한 답변입니다. 강사는 그것을 수동적 인 공격적 운동으로 묘사했고, 나는 그것에 대답하려고 애쓰는 모습을 보지 못했습니다. – 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)'행은 오류가 있습니다. 그 선에서 무엇을 하려니? –
숙제 나 시험 문제입니까? –