جلسه بیست چهارم
توابع
در زبان برنامهنویسی پایتون، تابع (function) یک بلوک کد است که میتواند مجموعهای از دستورات را به طور گروهبندی شده اجرا کند. تابعها به شما این امکان را میدهند که کدهای تکراری را به صورت یک واحد قابل استفاده مجدد در نظر بگیرید.
تابع در پایتون با استفاده از کلمه کلیدی def
تعریف میشود. ساختار کلی تعریف تابع به صورت زیر است:
1 2 3 4 5 |
<xmp>def function_name(parameters): # بدنه تابع (دستورات اجرایی) return value # اختیاری</xmp> |
در این ساختار:
– function_name
نام تابع است که باید نامگذاری معنادار داشته باشد.
– parameters
پارامترهایی است که تابع میتواند دریافت کند (اختیاری).
– بدنه تابع شامل دستورات اجرایی است که وقتی تابع فراخوانی میشود، اجرا میشوند.
– return
برای بازگرداندن مقداری از تابع استفاده میشود (اختیاری).
به عنوان مثال:
1 2 3 4 5 6 7 8 |
<xmp>def greet(name): """ این تابع یک پیام سلام به فرد مورد نظر میدهد. """ print(f"سلام {name}!") greet("Alice") # خروجی: سلام Alice!</xmp> |
در این مثال، تابع greet
یک پارامتر به نام name
دریافت میکند و سپس پیام سلام را با استفاده از آن چاپ میکند.
آرگومان : اطلاعات ارسالی برای تابع را آرگومان می گوییم.
پارامتر : متغییر هایی که درتابع دریافت میکند و جلوی اسم تابع و داخل پرانتز است .
مثال 1: ساخت تابع با پارامتر های پیش فرض.
1 2 3 4 5 6 7 8 9 10 |
<xmp>def describe_pet(animal, name=None): """Display information about a pet.""" print("nI have a " + animal + ".") if name: print("Its name is " + name + ".") describe_pet('hamster', 'harry') describe_pet('snake')</xmp> |
return values
در برنامهنویسی پایتون، return
(بازگشتی) یک کلمه کلیدی است که به شما امکان میدهد تا مقداری را از یک تابع بازگردانید.
return value
به معنای بازگرداندن یک مقدار از تابع است. این مقدار میتواند هر نوع دادهای باشد، مانند عدد، رشته، لیست، تاپل و غیره.
وقتی return
در یک تابع قرار میگیرد، اجرای تابع متوقف شده و مقدار بازگردانی شده به محل فراخوانی تابع منتقل میشود.
به عنوان مثال:
1 2 3 4 5 6 7 |
<xmp>def add_numbers(a, b): result = a + b return result sum_of_two = add_numbers(3, 5) print(sum_of_two) # خروجی: 8</xmp> |
در این مثال:
1. تابع add_numbers
دو پارامتر a
و b
را دریافت میکند.
2. داخل تابع، مجموع a
و b
محاسبه شده و در متغیر result
ذخیره میشود.
3. سپس، مقدار result
با استفاده از کلمهکلیدی return
بازگردانده میشود.
اگر تابع خروجی (return) داشت باید خروجی را در برنامه اصلی در جایی برای استفاده ذخیره کرد.
مثال 2: استفاده از دستور return برای یک متغییر.
1 2 3 4 5 6 7 8 |
<xmp>def get_full_name(first, last): """Return a neatly formatted full name.""" full_name = first + ' ' + last return full_name.title() musician = get_full_name('jimi', 'hendrix') print(musician)</xmp> |
بسیار خوب، من با کمال میل توضیحات کاملی در مورد متود title()
در زبان برنامه نویسی پایتون برایتان ارائه می دهم:
متود title()
یک متود استرینگ است که به شما امکان می دهد هر رشته ای را به صورت “عنوان” فرمت کنید. به این معنی که هر کلمه در رشته با حرف اول بزرگ نوشته می شود.
برای مثال،
1 2 3 4 5 6 |
<xmp>text = "the quick brown fox jumps over the lazy dog." new_text = text.title() print(new_text) #output : The Quick Brown Fox Jumps Over The Lazy Dog.</xmp> |
همانطور که مشاهده می کنید، هر کلمه در رشته با حرف اول بزرگ نوشته شده است. این متود می تواند در بسیاری از موارد مانند عناوین، نام های افراد و … مورد استفاده قرار گیرد.
مثال 3: استفاده از دستور return برای یک دیکشنری.
1 2 3 4 5 6 7 8 |
<xmp>def build_person(first, last): """Return a dictionary of information about a person.""" person = {'first': first, 'last': last} return person musician = build_person('jimi', 'hendrix') print(musician)</xmp> |
مثال43: استفاده از دستور return برای یک دیکشنری و مقدار پیشفرض.
1 2 3 4 5 6 7 8 9 10 11 12 |
<xmp>def build_person(first, last, age=None): """Return a dictionary of information about a person.""" person = {'first': first, 'last': last} if age: person['age'] = age return person musician = build_person('jimi', 'hendrix', 27) print(musician) musician = build_person('janis', 'joplin') print(musician)</xmp> |
مثال 5: ارسال یک لیست بعنوان آرگومان.
1 2 3 4 5 6 7 8 9 10 |
<xmp>def greet_users(names): """Print a simple greeting to everyone.""" for name in names: msg = "Hello, " + name + "!" print(msg) usernames = ['hannah', 'ty', 'margot'] greet_users(usernames)</xmp> |
با توجه به مثال بالا هر گونه تغییر ایجاد شده در لیست ارسال شده به تابع ، بر لیست اصلی نیز تأثیر میگذارد.
مثال 6: اجازه دادن به یک تابع برای تغییر لیست.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<xmp>def print_models(unprinted, printed): """3d print a set of models.""" while unprinted: current_model = unprinted.pop() print("Printing " + current_model) printed.append(current_model) # Store some unprinted designs, # and print each of them. unprinted = ['phone case', 'pendant', 'ring'] printed = [] print_models(unprinted, printed) print("nUnprinted:", unprinted) print("Printed:", printed)</xmp> |
مثال 7: جلوگیری از تغییر یک لیست توسط یک تابع.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<xmp>def print_models(unprinted, printed): """3d print a set of models.""" while unprinted: current_model = unprinted.pop() print("Printing " + current_model) printed.append(current_model) # Store some unprinted designs, # and print each of them. original = ['phone case', 'pendant', 'ring'] printed = [] print_models(original[:], printed) print("nOriginal:", original) print("Printed:", printed)</xmp> |
در این سوال با گرفتن یک کپی از لیست و ارسال لیست کپی شده باعث جلوگیری از تغییر در لیست اصلی میشود.
مثال 8: جمع آوری تعداد دلخواه آرگومان.
1 2 3 4 5 6 7 8 9 10 11 12 |
<xmp>def make_pizza(size, *toppings): """Make a pizza.""" print("nMaking a " + size + " pizza.") print("Toppings:") for topping in toppings: print("- " + topping) # Make three pizzas with different toppings. make_pizza('small', 'pepperoni') make_pizza('large', 'bacon bits', 'pineapple') make_pizza('medium', 'mushrooms', 'peppers','onions', 'extra cheese')</xmp> |
گاهی اوقات نمی دانید که یک تابع باید چند آرگومان را بپذیرد. پایتون به شما امکان می دهد تعداد دلخواه را جمع آوری کنید
آرگومان ها را با استفاده از عملگر * به یک پارامتر تبدیل می کند. یک پارامتر که تعداد دلخواه را می پذیرد.
عملگر ** به یک پارامتر اجازه می دهد تا تعداد دلخواه آرگومان های کلمه کلیدی را جمع آوری کند.
مثال 9: جمع آوری تعداد دلخواه آرگومان های کلمه کلیدی با مقدارشان.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<xmp>def build_profile(first, last, **user_info): """Build a user's profile dictionary.""" # Build a dict with the required keys. profile = {'first': first, 'last': last} # Add any other keys and values. for key, value in user_info.items(): profile[key] = value return profile # Create two users with different kinds # of information. user_0 = build_profile('albert', 'einstein', location='princeton') user_1 = build_profile('marie', 'curie', location='paris', field='chemistry') print(user_0) print(user_1)</xmp> |