2009-07-01 14 views
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 ] ... 
# [] 

उत्तर

18

पायथन 2.6 में पूरी तरह से काम करता है लेकिन पायथन 3.0 में विफल रहता है क्योंकि zip जनरेटर-शैली ऑब्जेक्ट देता है और पहला लूप निकास करता है। बजाय एक सूची बनाएँ:

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

और उस पर Python में भी IronPython में मेरे लिए 3.0

+0

वर्क्स ठीक काम करता है। –

+0

हां, मुझे लगता है कि यह पाइथन 2.5 का उपयोग करके पूरी तरह से काम करता है: आउटपुट # 2 [2, 9, 3125] है। हालांकि, जब मैं पायथन 3.0 का उपयोग करता हूं, तो यह "गलत" आउटपुट देता है, और आउटपुट # 2 है []। –

+0

बहुत बहुत धन्यवाद! मैं "जनरेटर-शैली" वस्तुओं और उनके "थकावट" पर पढ़ रहा हूं। –

संबंधित मुद्दे