| کانال توسعه‌دهندگان پایتون |
6.62K subscribers
38 photos
2 videos
4 files
43 links
⭕️ کانال توسعه‌دهندگان پایتون دولوپیکس

💠 دولوپیکس | جامعه توسعه‌دهندگان ایرانی

💎 @Developix
🚀 Developix.ir

📌 پشتیبانی و تبلیغات:
@DevelopixSupport
Download Telegram
🔶 ماژول itertools توابعی را در اختیار قرار می‌دهد که به شما امکان ایجاد ایتریتورهای مختلف و کارهایی را که معمولا با استفاده از حلقه‌های while و for انجام می‌شوند، به راحتی و با کمترین کد ممکن را می‌دهد.

🔷 این ماژول همچنین کلاس‌هایی دارد که به شما امکان می‌دهد دو یا چند ایتریتور را ترکیب یا فیلتر کنید، ترتیب عناصر را تغییر دهید و بسیاری از عملیات‌های دیگر را بر روی ایتریتورها انجام دهید.

در کل، Itertools یک ابزار بسیار کارآمد و پرکاربرد است که به شما کمک می‌کند تا کد خود را بهینه‌تر کنید و در نتیجه عملکرد آن را بهبود بخشید.


🔸 در ادامه، به توضیح هر یک از اجزای ماژول itertools می‌پردازیم.

#itertools #iterable #iterator #Module

✍🏻 *ژنرال*

💎 Channel: @DevelopixPython
👍4🔥3
🔸 توضیح اجزای ماژول itertools
🔹 پارت یک

🔘 itertools.count(start, step)
🔸 کلاس count یک شمارنده ایجاد می کند که به طور پیش‌فرض از عدد صفر شروع می کند و به طور پیوسته به بی نهایت ادامه پیدا می کند.
🔹این کلاس در پایتون دو پارامتر اختیاری به نام‌های start و step دارد. پارامتر start مشخص می‌کند از کدام عدد باید شروع به تولید دنباله کنیم و پارامتر step تعداد فاصله‌های بین اعداد را تعیین می‌کند.

💡مثال
counter = itertools.count(30, 10)

print(next(counter)) # 30
print(next(counter)) # 40
print(next(counter)) # 50


🔘 itertools.cycle(iterable)
🔸 کلاس cycle یک iterator برای تکرار یک iterable به صورت بی‌نهایت ایجاد می‌کند.
🔹در پایتون، iterable ها نمی‌توانند تکرارپذیر باشند و برای دوباره استفاده از آن‌ها، باید iterable ها را مجدداً تعریف کرد. اما با استفاده از کلاس cycle می‌توانید به سادگی این محدودیت را نادیده بگیرید و iterable را به صورت یک حلقه نامتناهی تکرار کنید.

💡مثال
cycle = itertools.cycle([1, 2])

print(next(cycle)) # 1
print(next(cycle)) # 2
print(next(cycle)) # 1


🔘 itertools.chain(*iterables)
🔸کلاس chain دو یا چند iterable را به عنوان ورودی می‌گیرد و آن‌ها را به صورت پشت سر هم در یک iterator واحد قرار می‌دهد.

💡مثال
iterator = itertools.chain([1, 2, 3], [4, 5, 6])

for item in iterator:
print(item) # 1, 2, ..., 6

#itertools #iterable #iterator #Module

✍🏻 *ژنرال*

💎 Channel: @DevelopixPython
👍3🔥2
🔸 توضیح اجزای ماژول itertools
🔹 پارت دو

🔸 کلاس repeat یک شیء و یک تعداد بار تکرار را به عنوان ورودی می‌گیرد و تکرار این مقدار را به تعداد مشخص شده تولید می‌کند.
🔹اگر به عنوان پارامتر times مقداری داده نشود، شیء داده شده برای بی‌نهایت بار تکرار خواهد شد.

💡مثال
iterator = itertools.repeat("AnyObject", 2)

for item in iterator:
print(item) # AnyObject, AnyObject


🔘 itertools.compress(data, selectors)
🔸کلاس compress یک iterable معمولی و یک iterable از مقادیر بولین با طول برابر (با تعداد مقادیر iterable اولیه) را به عنوان ورودی می‌گیرد و فقط مقادیری را که در مقابل هر مقدار بولینی که در ورودی داده شده است True هستند، در یک iterator تولید می‌کند.


💡مثال
values = ("A", "B", "C")
bools = (True, False, True)

iterator = itertools.compress(values, bools)

for item in iterator:
print(item) # A, C


🔘 itertools.filterfalse(predicate, iterable)
🔸کلاس filterfalse یک iterator و یک تابع پذیرنده گرفته و همانند تابع filter عمل می کند، با این تفاوت که در جایگاه شرط منفی تابع پذیرنده قرار می‌گیرد.

💡مثال
iterator = itertools.filterfalse(
lambda n: n % 2 == 0,
[1, 2, 3, 4, 5]
)

for item in iterator:
print(item) # 1, 3, 5

#itertools #iterable #iterator #Module

✍🏻 *ژنرال*

💎 Channel: @DevelopixPython
👍2🔥2
🔸 توضیح اجزای ماژول itertools
🔹 پارت سه

🔘 itertools.dropwhile(predicate, iterable)
🔸کلاس dropwhile برای حذف مقادیر اول یک iterable استفاده می‌شود. با دادن یک تابع برای بررسی به عنوان پارامتر اول و یک iterable به عنوان پارامتر دوم، این کلاس مقادیر iterable را از اولین مقداری که تابع داده شده برای آن درست نیست شروع به بازگشت می‌دهد.
🔹تفاوت اصلی بین dropwhile و تابع filter این است که dropwhile اجزای iterable را به ترتیب بررسی می‌کند و تا زمانی که شرط تعیین شده توسط تابع شرطی درست باشد، اجزا را رد می‌کند. ولی filter همه اجزای iterable را بررسی می‌کند و فقط اجزایی که شرط تعیین شده را برآورده می‌کنند را برمی‌گرداند.

💡مثال
iterator = itertools.dropwhile(
lambda x: x < 3,
[1, 2, 3, 4, 5]
)

for item in iterator:
print(item) # 3, 4, 5


🔘 itertools.groupby(iterable, key)
🔸کلاس groupby برای گروه‌بندی مقادیر یک iterable بر اساس یک تابع کلید استفاده می‌شود. با دادن یک iterable به عنوان پارامتر اول و یک تابع کلید به عنوان پارامتر دوم، groupby مقادیر iterable را بر اساس مقداری که تابع کلید برای آن‌ها برمی‌گرداند، گروه‌بندی می‌کند.

💡مثال
dicts = [
{"name": "Mona", "age": 21},
{"name": "Mina", "age": 21},
{"name": "Nima", "age": 23},
{"name": "Sina", "age": 23}
]

iterator = itertools.groupby(
dicts,
key=lambda x: x["age"]
)

for key, group in iterator:
print(key, list(group))

# 21 [{'name': 'Mona', 'age': 21}, {'name': 'Mina', 'age': 21}]
# 23 [{'name': 'Nima', 'age': 23}, {'name': 'Sina', 'age': 23}]


🔘 itertools.islice(iterable, start, stop, step)
🔸کلاس islice برای ساخت یک iterator از یک iterable با طول مشخص استفاده می‌شود.
🔹با دادن یک iterable به عنوان پارامتر اول و حداقل، حداکثر و فاصله‌های بین اندیس‌ها به عنوان پارامتر دوم، سوم و چهارم، islice یک iterator از مقادیر iterable با اندیس‌های مشخص شده ایجاد می‌کند.

💡مثال
iterable = range(10)

for i in itertools.islice(iterable, 1, 8, 2):
print(i) # 1, 3, 5, 7

#itertools #iterable #iterator #Module

✍🏻 *ژنرال*

💎 Channel: @DevelopixPython
👍2🔥2
🔸 توضیح اجزای ماژول itertools
🔹 پارت چهار

🔘 itertools.tee(iterable, n)
🔸تابع tee یک iterable را به عنوان ورودی دریافت می‌کند و چندین iterator مستقل از آن ترتیب را بازگردانده می‌کند.

💡مثال
iterators = itertools.tee([1, 2, 3, 4, 5], 3)

for iterator in iterators:
print(tuple(iterator))

# (1, 2, 3, 4, 5)
# (1, 2, 3, 4, 5)
# (1, 2, 3, 4, 5)


🔘 itertools.pairwise(iterable)
🔸کلاس pairwise یک ترکیب از دو مقدار پشت سر هم در یک iterable را برمی‌گرداند. به عبارت دیگر، این کلاس دو تا دو تا مقادیر iterable را در اختیار می‌گذارد و آن‌ها را به صورت زوج‌هایی از مقادیر متوالی برمی‌گرداند.
🔹استفاده از این کلاس، نیازمند استفاده از نسخه پایتون 3.10 یا بالاتر آن است.

💡مثال
for a, b in itertools.pairwise([1, 2, 3, 4]):
print(f"{a} & {b}")

# 1 & 2
# 2 & 3
# 3 & 4


🔘 itertools.batched(iterable, n)
🔸کلاس batched به شما امکان می دهد تا یک iterable را به دسته های مشخص تقسیم کنید و هر دسته را به صورت یک tuple برگردانید.
🔹استفاده از این کلاس، نیازمند استفاده از نسخه پایتون 3.12 یا بالاتر آن است.

💡مثال
iterator = itertools.batched([1, 2, 3, 4, 5, 6], 2)

for batch in iterator:
print(batch) # (1, 2), (3, 4), (5, 6)

#itertools #iterable #iterator #Module

✍🏻 *ژنرال*

💎 Channel: @DevelopixPython
👍4🔥2
💠 واسط گرافیکی یا GUI امکان ارتباط بین کاربر و دستگاه را فراهم می‌کند و شامل عناصری مانند buttonها، menuها، text boxها و سایر المان‌های گرافیکی است. این واسط به کاربر اجازه می‌دهد تا با استفاده از موس و کیبورد به راحتی با دستگاه ارتباط برقرار کند و کارهای متفاوتی انجام دهد.

💠 در کل، GUI برای افزایش راحتی در استفاده از دستگاه‌های مختلف بسیار مهم است و تقریباً در تمامی دستگاه‌های الکترونیکی مانند تلفن همراه، تبلت، لپ‌تاپ و کامپیوتر به کار می‌رود.

💠 در ادامه، به معرفی چند واسط گرافیکی پرکاربرد و پاسخ به سوال‌های مرتبط با این حوزه می‌پردازیم.

#GUI #Tkinter #PyQt #Kivy
#واسطه_گرافیکی #طراحی_واسط_کاربری

✍🏻 *ژنرال*

💎 Channel: @DevelopixPython
👍5🔥3
💠 معرفی مختصر چند واسطه گرافیکی محبوب در پایتون

🔰 تی‌کی‌اینتر (Tkinter): این واسط گرافیکی به صورت پیش فرض در پایتون موجود و استفاده از آن بسیار ساده و آسان است. با استفاده از این واسط گرافیکی می‌توانید برنامه‌های کاربردی مختلفی را طراحی کنید.

🔰 پای کیوتی (PyQt): این واسط گرافیکی بر پایه Qt توسعه داده شده و به‌مراتب قدرتمندتر از Tkinter است. PyQt بسیاری از المان‌های گرافیکی Qt را پوشش می‌دهد و برنامه‌نویسان امکان استفاده از آن‌ها را دارند.

🔰 دبلیوایکس‌پایتون (wxPython): این واسط گرافیکی بر پایه wxWidgets توسعه داده شده است و برای ساخت برنامه‌هایی که به طور خاص برای پلتفرم‌های مختلف طراحی شده‌اند، بسیار مناسب است.

🔰 پای‌جی‌تی‌کی (PyGTK): این واسط گرافیکی بر پایه GTK+ توسعه داده شده است و اجازه می‌دهد تا برنامه‌هایی با ظاهری مدرن و کاربر پسند طراحی کنید.

🔰 کیوی (Kivy): کیوی هم یک واسط گرافیکی برای پایتون است که از OpenGL، موسیقی و صدا و تشخیص لمس پشتیبانی می‌کند. با Kivy می‌توانید برنامه‌هایی با تجربه کاربری خوب و متنوعی برای سیستم‌عامل‌های مختلف بنویسید.

محبوب‌ترین واسطه‌های گرافیکی در پایتون ذکر شده‌اند؛ با این حال، واسطه‌های گرافیکی دیگری نیز وجود دارند و هر کدام از این واسط‌ها دارای قابلیت‌ها و ویژگی‌های خاص خود هستند.

#GUI #Tkinter #PyQt #Kivy #PyGTK #wxPython
#واسطه_گرافیکی

✍🏻 *ژنرال*

💎 Channel: @DevelopixPython
👍5🔥3
💠 بررسی مزایا و معایب واسطه‌های گرافیکی محبوب در پایتون

🔰Tkinter
🔺نقاط قوت:
پیاده‌سازی آسان
قابلیت استفاده بر روی تمامی سیستم عامل‌ها
سرعت بالا در اجرای برنامه
مناسب برای پروژه‌های کوچک و ساده

🔻نقاط ضعف:
محدودیت در طراحی واسط کاربری پیشرفته
کیفیت ظاهری پایین‌تر نسبت به واسط‌های گرافیکی پیشرفته‌تر
عدم پشتیبانی از ویژگی‌هایی مانند انیمیشن و حرکت

🔰PyQt & PySide
🔺نقاط قوت:
امکان طراحی واسط کاربری پیشرفته و حرفه‌ای
پشتیبانی از ویژگی‌هایی مانند حرکت، انیمیشن
پشتیبانی از انواع مدیا و قابلیت اجرا بر روی پلتفرم‌های مختلف

🔻نقاط ضعف:
نیاز به یادگیری و استفاده از ساختارهای پیچیده
وزن بالای نرم‌افزار در مقایسه با واسط‌های گرافیکی سبک‌تر

🔰Kivy
🔺نقاط قوت:
قابلیت طراحی واسط کاربری دینامیک و تجربه کاربری خوب
پشتیبانی از تشخیص لمس و ویدئو
کاملاً متن‌باز و قابل استفاده بر روی انوع سیستم‌عامل‌های مختلف

🔻نقاط ضعف:
نیاز به تجربه برنامه‌نویسی با OpenGL
بزرگ بودن بسته نرم‌افزاری
پایین‌بودن سرعت اجرا در مقایسه با واسط‌های دیگر

🔰PyGTK
🔺نقاط قوت:
قابلیت طراحی واسط کاربری بصری
پشتیبانی از چندسکویی و اسکریپتینگ ساده
متن‌باز و قابل استفاده بر روی سیستم‌عامل‌های مختلف

🔻نقاط ضعف:
پشتیبانی از تشخیص لمس ضعیف
دارا بودن بسته نرم‌افزاری بزرگتر نسبت به واسط‌های دیگر

🔰wxPython
🔺نقاط قوت:
قابلیت طراحی واسط کاربری بصری
پشتیبانی از چندسکویی و بسیاری از ابزارهای اضافی
انعطاف‌پذیری و قابلیت گسترش بالا
متن‌باز و قابل استفاده بر روی سیستم‌عامل‌های مختلف

🔻نقاط ضعف:
دارا بودن بسته نرم‌افزاری بزرگتر نسبت به واسط‌های دیگر
سرعت پایین‌تر نسبت به واسط‌های دیگر

🔰PyGame
🔺نقاط قوت:
سادگی استفاده و آموزش برای مبتدیان
ارائه ابزارهایی برای طراحی بازی و کار با صدا و تصویر
امکان استفاده از کتابخانه‌های اضافی برای افزایش قابلیت‌ها

🔻نقاط ضعف:
محدودیت در قابلیت‌های گرافیکی نسبت به برخی واسط‌های گرافیکی دیگر
عدم پشتیبانی از اجزای چندرسانه‌ای پیشرفته مانند ویدئو و سه بعدی
پرفرمنس پایین‌تر در برخی موارد پردازشی و بازی‌های سنگین

#GUI #Tkinter #PyQt #Kivy #PyGTK #wxPython #PyGame
#واسطه_گرافیکی

✍🏻 *ژنرال*

💎 Channel: @DevelopixPython
👍9🔥2
💠 پاسخ به برخی از سوالات مطرح، درمورد واسط های گرافیکی در پایتون

برای طراحی واسط گرافیکی دسکتاپ، کدام گزینه بهتر است؟
✔️ در این مورد، wxPython و PyQt انتخاب‌های مناسبی هستند. هر دو این واسط های گرافیکی قابلیت طراحی رابط های کاربری پیشرفته، اتصال به پایگاه داده‌ها و استفاده از ویدئو و صوت را دارا هستند. بین این دو واسط گرافیکی، PyQt امکانات پیشرفته‌تری را برای طراحی رابط کاربری دارد و در عین حال کدنویسی آن نیز کمی ساده‌تر است. ولی با این حال، wxPython نیز در طراحی رابط‌های کاربری پیشرفته موفق عمل کرده و کدنویسی آن نیز بسیار قابل فهم است و قابلیت توسعه دارد.


کدام گزینه برای طراحی واسط گرافیکی در اندروید مناسب‌تر است؟
✔️ برای طراحی واسط گرافیکی اندروید در پایتون، می‌توانید از Kivy و BeeWare استفاده کنید. هر دو ابزار قابلیت ایجاد برنامه‌های اندرویدی را در پایتون دارند و به شما این امکان را می‌دهند که با استفاده از زبان پایتون، برنامه‌های اندرویدی با ظاهری زیبا و کارایی بالا طراحی کنید.
اما در مقایسه با Flutter که به زبان Dart نوشته شده است، این ابزارها دارای قابلیت‌ها و محبوبیت کمتری در بین توسعه‌دهندگان هستند. بنابراین در صورت امکان استفاده از واسط‌های ذکر شده را به عنوان انتخاب دوم در نظر بگیرید.


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


برای کسی که به‌تازگی در این راه قدم گذاشته است، کدام گزینه را پیشنهاد می‌دهید؟
✔️ برای این‌منظور PyQt گزینه مناسبی است. پای‌کیوتی واسط گرافیکی کارآمدی است که برای شروع کار با آن مستندات جامع و ویدئوهای آموزشی فراوانی وجود دارد. به علاوه، PyQt از Qt پشتیبانی می‌کند که یکی از قدرتمندترین چارچوب‌های واسط گرافیکی است و می‌توانید از ابزارهای طراحی واسط گرافیکی Qt به طور مستقیم در PyQt استفاده کنید.

#GUI #PyQt #wxPython
#واسطه_گرافیکی #واسطه_گرافیکی_اندروید #پاسخ_سوالات

✍🏻 *ژنرال*

💎 Channel: @DevelopixPython
👍5🔥2
📌 بررسی متدهای کاربردی ماژول random

🔶 ماژول random چیست؟
🔸 شرایطی را فرض کنید که نیاز دارید یک مقدار تصادفی تولید کنید و یا یک انتخاب رندوم داشته باشید. در این شرایط می‌توانید از ماژول random استفاده کنید.

🔻 مثلاً قرار هست یک بازی سنگ کاغذ قیچی بنویسید. اینجا تعداد حالت‌هایی که سیستم می‌تواند داشته باشه سه حالت [ سنگ(1)، کاغذ (2)، قیچی(3) ] است. مقادیر تولید شده توسط سیستم باید تصادفی باشد و قرار نیست یک عدد ثابت داده شود و سیستم هر دفعه مثلاً سنگ یا قیچی بدهد. در همچین شرایطی می‌توانیم از random استفاده کنیم.

🔶 متدها :

🔻 random()

▫️ متد random یک عدد float در بازه 0 و 1 تولید می‌کند که هیچ وقت برابر با 1 نیست.
import random
random.random()

🔻 randint()
▫️ متد randint دو پارامتر دریافت می‌کند که بازه تولید عدد تصادفی را مشخص می‌کند.
import random
random.randint(1, 50)
🔺 نکته‌ای که وجود داره اینه که اینجا بین 1 و 50 عدد رندوم تولید می‌کند که شامل عدد 50 هم می‌باشد.

🔻 randrange()
▫️ متد randrange سه پارامتر دریافت می‌کند. شروع (start)، پایان (end) و گام (step) مشخص می کند.

import random

random.randrange(50)
random.randrange(50, 100, 5)

🔺 در این کد یک عدد در بازه 0 تا 50 تولید می‌شود که تعداد گام برابر با یک است. در خط بعد یک عدد در بازه 50 تا 100 تولید می‌شود که تعداد گام برابر با 5 است.

🔺 shuffle
▫️ متد shuffle هم یک متد جالب و کاربردی است که برای به‌هم ریختن ترتیب اجزای دیتاست استفاده می‌شود. مثلا یک لیست به این ترتیب داریم.
[2, 5, 6, 3, 5]
وقتی روی لیست متد shuffle را فراخوانی می‌کنیم مقادیر داخل لیست به طور رندوم جابجا می‌شوند. مثلاً اینجا 2 اول لیست قرار داره ممکن وقتی به‌هم میریزد در ایندکس آخر قرار بگیرد.

import random

numbers = [1, 2, 3, 4]
random.shuffle(numbers)

🔺 نکته‌ای که وجود دارد این است که متد shuffle خروجی ندارد.

🔷 ادامه متدها را در پست بعدی بررسی می‌کنیم ...

#random #randint #randrange #shuffle

👤 black@root

💎 Channel: @DevelopixPython
👍7🔥1