جستجو
Generic filters
Filter by دسته‌ها
آموزش هوش مصنوعی و انواع آن
آموزش‌های پایه‌ای هوش مصنوعی
اصول هوش مصنوعی
پایتون و ابزارهای یادگیری عمیق
کتابخانه‌ های یادگیری عمیق
یادگیری با نظارت
یادگیری بدون نظارت
یادگیری تقویتی
یادگیری عمیق
یادگیری نیمه نظارتی
آموزش‌های پیشرفته هوش مصنوعی
بینایی ماشین
پردازش زبان طبیعی
پردازش گفتار
چالش‌های عملیاتی
داده کاوی و بیگ دیتا
رایانش ابری و HPC
سیستم‌‌های امبدد
علوم شناختی
دیتاست
اخبار
رسانه‌ها
آموزش پردازش زبان طبیعی
آموزش علوم داده
اینفوگرافیک
پادکست
ویدیو
رویدادها
کاربردهای هوش مصنوعی
کسب‌و‌کار
تحلیل بازارهای هوش مصنوعی
کارآفرینی
هوش مصنوعی در ایران
هوش مصنوعی در جهان
 با ۵ ویژگی پیشرفته زبان پایتون و نحوه استفاده از آن‌ها آشنا شوید

با ۵ ویژگی پیشرفته زبان پایتون و نحوه استفاده از آن‌ها آشنا شوید

زبان پایتون ، زبان فوق‌العاده‌ای است. این زبان تفسیری و استفاده از آن آسان است. اما آیا شما از تمامی ویژگی‌ها و قابلیت‌های این زبان برنامه نویسی استفاده می‌کنید؟

معمولاً ویژگی‌های پیشرفته تمامی زبان‌های برنامه‌نویسی را با تکرار و تمرین مداوم می‌توان کشف کرد. فرض کنید در حال کدنویسی پروژه‌ پیچیده‌ای هستید و در Stack Overflow به دنبال چیزی می‌گردید و در نهایت برای حل مشکل خود به راه‌حلی می‌رسید که از یکی از ویژگی‌های پیشرفته زبان پایتون استفاده می‌کند و شما از وجود چنین قابلیتی اطلاع نداشتید.

در ادامه به معرفی ۵ ویژگی پیشرفته و پرکاربرد زبان پایتون می‌پردازیم و علاوه بر آن نحوه استفاده از آن‌ها را شرح می‌دهیم.

ویژگی های پیشرفته زبان پایتون

۱) توابع لامبدا

تابع لامبدا Lambda functions، تابعی کوچک و بی نام است. دلیل این‌که این توابع بی‌نام هستند این است که بدون نام تعریف می‌شوند.

توابع پایتون اغلب با فرمت ” Def نام_ تابع ()” تعریف می‌شوند اما توابع لامبدا را به صورت بی‌نام استفاده می‌کنیم و نامی برای آن تعیین نمی‌کنیم.  دلیل این‌که برای این توابع نام تعیین نمی‌کنیم این است که از توابع لامبدا برای اجرای نوعی عبارت  (Expression) و عملیات‌ ساده استفاده می‌شود که برای انجام آن‌ها نیازی به تعریف کامل یک تابع نیست.

تابع لامبدا می‌تواند آرگومان‌های متعددی داشته باشد اما فقط می‌تواند یک عبارت (Expression) داشته باشد:

۱	x = lambda a, b : a * b
۲	print(x(5, 6) # prints '30'
۳	
۴	x = lambda a : a*3 + 3
۵	print(x(3)) # prints '12'
۶	

استفاد از این تابع بسیار آسان است. با استفاده از این تابع توانستیم بدون تعریف کامل یک تابع، بخشی از یک عملیات ریاضی ساده را انجام دهیم. تابع لامبدا یکی از چندین ویژگی زبان پایتون است که استفاده از این زبان برنامه‌نویسی را آسان می‌کند.

۲) نگاشت‌ها

Map() یکی از توابع توکار پایتون است که از آن برای اجرای تابعی بر روی توالی‌ای از عناصر، از قبیل یک فهرست و یا دیکشنری استفاده می‌شود. این تابع بسیار آسان است و مهم‌تر آن‌که روشی خوانا برای اجرای چنین عملیاتی است.

۱	def square_it_func(a):
۲	return a * a
۳	
۴	x = map(square_it_func, [1, 4, 7])
۵	print(x) # prints '[1, 16, 49]'
۶	
۷	def multiplier_func(a, b):
۸	return a * b
۹	
۱۰	x = map(multiplier_func, [1, 4, 7], [2, 5, 8])

۱۱	print(x) # prints '[2, 20, 56]' 

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

[irp posts=”۱۲۷۲۳″]

۳) فیلتر کردن

تابع توکار Filter شباهت زیادی به تابع Map دارد. به بیانی دیگر،  Filter نیز همانند Map تابعی بر روی یک توالی (لیست، مجموعه‌ چندتایی Tuple، دیکشنری) اجرا می‌کند. تفاوت کلیدی میان این دو قابلیت در این است که filter()  فقط عناصری را باز می‌گرداند که تابع اعمال شده آن‌ها را با مقدار True باز گردانده است.

۱	# Our numbers
۲	numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
۳	
۴	# Function that filters out all numbers which are odd
۵	def filter_odd_numbers(num):
۶	
۷	    if num % 2 == 0:
۸	        return True
۹	    else:
۱۰	        return False
۱۱	
۱۲	filtered_numbers = filter (filter_odd_numbers, numbers)
۱۳	
۱۴	print(filtered_numbers)
۱۵	# filtered_numbers = [2, 4, 6, 8, 10, 12, 14]
۱۶	

در کد فوق True یا False بودن هر یک از عناصر موجود در فهرست را بررسی کردیم و علاوه بر آن تابع filter()  تمامی عناصری که مقدار آن‌ها True بوده را باز گردانده است. از این تابع می‌توانیم برای ساخت فهرست بازگشتی پس از رعایت دو شرط لازم استفاده کنیم.

پیشرفته زبان پایتون

۴) Itertools

ماژول Itertools زبان پایتون مجموعه‌ای از ابزارها است که تکرارکننده‌ها Iterators را مدیریت و کنترل می‌کند. تکرارکننده نوعی داده است که می‌توان از آن در یک حلقه for از جمله لیست­‌ها، مجموعه‌های چندتایی tuples و دیکشنری‌ها dictionaries استفاده کرد.

استفاده از توابع در ماژول Itertools این امکان را برای شما فراهم می‌کند تا عملیات‌های تکرارکننده زیادی انجام دهید که در حالت عادی برای انجام آن‌ها به توابع چندخطی و خلاصه لیست‌های List comprehension پیچیده نیاز دارید. برای آشنایی بیشتر با ماژول فوق‌العاده Itertools به مثال مقابل توجه کنید:

۱	from itertools import *
۲	
۳	# Easy joining of two lists into a list of tuples
۴	for i in izip([1, 2, 3], ['a', 'b', 'c']):
۵	    print i
۶	# ('a', 1)
۷	# ('b', 2)
۸	# ('c', 3)
۹	
۱۰	# The count() function returns an interator that 
۱۱	# produces consecutive integers, forever. This 
۱۲	# one is great for adding indices next to your list 
۱۳	# elements for readability and convenience
۱۴	for i in izip(count(1), ['Bob', 'Emily', 'Joe']):
۱۵	    print i
۱۶	# (۱, 'Bob')
۱۷	# (۲, 'Emily')
۱۸	# (۳, 'Joe')    
۱۹	
۲۰	# The dropwhile() function returns an iterator that returns 
۲۱	# all the elements of the input which come after a certain 
۲۲	# condition becomes false for the first time. 
۲۳	def check_for_drop(x):
۲۴	    print 'Checking: ', x
۲۵	    return (x > 5)
۲۶	
۲۷	for i in dropwhile(should_drop, [2, 4, 6, 8, 10, 12]):
۲۸	    print 'Result: ', i
۲۹	
۳۰	# Checking: 2
۳۱	# Checking: 4
۳۲	# Result: 6
۳۳	# Result: 8
۳۴	# Result: 10
۳۵	# Result: 12
۳۶	
۳۷	
۳۸	# The groupby() function is great for retrieving bunches
۳۹	# of iterator elements which are the same or have similar 
۴۰	# properties
۴۱	
۴۲	a = sorted([1, 2, 1, 3, 2, 1, 2, 3, 4, 5])
۴۳	for key, value in groupby(a):
۴۴	    print(key, value), end=' ')
۴۵	    
۴۶	# (۱, [۱, ۱, ۱])
۴۷	# (۲, [۲, ۲, ۲]) 
۴۸	# (۳, [۳, ۳]) 
۴۹	# (۴, [۴]) 
۵۰	# (۵, [۵]) 

۵) Generator

تابع Generator این امکان را برای ما فراهم می‌کند تا تابعی را که همانند تکرارکننده عمل می‌کند را تعریف کنیم؛ به عبارت دیگر می‌توان از این تابع در حلقه for استفاده کرد. استفاده از این تابع، کد را تا حد زیادی آسان می‌کند و نسبت به حلقه for فضای کمتری از حافظه را اشغال می‌کند.

فرض کنید می‌خواهیم اعداد ۱ تا ۱۰۰۰ را با هم جمع کنیم. بخش اول کد مقابل نشان می‌دهد که چگونه می‌توانید با استفاده از یک حلقه for این عملیات ریاضی را انجام دهید.

[irp posts=”۹۰۵۲″]

این کد در مواردی ‌که فهرست کوچک باشد، برای مثال اگر فهرست شامل ۱۰۰۰ عنصر باشد، عملکرد مناسبی دارد. اما زمانی‌که فهرست بسیار بزرگ باشد، برای مثال اگر فهرست از ۱ میلیارد عدد اعشار تشکیل شده باشد، کارایی این کد تضعیف می‌شود. در این حالت اگر از یک حلقه for استفاده کنیم، این فهرست بزرگ که حجم بالایی از حافظه را اشغال می‌کند، در حافظه (memory) ذخیره می‌شود –همه افراد که RAM نامحدودی در اختیار ندارد تا بتوانند چنین چیزی را بر روی آن ذخیره کنند. تابع range() در زبان پایتون همین عملیات را انجام می‌دهد و فهرست را در حافظه ایجاد می‌کند.

بخش دوم این کد با استفاده از یک generator پایتون، عمل جمع کردن لیست هایی از اعداد را به نمایش می‌گذارد. Generatorها فقط در صورتی عناصر را ایجاد و در حافظه ذخیره می‌کنند که به آن‌ها نیاز داشته باشند. به عبارت دیگر اگربخواهید ۱ میلیارد عدد با ممیز اعشاری Floating point number ایجاد کنید، فقط یکبار آن­ها را در حافظه ذخیره خواهید کرد. تابع xrange() در زبان پایتون برای ایجاد لیست­ها از generatorها استفاده می‌کند.

نکته مهم: اگر عناصر بسیار زیادی دارید و تصمیم دارید فهرستی برای آن‌ها ایجاد کنید، از generator و یا تابع xrange استفاده کنید. به ویژه در مواردی که سیستمی دارید که تا حد زیادی به حافظه متکی است، برای مثال تلفن همراه و یا رایانش پیشرفته، به کار‌گیری این روش بسیار سودمند خواهد بود.

از سوی دیگر اگر تصمیم دارید این فهرست را چندین بار تکرار کنید و فهرست به اندازه‌ای کوچک است که در حافظه جای می‌گیرد، بهتر است از حلقه‌های for و یا تابع range  استفاده کنید. دلیل انجام چنین کاری این است که هر بار که به generatorها و xrange دسترسی پیدا می‌کنید، آن‌ها مقادیر لیست را از نو ایجاد می‌کنند، درصورتی که تابع range لیستی ثابت است و اعداد صحیح برای دسترسی سریع از قبل در حافظه قرار دارند.

۱	# (۱) Using a for loop
۲	numbers = list()
۳	
۴	for i in range(1000):
۵	    numbers.append(i+1)
۶	
۷	total = sum(numbers)
۸	
۹	# (۲) Using a generator
۱۰	def generate_numbers(n):
۱۱	    num = 0
۱۲	    while num < n:
۱۳	        yield num
۱۴	        num += 1
۱۵	total = sum(generate_numbers(1000))
۱۶	
۱۷	# (۳) range() vs xrange()
۱۸	total = sum(range(1000 + 1))
۱۹	total = sum(xrange(1000 + 1))

 

مقاله ما چطور بود؟

میانگین امتیاز / ۵. تعداد ارا :

مطالب پیشنهادی مرتبط

اشتراک در
اطلاع از
0 نظرات
بازخورد (Feedback) های اینلاین
مشاهده همه دیدگاه ها
Please enable JavaScript in your browser to complete this form.