
با آموزش حضوری و آنلاین مقدماتی تا پیشرفته پایتون , محبوبترین زبان برنامهنویسی دنیا در محیطی عملی کاربردی و پروژه محور وارد دنیای برنامه نویسی شوید
مشاهده بیشتر
اگه پایتون بلدی و میخوای وارد دنیای هوش مصنوعی بشی، این دوره مخصوص توئه! با آموزش پروژهمحور و همراهی اساتید حرفهای، یاد بگیر چطور از هوش مصنوعی تو زمینههایی مثل پزشکی، بورس و املاک استفاده کنی.
مشاهده بیشتر
اگه یادگیری ماشین بلدی و آمادهای وارد چالشهای حرفهای بشی، دوره یادگیری عمیق پروژهمحور برای توئه! طراحی شبکههای عصبی و کار روی پروژههای واقعی مثل تشخیص تصویر و پردازش زبان رو اینجا یاد میگیری.
مشاهده بیشتر
با این دوره، Django رو از پایه شروع کن و به یک حرفهای تبدیل شو! یاد بگیر چطور با معماری MVT، پایگاه داده و RESTful API کار کنی، پروژههای واقعی بسازی و آنها رو روی وب سرور مستقر کنی!
مشاهده بیشترمشخصات مقاله
توابع در پایتون
آموزش توابع در برنامه نویسی پایتون
میتوانیم تابعی ایجاد کنیم که سری فیبوناتچی را تا مرز دلخواه بنویسد:
1 2 3 4 5 6 7 8 9 10 11 12 | >>> def fib(n): # write Fibonacci series up to n ... """Print a Fibonacci series up to n.""" ... a, b = 0, 1 ... while a < n: ... print(a, end = ' ' ) ... a, b = b, a+b ... print() ... >>> # Now call the function we just defined: ... fib(2000) 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 < button ></ button > |
کلمه کلیدی def تعریف یک تابع را معرفی می کند. پس از آن باید نام تابع و لیست پارامترهای رسمی آن درون پرانتز، قرار گیرد. عباراتی که بدنه تابع را می سازد، از خط بعد شروع می شود و باید فرو رفته باشند. عبارت اول در بدنه تابع می تواند به صورت اختیاری یک رشته حروف باشد. این رشته حروف، مدارک و مستندات یا docstring تابع است (اطلاعات بیشتر درباره docstring در بخش Documentation Strings موجود است).
ابزارهایی وجود دارد که از docstring برای تولید خودکار مستندات به صورت چاپی و آنلاین استفاده می کنند، یا به کاربر این امکان را می دهند تا به صورت تعاملی درون کد را مرور کنند. خوب است که از docstring درون کدی که مینویسید استفاده کنید، بنابراین به آن عادت کنید. اجرای یک تابع، یک جدول نماد جدید معرفی می کند که برای متغیرهای محلی تابع استفاده می شود. به طور دقیق تر، تمامی تخصیص ها به متغیر در یک تابع، مقدار را در جدول نماد محلی ذخیره می کند؛
زیرا مرجع های متغیر ابتدا درون جدول نماد محلی را نگاه می کنند، سپس جداول نماد محلی توابع داخلی، سپس درون جدول نماد سراسری، و در انتها جدول داخلی نام ها. بنابراین، نمی توان مستقیما در محدوده یک تابع یک مقدار را به متغیرهای سراسری و متغیرهای توابع محصور، تخصیص داد (مگر، برای متغیرهای سراسری، بیان شده در عبارت سراسری، یا برای متغیرهای توابع محصور، بیان شده در عبارت غیر محلی)، اگرچه ممکن است به آنها ارجاع داده شود.
پارامترهای (آرگومان) حقیقی برای فراخوانی یک تابع درون جدول نماد محلی تابع فراخوانی شده، در هنگام فراخوانی، معرفی می شوند. بنابراین، آرگومان ها با استفاده از فراخوانی با مقدار (call by value) پاس داده می شوند (جایی که "مقدار" همیشه مرجع شی است، نه مقدار یک شی). 1 زمانی که یک تابع، تابع دیگری را فراخوانی می کند، یک جدول نماد محلی جدید برای آن فراخوانی ایجاد می شود.
. تعریف یک تابع، نام تابع را درون جدول نماد فعلی معرفی می کند. مقدار نام تابع دارای یک نوع است که توسط مفسر به عنوان تابع تعریف شده توسط کاربر شناخته می شود. این مقدار میتواند به یک نام دیگر تخصیص داده شود که پس از آن نیز می تواند به عنوان یک تابع مورد استفاده واقع شود. این عمل به عنوان مکانیزم تغییر نام عمومی کار می کند.
1 2 3 4 5 6 | >>> fib < function fib = "" at = "" 10042ed0 = "" > >>> f = fib >>> f(100) 0 1 1 2 3 5 8 13 21 34 55 89 </ function >< button ></ button > |
اگر از زبان های دیگر آمده باشید، ممکن است مخالف این باشید که fib یک تابع است، بلکه میگویید یک روند (procedure) است زیرا مقداری باز نمی گرداند. در حقیقت، حتی توابع بدون عبارت return نیز یک مقدار باز می گردانند، هرچند که مقداری خسته کننده است. این مقدار None نام دارد(این یک نام داخلی است). معمولا نوشتن مقدار None , در صورتی که تنها مقدار نوشته شده باشد، توسط مفسر سرکوب می شود. با استفاده از تابع print() میتوانید آن را ببینید.
1 2 3 4 | >>> fib(0) >>> print(fib(0)) None < button ></ button > |
نوشتن یک تابع که لیستی از اعداد دنباله فیبوناتچی را به جای چاپ کردن، بازگرداند ساده است.
1 2 3 4 5 6 7 8 9 10 11 12 13 | >>> def fib2(n): # return Fibonacci series up to n ... """Return a list containing the Fibonacci series up to n.""" ... result = [] ... a, b = 0, 1 ... while a < n: ... result.append(a) # see below ... a, b = b, a+b ... return result ... >>> f100 = fib2(100) # call it >>> f100 # write the result [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89] < button ></ button > |
این مثال، طبق معمول، تعدادی ویژگی جدید پایتون را نمایش می دهد.
1. عبارت return با یک مقدار از یک تابع باز می گردد. Return بدون آرگومان عبارت، none باز میگرداند. در انتهای یک تابع نیز none باز می گرداند.
2. عبارت result.append(a) یک متد از شی result لیست را صدا می کند. یک متد تابعی است که متعلق به یک شی است و به صورت obj.methodname نامگذاری می شود، که obj یک شی است (این می تواند یک اصطلاح باشد)، و methodname نام متدی است که توسط نوع شی تعریف شده است. انواع مختلف، متدهای مختلفی تعریف می کنند. متدها از انواع مختلف می توانند بدون بروز ابهام، نام مشابه داشته باشند. (همچنین می توان با استفاده از کلاس ها، انواع شی و متدهای خودتان را تعریف کنید. لینک Classes را ببینید.) متد append() نشان داده شده در مثال، برای اشیای لیست تعریف شده است. این متد یک عنصر جدید به انتهای لیست اضافه می کند که در این مثال با عبارت result = result + [a] برابر است اما کارآمد تر است.