نوشته‌ها

پایتون

آموزش پایتون_ تابع lambda(ناشناس)

train-your-python-part-14-more-advanced-lists-lambda-and-lambda-operators.w1456

lambda

یک روش دیگر برای تعریف تابع استفاده از توابع ناشناس که با عنوان توابع  lambda شناخته میشوند.  در این قسمت شما نحوه تعریف و استفاد از آن را یاد خواهید گرفت. در پایتون تابع ناشناس تابعی هست که بدون نام تعریف میشود. در حالی که توابع معمولی با استفاده از کلمه کلیدی def تعریف میشوند، توابع ناشناس با استفاده از کلمه کلیدی lambda  تعریف میشوند. به خاطر همین توابع ناشناس توابع lambda   نامیده میشوند.

Lambda, filter, reduce and map

 

عملگر(اپراتور) Lambda

 

خوبه بدونید عده ای از لامبدا میترسن، عده ای آن را دوست دارند و عده ای هم از آن متنفرن. مطمئنا در پایان این مطلب عاشق آن میشوید. عملگر لامبدا یا تابع lambda راهی برای ایجاد توابع ناشناس کوچک است، یعنی توابع بدون نام. این توابع چیز بی ممصرفی هستن یعنی فقط در جایی که تعریف میشوند مورد استفاده قرار میگیرند. توابع لامبدا به طور عمده در ترکیب با توابع ()filter(), map و reduce() استفاده میشوند. ویژگی لامبدا به دلیل تقاضای برنامه نویسان Lisp به پایتون اضافه شد.

سینتکس کلی یک تابع لامبدا بسیار ساده است:

lambda argument_list: expression.

argument list   شامل یک لیست از آرگومان جدا شده با کاما است و expression عبارت محاسباتی با استفاده از این آرگومانها است. شما می توانید تابع را به یک متغیر اختصاص دهید تا نامی به آن بدهید.

مثال زیر از یک تابع لامبدا، مجموع دو آرگومان را به دست می آورد:

>>> f = lambda x, y : x + y >>> f(1,1) 2

تابع map()

فایده و مزیت عملگر لامبدا زمانی که در ترکیب با map() استفاده می شود، دیده می شود. map () یک تابع با دو آرگومان  است:

r = map(func, seq)

اولین آرگومان func نام یک تابع وآرگومان دوم seq یک دنباله (به عنوان مثال یک لیست) است.

map()، تابع func روی تمام عناصر seg اعمال میکند. . map() یک لیست جدید را با عناصری که توسط func تغییر می کنند، باز می گرداند.

>>> def fahrenheit(T):
return ((float(9)/5)*T + 32)

>>> def celsius(T):
return (float(5)/9)*(T-32)

>>> temp = (36.5, 37, 37.5,39)

>>> F = map(fahrenheit, temp)

>>> C = map(celsius, F)

در مثال بالا ما از لامبدا استفاده نکرده ایم. با استفاده از لامبدا،  ما نباید تعریف و نام توابع فارنهایت () و سانتیگراد () را داشته باشیم.

>>> Celsius = [39.2, 36.5, 37.3, 37.8]
>>> Fahrenheit = map(lambda x: (float(9)/5)*x + 32, Celsius)
>>> print (Fahrenheit)
[۱۰۲٫۵۶, ۹۷٫۷۰۰۰۰۰۰۰۰۰۰۰۰۰۳, ۹۹٫۱۴۰۰۰۰۰۰۰۰۰۰۰۰۱, ۱۰۰٫۰۳۹۹۹۹۹۹۹۹۹۹۹۹]
>>> C = map(lambda x: (float(5)/9)*(x-32), Fahrenheit)
>>> print (C)
[۳۹٫۲۰۰۰۰۰۰۰۰۰۰۰۰۰۳, ۳۶٫۵, ۳۷٫۳۰۰۰۰۰۰۰۰۰۰۰۰۰۴, ۳۷٫۷۹۹۹۹۹۹۹۹۹۹۹۹۹۷]
>>> 

map () را می توان به بیش از یک لیست اعمال کرد. لیست ها باید طول یکسان داشته باشند. map () تابع lambda خود را به عناصر لیست های استدلال اعمال می کند، یعنی ابتدا برای عناصر با شاخص ۰، و سپس به عناصر با شاخص اول، تا زمانی که n-th index رسیده است، اعمال می شود:

>>> a = [1,2,3,4]
>>> b = [17,12,11,10]
>>> c = [-1,-4,5,9]
>>> map(lambda x,y:x+y, a,b)
[۱۸, ۱۴, ۱۴, ۱۴]
>>> map(lambda x,y,z:x+y+z, a,b,c)
[۱۷, ۱۰, ۱۹, ۲۳]
>>> map(lambda x,y,z:x+y-z, a,b,c)
[۱۹, ۱۸, ۹, ۵]

ما در مثال بالا می توانیم ببینیم پارامتر x مقادیر خود را از لیست a می گیرد، در حالی که y مقدار آن را از b و z از لیست c دریافت می کند.

Filtering

تابع (filter(function, list  یک روش عالی برای فیلتر کردن تمام عناصر یک لیست ارائه می دهد که عملکرد تابع True را برمیگرداند. تابع( filter(f,l  به عنوان اولین پارامتر، تابع f را  نیاز دارد. f یک مقدار بولین، یعنی درست یا غلط، را برمیگرداند. این تابع به هر عنصر لیست l اعمال خواهد شد. تنها اگر f return True عنصر لیست را در لیست نتیجه قرار دهد.

>>> fib = [0,1,1,2,3,5,8,13,21,34,55]
>>> result = filter(lambda x: x % 2, fib)
>>> print (result)
[۱, ۱, ۳, ۵, ۱۳, ۲۱, ۵۵]
>>> result = filter(lambda x: x % 2 == 0, fib)
>>> print( result)
[۰, ۲, ۸, ۳۴]
>>>

 Reducing a List

توسط تابع (reduce(func, seq،  تابع func  روی دنباله seq پیوسته  اعمال میکند و آن را کاهش میدهد.

>>> reduce(lambda x,y: x+y, [47,11,42,13])
۱۱۳
https://www.python-course.eu/lambda.php

https://www.python-course.eu/lambda.php

 

آموزش پایتون-توابع

تابع یکی از مهمترین مفهومات در ریاضیات است. تابع ساده زیر را در نظر بگیرید:

y=x+1

function(x)=x+1

https://www.mathsisfun.com/sets/function.html

https://www.mathsisfun.com/sets/function.html

x به عنوان ورودی (پارامتر)  و y به عنوان خروجی در نظر گرفته میشود.

تابع در برنامه نویسی هم بر گرفته ازهمین مفهوم است. در واقع ما وقتی یک برنامه چند خطی ساده مینویسیم متوجه اهمیت تابع نمیشویم ولی وقتی تعداد خطوط زیاد شد،  همچنین تکرار برخی خطوط بالا رفت، این کدهای تکراری را با عنوان یک تابع با نام خاص میسازیم. و هر کجای برنامه و به هر تعداد که خواستیم استفاده میکنیم، همچنین به برنامه نویسان اجازه اشتراک گذاشتن کد ها را می دهد. سپس متوجه اهمیت آن میشویم. 

توابع تحت نام های مختلف در زبان های برنامه نویسی شناخته می شوند، برای مثال : زیرمجموعه ها(subroutines)، روال ها(routines)، روش ها(procedures)، روش ها(methods) یا زیر برنامه ها(subprograms).

تابع در پایتون با با کلمه کلیدی def تعریف و بعد فراخوانی میشود. تابع از سه بخش تشکیل میشود:

نام، پارامتر، بدنه:

 

 

>>> def add(x,y):
	return x+y
>>> add(2,3)
۵
>>>

تابعی برای جمع دو عدد تعریف میکنیم:

در خط اول توسط def نامی برای تابع انتخاب و تعریف شده است. سپس دو پارامتر به عنوان ورود ی تعریف میکنیم . : را میگذاریم و اینتر را میزنیم. سپس تابع را توسط نام آن  و انتخاب دو آرگومان فراخوانی میکنیم. اینتر را زده و نتیجه را مشاهده میکنیم.

کاربرد تابع در tkinter

وقتی کد زیر اجرا میشود پنجره ای حاوی باتن را مشاهده میکنیم که قراره با کلیک روی آن رویدای که نمایش پیام است را ببینیم و این رویداد توسط فراخوانی تابع انجام میگیرد.

 

import tkinter.messagebox
from tkinter import *
top = Tk()
def helloCallBack():
   messagebox.showinfo( "Hello Python", "Hello World")
B = Button(top, text ="Hello", command = helloCallBack,bg='red', fg='white')
B.pack()
top.mainloop()

45

جمع دو عدد با ماژول tkinter

 

import tkinter.messagebox
import sys
from tkinter import *
top = Tk()
top.configure( bg = 'yellow' )
def sum():
    arg1= a.get()
    arg2 = b.get()
    t=arg1+arg2
    messagebox.showinfo("مجموع ۲ عدد",t )

a=IntVar()
b=IntVar()
Label(top, text="عدد اول",bg='yellow').grid(row=0)
Label(top, text="عدد دوم ",bg='yellow').grid(row=1)
e1 = Entry(top,textvariable = a).grid(row=0, column=1)
e2 = Entry(top,textvariable = b).grid(row=1, column=1)

B = Button(top, text ="نتيجه", command = sum,bg='red', fg='white').grid(row=2, column=1)

top.mainloop()

jam

طراحی با Turtles

طراحی با لاکپشت ها

 turtle

turtle

 

لاک پشت(Turtles) در پایتون شبیه لاکپشت واقعی است. لاکپشت به عنوان یک حیوان خزنده بسیار آرام حرکت میکند و خانه اش را بر پشتش حمل میکند.

در دنیای پایتون لاکپشت یک فلش کوچک و سیاه است که به آرامی در صفحه حرکت میکند.لاکپشت یک راه خوب برای یادگیری برخی از اصول گرافیک کامپیوتری است، بنابراین در این قسمت ، ما از لاک پشت پایتون برای رسم اشکال، منحنی ها و خطوط ساده استفاده می کنیم. در واقع ما با لاکپشت طراحی یک بعدی را تجربه میکنیم.

استفاده از ماژول Turtles

ماژول

 

import turtle

https://www.slideshare.net

 

ماژول در پایتون فایلی هست که در آن متغیر، تابع و کلاس تعریف و توسط برنامه های دیگر استفاده میشود.

ماژول  مورد بحث ما Turtles هست. با استفاده از این ماژول، با چگونگی کشیدن تصاویر بر روی  صفحه نمایش  توسط کامپیوتر ها آشنا میشویم.این ماژول یک راهی برای برنامه نویسی گرافیک برداری است که اساسا فقط با خطوط ساده، نقاط و منحنی طراحی شده است. 

برای استفاده از Turtles، آن  را به پایتون import میکنیم:

import turtle

 

import کردن یک ماژول، به پایتون میگه که ما میخواهیم از این ماژول استفاده کنیم. 

ایجاد بوم نقاشی(Canvas)

بعد از وارد کردن ماژول، نیاز به یک بوم نقاشی یک فضای خالی برای کشیدن روی آن داریم مثل بوم نقاشی یک هنرمند

برای این کار تابع pen را از ماژول Turtles صدا میزنیم که به صورت خودکار بوم نقاشی را ایجا میکند

بنابراین کد زیر را در شل پایتون وارد میکنیم :

t = turtle.Pen()

در آموزش های بعدی مبحث شی گرایی را کامل توضیح میدهیم ولی به صورت خلاصه توضیحی در مورد شی t میدهم:

هر شی از تعدادی ویژگی ها و تابع درست میشه که توسط تابع ها کار های خاصی انجام میده مثلا همین شی لاک پشت به سمت جلو عقب حرکت میکنه یا جهتش را عوض میکنه و…

همچین توسط  ویژگی ها رنگ قلم یا ضخامت اون و… عوض میشه

برای اینکه شی ما به متدها(توابع)  و ویژگی ها دسترسی داشته باشد از علامت . استفاده میکنیم.

با این کد ما یک بوم نقاشی ساختیم که درون آن یک لاکپشت قرار دارد و آن را در متغیری به نام t میریزیم. لاک پشت میشه همون مداد ما که باهاش نقاشی میکشم.

 

11

 

 

 

12