বেশিরভাগ উত্তর যখন বলছে যে, উদাহরণস্বরূপ,
def f(**kwargs):
foo = kwargs.pop('foo')
bar = kwargs.pop('bar')
...etc...
হিসাবে একই"
def f(foo=None, bar=None, **kwargs):
...etc...
এটা সত্য নয়। পরবর্তী ক্ষেত্রে, f
হিসাবে ডাকা যেতে পারে f(23, 42)
, পূর্ববর্তী ক্ষেত্রে কেবল নামযুক্ত যুক্তি গ্রহণ করে - কোনও অবস্থানিক কল নেই। প্রায়শই আপনি কলারের সর্বাধিক নমনীয়তাটিকে মঞ্জুর করতে চান এবং তাই দ্বিতীয় উত্তর হিসাবে সর্বাধিক উত্তরগুলি দৃ .়ভাবে বলা হয় তত বেশি: তবে তা সবসময় হয় না। যখন আপনি অনেকগুলি alচ্ছিক প্যারামিটারগুলি গ্রহণ করেন যার মধ্যে সাধারণত কয়েকটি পাস করা হয়, তবে এটি নামযুক্ত যুক্তিগুলিকে ব্যবহার করার জন্য বাধ্য করার জন্য একটি দুর্দান্ত ধারণা (আপনার কল সাইটগুলিতে দুর্ঘটনা এবং অপঠনযোগ্য কোড এড়ানো!) হতে পারে - threading.Thread
এটি একটি উদাহরণ। প্রথম রূপটি কীভাবে আপনি পাইথন 2 তে এটি প্রয়োগ করেন।
বাগ্ধারা এত গুরুত্বপূর্ণ পাইথন 3 এটা এখন বিশেষ সমর্থনকারী সিনট্যাক্স আছে: একটি একক হওয়ার পর প্রত্যেক যুক্তি *
মধ্যে def
স্বাক্ষর শব্দ-শুধুমাত্র যে, একটি অবস্থানগত আর্গুমেন্ট হিসাবে পাস করা যাবে না, কিন্তু শুধুমাত্র একটি নামাঙ্কিত এক হিসাবে হয়। পাইথন 3 এ আপনি উপরেরটি কোড করতে পারেন:
def f(*, foo=None, bar=None, **kwargs):
...etc...
আসলে, পাইথন 3 এ আপনার কী-ওয়ার্ল্ড-যুক্তি থাকতে পারে যা alচ্ছিক নয় (কোনও ডিফল্ট মান ছাড়াই)।
তবে পাইথন 2 এর এখনও অনেক বছর ধরে উত্পাদনশীল জীবন রয়েছে, সুতরাং পাইথন 3-তে সরাসরি ভাষায় সমর্থিত গুরুত্বপূর্ণ ডিজাইন আইডিয়াগুলি আপনাকে পাইথন 2 এ প্রয়োগ করতে দেয় সেগুলি ভুলে যাওয়া ভাল নয় !