7
f = lambda x : 2*x
g = lambda x : x ** 2
h = lambda x : x ** x
funcTriple = ( f, g, h )
myZip = ( zip ( funcTriple, (1, 3, 5) ) )
k = lambda pair : pair[0](pair[1])

# Why do Output # 1 (2, 9, 3125) and Output # 2 ( [ ] ) differ?

print ("\n\nOutput # 1:  for pair in myZip: k(pair) ...")
for pair in myZip :
    print ( k(pair) )

print ("\n\nOutput # 2:  [ k(pair) for pair in myZip ] ...")
print ( [ k(pair) for pair in myZip ] )

# script output is ...
# Output # 1:  for pair in myZip: k(pair) ...
# 2
# 9
# 3125
# 
# Output # 2:  [ k(pair) for pair in myZip ] ...
# []
4

1 に答える 1

18

Python 2.6 では完全に動作しますが、Python 3.0 では失敗します。これzipは、ジェネレーター スタイルのオブジェクトを返し、最初のループでそれが使い果たされるためです。代わりにリストを作成します。

myZip = list( zip ( funcTriple, (1, 3, 5) ) )

Python 3.0で動作します

于 2009-07-01T20:31:16.057 に答える