Skip to content

Commit 456b3ef

Browse files
author
Saeid Darvishi
committed
start l12
1 parent e21f33d commit 456b3ef

3 files changed

Lines changed: 144 additions & 0 deletions

File tree

34.9 KB
Loading

index.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
lessons/l09
2727
lessons/l10
2828
lessons/l11
29+
lessons/l12
2930
log
3031

3132
|

lessons/l12.rst

Lines changed: 143 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,143 @@
1+
.. role:: emoji-size
2+
3+
.. meta::
4+
:description: کتاب آنلاین و آزاد آموزش زبان برنامه‌نویسی پایتون به فارسی - درس دوازدهم تابع
5+
:keywords: آموزش, آموزش پایتون, آموزش برنامه نویسی, پایتون, انواع شی, انواع داده, پایتون
6+
7+
8+
درس ۱۲: تابع
9+
============
10+
11+
12+
13+
14+
15+
16+
17+
18+
:emoji-size:`` سطح: متوسط
19+
20+
----
21+
22+
23+
.. contents:: سرفصل‌ها
24+
:depth: 2
25+
26+
----
27+
28+
29+
30+
مقدمه
31+
------
32+
33+
**تابع (Function)** به بلاکی از دستورات گفته می‌شود که برای به اجرا درآمدن نیازمند فراخوانی هستند و این فراخوانی می‌تواند بیش از یک بار در برنامه انجام گیرد. تابع می‌تواند به هنگام فراخوانی مقادیری را دریافت کند و در صورت لزوم مقداری نیز به عنوان نتیجه برگرداند.
34+
35+
تابع جایگزینی برای بخش‌های تکراری برنامه است که با یک بار نوشتن و چندین بار فراخوانی و اجرای آن می‌توان از پیچیدگی برنامه جلوگیری و تغییر در آن را آسان نمود. استفاده از توابع باعث بالابردن قابلیت استفاده مجدد از کدها می‌شود و افزونگی را نیز کاهش می‌دهد. توابع ابزاری برای خرد کردن منطق برنامه به واحدهای اجرایی کوچکتر برای تسهیل ساخت برنامه‌های بزرگ است.
36+
37+
سینتکس تابع در زبان برنامه‌نویسی پایتون همانند هر دستور مرکب دیگری شامل یک سرآیند و یک بدنه است - درس ششم. بخش سرآیند شامل کلمه کلیدی ``def``، یک نام به دلخواه کاربر و پرانتز‌ می‌باشد که این پرانتز‌ محل قرار گرفتن پارامترهای تابع را نمایش می‌دهد. هر تابع می‌تواند هیچ، یک یا چند پارامتر بپذیرد::
38+
39+
def function_name(param1, param2,... paramN):
40+
statements
41+
42+
همانطور که بارها گفته شد، هر چیزی در پایتون شی است، هنگامی که اجرای برنامه به کلمه کلیدی ``def`` می‌رسد، ابتدا یک شی تابع ایجاد و سپس از نام تابع (در اینجا: function_name) به آن ارجاع داده می‌شود::
43+
44+
>>> def func_name():
45+
... pass
46+
...
47+
>>>
48+
>>> type(func_name)
49+
<class 'function'>
50+
51+
.. tip::
52+
پیشنهاد `PEP 8 <http://www.python.org/dev/peps/pep-0008>`__: نام تابع از حروف کوچک تشکیل شود که کلمه‌های آن با استفاده از خط زیرین (Underscores) از یکدیگر جدا شده باشند. مانند: my_function . حالت ``mixedCase`` مانند: myFunction نیز صحیح می‌باشد به شرط آنکه در سراسر کدها نام توابع با همین الگو نوشته شود.
53+
54+
بدنه تا زمانی که تابع فراخوانی نگردد، اجرا نمی‌شود. برای فراخوانی تابع از نام تابع + پرانتز استفاده می‌شود و در صورتی که در تعریف تابع پارامترهایی قرار داده شده باشد، می‌بایست هنگام فراخوانی آرگومان‌های متناسب با این پارامترها نیز ارسال گردند::
55+
56+
function_name(arg1, arg2,... argN)
57+
58+
59+
.. caution::
60+
در بحث توابع، به متغیرهایی که در سرآیند تابع تعریف می‌شوند پارامتر (Parameter) و به داده‌هایی که هنگام فراخوانی تابع ارسال می‌گردد آرگومان (Argument) گفته می‌شود. به ازای هر آرگومان ارسالی می‌بایست یک پارامتر در تابع جهت دریافت آن تعریف شده باشد. هیچ الزامی به هم نام بودن آرگومان‌ها و پارامترهای نظیر وجود ندارد ولی وجود هم نامی باعث خوانایی بیشتر کد می‌شود.
61+
62+
63+
64+
بدنه تابع می تواند حاوی کلمه کلیدی ``return`` نیز باشد. در واقع ``return`` دستوری است که در هر جایی از بدنه آورده شود، اجرای تابع در آن نقطه متوقف و مقداری (البته در زبان پایتون درست این است که گفته شود: شی‌ایی) را به عنوان نتیجه به محل فراخوانی تابع بازمی‌گرداند::
65+
66+
def function_name(param1, param2,... paramN):
67+
...
68+
return value
69+
70+
در نمونه کد بالا value مقداری است که توسط ``return`` به محل فراخوانی بازگردانده می‌شود. value می‌تواند صراحتا یک مقدار نباشد بلکه یک عبارت مانند : ``param1**2`` یا ``param1 > 3`` و... باشد که در این صورت ابتدا حاصل عبارت ارزیابی و سپس بازگردانده می‌شود. چنانچه value ذکر نگردد، ``None`` بازگردانده می‌شود::
71+
72+
>>> def my_pow(x, y):
73+
... return x**y
74+
...
75+
>>>
76+
>>> a = 2
77+
>>> b = 3
78+
>>>
79+
>>> my_pow(a, b)
80+
8
81+
>>>
82+
83+
در زبان برنامه نویسی پایتون تابع یک موجودیت **”first-class“** است که یعنی تابع را می‌توان مانند دیگر اشیا به صورت پویا ایجاد یا نابود کرد، به صورت آرگومان به توابع دیگر ارسال نمود، به عنوان نتیجه توسط ``return`` بازگرداند و... در نتیجه می‌توان یک تابع را درون بدنه دستورات کنترلی (``while`` ،``if`` و...) یا درون بدنه تابعی دیگر تعریف نمود::
84+
85+
>>> def outer(num1):
86+
... def inner_increment(num1): # hidden from outer code
87+
... return num1 + 1
88+
... num2 = inner_increment(num1)
89+
... print(num1, num2)
90+
...
91+
>>>
92+
>>> outer(1)
93+
1 2
94+
95+
96+
خیلی خوب است که با استفاده از ”Docstring“ در توابع به مستندسازی و خوانایی بهتر برنامه کمک کنیم - درس ششم::
97+
98+
99+
def function_with_docstring(param1, param2):
100+
"""Example function with types documented in the docstring.
101+
102+
Args:
103+
param1 (int): The first parameter.
104+
param2 (str): The second parameter.
105+
106+
Returns:
107+
bool: The return value. True for success, False otherwise.
108+
"""
109+
110+
111+
فضاهای نام
112+
-----------
113+
در هر برنامه پایتون تعداد زیادی نام وجود دارد که برای نمونه می‌توان به: متغیرها که پیش‌تر اشاره شد و می‌دانیم، متغیرها نام‌هایی هستند که به اشیا (از انواع مختلف) ارجاع دارند، نام توابع که به اشیایی از نوع تابع ارجاع دارند، نام کلاس‌ها که به اشیایی از نوع کلاس ارجاع دارند و... اشاره کرد. بدیهی است که برای شناسایی اشیا لازم است نام‌ها منحصر به فرد باشند، رعایت چنین امری در یک برنامه حتی کوچک کار سختی است. در زبان پایتون برای دسته‌بندی و جلوگیری از تداخل نام‌ها ساختاری با عنوان «**فضاهای نام**» (Namespaces) در نظر گرفته شده است؛ هر فضا نام بخشی از نام‌های درون برنامه را دربر می‌گیرد. فضاهای نام‌ متفاوت نسبت به یکدیگر ایزوله هستند؛ بنابراین در فضاهای نام‌ متفاوت می‌توان از نام‌های یکسان استفاده کرد. به صورت کلی فضاهای نام پایتون در سه سطح تو در توی «محلی» (Local)، «سراسری» (Global) و Built-in به تصویر کشیده می‌شوند:
114+
115+
.. image:: /_static/nested-namespaces-python.jpg
116+
:align: center
117+
118+
هر ماژول پایتون فضانام سراسری خود را دارد. فضانام تمام ماژول‌ها درون فضانام بزرگتری ایجاد می‌گردد که به عنوان فضانام Built-in شناخته می‌شود و نام تمامی توابع آماده مانند ``()open`` که پیش از این استفاده می کردیم در این فضا قرار گرفته است. به همین دلیل است که بدون نیاز به import ماژول خاصی در هر جای برنامه به توابع آماده (Built-in) دسترسی داریم ولی برای استفاده از توابع داخل هر ماژول می‌بایست ابتدا آن ماژول را import کرده تا توسط فضا نام ماژول مربوطه به نام‌های درون آن دسترسی پیدا کنیم.
119+
120+
هر ماژول می‌تواند شامل تعدادی تابع و کلاس باشد. با فراخوانی هر تابع یک فضانام محلی داخل فضانام ماژول آن ایجاد می‌گردد و با پایان اجرا نیز از بین می‌رود، در مورد کلاس‌ها هم اتفاق مشابهی رخ می‌دهد.
121+
122+
123+
124+
125+
126+
ارسال آرگومان
127+
--------------
128+
129+
130+
131+
132+
133+
134+
135+
|
136+
137+
----
138+
139+
:emoji-size:`😊` امیدوارم مفید بوده باشه
140+
141+
`لطفا دیدگاه و سوال‌های مرتبط با این درس خود را در کدرز مطرح نمایید. <http://coderz.ir/python-tutorial-function/>`_
142+
143+

0 commit comments

Comments
 (0)