Syntax | سینتکس
3K subscribers
420 photos
111 videos
35 files
391 links
Download Telegram
استفاده از الگوی طراحی Singleton در پایتون:

class SingletonMeta(type):
"""
The Singleton class can be implemented in different ways in Python. Some
possible methods include: base class, decorator, metaclass. We will use the
metaclass because it is best suited for this purpose.
"""

_instances = {}

def __cal__(cls, *args, **kwargs):
"""
Possible changes to the value of the `__init__` argument do not affect
the returned instance.
"""
if cls not in cls._instances:
instance = super().__call__(*args, **kwargs)
cls._instances[cls] = instance

return cls._instances[cls]


برای استفاده به کلاس مورد نظر SingletonMeta رو به عنوان متاکلاس معرفیش می کنید:

class Connect(metaclass=SingletonMeta):
...


#Python

@Syntax_fa
👍5🤨1
در این ویدیو از پلی‌لیست نکته ها و ترفندهای پایتون به بررسی مدیریت پکیج‌های پایتون با استفاده از Poetry پرداختیم.
Poetry یک ابزار مدیریت وابستگی‌ها و پروژه‌های پایتون است که به شما کمک می‌کند تا به راحتی و به صورت مدرن با محیط توسعه وابسته‌های پروژه‌های خود را مدیریت کنید. این ابزار امکاناتی مانند مدیریت و نصب وابستگی‌ها، ساخت محیط‌های مجازی، مدیریت ورژن‌ها و ... را فراهم می‌کند.
در این ویدیو ابتدا برخی از مشکلات pip را بررسی و سپس Poetry را نصب و با آن یک پروژه ساختیم و در نهایت پروژه خودر PyPi منتشر کردیم

Link : https://youtu.be/UX5O7Z0aQb8

playlist: https://www.youtube.com/playlist?list=PLJ9zDGwhhsBwZcy2wRRBNqXZP8wf--TmF

@microfrontend_ir

#poetry #python

@Syntax_fa
👍21🔥1
Syntax | سینتکس
استفاده از الگوی طراحی Singleton در پایتون: class SingletonMeta(type): """ The Singleton class can be implemented in different ways in Python. Some possible methods include: base class, decorator, metaclass. We will use the metaclass because…
یه نکته در خصوص الگوی singleton در پایتون بگم:

استفاده از singleton تو پایتون یکی از bad practice ها به حساب میاد.
بجاش پیشنهاد میشه از قابلیت function cache استفاده کنیم.

مثلا:
@functools.cache
def the_chess_board():
return ChessBoard()
اگه هنوزم میخواید با کلاس single instance رو مدیریت کنید از این روش استفاده کنید:

class ChessBoard:
def __init__(self):
...

@classmethod
@functools.cache
def the_board(cls):
return cls()
لینک مقاله:
https://nedbatchelder.com/blog/202204/singleton_is_a_bad_idea.html

#singleton #python

@Syntax_fa
👍4
پراکندگی موقعیت شغلی بک اند پایتون

هر چی تیره تر یعنی بیشتره

منبع:
https://workhunty.com/job-blog/where-is-the-best-place-to-be-a-programmer/Django/

#python

@Syntax_fa
👍12🤣4🔥1
How to use annotations in python.pdf
699.1 KB
نحوه استفاده از Annotations در پایتون

خوب خیلی ها اسم annotations به گوششون نخورده و یا اینکه مستقیما باهاش درگیر نشدن بلکه بیشتر جا ها دیدن ولی پاکش کردن! مثل اوایل کار من.
واقعیت اینه که اگر یه تعریف ساده ازش بخوام بکنم ،Annotation در واقع meta-data ای هستش که شما به بخش های کد اضافه میکنید تا خطایابی و درک کد بهتر بشه.
اما مدل های مختلفی از annotation ها رو ممکنه ببینید که یکسری روی متغیر ها، کلاس ، توابع ، ورودی و خروجی ها ، توضیحات کلی و ... قرار میگیرن.
همچنین در زمان ایجاد داکیومنتری هم خیلی کاربرد داره و بیش از پیش استفاده میشه.
معمولا از زمانی که شما با روابط شئ گرایی درگیر میشید شروع بهش شناخت annotation ها و موارد استفاده اون می کنین.

از انواع اون میشه به موارد زیر اشاره کرد:

- Type Annotations
- Custom Metadata Annoations
- Parameter Annotations
- Module Annotations
- Attribute Annotations
- Return Annotations

link

#python #annotation

@Syntax_fa | @Syntax_fa_group
👍5
سوال پایتونی:
در مورد مفهوم Context Managers در Python توضیح دهید. چگونه می‌توان یک Context Manager سفارشی ایجاد کرد؟ یک مثال عملی ارائه دهید.

Context Managers
در Python ابزارهایی برای مدیریت منابع (مانند فایل‌ها، قفل‌ها و اتصالات پایگاه داده) هستند. آن‌ها اطمینان حاصل می‌کنند که منابع به درستی آزاد شوند، حتی در صورت رخ دادن خطا یا استثنا.

برای ایجاد یک Context Manager سفارشی، شما باید یک کلاس ایجاد کنید که دو متد __enter__ و __exit__ را پیاده‌سازی می‌کند. متد __enter__ باید منبع را آماده کند و آن را برگرداند. متد __exit__ باید منبع را آزاد کند و با استثناهای رخ داده به درستی برخورد کند.

مثال عملی: فرض کنید می‌خواهیم یک Context Manager برای باز کردن و بستن فایل‌ها بنویسیم:

class FileManager:
def __init__(self, filename, mode):
self.filename = filename
self.mode = mode

def __enter__(self):
self.file = open(self.filename, self.mode)
return self.file

def __exit__(self, exc_type, exc_value, traceback):
self.file.close()

with FileManager('data.txt', 'w') as f:
f.write('Hello, World!')


در این مثال، FileManager یک کلاس Context Manager است. متد __enter__ فایل را باز می‌کند و شیء فایل را برمی‌گرداند. متد __exit__ فایل را می‌بندد، حتی اگر استثنایی در بلوک with رخ دهد.

#python #context_manager

@Syntax_fa
👍5🔥1
زمان و حافظه خود را با list comprehension، map و generator نجات دهید!
سلام رفقا!

سطح = مقدماتی

امروز می خواهم به شما 3 ابزار قدرتمند در پایتون را معرفی کنم که می توانند به شما در صرفه جویی در زمان و حافظه هنگام کار با لیست ها و داده ها کمک کنند:

1. list comprehension:

این ابزار به شما امکان می دهد لیست های جدیدی را با کدی کوتاه و خوانا از لیست های موجود بسازید.

به جای استفاده از for loop های سنتی، می توانید از list comprehension برای فیلتر کردن، نگاشت و تغییر عناصر لیست به طور همزمان استفاده کنید.

مثال:
numbers = [1, 2, 3, 4, 5]
squared_numbers = [n * n for n in numbers]
print(squared_numbers) # Output: [1, 4, 9, 16, 25]

بااحتیاط از کد استفاده کنید.
2. map:

این تابع به شما امکان می دهد یک عملکرد را به هر عنصر لیست اعمال کنید و نتیجه را به عنوان یک لیست جدید برگردانید.

map برای تغییر یا نگاشت داده ها در یک لیست به طور یکسان مفید است.

مثال:
def double(x):
return x * 2

numbers = [1, 2, 3, 4, 5]
doubled_numbers = list(map(double, numbers))
print(doubled_numbers) # Output: [2, 4, 6, 8, 10]

بااحتیاط از کد استفاده کنید.
3. generator:

ژنراتورها به شما امکان می دهند به طور متوالی مقادیر را از یک مجموعه داده تولید کنید بدون اینکه کل مجموعه داده را به یکباره در حافظه نگه دارید.

این امر آنها را برای کار با مجموعه داده های بزرگ که ممکن است در حافظه شما جا نشوند، ایده آل می کند.

مثال:
def even_numbers(start, end):
for n in range(start, end + 1):
if n % 2 == 0:
yield n

for even_number in even_numbers(1, 20):
print(even_number) # Output: 2 4 6 8 10 12 14 16 18 20

بااحتیاط از کد استفاده کنید.
با استفاده از این 3 ابزار قدرتمند، می توانید کد خود را کارآمدتر و مختصرتر کنید و در عین حال از حافظه و زمان خود به طور موثرتر استفاده کنید.

درضمن یه نکته رو خودم اضافه کنم که استفاده از list comprehension و map
نسبت به حلقه‌های for معمولی در پایتون ، ۲ الی ۳ برابر در زمان و حافظه صرفه جویی می‌کنه!
منبع:
Learn web development with python

[amirhossein]

#python

@Syntax_fa
👍11🔥3😁1
سوال پایتونی:
1. توضیح دهید که چگونه می‌توان از decorators در Python استفاده کرد. یک مثال عملی از کاربرد decorators ارائه دهید.

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

مثال عملی: فرض کنید می‌خواهیم یک decorator بنویسیم که زمان اجرای یک تابع را لاگ می‌کند:

import time

def log_execution_time(func):
def wrapper(*args, **kwargs):
start_time = time.time()
result = func(*args, **kwargs)
end_time = time.time()
print(f"Function {func.__name__} took {end_time - start_time} seconds to execute.")
return result
return wrapper

@log_execution_time
def my_function(n):
result = 0
for i in range(n):
result += i
return result

my_function(10000000)


در این مثال، log_execution_time یک decorator است که یک تابع دیگر را می‌پذیرد (در اینجا my_function) و یک تابع جدید با نام wrapper را برمی‌گرداند که تابع اصلی را فرا می‌خواند و زمان اجرای آن را لاگ می‌کند.

#python #decorators

@Syntax_fa
👍11🔥21
سوال پایتونی:

چگونه می‌توان در Python از ویژگی‌های Dataclasses برای ایجاد کلاس‌های ساده‌تر و قابل مدیریت‌تر استفاده کرد؟ یک مثال ارائه دهید.

Dataclasses
در Python یک راه ساده برای تعریف کلاس‌های حاوی داده‌ها (data classes) فراهم می‌کنند. این ویژگی در Python 3.7 معرفی شد و از کد تکراری برای تعریف متدهای init، repr، eq و دیگر متدهای پایه‌ای جلوگیری می‌کند.

برای استفاده از Dataclasses، کافی است از دکوراتور @dataclass روی تعریف کلاس استفاده کنید. سپس می‌توانید فیلدهای کلاس را با انواع داده مختلف تعریف کنید.

مثال:

from dataclasses import dataclass

@dataclass
class Person:
    name: str
    age: int
    email: str = None

person1 = Person("Alice", 30, "[email protected]")
person2 = Person("Bob", 25)

print(person1)  # Output: Person(name='Alice', age=30, email='[email protected]')
print(person2)  # Output: Person(name='Bob', age=25, email=None)

print(person1 == person2)  # Output: False


در این مثال، Person یک dataclass است که سه فیلد name، age و email دارد. فیلد email یک مقدار پیش‌فرض None دارد. با استفاده از @dataclass، Python به طور خودکار متدهایی مانند init و repr را برای ما ایجاد می‌کند.

Dataclasses همچنین امکانات دیگری مانند مقایسه اشیاء، هش‌پذیری، و گزینه‌های پیشرفته‌تر را نیز فراهم می‌کنند.

#python

@Syntax_fa
👍121
Lambda Expression

توضیح: Lambda expressions، که به عنوان anonymous functions (توابع بی‌نام) نیز شناخته می‌شوند، توابعی هستند که بدون نام تعریف می‌شوند و برای عملیات‌های کوچک و ساده مورد استفاده قرار می‌گیرند. در پایتون، این توابع با استفاده از کلمه کلیدی lambda تعریف می‌شوند.

کار با Lambda Expression در پایتون

lambda arguments: expression


- arguments: آرگومان‌هایی که تابع می‌پذیرد.
- expression: عبارتی که ارزیابی می‌شود و نتیجه آن برگردانده می‌شود.

مثال ساده

در این مثال، یک تابع لامبدا تعریف می‌کنیم که دو عدد را با هم جمع می‌کند:

add = lambda x, y: x + y

result = add(3, 4)
print(result) # Output: 7


در اینجا، تابع لامبدا دو آرگومان x و y می‌پذیرد و مقدار x + y را برمی‌گرداند.

استفاده از Lambda Expressions در توابع higher-order

توابع higher-order توابعی هستند که یک یا چند تابع را به عنوان آرگومان می‌پذیرند و یا تابعی را برمی‌گردانند. Lambda expressions معمولاً در توابع higher-order مانند map(), filter(), و reduce() استفاده می‌شوند.

مثال با map()

تابع map() یک تابع را روی هر آیتم از یک iterable اعمال می‌کند:

numbers = [1, 2, 3, 4, 5]

doubled = map(lambda x: x * 2, numbers)

print(list(doubled)) # Output: [2, 4, 6, 8, 10]


مثال با filter()

تابع filter() آیتم‌هایی را که تابع به عنوان True ارزیابی می‌کند، فیلتر می‌کند:

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

evens = filter(lambda x: x % 2 == 0, numbers)

print(list(evens)) # Output: [2, 4, 6, 8, 10]


مثال با reduce()

تابع reduce() از ماژول functools (توضیح اینکه دقیقا چطور عمل میکنه رو خواستید بگید تو یه پست دیگه بگم):

from functools import reduce

numbers = [1, 2, 3, 4, 5]

product = reduce(lambda x, y: x * y, numbers)

print(product) # Output: 120


#lambda_expression #python #filter #map #reduce

@Syntax_fa
👍6