सी या सी में varargs का उपयोग कर ++ करने के लिए इसी तरह:क्या किसी फ़ंक्शन में तर्कों की एक चर संख्या पारित की जा सकती है?
fn(a, b)
fn(a, b, c, d, ...)
सी या सी में varargs का उपयोग कर ++ करने के लिए इसी तरह:क्या किसी फ़ंक्शन में तर्कों की एक चर संख्या पारित की जा सकती है?
fn(a, b)
fn(a, b, c, d, ...)
हां।
यह सरल है और यदि आप कीवर्ड तर्क उपेक्षा काम करता है:
def manyArgs(*arg):
print "I was called with", len(arg), "arguments:", arg
>>> manyArgs(1)
I was called with 1 arguments: (1,)
>>> manyArgs(1, 2,3)
I was called with 3 arguments: (1, 2, 3)
आप देख सकते हैं, अजगर आप सभी तर्कों के साथ एक एकल टपल दे देंगे।
कीवर्ड तर्कों के लिए आपको Skurmedel's answer में दिखाए गए अनुसार, उन्हें एक अलग वास्तविक तर्क के रूप में स्वीकार करने की आवश्यकता है।
http://docs.python.org/tutorial/controlflow.html#more-on-defining- कार्य – Miles
भी महत्वपूर्ण ...किसी को एक समय मिल सकता है जब उन्हें किसी फ़ंक्शन में अज्ञात संख्या में तर्क पारित करना पड़ता है। इस तरह के मामले में "args" नामक एक सूची बनाकर अपने "ManyArgs" को कॉल करें और इसे "कई एआरजीएस (* तर्क)" – wilbbe01
जैसे कई आर्ट्स में पास करें, यह दुर्भाग्यवश सामान्य नहीं है: 'manyArgs (x = 3) 'TypeError' के साथ विफल रहता है। Skumedel का जवाब इस समाधान को दिखाता है। मुख्य बिंदु यह है कि फ़ंक्शन का सामान्य हस्ताक्षर 'f (* list_args, ** keyword_args)' ('f (* list_args)' नहीं है)। – EOL
unwinds पोस्ट करने के लिए जोड़ा जा रहा है:
आप एक से अधिक मुख्य मान आर्ग भी भेज सकते हैं।
def myfunc(**kwargs):
# kwargs is a dictionary.
for k,v in kwargs.iteritems():
print "%s = %s" % (k, v)
myfunc(abc=123, efh=456)
# abc = 123
# efh = 456
और तुम मिश्रण कर सकते हैं दो:
def myfunc2(*args, **kwargs):
for a in args:
print a
for k,v in kwargs.iteritems():
print "%s = %s" % (k, v)
myfunc2(1, 2, 3, banan=123)
# 1
# 2
# 3
# banan = 123
वे दोनों घोषित किया जाना चाहिए और इसी क्रम में कहा जाता है, कि समारोह हस्ताक्षर * args, kwargs होने के लिए ** जरूरत है, और में कहा जाता है वह आदेश
यह सुनिश्चित नहीं है कि आपने myfunc (abc = 123, def = 456) को काम करने के लिए कैसे प्राप्त किया है, लेकिन मेरे (2.7) में, 'def' को इस फ़ंक्शन में SyntaxError प्राप्त किए बिना पारित नहीं किया जा सकता है। मुझे लगता है कि ऐसा इसलिए है क्योंकि डीफ़ का अर्थ अजगर में है। इसके बजाय myfunc (abc = 123, fgh = 567) आज़माएं। (अन्यथा, महान उत्तर और इसके लिए धन्यवाद!) – Dannid
@ डैनिड: कोई विचार या तो हाहा ... 2.6 या 3.2 पर काम नहीं करता है। मैं इसका नाम बदलूंगा। – Skurmedel
जब आप कहते हैं कि 'उस क्रम में बुलाया गया', तो क्या आपका मतलब उस क्रम में पारित किया गया है? या कुछ और? –
अन्य उत्कृष्ट पदों को जोड़ना।
कभी-कभी आप तर्कों की संख्या निर्दिष्ट नहीं करना चाहते हैं और उनके लिए कुंजी का उपयोग करना चाहते हैं (संकलक शिकायत करेगा यदि किसी शब्द में पारित एक तर्क विधि में उपयोग नहीं किया जाता है)।
def manyArgs1(args):
print args.a, args.b #note args.c is not used here
def manyArgs2(args):
print args.C#note args.b and .c are not used here
class Args: pass
args = Args()
args.a = 1
args.b = 2
args.c = 3
manyArgs1(args) #outputs 1 2
manyArgs2(args) #outputs 3
myfuns = [manyArgs1, manyArgs2]
for fun in myfuns:
fun(args)
def f(dic):
if 'a' in dic:
print dic['a'],
pass
else: print 'None',
if 'b' in dic:
print dic['b'],
pass
else: print 'None',
if 'c' in dic:
print dic['c'],
pass
else: print 'None',
print
pass
f({})
f({'a':20,
'c':30})
f({'a':20,
'c':30,
'b':'red'})
____________
ऊपर कोड उत्पादन होगा जैसी चीजों तो फिर तुम क्या कर सकते हैं
None None None
20 None 30
20 red 30
यह एक शब्दकोश के माध्यम से चर तर्क गुजर के रूप में के रूप में अच्छा है
यह भयानक कोड है। बहुत बेहतर होगा: 'f = lambda ** dic:' 'join (dic.get (कुंजी,' कोई नहीं ')' abc 'में कुंजी के लिए) ' – metaperture
यदि मैं कर सकता हूं, Skurmedel सी ओडी पाइथन 2 के लिए है; इसे पायथन 3 में अनुकूलित करने के लिए, iteritems
से items
बदलें और print
पर ब्रांड्स जोड़ें। इससे मेरे जैसे शुरुआती लोगों को टक्कर मिल सकती है: AttributeError: 'dict' object has no attribute 'iteritems'
और कहीं और खोजें (उदा। Error “ 'dict' object has no attribute 'iteritems' ” when trying to use NetworkX's write_shp()) यह क्यों हो रहा है।
def myfunc(**kwargs):
for k,v in kwargs.items():
print("%s = %s" % (k, v))
myfunc(abc=123, efh=456)
# abc = 123
# efh = 456
और:
def myfunc2(*args, **kwargs):
for a in args:
print(a)
for k,v in kwargs.items():
print("%s = %s" % (k, v))
myfunc2(1, 2, 3, banan=123)
# 1
# 2
# 3
# banan = 123
मैं podcast करने के लिए माननीय lottness उल्लेख 53: http://itc.conversationsnetwork.org/shows/detail4111.html?loomia_si=t0:a16:g2:r2: c0.246273: b24677090 –
मुझे इस पर श्री लॉट के साथ जाना होगा। आप पाइथन डॉक्स में इस पर एक अधिकृत उत्तर प्राप्त कर सकते हैं, साथ ही आपको दस्तावेज़ों में और क्या है इसके बारे में एक महसूस होगा। यदि आप पाइथन में काम करने की योजना बना रहे हैं तो उन दस्तावेज़ों को जानने के लिए आपके लाभ के लिए यह है। –
सबसे तेज़ उत्तर यह है कि Google कहता है कि सबसे तेज़ उत्तर है। –