সি বা সি ++ তে ভারাগস ব্যবহারের অনুরূপ উপায়ে:
fn(a, b)
fn(a, b, c, d, ...)
সি বা সি ++ তে ভারাগস ব্যবহারের অনুরূপ উপায়ে:
fn(a, b)
fn(a, b, c, d, ...)
উত্তর:
হ্যাঁ. আপনি *args
একটি অ-কীওয়ার্ড আর্গুমেন্ট হিসাবে ব্যবহার করতে পারেন । তারপরে আপনি যে কোনও সংখ্যক যুক্তি পাস করতে সক্ষম হবেন।
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)
আপনি দেখতে পাচ্ছেন যে পাইথন আর্গুমেন্টগুলিকে সমস্ত আর্গুমেন্টের সাথে একক টুপল হিসাবে আনপ্যাক করবে ।
কীওয়ার্ড আর্গুমেন্টগুলির জন্য আপনার এগুলি একটি পৃথক আসল যুক্তি হিসাবে স্বীকার করতে হবে, যেমন স্কুরমিডেলের উত্তরে দেখানো হয়েছে ।
manyArgs(x = 3)
ব্যর্থ হয় TypeError
। স্কুমেলের উত্তর এটির সমাধান দেখায়। মূল বিষয়টি হ'ল কোনও ফাংশনের সাধারণ স্বাক্ষর f(*list_args, **keyword_args)
(নয় f(*list_args)
)।
args
হয় tuple
। কীওয়ার্ড আরগসkwargs
মানে । ধরণ হয় । kwargs
dictionary
for arg in args:
পাস করা
আনইন্ডস পোস্টে যুক্ত করা হচ্ছে:
আপনি একাধিক কী-মান আরগগুলিও প্রেরণ করতে পারেন।
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
সেগুলি অবশ্যই উভয়ভাবে ঘোষিত এবং সেই ক্রমে ডাকা হবে, এটি হ'ল ফাংশনের স্বাক্ষরটি * আরগস, ** কাওয়ার্গস হওয়া উচিত এবং সেই ক্রমে ডাকা উচিত।
print a
সাথে print(a)
এবং এর kwargs.iteritems():
সাথে বিনিময় করুন kwargs.items()
।
যদি আমি পারি তবে স্কুরমেডেলের কোডটি অজগর 2 এর জন্য; এটি অজগর 3 এর সাথে খাপ খাইয়ে নিতে, পরিবর্তন iteritems
করুন items
এবং এতে প্রথম বন্ধন যুক্ত করুন print
। এটি আমার মতো নতুনদের মধ্যে .ুকে পড়তে বাধা দিতে পারে:
AttributeError: 'dict' object has no attribute 'iteritems'
এবং অন্য কোথাও অনুসন্ধান করুন (যেমন ত্রুটি "'ডিক্ট' অবজেক্টটির কোনও 'ইটারিটামস' নেই)" কেন নেটওয়ার্কেক্সএক্স এর রাইট_শ্যাপ () ) কেন ঘটছে তা ব্যবহার করার চেষ্টা করার সময় ।
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
অন্যান্য দুর্দান্ত পোস্টে যুক্ত করা হচ্ছে।
কখনও কখনও আপনি আর্গুমেন্টের সংখ্যা নির্দিষ্ট করতে এবং সেগুলির জন্য কী ব্যবহার করতে চান না (সংকলক অভিযোগ করবে যে কোনও অভিধানে পাস করা একটি যুক্তি পদ্ধতিতে ব্যবহার না করা হয়)।
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(key, 'None') for key in 'abc')
ইতিমধ্যে উল্লিখিত চমৎকার উত্তরের পাশাপাশি এটি সম্পর্কে আরও একটি উপায় নির্ভর করে যে আপনি অবস্থানের দ্বারা namedচ্ছিক নামযুক্ত যুক্তিগুলি পাস করতে পারবেন upon উদাহরণ স্বরূপ,
def f(x,y=None):
print(x)
if y is not None:
print(y)
উৎপাদনের
In [11]: f(1,2)
1
2
In [12]: f(1)
1