2014-10-29 12 views
5

पर विचार करें निम्नलिखित कार्य:निष्पादित एक समारोह बेतरतीब ढंग से

def a(): 
    print "a" 
def b(): 
    print "b" 

वहाँ एक रास्ता बेतरतीब ढंग से चलाने के लिए एक समारोह लेने के लिए है? मैंने इसका उपयोग करने की कोशिश की:

random.choice([a(),b()]) 

लेकिन यह दोनों कार्यों को वापस करता है, मैं बस इसे एक समारोह वापस करना चाहता हूं।

उत्तर

14

केवल फोन चयनित समारोह, नहीं उन दोनों:

random.choice([a,b])() 

नीचे एक प्रदर्शन है:

>>> import random 
>>> def a(): 
...  print "a" 
... 
>>> def b(): 
...  print "b" 
... 
>>> random.choice([a,b])() 
a 
>>> random.choice([a,b])() 
b 
>>> 

आपके पुराने कोड कहा जाता दोनों कार्यों जब सूची [a(),b()] बनाया गया था , जिससे पाइथन a और b दोनों प्रिंट कर सकता है। इसके बाद, [None, None] से चुनने के लिए random.choice को बताया गया, जो कुछ भी नहीं करता है। आप नीचे दिए गए प्रदर्शन से देख सकते हैं:

>>> [a(),b()] 
a 
b 
[None, None] 
>>> 

नए कोड तथापि random.choice का उपयोग करता है बेतरतीब ढंग से सूची [a,b] से एक समारोह ऑब्जेक्ट का चयन करने:

>>> random.choice([a,b]) 
<function b at 0x01AFD970> 
>>> random.choice([a,b]) 
<function a at 0x01AFD930> 
>>> 

यह तो केवल यह है कि समारोह कहता है।


कार्य डिफ़ॉल्ट रूप से None लौट आते हैं। चूंकि a और b में वापसी-बयान की कमी है, इसलिए वे प्रत्येक None लौटते हैं।

+0

जानता हूँ कि मैं कैसे याद किया कि, अदभुत रूप से काम करता है, धन्यवाद मत करो! – px06

+1

वाह !! पाइथन बहुत बढ़िया है !!! –

0

क्या आप चाहते हैं?

random.choice([a,b])()

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