পাইথনকে কল করার সময় কোনও ফাংশনে alচ্ছিক প্যারামিটারগুলি পাস করার কোনও উপায় আছে এবং ফাংশন সংজ্ঞায় "কেবলমাত্র theচ্ছিক প্যারামিটারটি পাস হলে" ভিত্তিক কিছু কোড রয়েছে
পাইথনকে কল করার সময় কোনও ফাংশনে alচ্ছিক প্যারামিটারগুলি পাস করার কোনও উপায় আছে এবং ফাংশন সংজ্ঞায় "কেবলমাত্র theচ্ছিক প্যারামিটারটি পাস হলে" ভিত্তিক কিছু কোড রয়েছে
উত্তর:
পাইথন 2 ডকুমেন্টেশন, 7.6। ফাংশন সংজ্ঞা আপনাকে কলার একটি alচ্ছিক প্যারামিটার সরবরাহ করেছে কিনা তা সনাক্ত করার কয়েকটি উপায় দেয় gives
প্রথমত, আপনি বিশেষ ফর্মাল প্যারামিটার সিনট্যাক্স ব্যবহার করতে পারেন *। যদি ফাংশন সংজ্ঞাটিতে কোনও একক এর আগে একটি আনুষ্ঠানিক প্যারামিটার থাকে *, তবে পাইথন সেই পরামিতিটিকে কোনও অবস্থানগত পরামিতিগুলির সাথে পপুলেট করে যা ফর্মাল প্যারামিটারগুলির পূর্ববর্তী (টিউপল হিসাবে) মেলেনি। যদি ফাংশন সংজ্ঞায়নের আগে একটি আনুষ্ঠানিক প্যারামিটার থাকে **তবে পাইথন সেই প্যারামিটারটিকে এমন কোনও কীওয়ার্ড প্যারামিটারের সাথে পপুলেট করে যা পূর্ববর্তী ফর্মাল প্যারামিটারগুলির সাথে মেলে না (ডিক্ট হিসাবে)। ফাংশনটির বাস্তবায়ন আপনার পছন্দ অনুসারে যে কোনও "alচ্ছিক পরামিতি" এর জন্য এই পরামিতিগুলির বিষয়বস্তুগুলি পরীক্ষা করতে পারে।
উদাহরণস্বরূপ, এখানে একটি ফাংশন opt_funযা দুটি অবস্থানগত পরামিতি নেয় x1এবং x2, এবং অন্য একটি কীওয়ার্ড প্যারামিটার অনুসন্ধান করে namedচ্ছিক "
>>> def opt_fun(x1, x2, *positional_parameters, **keyword_parameters):
... if ('optional' in keyword_parameters):
... print 'optional parameter found, it is ', keyword_parameters['optional']
... else:
... print 'no optional parameter, sorry'
...
>>> opt_fun(1, 2)
no optional parameter, sorry
>>> opt_fun(1,2, optional="yes")
optional parameter found, it is yes
>>> opt_fun(1,2, another="yes")
no optional parameter, sorry
দ্বিতীয়ত, আপনি কোনও মানটির একটি ডিফল্ট প্যারামিটার মান সরবরাহ করতে পারেন Noneযা কলার কখনও ব্যবহার করবে না। যদি প্যারামিটারের এই ডিফল্ট মান থাকে তবে আপনি জানেন যে কলার প্যারামিটারটি নির্দিষ্ট করে নি। যদি প্যারামিটারটির একটি ডিফল্ট মান থাকে তবে আপনি জানেন যে এটি কলার থেকে এসেছে।
formal parameters preceded by * (এই কি বলা হয়?) একটি থেকে keyword parameter? আমি এটি বুঝতে পেরেছি, কীওয়ার্ড প্যারামিটারগুলি =ফাংশন কলটিতে অপারেটরটি ব্যবহার করে নির্দিষ্ট করা হয়েছে (সুতরাং opt_fun(1,2, optional="yes")কোনও ফাংশনের প্রত্যাশা করে এমন একটি কীওয়ার্ড আর্গুমেন্ট "হ্যাঁ" সরবরাহ করে তবে প্রয়োজনীয়ভাবে প্যারামিটারের প্রয়োজন হয় না option)।
formal parameters preceded by * কেবল "কলার সরবরাহিত আর্গুমেন্ট হিসাবে বুঝতে পারি যা কোনও কীওয়ার্ড আর্গুমেন্টের আগে যে অবস্থানগত আর্গুমেন্টের সাথে মিলে না"। উদাহরণস্বরূপ, মধ্যে opt_fun(1,2, "blah", 3.14, mykey="yes", myyear="2018"), "blah"এবং 3.14হয় forma arguments preceded by *কারণ এটি দুই অবস্থানগত আর্গুমেন্ট এবং যুক্তি ব্যবহার করে মধ্যবর্তী আছে =সাইন ইন করুন। ফলে tuple positional_parameterduple হবে: ("blah", 3.14)। এটা কি সঠিক?
parameter" parameters" জন্য " preceded by *" " লিখেছি না" *identifierপ্যারামিটার তালিকায় ভাষা কেবল একটির জন্য অনুমতি দেয় । খ) ডকস.পিথন.আর. / ২ / রেফারেন্স/… , গ) ডকস.পিথন.আর. / ২ / রেফারেন্স / এক্সপ্রেশন । দুঃখিত, এই মন্তব্যে অনুমোদিত চরিত্রের বাইরে চলে।
def my_func(mandatory_arg, optional_arg=100):
print(mandatory_arg, optional_arg)
http://docs.python.org/2/tutorial/controlflow.html#default-argument-values
আমি এটি ব্যবহার করার চেয়ে বেশি পঠনযোগ্য বলে মনে করি **kwargs।
কোনও আর্গুমেন্ট আদৌ পাস করা হয়েছে কিনা তা নির্ধারণ করতে, আমি কাস্টম ইউটিলিটি অবজেক্টটি ডিফল্ট মান হিসাবে ব্যবহার করি:
MISSING = object()
def func(arg=MISSING):
if arg is MISSING:
...
default_value=100; def my_func(mandatory_argument, optional_argument_with_default_value=default_value): ...
def op(a=4,b=6):
add = a+b
print add
i)op() [o/p: will be (4+6)=10]
ii)op(99) [o/p: will be (99+6)=105]
iii)op(1,1) [o/p: will be (1+1)=2]
Note:
If none or one parameter is passed the default passed parameter will be considered for the function.
op(b=2)
আপনি যদি কোনও প্যারামিটার নির্ধারিত মানকে কিছু ডিফল্ট মান দিতে চান ()। মত (x = 10)। তবে গুরুত্বপূর্ণটি হ'ল প্রথমে বাধ্যতামূলক আর্গুমেন্টের পরে ডিফল্ট মান হওয়া উচিত।
যেমন।
(y, x = 10)
কিন্তু
(x = 10, y) ভুল
*arg **kargফাংশন আর্গুমেন্ট হিসাবে পরিচিত এমন কিছু ব্যবহার করতে পারেন । গুগলে অনুসন্ধান করুন।
আপনি এমন কোনও কিছু দিয়ে alচ্ছিক যুক্তির জন্য একটি ডিফল্ট মান নির্দিষ্ট করতে পারেন যা কখনই ফাংশনে যায় না এবং এটি isঅপারেটরের সাথে যাচাই করতে পারেন :
class _NO_DEFAULT:
def __repr__(self):return "<no default>"
_NO_DEFAULT = _NO_DEFAULT()
def func(optional= _NO_DEFAULT):
if optional is _NO_DEFAULT:
print("the optional argument was not passed")
else:
print("the optional argument was:",optional)
তারপরে আপনি যতক্ষণ না করবেন func(_NO_DEFAULT)আপনি তত্ক্ষণাত যুক্তিটি পাস হয়েছে কিনা তা সঠিকভাবে সনাক্ত করতে পারবেন এবং গৃহীত উত্তরের বিপরীতে আপনাকে ** স্বরলিপিটির পার্শ্ব প্রতিক্রিয়া সম্পর্কে চিন্তা করতে হবে না:
# these two work the same as using **
func()
func(optional=1)
# the optional argument can be positional or keyword unlike using **
func(1)
#this correctly raises an error where as it would need to be explicitly checked when using **
func(invalid_arg=7)
_NO_DEFAULT = object()।
help(func)একটি স্পষ্ট ধারণা পাবেন যে সুস্পষ্টভাবে পাস না হলে যুক্তিটি কীভাবে ব্যাখ্যা করা হয়।
positional_parametersএকটি tuple, এবংkeyword_parametersএকটি অভিধান।