TGViewer
Channel Public Channel
PyCoders (پایتون)

PyCoders (پایتون)

@python_rd

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

■ گروه پایتون:
@programmers_py
Subscribers
4.11K
Photos
979
Videos
148
Links
238

Showing posts older than #2203 · Back to latest

Older Posts 20 shown
Post #2201 532
🔆 اگه تو پروژه‌هات با لیست‌های حجیم کار می‌کنی، استفاده از Generator Expression به‌جای List Comprehension معجزه می‌کنه.

🔹 تفاوتش فقط توی پرانتز گذاشتن به جای براکته، ولی مصرف رم رو بهینه می‌کنه.
مثلاً اگه بنویسی:

data = [i*2 for i in range(1000000)]

🔹 پایتون کل لیست رو یکجا تو حافظه میسازه،

اما اگه بنویسی:
data = (i*2 for i in range(1000000))

🔹فقط یه شیء ژنراتور داری که دیتا رو دونه‌دونه موقع نیاز تولید می‌کنه.

🔹این ترفند کوچیک می‌تونه مصرف رم سرورت رو تو پردازش‌های سنگین از گیگابایت به کیلوبایت کاهش بده.

🐍 @python_rd
  • ❤ 2
  • 👍 1
Post #2200 469
🔆 خیلی وقت‌ها برای ترکیب چند تا دیکشنری هنوز از متد update استفاده میشه، در صورتی که استفاده از عملگر پایپ یعنی | کد رو فوق‌العاده تمیز و خوانا می‌کنه.

🔹 کافیه بنویسی dict3 = dict1 | dict2 تا هر دو ادغام بشن، بدون اینکه دیتای دیکشنری‌های قبلی دستکاری بشه.

🔹مثلاً اگه دو تا دیکشنری تنظیمات داری، به جای کدهای طولانی می‌تونی اینجوری بنویسی:

final_config = default_config | user_config.

🔹اگه کلید تکراری هم وجود داشته باشه، مقدار دیکشنری سمت راست اولویت پیدا می‌کنه و جایگزین میشه. این روش مخصوصاً تو جنگو موقع ترکیب کانتکست‌های تمپلیت به‌شدت کدت رو مدرن‌تر نشون میده.

🐍 @python_rd
Post #2199 480
🔆 توضیح عملی در مورد اینکه سورس کد پایتون که با سی زده شده چه شکلی کار میکنه و انواع و اقسام object ها و module ها و خود interpreter چه شکلی کار میکنه.

🔹github.com/zpoint/CPython-Internals

🐍 @python_rd
  • ❤ 1
Post #2197 543
🔆 کتاب رایگانی از Oreilly درباره الگوهای معماری پرکاربردی است که برای مدیریت پیچیدگی استفاده می‌شوند. این کتاب برای زبان پایتون نگارش شده است.

🔹github.com/cosmicpython/book

🐍 @python_rd
  • 🔥 3
Post #2194 585
🔆 اشتباه رایج در پایتون: لیست‌های "سرسخت"!

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

🔹داستان اینه: پایتون آرگومان پیش‌فرض رو فقط یک‌بار (موقع تعریف تابع) می‌سازه، نه هر بار که تابع رو صدا می‌زنی. نتیجه‌ش این میشه که لیستِ شما بین تمام فراخوانی‌ها مشترک می‌مونه!

🔹 کد غلط (باگ‌دار):
def add_item(val, my_list=[]):
my_list.append(val)
return my_list

print(add_item(1)) # خروجی: [1]
print(add_item(2)) # خروجی: [1, 2] !!!

🔹کد درست (پایتونیک):

همیشه از None استفاده کن و مقداردهی رو داخل تابع انجام بده:

def add_item(val, my_list=None):
if my_list is None:
my_list = []
my_list.append(val)
return my_list

print(add_item(1)) # خروجی: [1]
print(add_item(2)) # خروجی: [2]

🔹 این یه نکته‌ی ساده ولی حیاتیه که کدت رو از یه کدِ آماتوری به یه کدِ حرفه‌ای تبدیل می‌کنه.

🐍 @python_rd
  • ❤ 2
Post #2193 548
🔆 خیلی از برنامه‌نویس‌های تازه‌کار هنوز از روش‌های قدیمی مثل update() یا پیمایش حلقه استفاده می‌کنند. اما توی پایتون ۳.۹ به بعد یک اپراتور جذاب اضافه شده!


🔸 روش قدیمی:

dict1 = {'a': 1, 'b': 2}
dict2 = {'b': 3, 'c': 4}

# روش اول: تغییر روی dict1
dict1.update(dict2)

# روش دوم (پایتون ۳.۵ به بعد):
merged = {**dict1, **dict2}

🔹روش جدید و تمیز (پایتون ۳.۹+):

dict1 = {'a': 1, 'b': 2}
dict2 = {'b': 3, 'c': 4}

# استفاده از اپراتور Union (|)
merged = dict1 | dict2

print(merged)
# Output: {'a': 1, 'b': 3, 'c': 4}

🔹نکته: اگه کلید تکراری وجود داشته باشه (مثل b)، مقدار دیکشنری سمت راست جایگزین میشه.

🐍 @python_rd
  • 👍 4
Post #2192 502
🔆 با این کتابخانه پایتون، با یک خط کد دیتای تلگرام/اینستاگرام رو استخراج کن!


🔹 اگه دنبال یک ابزار پرسرعت و راحت برای Scraping یا جمع‌آوری دیتا از وب هستید، کتابخانه BeautifulSoup و Scrapy رو همه می‌شناسن؛ اما کتابخانه Selectolax سرعتی تا ۱۰ برابر بیشتر ارائه می‌ده!


🔹 چرا Selectolax؟
پردازش HTML با موتور C (فوق‌العاده سریع)
مصرف حافظه بسیار کم نسبت به BeautifulSoup
یادگیری سریع و سینتکس ساده


🔹 نمونه کد ساده:
from selectolax.parser import HTMLParser

html = "<html><body><h1 class='title'>Hello Python!</h1></body></html>"
tree = HTMLParser(html)

node = tree.css_first('h1.title')
print(node.text()) # Output: Hello Python!

🔹به چه دردی میخوره؟
عالی برای پروژه‌های بزرگ جمع‌آوری اطلاعات و ربات‌های تلگرامی که نیاز به پردازش حجم بالای دیتا دارند.

🐍 @python_rd
  • ❤ 1
  • 👍 1
Post #2188 821
🔆 هیچ‌وقت از لیست یا دیکشنری خالی به عنوان مقدار پیش‌فرض (Default Value) توی توابع استفاده نکنید!

🔹وقتی در تعریف یک تابع در پایتون، مقداری مثل یک لیست ([]) یا دیکشنری ({}) را به‌عنوان مقدار پیش‌فرض قرار می‌دهید، پایتون این شیء را فقط یک‌بار (در زمان تعریف تابع و Load شدن کد) در حافظه می‌سازد.

🔹 از آنجایی که لیست‌ها و دیکشنری‌ها قابل تغییر (Mutable) هستند، اگر تابع را چند بار بدون پاس دادن ورودی جدید فراخوانی کنید، پایتون هر بار از همان شیء قدیمی در حافظه استفاده می‌کند. در نتیجه، تغییرات در فراخوانی‌های قبلی، روی فراخوانی‌های بعدی اثر می‌گذارد!

🔹 به جای این کد:
#در این کد، لیست users فقط یک‌بار ساخته می‌شود و تمام کاربران جدید به همان یک لیست اضافه می‌شوند.
def add_user(user_name, user_list=[]):
user_list.append(user_name)
return user_list

# فراخوانی اول
print(add_user("امیر"))
# خروجی: ['امیر']

# فراخوانی دوم (بدون پاس دادن لیست جدید)
print(add_user("سارا"))
# خروجی انتظار می‌رفت ['سارا'] باشه، اما میشه: ['امیر', 'سارا']

🔹 اینجوری بنویس:
#از None به عنوان مقدار پیش‌فرض استفاده می‌کنیم و داخل تابع بررسی می‌کنیم که اگر مقدار None بود، یک لیست جدید ایجاد شود.
def add_user(user_name, user_list=None):
if user_list is None:
user_list = [] # ایجاد لیست جدید در هر بار اجرای تابع

user_list.append(user_name)
return user_list

print(add_user("امیر")) # خروجی: ['امیر']
print(add_user("سارا")) # خروجی: ['سارا'] (کاملاً مستقل و درست!)

🐍 @python_rd
  • 👍 3
Post #2187 698
🔆 اگر توی پایتون تابعی داری که محاسبات سنگین انجام میده یا ورودی‌های تکراری داره، نیازی نیست هر بار از اول اجرا بشه! با استفاده از دکوراتور lru_cache می‌تونی خروجی‌ها رو کَش (Cache) کنی.
from functools import lru_cache

@lru_cache(maxsize=None)
def fibonacci(n):
if n < 2:
return n
return fibonacci(n-1) + fibonacci(n-2)

# اجرای این کد بدون lru_cache زمان زیادی می‌بره.
print(fibonacci(100))

🔹 به چه دردی میخوره؟
این روش برای توابعی عالیه که با ورودی یکسان، همیشه خروجی یکسانی میدن (Pure Functions).

🐍 @pyrhon_rd
  • 👍 1
Post #2183 832
🔆 خروجی این تکه کد پایتون چی میشه؟

def add_item(item, my_list=[]):
my_list.append(item)
return my_list

print(add_item(1))
print(add_item(2))

🔹 گزینه‌ها:

۱) [1] و [2]

۲) [1] و [1, 2]

۳) خطا میده

۴) [2] و [2]

🐍 @python_rd
Post #2181 809
🌐 دکوریتورها (Decorators) توی پایتون مثل یک «روکش» برای توابع هستن. فرض کن می‌خوای به چند تا تابع، قابلیت لاگ‌گیری یا زمان‌سنجی اضافه کنی بدون اینکه کدهای اصلیشون رو تغییر بدی. دکوریتور این کار رو خیلی تمیز برات انجام می‌ده و کدت رو ماژولار نگه می‌داره.

🔹 مثلاً این کدِ یک زمان‌سنج ساده‌ست که نشون می‌ده تابع چقدر طول می‌کشه اجرا بشه:

import time

def timer(func):
def wrapper():
start = time.time()
func()
print(f"زمان اجرا: {time.time() - start:.4f} ثانیه")
return wrapper

@timer
def say_hello():
time.sleep(1)
print("سلام به دنیای پایتون!")

say_hello()

🔹 می‌بینی که چطور با قرار دادن @timer بالای تابع say_hello، بدون اینکه حتی یک خط از منطق داخل خودِ تابع رو دستکاری کنیم، قابلیت زمان‌سنجی بهش اضافه شد. هر جا دیدی یه چیزی با @ شروع می‌شه و بالای تعریف یه تابع نشسته، بدون که داره اون تابع رو با قابلیت‌های جدید "دکور" می‌کنه.

🐍 @python_rd
  • 🔥 2
  • ❤ 1
Post #2180 604
🔆 ۶ تکنیک طلایی برای نوشتن کدهای پایتونی تمیزتر و حرفه‌ای‌تر

🔹۱. استفاده از List Comprehension به جای حلقه‌های طولانی:

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

🔹۲. مدیریت فایل‌ها و کانکشن‌ها با Context Manager:

استفاده از ساختار with خیالتان را از بسته شدن خودکار فایل‌ها، کانکشن‌های دیتابیس و مدیریت منابع در صورت بروز خطا راحت می‌کند.

🔹 ۳. نام‌گذاری بر اساس استانداردهای PEP 8:

نام توابع و متغیرها را با حروف کوچک و زیرخط (snake_case) و نام کلاس‌ها را با حروف بزرگ (PascalCase) بنویسید تا خوانایی پروژه برای هم‌تیمی‌ها حفظ شود.

🔹 ۴. بهره‌گیری از Type Hinting:

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

🔹 ۵. جایگزینی f-string با فرمت‌های قدیمی:

فرمت‌بندی با f-string سریع‌ترین، خواناترین و تمیزترین روش برای الحاق متغیرها به رشته‌هاست.

🔹 ۶. کنترل خطا با ساختار try-except دقیق:

از بلاک‌های کلی except: خودداری کنید و همیشه خطاهای مشخص و احتمالی مثل KeyError یا ValueError را مدیریت کنید تا خطاهای پیش‌بینی‌نشده مخفی نمانند.

🐍 @python_rd
  • ❤ 2
  • ✍ 1
Post #2178 708
🔆 چرا در پایتون به معنای واقعی نمیتوانیم thread داشته باشیم. توی این مقاله جالب بصورت ملموس در مورد GIL در پایتون صحبت میشه.

🔹https://pythonspeed.com/articles/python-gil

🐍 @python_rd
Python⇒Speed When Python can’t thread: a deep-dive into the GIL’s impact Python’s Global Interpreter Lock (GIL) stops threads from running in parallel or concurrently. Learn how to determine impact of the GIL on your code.
Older posts →
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →