মূল কন্টেন্টে যান
মডিউল 5 · 2-এর পাঠ 4কোর্সে 18/36~12 min
মডিউল পাঠ (2/4)

ডিফল্ট এবং কীওয়ার্ড প্যারামিটার

ফাংশন প্যারামিটারের ডিফল্ট মান থাকতে পারে: যদি কলকারী পাস না করে তাদের, ডিফল্ট ব্যবহার করা হয়. আপনি একটি ফাংশন পাসিং পরামিতি কল করতে পারেন নাম অনুসারে (কীওয়ার্ড আর্গুমেন্ট)।

ডিফল্ট পরামিতি

Python
def saluta(nome, saluto="Ciao"):
    return f"{saluto}, {nome}!"

saluta("Ada")              # 'Ciao, Ada!'
saluta("Ada", "Hello")     # 'Hello, Ada!'

ডিফল্ট সহ পরামিতিগুলি অবশ্যই পর যা ছাড়াই আসবে:

Python
def f(a, b=1):     # OK
def f(a=1, b):     # SyntaxError

মূলশব্দ আর্গুমেন্ট

আপনি নাম দ্বারা আর্গুমেন্ট পাস করতে পারেন, যে কোন ক্রমে, কল আরো করা পঠনযোগ্য:

Python
def crea_utente(nome, eta, attivo=True):
    return {"nome": nome, "eta": eta, "attivo": attivo}

crea_utente("Ada", 36)
crea_utente(nome="Ada", eta=36, attivo=False)
crea_utente(eta=36, nome="Ada")     # any order when all are keyword

সুবর্ণ নিয়ম: একটি কলে, কীওয়ার্ড আর্গুমেন্টের আগে অবস্থানগত আর্গুমেন্ট আসে।

Python
crea_utente("Ada", eta=36)            # OK
crea_utente(nome="Ada", 36)           # SyntaxError

⚠️ পরিবর্তনযোগ্য ডিফল্ট সমস্যা

কখনই ডিফল্ট মান হিসাবে একটি পরিবর্তনযোগ্য বস্তু (তালিকা, নির্দেশ, সেট) ব্যবহার করবেন না: ডিফল্ট একবার মূল্যায়ন করা হয়, যখন ফাংশনটি সংজ্ঞায়িত করা হয় এবং জুড়ে ভাগ করা হয় সব কল।

Python
def aggiungi(elemento, lista=[]):   # BUG!
    lista.append(elemento)
    return lista

aggiungi(1)    # [1]
aggiungi(2)    # [1, 2]    !!! not [2] as you'd expect
aggiungi(3)    # [1, 2, 3]

সঠিক প্যাটার্ন: None কে সেন্টিনেল হিসাবে ব্যবহার করুন এবং এটি ভিতরে তৈরি করুন:

Python
def aggiungi(elemento, lista=None):
    if lista is None:
        lista = []
    lista.append(elemento)
    return lista

পরিবর্তনযোগ্য ডিফল্ট আর্গুমেন্টের বিপদ

পরামিতিগুলির জন্য ডিফল্ট মান হিসাবে পরিবর্তনযোগ্য বস্তু (যেমন তালিকা বা অভিধান) ব্যবহার করবেন না: উদাহরণস্বরূপ def add(x, my_list=[])। ডিফল্ট মানটি শুধুমাত্র একবার মূল্যায়ন করা হয় যখন ফাংশনটি সংজ্ঞায়িত করা হয়, যার অর্থ পরবর্তী কলগুলি ঠিক একই পরিবর্তনযোগ্য বস্তুকে ভাগ করবে! সর্বোত্তম অনুশীলন হল None ব্যবহার করা:

Python
def add(x, my_list=None):
    if my_list is None:
        my_list = []
    my_list.append(x)
    return my_list

চেষ্টা করে দেখুন

ব্যায়াম#python.m5.l2.e1
প্রচেষ্টা: 0লোড হচ্ছে...

`শক্তি(বেস, সূচক=2)` সংজ্ঞায়িত করুন যা ভিত্তি ** সূচক প্রদান করে। `বর্গ = শক্তি(5)` এবং `ঘনক = শক্তি(5, সূচক=3)` গণনা করুন। `(বর্গক্ষেত্র, ঘনক)` মূল্যায়ন করুন।

সম্পাদক লোড হচ্ছে...
ইঙ্গিত দেখান

রিটার্ন বেস ** সূচক

সমাধান 3 প্রচেষ্টার পরে উপলব্ধ

ব্যায়াম পর্যালোচনা করুন

ব্যায়াম#python.m5.l2.e2
প্রচেষ্টা: 0লোড হচ্ছে...

`create_record(name, values=None)` সংজ্ঞায়িত করুন যে, যখন কোনো মান নেই, তখন একটি নতুন খালি তালিকা ব্যবহার করে। মানগুলির সাথে 1 যুক্ত করুন এবং রেকর্ড নির্দেশনা {'name': name, 'values': values} ফেরত দিন। মান পাস না করে এটিকে দুবার কল করুন এবং `a` এবং `b` এ বরাদ্দ করুন। `(a['values'], b['values'])` মূল্যায়ন করুন।

সম্পাদক লোড হচ্ছে...
ইঙ্গিত দেখান

ডিফল্ট হিসাবে None ব্যবহার করুন এবং ফাংশনের ভিতরে তালিকা তৈরি করুন।

সমাধান 3 প্রচেষ্টার পরে উপলব্ধ

অতিরিক্ত চ্যালেঞ্জ

ব্যায়াম#python.m5.l2.e3
প্রচেষ্টা: 0লোড হচ্ছে...

একটি ফাংশন সংজ্ঞায়িত করুন \`greet(name, message="Hello")\` যা ফরম্যাট করা স্ট্রিং \`"{message}, {name}!"\` প্রদান করে। শেষ অভিব্যক্তি হিসাবে \`greet("বব")\` কল করে ফাংশনটি পরীক্ষা করুন।

সম্পাদক লোড হচ্ছে...
ইঙ্গিত দেখান

ফিরে আসা শুভেচ্ছার জন্য একটি ডিফল্ট প্যারামিটার বার্তা="হ্যালো" এবং একটি এফ-স্ট্রিং ব্যবহার করুন।

সমাধান 3 প্রচেষ্টার পরে উপলব্ধ