تابع یک قطعه کد قابل استفاده مجدد است که معمولاً برای انجام یک کار خاص نوشته میشوند. از تابع در پایتون میتوان برای سازماندهی و جلوگیری از تکرار کدها استفاده کرد. در این مقاله به طور جامع با توابع پایتون آشنا شده و ترفندهای آن را خواهید آموخت.
فرقی ندارد که تازه با زبان برنامه نویسی پایتون آشنا شدید یا مدتهاست دارید با این زبان شیرین کار میکنید. مطمئناً از توابع استفاده کردهاید. شاید پر استفادهترین تابع که در خود پایتون وجود دارد، تابع print()
باشد.
به کمک این تابع، دستورات مربوط به چاپ یک رشته متنی پایتون فراخوانی شده و در خروجی چاپ میشود. فرض کنید بخواهید برای هر بار چاپ متن، تمام دستورات مرتبط با چاپ را هم بنویسید!
در این صورت دو مشکل عمده برایمان به وجود میآید:
- کدهای طولانی و شلوغی خواهیم داشت.
- اگر نیاز به تغییر یک بخش از کد (در این مثال در فرآیند چاپ متن) باشد، مجبوریم تمام بخشهایی که این قطعه کد را نوشتهایم تغییر دهیم.
به کمک توابع میتوانیم به آسانی یک قطعه کد سازماندهی شده با یک هدف خاص را نوشته و به آن یک اسم بدهیم. از آن پس با صدا زدن اصم تابع، قطعه کد ما اجرا شده و دیگر نیازی به نوشتن دوبارهی کد نخواهد بود.
برای عضویت در دوره ویدئویی میتونید به «دوره جامع پایتون در کالج» مراجعه کنید. با ثبتنام رایگان در دوره، به تمام جلسات اصلی، جلسات تکمیلی، تمرینها، آزمونها و منابع مازاد دسترسی کامل خواهید داشت.
فهرست محتوای آموزش
تعریف تابع در پایتون
توابع در پایتون (Python Functions) دارای ساختار مشخصی هستند. برای این که هر قطعه کد را شناسایی کنیم، باید برای آنها یک اسم در نظر بگیریم. پس تمام توابع دارای یک اسم یکتا هستند.
برای تعریف تابع در پایتون از کلمه کلیدی def قبل از اسم آن استفاده میشود.
فرض کنید میخواهیم یک تابع با نام myprint()
بنویسیم. این تابع یک رشته متنی را در خروجی پایتون چاپ میکند. برای چاپ از print()
استفاده میکنیم.
در جلود نام تابع علامت دو نقطه قرار داده و بدنه تابع را با یک فرورفتگی مینویسیم:
def myprint():
print("Some Text from SabzDanesh.com")
تبریک! شما اولین تابع خود را با زبان پایتون نوشتید! حالا بیایید و یک تابع حرفهای ایجاد کنیم…
برای فراخوانی کردن تابع (یا همان اجرا کردن تابع) فقط کافی است در هر کجای برنامه که خواستیم، نام تابع را صدا زده و اگر لازم است ورودیهای آن را تعریف کنیم.
در خط دوم و دقیقاً پس از تعریف تابع، با قرار دادن یک رشتهی متنی کامنت شده با '''
، میتوانیم توضیحاتی درباره تابع بنویسیم. این توضیحات دلخواه بوده و برای توسعههای بعدی یا هنگام کار با IDEهای برنامهنویسی کاربرد خواهد داشت.
در قطعه کد زیر، من یک توضیح ساده برای تابع خود نوشتهام.
def myprint():
''' This Simple Function Will Print a Static Text '''
print("Some Text from SabzDanesh.com")
ورودی تابع
تابع myprint()
که در اینجا تعریف کردیم، همیشه یک متن ثابت را چاپ میکند. اگر بخواهیم رشتهی مورد نظر را در زمان فراخوانی به تابع بدهیم، باید برای تابع خود ورودی تعریف کنیم.
تعریف ورودی برای تابع پایتون بسیار ساده است. درون پرانتز جلوی نام تابع، نام ورودی را مشخص میکنیم.
اگر میخواستید چند ورودی برای تابع تعریف کنید، میتوان آنها را با علامت ,
از یکدیگر جدا کرد؛ مشابه تابع زیر:
def myFunction( arg1, arg2, arg3 ):
# Some Codes Here
وقتی یک تابع با ورودیهایش صدا زده میشود، مقادیر ورودی درون این متغیرها قرار میگیرند. در نتیجه برای خواندن آن مقادیر در بدنه اصلی تابع از این متغیرها (در این جا arg1
، arg2
و arg3
) کمک میگیریم. (بیشتر بدانید: انواع متغیر در پایتون)
خروجی تابع
برخی از توابع باید یک خروجی به ما بدهند. برای مثال فرض کنید تابع add()
را برای جمع کردن دو عدد تعریف میکنیم. این تابع باید دو ورودی و یک خروجی داشته باشد.
ورودیها همان اعداد مورد نظر برای عملیات جمع بوده و خروجی، حاصل جمع ما خواهد بود.
برای تعریف خروجی تابع در پایتون از کلمه کلیدی return
استفاده میشود. return هر مقداری که در جلویش قرار داشته باشد را به عنوان خروجی تابع به ما باز میگرداند.
def add( a, b ):
return a + b
برای اینکه معنی دقیق خروجی تابع را متوجه شوید، به مثال زیر توجه کنید.
a = input("Enter First Number: ")
b = input("Enter Second Number: ")
result = add(a,b)
print(result)
در قطعه کد بالا از روش گرفتن ورودی در پایتون استفاده کرده و دو مقدار را از کاربر میگیرم. سپس روی آنها محاسباتی کرده و نتیجه را در متغیر result نگهداری میکنیم. در نهایت نیز مقدار را چاپ میکنیم.
همانطور که دیدید، اگر در تعریف تابع add()
از return استفاده نمیشد، با اجرای خط سوم کد بالا، حاصل جمع درون متغیر result
قرار نمیگرفت.
ترفندهای کار با توابع پایتون
تعریف و استفاده از توابع در پایتون به همین سادگی است! در ادامه ۲ ترفند و ۲ نکته برای حرفهایتر شدن در هنگام کار با توابع با شما مطرح میکنم.
ارسال پارامتر با ارجاع (رفرنس)
تمام پارامترهایی که به صورت شئ هستند، در زبان پایتون با ارجاع (Reference) فراخوانی میشوند. برای درک بهتر موضوع، اجازه دهید با یک مثال ادامه دهیم.
فرض کنید تابعی دارید که یک لیست به عنوان ورودی میگیرد. سپس آن را مرتب کرده و در محیط برنامه چاپ میکند.
def list_sort( lst ):
lst.sort()
print( "Sorted List is: ", lst )
حال یک لیست با مقادیر بهمریخته ایجاد کرده و آن را به تابع میدهیم تا نتیجه را به ما نمایش دهد.
mylist = [21, 15, 36, 18, 27]
list_sort( mylist )
خروجی کد بالا چیزی شبیه زیر را به ما خواهد داد:
Sorted List is: [15, 18, 21, 27, 36]
حال اگر مقدار mylist
را چاپ کنیم؛ با کمال تعجب میبینیم که لیست ما که بیرون از تابع بوده هم به صورت صعودی مرتب شده است!
print( mylist )
# [15, 18, 21, 27, 36]
اما چرا ؟
دلیل این اتفاق، ارسال پارامتر با ارجاع است. وقتی که ما تابع را همراه با لیست صدا میزنیم، لیست به عنوان یک شئ و به صورت Reference به بدنه تابع فرستاده میشود. پس هر تغییری که در آن ایجاد کنیم، در لیست اصلی هم اعمال خواهد شد.
تابع لامبدا یا تابع ناشناس در پایتون
توابع ناشناس به صورت معمول و با کلمه کلیدی def تعریف نمیشوند. برای تعریف آنها از کلمه کلیدی lambda استفاده میشود؛ به همین خاطر گاهی اوقات به آنها تابع Lambda هم گفته میشود.
این توابع میتوانند به تعداد نامحدودی ورودی گرفته اما فقط یک خروجی داشته باشند. در حقیقت یک نوع تابع یک خطی هستند.
تعریف توابع ناشناس پایتون به صورت زیر است:
lambda arg1, arg2: arg1 + arg2
در بدنه این تابع (قسمت پس از :
) فقط متغیرهایی که به عنوان ورودی گرفته است قابل شناسایی خواهند بود.
در خط اول کد زیر، ابتدا یک تابع به نام pw
برای به توان رساندن دو عدد تعریف کردهایم. سپس در خط دوم، تابع را فراخوانی کرده و آن را اجرا میکنیم.
pw = lambda a, b: a**b
print( pw(2,3) )
# 8
در حالت کلی، از توابع ناشناس در پایتون برای توابع ساده و یک خطی استفاده میشود. اگر تابع شما بیشتر از یک خط بوده یا قرار است محاسبات زیادی انجام دهید، استفاده از تابع اصلی بهترین انتخاب خواهد بود.
انواع آرگومانهای ورودی تابع در پایتون
در حالت کلی، چهار نوع آرگومان ورودی در توابع پایتون میتوان تعریف کرد.
- آرگومانهای ضروری
- آرگومانهای کلمه کلیدی
- آرگومان با مقدار پیشفرض
- آرگومان با تعداد نامشخص
تعریف آرگومان ضروری برای تابع پایتون
در مثالهایی که تا به اینجای آموزش زدیم، تماماً از آرگومانهای ضروری استفاده شده است. آرگومان ضروری (Required Argument) آرگومانی است که باید در هنگام صدا زده شدن تابع، مقداردهی شود.
مثال تابع add()
برای جمع دو عدد را به خاطر بیاورید.
def add( a, b ):
return a + b
اگر تابع را بدون آرگومان، با یک آرگومان یا با بیش از دو آرگومان صدا بزنیم، با خطای TypeError مواجه خواهیم شد.
add( 5 )
# Traceback (most recent call last):
# File "run.py", line 7, in <module>
# add( 5 )
# TypeError: add() missing 1 required positional argument: 'b'
پس با تعریف چنین آرگومانهایی، کاربر نهایی که در حال استفاده از تابع است، مجبور خواهد بود تا تمام ورودیهای مورد نیاز ما را به تابع ارسال کند؛ در غیر این صورت با پیام خطا مواجه خواهد شد.
تعریف آرگومان کلمه کلیدی
این نوع تعریف آرگومان هیچ فرقی با تعریف عادی ندارد. تفاوت آرگومانهای کلمه کلیدی (Keyword Argument) بر روی نحوه صدا زدن آنهاست.
فرض کنید تابع pw()
در زیر را برای به توان رساندن عدد در اختیار داریم.
def pw( base, power ):
print( base**power )
برای فراخوانی تابع میتوانیم به صورت زیر عمل کنیم.
pw( 2, 3 )
# 8
حالت دیگر (فراخوانی به کمک کلمه کلیدی) همین تابع به صورت زیر است.
pw( base=2, power=3 )
# 8
pw( power=3, base=2 )
# 8
همانطور که در این مثال میبینید، در این نوع فراخوانی، ترتیب ورودیها اهمیتی ندارد. هر ورودی با توجه به نام آن شناخته و مقداردهی خواهد شد.
تعریف آرگومان با مقدار پیشفرض در پایتون
ممکن است بخواهیم یک تابع در پایتون تعریف کنیم که همه یا برخی از آرگومانهای ورودی آن به صورت اختیاری باشد. به این صورت که اگر در هنگام فراخوانی، آن آرگومان مقداردهی نشد، یک مقدار پیشفرض برای آن در نظر بگیریم.
در آخرین مثال، میخواهیم تابع را طوری تغییر دهیم که اگر ورودی توان (power) تعریف نشد، مقدارش برابر 1 شود. برای این کار به صورت زیر عمل میکنیم.
def pw( base, power=1 ):
print( base**power )
به همین سادگی! با قرار دادن علامت مساوی (=
) و تعریف مقدار مورد نظر، یک مقدار پیشفرض برای آرگومان در نظر گرفتهایم.
به کمک این روش عملاً یک آرگومان دلخواه برای تابع پایتون تعریف شده است.
آرگومان ورودی نامحدود برای تابع
در معدود توابعی تعداد ورودیها از قبل مشخص نیست یا به طور دقیقتر، میخواهیم تعداد آرگومانها متغیر باشد. برای تعریف تعداد آرگومان متغیر برای تابع پایتون، از روش آرگومان طول متغیر (Variable-Length Arguments) استفاده میشود.
میخواهیم یک تابع برای محاسبه میانگین اعداد بنویسیم. برای گرفتن ورودی دو روش داریم:
روش اول استفاده از یک لیست برای گرفتن اعداد است و روش دوم استفاده از آرگومان با طول متغیر.
برای تعریف آرگومان با طول متغیر، کافی است قبل از اسم متغیر ورودی، علامت ستاره (*
) قرار دهیم. با این کار تمام ورودیهای بعد از آن متغیر، به صورت تاپل پایتون (tuple) درون آن متغیر قرار گرفته و در بدنهی تابع در دسترس ما خواهند بود.
تابع average()
را به کمک حلقه for پایتون برای محاسبه میانگین تعداد نامشخصی از اعداد را به صورت زیر مینویسیم.
def average( *vals ):
total = 0
for val in vals:
total += val
return total/len(vals)
حال این تابع را با هر تعداد آرگومان ورودی که میخواهیم میتوان صدا زد!
average(5)
# 5.0
average(1, 2, 3, 4, 5)
# 3.0
average(1, 3, 5, 7, 9, 11, 13, 15)
# 8.0
جمعبندی: آموزش توابع در پایتون
در این مقاله آموزشی با نحوه تعریف تابع در پایتون آشنا شدیم. توابع با کلمه کلیدی def تعریف شده و دارای یک نام هستند. همچنین میتوان برای آن آرگومانهای مختلفی به عنوان ورودی تعریف کرد.
فانکشن در پایتون از سه بخش اصلی تشکیل میشود:
- بخش نام و تعریف ورودیها
- بخش بدنه اصلی
- بخش پایانی
در بخش پایانی تابع با کمک return میتوانیم مقادیر محاسبه شدهی نهایی را به عنوان خروجی تابع برگردانیم.
امیدوارم این آموزش برایتان مفید بوده باشه و با زیر و بم فانکشن در پایتون آشنا شده باشید. اگر میخواهید مثالهای بیشتری از توابع پایتون ببینید، به این منبع انگلیسی مراجعه کنید.
این آموزش بخشی از یک آموزش جامع و قدم به قدم در سبز دانش است: دوره رایگان آموزش پایتون
این آموزش برای همیشه رایگانه! میتونید با اشتراکگذاری لینک این صفحه از ما حمایت کنید یا با خرید یه فنجون نوشیدنی بهمون انرژی بدید!
میخوام یه نوشیدنی مهمونتون کنم
سلام در برخی از منابع میبینم که گاهی اوقات جلوی تابع یا کلاس یا دستور if یا هر چیز که آخرش به علامت «:» ختم میشه سه تا نقطه گذاشته میشه
مثلا اینطوری :
خواستم بدونم این سه نقطه چه نقشی داره و چیکار می کنه؟
سلام
این علامت رو اصطلاحاً Ellipsis میگن و وقتی استفاده میشه که یه دادهای رو نداریم یا میخوایم بعداً تکمیلش کنیم. مثلاً یه شرطی نوشتید و میخواید بدنه شرط رو بعداً بنویسید. اگر این بلوک خالی باشه بهتون خطا میده در حالی که میتونید
...
بذارید و ادامه بدید.بهطور مشابه میتونید از کلمه کلیدی pass هم درون این بلوکها استفاده کنید.
من میخوام با تابع برنامه ای بنویسم که فارنهایت رو به سانتیگراد تبدیل کنه
معلممون با def converter گفته اتنا هرچی تلاش میکنم نمیشه ، لطفا کمک کنین
سلام
شما احتمالاً باید یک ورودی بگیرید و محاسباتتون رو روش انجام بدید. پیشنهاد میکنم ابتدا کد تبدیل برای یه متغیر رو بنویسید بعدش اون رو ببرید در قالب یه تابع.
با سلام و سپاس بابت محتوای خوبتون.
در مثال
چرا a , b به صورت استرینگ شناسایی میشوند و وقتی مقدار بهشون میدم به جای جمع عددی ، ab را نمایش میدهد.
سلام
توی پایتون در حالت کلی محدودیتی برای نوع داده متغیرها نداریم. توی مثالی که زدید اگه پارامترها رو عدد بدیم، خروجی عدده و اگه رشته بدیم به صورت رشته رفتار میکنه. مگه اینکه خودتون سعی کنید با تابعی مثل
int()
رشته رو به عدد تبدیل کنید.سلام
من در visual studio نمیتونم از def استفاده کنم .میدونید دلیلش چیه؟
سلام
خطایی میده؟ اگه آره چی؟
چون دلیل خاصی نداره همینطوری نتونید استفاده کنید!
چطور باید تابع رو ذخیره کرد ک بتونیم بعدا فراخوانش کنیم؟
منظورتون از ذخیره چیه؟
وقتی تابعی رو در بخشی از کد مینویسید، بعد از اون بهش دسترسی خواهید داشت و میتونید فراخوانیش کنید.
اگه منظورتون اینه که از فایل حاوی کدِ تابع استفاده کنید، میتونید اون رو به عنوان یه ماژول import کنید. جلسه ماژول از دوره جامع رو ببینید.
سلام
یه ماژول ساختم و میخوام چند تا از توابعش رو غیر فعال کنم یعنی اینکه نشه اون توابع رو ایمپورت کرد و فقط داخل همون کلاس بشه ازشون استفاده کرد( میخوام که کاربر فقط از توابعی که من مشخص کردم بتونه استفاده کنه و بقیه توابع نمایش داده نشدن اما توی خود ماژول از اون توابع بشه استفاده کرد ولی خارج از ماژول و از طریق ایمپورت کردن نشه استفاده کرد)
چه روشی برای انجام این کار وجود داره؟ ممنون
سلام
اگر در حال تعریف کلاس در پایتون هستید، میتونید از سطح دسترسی متدها استفاده کنید. با قرار دادن
__
قبل از اسم متد، طبق قرارداد، اون متد رو خصوصی میکنید که یعنی از بیرون کلاس کسی حق دسترسی نداره.البته یادتون باشه باز هم میشه بهش دسترسی داشت و اگه با زبانهای دیگه مثل جاوا کار کرده باشید، تا جایی که اطلاع دارم نمیشه اجبار گذاشت که اصلاً استفاده نشه. اما دسترسی مستقیم رو برمیدارید.
سلام من میخوام یه لیبل یا چک باکس درست کنم که وقتی توش عدد وارد میکنم بره تو اکسل ذخیره بشه باید چی کنم لطفا کمکم کنید
سلام
برای فیلد و کلاً رابط گرافیکی میتونید از ماژول tkinter کمک بگیرید.
شاید بهتر باشه یه تابع برای ثبت داده در اکسل بنویسید. بعدش مشخص کنید هر وقت دکمهی مثلاً «ثبت» زده شد، این تابع اجرا بشه و مقدار درون فیلد موردنظر رو توی فایل بنویسه.
در مورد اکسل هم آموزش کار با اکسل در پایتون راهنمای خوبی براتونه.
سلام اگر که ما یه پنجره داشته باشیم مثلا به اسم num بعد یک تابع هم باشه که داخلش دکمه لیبل و… باشه و روی num هم اجرا بشه؛بیایم و در یک تابع جدا با toplevel یک پنجره باز کنم بخوام که ان تابعی که گفتم داخلش لیبل هست کامل داخل این پنجره جدید اجرا بشه باید چیکار کنم؟
سلام
داخل tkinter شما باید با شیء مربوط به پنجره کار کنید. (معمولا به نام root شناخته میشه)
میتونید یک تابع برای ایجاد لیبل بسازید که root رو ورودی میگیره. حالا در هر صفحه که نیازه این تابع رو صدا بزنید و پنجره رو بهش بدید.
سلام بک سوال دارم اگر که ما یک تابع را در تکینتر اجرا کنیم و بعد بخوایم از کار بیفته باید از چه دستوری استفاده بشه
سلام
یعنی تابعی دارید که مدام صدا زده میشه؟ چون معمولا اجرای تابع بعد از یه مدتی تموم میشه! نمیدونیم در tkinter برای هدفی که دارید و نوع تابعی که فراخوانی میکنید راهکاری هست یا نه.
اما در حالت کلی شاید بتونید اون تابع رو به شکل یک پردازش با روش چند پردازشی پایتون اجراش کنید. هر وقت بخواین با kill کردن اون پردازش، از کار میوفته.
سلام تابع که اجرا میشه مثلا یک لیبل ساخته میشه میدونم با pack.forget میشه لیبل را حذف کرد ولی میخوام کلا تابع غیرفعال بشه
اگر درست متوجه شده باشیم، چرا کدتون رو طوری تغییر نمیدید که کلا تابع اجرا نشه؟ یا اینکه بدنه تابعی که لیبل رو میسازه تغییر بدید!
سلام مطالب عالی و مفید بود
فقط اینکه متوجه فرق print با return را نفهمیدم؟
سلام
پرینت در لحظهی اجرا، یک یا چند مقدار رو در کنسول چاپ میکنه. اما return در تابع پایتون یک مقدار رو به عنوان خروجی اجرای تابع برمیگردونه. حالا این خروجی رو میتونیم در یه متغیر نگه داریم و بعداً استفادش کنیم، حتی ممکنه اصلاً چاپ نشه!
سلام ایا دستوری هست که بشه یک تابع را kill کرد؟
سلام
منظورتون از kill متوقف کردن اجرای تابع هست؟ تا جایی که اطلاع دارم بهطور عادی نمیتونید این کار رو انجام بدید. مگر اینکه اجرای برنامه رو متوقف کنید یا از تابع خارج بشید.
البته اگر از چندپردازشی یا Threadها استفاده کنید، امکانش هست؛ اصلاح kill هم برای پردازشها استفاده میشه.
الان من یک تابع ساختم که خب با کلیک روی دکمه تابع باز میشه و عدد به سرعت با یک جمع میشه برای ۵ ثانیه، بعد پنج ثانیه برای اینکه تابع از کار بیفته یک تابع دیگه باز میشه و تکست لیبل را هم کامل طبق اخرین عدد تابع تطبیق میده مثلا ۴ خب الان تابع یک فراخوانی نشده ۴ ثابته اما هر صدم ثانیه اون تابع داره اجرا میشه یعنی اگر همین ۴ ثابت شد یدفعه ۵ میاد و دوباره ۴ دوباره ۶ و دوباره ۴ و عدد تابع قبل به اضافه یک میشه و سریع عدد تابع دو اجرا میشه بدون فراخوانی با چند تا روش مثل استفاده از sleep مشکل حل شد ولی خب بعد از تمام شدن زمان مشخص شده اسلیپ دوباره همون اتفاق رخ میده.
به نظر این مسئله به حل مسئله شما برمیگرده. اگر نیازی به اجرای مداوم تابع ندارید، بهتره کدتون رو طوری بنویسید که فقط یکبار اجرا بشه (به جای اجرا در هر صدم ثانیه)
البته همونطور که گفته شد، میتونید از چند پردازشی هم کمک بگیرید که در سایت آموزشش هست؛ ولی روش اول حرفهایتره.
خب الان یکاینکه با چه دستوری بگم بعد از ۸ ثانیه فقط یک بار این تابع را باز کن؟مثل همین توضیحی که دادید؟
این مورد به کد و نحوه پیادهسازی شما بستگی داره! با توضیحی که دادید احتمال میدیم در جایی از کدتون مشخص میکنید که مثلا هر n ثانیه (یا شایدم میلی ثانیه) این تابع اجرا بشه. جایی که این عدد تعریف شده رو باید تغییر بدید.
سلام من اگر که یک متغیری را در تابع بزارم مثل زیر
الان اگر بخوایم اینکارو انجام بدم خب a را پیدا نمیکنه میخوام ببینم چه روشی هست که بدون اجرای تابع بتونه a را پیدا کنه؟میدونم با اجرای تابع مشکل حل میشه ولی میخوام بدون اجرای تابع a را پیدا کنه
سلام
تا خط تعریف متغیر اجرا نشه انگار اون خط کد وجود نداشته! پس غیر از اجرا روش دیگهای ندارید.
البته برای اینکه این کدتون به درستی عمل کنه، نیازه از
global a
در بدنه تابع کمک بگیرید.سلام وقت بخیر من یک سوال دارم اینکه چجوری بیام و تابع رو برای استفاده های بعد ذخیره کنم یعنی اینکه جوری باشه که دفعه های بعد فقط فراخوانی بشه ممنون میشم جواب بدید
سلام
وقتی یک تابع در پایتون تعریف میکنید میتونید از اون بارها و بارها استفاده کنید. اگه منظورتون این هست که کدش رو در فایلهای دیگه برنامه کپی نکنید، میتونید از ماژولبندی کمک بگیرید و در هر فایلی که بهش نیازه، فقط import کنید.
سلام و درود بر شما
مطالبتان خیلی کاربردی و مفید بود.
ممنونم از شما. من تابعی را تعریف کردم که برای 3444 تا سلول با گرفتن دو پارامتر حاصل را برای تک تک سلولها محاسبه میکند. بعد خروجی آن تابع را متوسط مربوطه به تمام سلول ها قرار داده ام(با دستور np.average). حالا میخام این تابع را بر حسب فرکانس رسم کنم. ولی به تعداد فرکانس ها که 1000 هست نمی تونم تابع را اجرا و خروجی بگیرم. خیلی سخته. چیکار کنم بنظرتون؟
بازم ممنون و سپاس از مطالب ارایه شده.
موفق باشید
سلام
ابتدا پیشنهاد میکنیم که مسئله رو به بخشهای کوچیکتر تقسیم کنید و در هر گام تست کنید که نتایج درست باشند.
طبق توضیحی که دادید، خروجی تابع شما میانگین همه سطرهاست. یعنی در هر بار اجرا یک مقدار یکسان میگیرد. برای رسم نمودار قاعدتا این مقدار باید برای سطرهای مختلف متفاوت باشد.
این مورد رو همراه نکته اول بررسی کنید و اگر هنوز چالشی وجود داشت توضیح بدید که ورودی و خروجی تابعتون چی هست و چه انتظاری ازش دارید تا بتونیم بیشتر راهنمایی کنیم.
سلام ببخشید من می خوام برنامه ای بنویسم و به تابعی احتیاج دارم که اگه 0.5 رو وارد می کنم جواب یک بده یا 0.2 می کنم، جواب 1 بده، لطفا راهنمایی کنید.
سلام
میتونید در بدنه تابع از ساختارهای شرط در پایتون استفاده کنید.
خیلی خوب بود
مرسی
شاید اگر یه مثال کوچک از توابع بازگشتی هم میگذاشتید بد نبود. البته نیاز به پیش زمینه داره که ممکنه برخی نداشته باشند
سلام
ممنون از پیشنهادت
آره، چون بحثش نیاز به پیشزمینه داره تصمیم دارم در یه آموزش جداگانه بحثش رو مطرح کنم.
دمت گرم
سلام وقت بخیر، ممنون از توضیحات عالی که دادین. من یک سوال داشتم اینکه می خوام تابعی بنویسیم که یک ارایه ۱۰ تایی و عدد مشخصی(مثلاx) رو از ورودی بگیره و بعد مشخص کنه این عدد داخل ارایه چندبار تکرار شده؟ باید چطوری بنویسمش؟امکانش هست کدش رو برام بفرستین که متوجه بشم؟ممنون
سلام
فکر کنم منظورتون لیست بوده! به کمک یک حلقه میتونید روی اعضای لیست حرکت کنید و اگه مقدارش برابر با x بود، یک عدد رو افزایش بدید. آموزش حلقه for پایتون رو دنبال کنید، فقط به جای name شما عدد دارید.
مرسی واسه آموزش عالیتون
شرطی برای تعداد خط بدنه داریم؟؟
برای بدنه تابع در پایتون محدودیتی ندیدم و بعید میدونم وجود داشته باشه.
یعنی میتونید توابعی یک یا چند خطی که توی همین آموزش میبینید داشته باشید یا تابعی که هزاران خط باشه!
اما در مجموع در برنامه نویسی پیشنهاد میشه توابع رو خیلی طولانی نگیرید و هر تابع برای یک هدف / نتیجه باشه. اینطوری دیباگ راحتتر و کدتون حرفهایتره!