def f1(n): #accepts one argument
pass
def f2(): #accepts no arguments
pass
FUNCTION_LIST = [(f1,(2)), #each list entry is a tuple containing a function object and a tuple of arguments
(f1,(6)),
(f2,())]
for f, arg in FUNCTION_LIST:
f(arg)
लूप में तीसरी बार राउंड, यह किसी फ़ंक्शन को तर्कों के खाली टुपल को पास करने का प्रयास करता है जो कोई तर्क स्वीकार नहीं करता है। यह त्रुटि TypeError: f2() takes no arguments (1 given)
देता है। पहले दो फ़ंक्शन कॉल सही ढंग से काम करते हैं - सामग्री टुपल पास हो जाती है, न कि टुपल स्वयं।पायथन - फ़ंक्शन/तर्क टुपल्स की सूची
हमलावर सूची प्रविष्टि में तर्कों की खाली टपल से छुटकारा समस्या का समाधान नहीं करता है: ValueError: need more than 1 value to unpack
में
FUNCTION_LIST[2] = (f2,)
for f,arg in FUNCTION_LIST:
f(arg)
का परिणाम है।
मैंने सूची तत्वों के बजाय इंडेक्स पर फिर से प्रयास करने का भी प्रयास किया है।
for n in range(len(FUNCTION_LIST)):
FUNCTION_LIST[n][0](FUNCTION_LIST[n][1])
यह वही TypeError
पहले मामले में, और IndexError: tuple index out of range
देता है जब सूची की तीसरी प्रविष्टि (f2,)
है।
अंत में, तारांकन नोटेशन या तो काम नहीं करता है। f1
को फोन पर इस समय यह त्रुटि:
for f,args in FUNCTION_LIST:
f(*args)
TypeError: f1() argument after * must be a sequence, not int
देता है।
मैं कोशिश करने के लिए चीजों से बाहर चला गया है। मुझे अभी भी लगता है कि पहले व्यक्ति को काम करना चाहिए। क्या कोई मुझे सही दिशा दिखा सकता है?
महान उत्तर के लिए धन्यवाद।अनुवांशिक प्रश्न: क्या कार्यों के वापसी मूल्य पर संचालन करना संभव है? मान लें कि मैं पहली प्रविष्टि को दोगुना करना चाहता था: 'FUNCTION_LIST = [(f1 * 2, (2,)), (f1, (6,)), (f2,())]' काम नहीं करेगा, ऐसा होगा, क्योंकि आप गुणा ऑपरेशन को फ़ंक्शन _object_ पर लागू करने की कोशिश कर रहे हैं, फ़ंक्शन द्वारा दिए गए मान को नहीं। –
संबंधित: क्या तर्कों में अन्य कार्यों को कॉल करना संभव है, जिसे फ़ंक्शन कहा जाता है, जिसका मूल्यांकन किया जाएगा? 'FUNCTION_LIST = [(f1, (time.time(),)), (f1, (6,)), (f2,())] 'मुझे कुछ समय-निर्भर नहीं देगा, क्योंकि समय पर कॉल। जब सूची आबादी होती है तो समय() का मूल्यांकन किया जाएगा। –
@poorsod: देरी निष्पादन के लिए, आपको अपने इच्छित कार्यों को परिभाषित करना चाहिए। उदाहरण के लिए 'def double_f1 (x): वापसी 2 * f1 (x) 'या' def f1_time(): f1 (time.time) वापसी करें। कुछ मामलों में, आप 'लैम्ब्डा' कार्यों से दूर हो सकते हैं, लेकिन मैं कम से कम उपयोग करने की सलाह दूंगा। –