برنامه نویسی

اجازه ندهید کد به شما موهای خاکستری بدهد! 15 عملکرد پایتون برای نجات عمر توسعه شما

Summarize this content to 400 words in Persian Lang

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

1. all – بررسی کنید که آیا همه عناصر دارای شرایط هستند یا خیر

معرفی تابع

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

مثال های استفاده

بررسی کنید که آیا همه اعداد یک لیست مثبت هستند یا خیر:
numbers = [1, 2, 3, 4] result = all(num > 0 for num in numbers)
print(result) # Output: True

بررسی کنید که آیا تمام کاراکترهای یک رشته حروف الفبا هستند یا خیر:
text = “Hello”
result = all(char.isalpha() for char in text)
print(result) # Output: True

بررسی کنید که آیا همه مقادیر در یک فرهنگ لغت بزرگتر از 10 هستند:
data = {‘a’: 11, ‘b’: 12, ‘c’: 9}
result = all(value > 10 for value in data.values())
print(result) # Output: False

موارد استفاده

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

2. any – بررسی کنید که آیا هر یک از عناصر مطابق با شرایط هستند

معرفی تابع

این any تابع برای بررسی اینکه آیا حداقل یک عنصر در یک تکرار (مانند یک لیست یا تاپل) با یک شرط معین مطابقت دارد یا خیر استفاده می شود. اگر هر عنصری باشد True، برمی گردد True; در غیر این صورت باز می گردد False. اگر تکرار خالی باشد، برمی گردد False.

مثال های استفاده

بررسی کنید که آیا اعداد بزرگتر از 10 در لیست وجود دارد یا خیر:

numbers = [1, 5, 8, 12] result = any(num > 10 for num in numbers)
print(result) # Output: True

بررسی کنید که آیا یک رشته دارای کاراکتر خاصی است یا خیر:

text = “hello”
result = any(char == ‘h’ for char in text)
print(result) # Output: True

بررسی کنید که آیا مقادیری در یک فرهنگ لغت هیچ کدام نیستند:

data = {‘name’: ‘Alice’, ‘age’: None, ‘location’: ‘NY’}
result = any(value is None for value in data.values())
print(result) # Output: True

بررسی کنید که آیا یک تاپل حاوی عناصر غیر صفر است یا خیر:

tup = (0, 0, 1, 0)
result = any(tup)
print(result) # Output: True

موارد استفاده

بررسی وضعیت: هنگامی که می خواهید بررسی کنید که آیا حداقل یک عنصر در مجموعه ای از داده ها دارای شرایط خاصی است یا خیر، any ابزار بسیار کارآمدی است به عنوان مثال، بررسی اینکه آیا ورودی کاربر با استانداردهای خاصی مطابقت دارد یا اینکه مقادیری در لیست وجود دارد که معیارهای خاصی را برآورده می کند.

users = [‘admin’, ‘guest’, ‘user1’] if any(user == ‘admin’ for user in users):
print(“Admin is present”)

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

اعتبار سنجی داده ها: هنگام مدیریت فرم ها یا پایگاه داده ها، بررسی کنید که آیا فیلدهای داده خالی یا نامعتبر هستند.

fields = {‘name’: ‘John’, ’email’: ”, ‘age’: 30}
if any(value == ” for value in fields.values()):
print(“Some fields are empty!”)

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

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

data_points = [3.2, 5.6, 0.0, -1.2, 4.8] if any(x

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

ملاحظات

any بلافاصله پس از مواجهه با اولی باز می گردد True عنصر و به بررسی عناصر باقی مانده ادامه نمی دهد، بنابراین دارای یک مزیت عملکردی است. any اغلب با عبارات مولد استفاده می شود و به آن اجازه می دهد تا مجموعه داده های بزرگ را بدون مصرف حافظه زیاد مدیریت کند. any و all یک جفت توابع بولی بسیار کاربردی هستند که می توانند به سرعت بسیاری از منطق کدهای بررسی شرایط را ساده کنند.

3. argparse – مدیریت آرگومان های خط فرمان

معرفی تابع

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

مثال های استفاده

کنترل پارامترهای خط فرمان اساسی:
import argparse
parser = argparse.ArgumentParser(description=”This is a demo script”)
parser.add_argument(‘–name’, type=str, help=’Enter your name’)
args = parser.parse_args()
print(f”Hello, {args.name}!”)

مثال اجرا:
python script.py –name Alice

خروجی:
Hello, Alice!

تنظیم مقادیر پیش فرض و آرگومان های مورد نیاز:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument(‘–age’, type=int, required=True, help=’Enter your age’)
parser.add_argument(‘–city’, type=str, default=’Unknown’, help=’Enter your city’)
args = parser.parse_args()
print(f”Age: {args.age}, City: {args.city}”)

مثال اجرا:
python script.py –age 30 –city Beijing

خروجی:
Age: 30, City: Beijing

پشتیبانی از آرگومان های بولی:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument(‘–verbose’, action=’store_true’, help=’Provide verbose output if set’)
args = parser.parse_args()
if args.verbose:
print(“Verbose mode enabled”)
else:
print(“Default mode”)

مثال اجرا:
python script.py –verbose

خروجی:
Verbose mode enabled

مدیریت چندین آرگومان خط فرمان:
import argparse
parser = argparse.ArgumentParser(description=”Calculator program”)
parser.add_argument(‘num1’, type=int, help=”First number”)
parser.add_argument(‘num2’, type=int, help=”Second number”)
parser.add_argument(‘–operation’, type=str, default=’add’, choices=[‘add’, ‘subtract’], help=”Choose operation type: add or subtract”)
args = parser.parse_args()
if args.operation == ‘add’:
result = args.num1 + args.num2
else:
result = args.num1 – args.num2
print(f”Result: {result}”)

مثال اجرا:
python script.py 10 5 –operation subtract

خروجی:
Result: 5

موارد استفاده

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

ملاحظات

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

4. collections.Counter – کلاس پیشخوان

معرفی تابع

Counter یک زیر کلاس فرهنگ لغت در داخل است collections ماژول، در درجه اول برای شمارش استفاده می شود. رخدادهای هر عنصر را در یک شیء تکرارپذیر، با عناصر به عنوان کلید و شمارش آنها به عنوان مقادیر، شمارش می کند و چندین عملیات شمارش راحت را ارائه می دهد.

مثال های استفاده

شمارش فرکانس کاراکترها در یک رشته:
from collections import Counter
text = “hello world”
counter = Counter(text)
print(counter) # Output: Counter({‘l’: 3, ‘o’: 2, ‘h’: 1, ‘e’: 1, ‘ ‘: 1, ‘w’: 1, ‘r’: 1, ‘d’: 1})

شمارش وقوع عناصر در یک لیست:
items = [‘apple’, ‘banana’, ‘apple’, ‘orange’, ‘banana’, ‘apple’] counter = Counter(items)
print(counter) # Output: Counter({‘apple’: 3, ‘banana’: 2, ‘orange’: 1})

شناسایی رایج ترین عناصر:
counter = Counter(items)
most_common = counter.most_common(2)
print(most_common) # Output: [(‘apple’, 3), (‘banana’, 2)]

به روز رسانی پیشخوان:
counter.update([‘banana’, ‘orange’, ‘apple’])
print(counter) # Output: Counter({‘apple’: 4, ‘banana’: 3, ‘orange’: 2})

عملیات جمع و تفریق شمارنده:
counter1 = Counter(a=3, b=1)
counter2 = Counter(a=1, b=2)
result = counter1 + counter2
print(result) # Output: Counter({‘a’: 4, ‘b’: 3})
result = counter1 – counter2
print(result) # Output: Counter({‘a’: 2})

موارد استفاده

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

ملاحظات

شمارش های منفی حفظ می شوند اما هنگام استفاده از روش هایی مانند most_common نمایش داده نمی شوند.می توانید از عملگرهایی مانند +، -، &، و | استفاده کنید برای انجام عملیات جمع، تفریق، اتحاد و تقاطع در چندین شی Counter.

5. collections.defaultdict – دیکشنری با مقادیر پیش فرض

معرفی تابع

defaultdict یک زیر کلاس در پایتون است collections ماژولی که دیکشنری با مقادیر پیش فرض ارائه می کند. وقتی به کلیدی که وجود ندارد دسترسی پیدا می کنید، a را پرتاب نمی کند KeyError اما در عوض یک مقدار پیش فرض تعیین شده توسط یک تابع کارخانه ارائه شده در ایجاد فرهنگ لغت را برمی گرداند. این امر نیاز به بررسی دستی برای حضور کلید را کاهش می دهد و کد را با حذف مدیریت خطاهای غیر ضروری ساده می کند.

مثال های استفاده

ایجاد دیکشنری با مقادیر پیش فرض:
from collections import defaultdict

# Default value is 0
dd = defaultdict(int)
dd[‘a’] += 1
print(dd) # Output: defaultdict(, {‘a’: 1})

شمارش کاراکترها در یک رشته:
text = “hello world”
char_count = defaultdict(int)
for char in text:
char_count[char] += 1
print(char_count) # Output: defaultdict(, {‘h’: 1, ‘e’: 1, ‘l’: 3, ‘o’: 2, ‘ ‘: 1, ‘w’: 1, ‘r’: 1, ‘d’: 1})

گروه بندی عناصر در یک لیست بر اساس طول:
words = [“apple”, “banana”, “pear”, “kiwi”, “grape”] word_groups = defaultdict(list)
for word in words:
word_groups[len(word)].append(word)
print(word_groups) # Output: defaultdict(, {5: [‘apple’, ‘pear’, ‘grape’], 6: [‘banana’], 4: [‘kiwi’]})

با استفاده از یک تابع پیش فرض کارخانه سفارشی:
def default_value():
return “default_value”

dd = defaultdict(default_value)
print(dd[“nonexistent_key”]) # Output: “default_value”

استفاده تودرتو از defaultdict:
# Creating a nested defaultdict
nested_dict = defaultdict(lambda: defaultdict(int))
nested_dict[‘key1’][‘subkey’] += 1
print(nested_dict) # Output: defaultdict( at 0x…>, {‘key1’: defaultdict(, {‘subkey’: 1})})

موارد استفاده

اجتناب از بررسی دستی کلید: نیاز به بررسی وجود یک کلید در فرهنگ لغت را کاهش می دهد، به ویژه در جمع آوری داده ها یا زمانی که نیاز به مقداردهی اولیه است.

تجمیع داده ها و شمارش: کارهای مدیریت داده ها را آسان تر و کارآمدتر می کند، مانند شمارش یا گروه بندی.

ساده سازی ساختارهای تو در تو پیچیده: با مدیریت خودکار کلیدهای از دست رفته در هر سطحی از ساختار، مدیریت آسان تر ساختارهای داده تودرتو را امکان پذیر می کند.

ملاحظات

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

6. dataclasses.dataclass – کلاس های داده سبک

معرفی تابع

معرفی شده در پایتون 3.7، dataclass یک دکوراتور است که ایجاد کلاس های داده را با تولید خودکار روش هایی مانند ساده می کند __init__، __repr__، و __eq__. این نیاز به کد دیگ بخار را کاهش می دهد و به حفظ پایه های کد تمیز و قابل مدیریت کمک می کند.

مثال های استفاده

ایجاد یک کلاس داده ساده:
from dataclasses import dataclass

@dataclass
class Person:
name: str
age: int

person = Person(name=”Alice”, age=30)
print(person) # Output: Person(name=”Alice”, age=30)

تنظیم مقادیر پیش فرض:
@dataclass
class Person:
name: str
age: int = 25

person = Person(name=”Bob”)
print(person) # Output: Person(name=”Bob”, age=25)

تولید روش های مقایسه:
@dataclass
class Person:
name: str
age: int

person1 = Person(name=”Alice”, age=30)
person2 = Person(name=”Alice”, age=30)
print(person1 == person2) # Output: True

انجماد کلاس‌های داده (تغییرناپذیر کردن ویژگی‌ها):
@dataclass(frozen=True)
class Person:
name: str
age: int

person = Person(name=”Alice”, age=30)
try:
person.age = 31 # This will raise an error as the data class is frozen
except AttributeError as e:
print(e)

مدیریت انواع داده های پیچیده:
from dataclasses import dataclass
from typing import List

@dataclass
class Team:
name: str
members: List[str]

team = Team(name=”Developers”, members=[“Alice”, “Bob”, “Charlie”])
print(team) # Output: Team(name=”Developers”, members=[‘Alice’, ‘Bob’, ‘Charlie’])

موارد استفاده

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

ایجاد اشیاء تغییرناپذیر: با انجماد کلاس های داده، اطمینان حاصل می شود که اشیاء پس از ایجاد تغییرناپذیر هستند، مشابه تاپل ها اما با فیلدهای نامگذاری شده.

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

ملاحظات

کلاس های داده را می توان با تنظیم تغییرناپذیر ساخت frozen=True، باعث می شود نمونه ها بیشتر شبیه تاپل های نامگذاری شده رفتار کنند.
این field() تابع را می توان برای کنترل دانه ای بیشتر بر ویژگی های کلاس داده، اجازه دادن به مقادیر پیش فرض، حذف فیلدهای خاص از مقایسه و نمایش و غیره استفاده کرد.

7. datetime – رسیدگی به تاریخ و زمان

معرفی تابع

این datetime ماژول ابزارهای قدرتمندی برای مدیریت تاریخ و زمان ارائه می دهد. امکان بازیابی تاریخ و زمان فعلی، انجام محاسبات زمان و قالب بندی رشته های تاریخ و زمان را فراهم می کند. این ماژول برای کارهایی که نیاز به ردیابی، محاسبه یا نمایش زمان دارند ضروری است.

اجزای اصلی از datetime شامل:

datetime.datetime: ترکیبی از تاریخ و زمان را نشان می دهد.

datetime.date: فقط تاریخ (سال، ماه، روز) را نشان می دهد.

datetime.time: فقط زمان (ساعت، دقیقه، ثانیه) را نشان می دهد.

datetime.timedelta: برای محاسبه اختلاف زمانی استفاده می شود.

مثال های استفاده

دریافت تاریخ و زمان فعلی:
from datetime import datetime

now = datetime.now()
print(f”Current time: {now}”)

خروجی:
Current time: 2024-09-07 15:32:18.123456

قالب بندی تاریخ و زمان:
from datetime import datetime

now = datetime.now()
formatted_time = now.strftime(“%Y-%m-%d %H:%M:%S”)
print(f”Formatted time: {formatted_time}”)

خروجی:
Formatted time: 2024-09-07 15:32:18

strftime برای تبدیل اشیاء تاریخ و زمان به رشته ها مطابق با فرمت مشخص استفاده می شود. کدهای قالب رایج عبارتند از:%Y – سال چهار رقمی، به عنوان مثال، 2024%m – ماه دو رقمی، به عنوان مثال، 09%d – روز دو رقمی، به عنوان مثال، 07%H – ساعت دو رقمی (قالب 24 ساعته)%M – دقیقه دو رقمی%S – ثانیه دو رقمی

تجزیه رشته های تاریخ:
from datetime import datetime

date_str = “2024-09-07 15:32:18”
date_obj = datetime.strptime(date_str, “%Y-%m-%d %H:%M:%S”)
print(f”Parsed date object: {date_obj}”)

خروجی:
Parsed date object: 2024-09-07 15:32:18

strptime رشته ها را بر اساس فرمت مشخص شده به اشیاء تاریخ و زمان تبدیل می کند.

محاسبه اختلاف زمانی:
from datetime import datetime, timedelta

now = datetime.now()
future = now + timedelta(days=10)
print(f”Date in 10 days: {future}”)

خروجی:
Date in 10 days: 2024-09-17 15:32:18.123456

timedelta برای نمایش تفاوت بین دو تاریخ یا زمان استفاده می شود و امکان محاسبه جمع و تفریق را فراهم می کند.

دریافت اجزای تاریخ یا زمان:
from datetime import datetime

now = datetime.now()
print(f”Current date: {now.date()}”)
print(f”Current time: {now.time()}”)

خروجی:
Current date: 2024-09-07
Current time: 15:32:18.123456

موارد استفاده

ورود به سیستم: به طور خودکار مُهرهای زمانی برای گزارش عملیات سیستم و گزارش های خطا ایجاد کنید.

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

پردازش داده ها: مدیریت داده هایی که دارای مهر زمانی هستند، مانند تجزیه و تحلیل داده های سری زمانی یا فیلتر کردن بر اساس محدوده زمانی.

محاسبات زمان: تعداد روزها، ساعت ها و غیره را قبل یا بعد از تاریخ مشخصی محاسبه کنید.

ملاحظات

datetime.now() زمان فعلی را تا میکروثانیه بازیابی می کند. اگر میکروثانیه مورد نیاز نیست، استفاده کنید .replace(microsecond=0) برای حذف آنها
در حالی که timedelta محاسبات زمان را تسهیل می کند، برای محاسبات پیچیده منطقه زمانی، استفاده از آن را در نظر بگیرید pytz ماژول برای مدیریت پیچیده تر منطقه زمانی.

8. functools.lru_cache – نتایج عملکرد حافظه پنهان برای افزایش عملکرد

معرفی تابع

functools.lru_cache یک دکوراتور بسیار مفید است که نتایج توابع را در حافظه پنهان ذخیره می کند تا از محاسبات تکراری روی ورودی های یکسان جلوگیری کند و در نتیجه عملکرد را افزایش دهد. به ویژه در سناریوهایی که شامل محاسبات بازگشتی یا تماس های مکرر متعدد است، مانند محاسبات توالی فیبوناچی بازگشتی یا مشکلات برنامه نویسی پویا موثر است.

مخفف “LRU” مخفف “Last Recently Used” است، که نشان می دهد وقتی حافظه نهان به ظرفیت خود می رسد، ورودی هایی که اخیراً کمتر استفاده شده اند کنار گذاشته می شوند.

مثال های استفاده

محاسبه بازگشتی دنباله فیبوناچی (با کش):
from functools import lru_cache

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

print(fibonacci(100))

خروجی:
354224848179261915075

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

تعیین اندازه حافظه پنهان:
@lru_cache(maxsize=32) # Cache the most recent 32 call results
def compute(x):
# Assume this is a time-consuming function
return x * x

for i in range(40):
print(compute(i))

print(compute.cache_info()) # View cache status

خروجی:
CacheInfo(hits=0, misses=40, maxsize=32, currsize=32)

این cache_info() این روش به شما امکان می دهد تا تعداد دفعات بازدید و از دست دادن حافظه پنهان، حداکثر ظرفیت و اندازه فعلی ورودی های ذخیره شده را مشاهده کنید.

پاک کردن کش:
fibonacci.cache_clear() # Clear the cache
print(fibonacci.cache_info()) # Output cache information to confirm the cache has been cleared

مدیریت محاسبات پیچیده:
@lru_cache(maxsize=100)
def slow_function(x, y):
# Simulate a time-consuming calculation
import time
time.sleep(2)
return x + y

# The first call will take 2 seconds
print(slow_function(1, 2)) # Output: 3

# The second call will use the cached result, almost instantaneously
print(slow_function(1, 2)) # Output: 3

خروجی:
3
3

با کش کردن نتایج، تماس دوم با همان پارامترها می تواند مقدار قابل توجهی در زمان صرفه جویی کند.

موارد استفاده

بهینه سازی الگوریتم های بازگشتی: برای توابعی که نیاز به محاسبات مکرر دارند، مانند دنباله های فیبوناچی یا برنامه نویسی پویا.

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

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

ملاحظات

مدیریت اندازه کش: maxsize پارامتر حداکثر ظرفیت کش را کنترل می کند. تنظیم مناسب آن می تواند به تعادل عملکرد و استفاده از حافظه کمک کند. اگر روی None تنظیم شود، اندازه کش نامحدود است.

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

سیاست تخلیه حافظه پنهان: lru_cache از خط مشی اخراج حداقل اخیراً استفاده شده (LRU) استفاده می کند، به این معنی که تمام نتایج حافظه پنهان را به طور نامحدود حفظ نمی کند، بلکه ورودی های کمتر استفاده شده اخیر را حذف می کند تا جایی برای موارد جدید ایجاد کند.

9. itertools.chain – چندین تکرار زنجیره ای با هم

معرفی تابع

itertools.chain یک تابع در است itertools ماژولی که به شما امکان می دهد چندین شیء تکرار شونده (مانند لیست ها، تاپل ها و مجموعه ها) را در یک تکرار شونده به هم متصل کنید. این به شما امکان می‌دهد تا بدون نیاز به حلقه‌های تودرتو، چندین تکرار را طی کنید، بنابراین ساختار کد را ساده می‌کند.

مثال های استفاده

زنجیره ای کردن لیست های متعدد:
from itertools import chain

list1 = [1, 2, 3] list2 = [4, 5, 6] result = list(chain(list1, list2))
print(result) # Output: [1, 2, 3, 4, 5, 6]

زنجیر کردن انواع مختلف تکرارپذیر:
list1 = [1, 2, 3] tuple1 = (4, 5, 6)
set1 = {7, 8, 9}
result = list(chain(list1, tuple1, set1))
print(result) # Output: [1, 2, 3, 4, 5, 6, 7, 8, 9]

زنجیر زدن رشته های متعدد:
str1 = “ABC”
str2 = “DEF”
result = list(chain(str1, str2))
print(result) # Output: [‘A’, ‘B’, ‘C’, ‘D’, ‘E’, ‘F’]

ادغام تکرارگرهای تو در تو:
nested_list = [[1, 2], [3, 4], [5, 6]] result = list(chain.from_iterable(nested_list))
print(result) # Output: [1, 2, 3, 4, 5, 6]

جابجایی ژنراتورها:
def generator1():
yield 1
yield 2

def generator2():
yield 3
yield 4

result = list(chain(generator1(), generator2()))
print(result) # Output: [1, 2, 3, 4]

موارد استفاده

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

ادغام لیست های تو در تو: chain.from_iterable می تواند اشیای تکرارپذیر تو در تو را صاف کند و کار با ساختارهای داده تودرتو را آسان تر کند.

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

ملاحظات

itertools.chain یک تکرار کننده است که فوراً نتایجی ایجاد نمی کند. فقط وقتی از آن عبور می کنید آنها را تولید می کند. بنابراین، برای مجموعه داده های بسیار بزرگ، عملکرد chain برتر است زیرا همه داده ها را به یکباره در حافظه بارگذاری نمی کند.
در صورت نیاز به الحاق اشیاء تکرارپذیر تو در تو، توصیه می شود از آن استفاده کنید chain.from_iterable به جای لانه سازی chain فراخوانی تابع

10. json – یک کمک بزرگ برای مدیریت داده های JSON

معرفی تابع

این json ماژول یک ماژول داخلی پایتون برای تجزیه، تولید و دستکاری داده های JSON (جاوا اسکریپت Object Notation) است. JSON یک فرمت تبادل داده سبک وزن است که به طور گسترده در ارتباطات داده بین برنامه های کاربردی وب و سرورها استفاده می شود. با استفاده از json ماژول، پایتون می تواند به راحتی رشته های با فرمت JSON را به اشیاء پایتون تجزیه کند یا اشیاء پایتون را به رشته های با فرمت JSON سریال کند.

توابع رایج عبارتند از:

json.dumps(): اشیاء پایتون را به رشته های JSON تبدیل می کند.

json.loads(): رشته های JSON را در اشیاء پایتون تجزیه می کند.

json.dump(): اشیاء پایتون را در یک فایل با فرمت JSON می نویسد.

json.load(): داده های JSON را از یک فایل می خواند و آن را به اشیاء پایتون تبدیل می کند.

مثال های استفاده

اشیاء پایتون را به رشته های JSON تبدیل کنید:
import json

data = {‘name’: ‘John’, ‘age’: 30, ‘city’: ‘New York’}
json_str = json.dumps(data)
print(json_str) # Output: {“name”: “John”, “age”: 30, “city”: “New York”}

رشته های JSON را در اشیاء پایتون تجزیه کنید:
json_str = ‘{“name”: “John”, “age”: 30, “city”: “New York”}’
data = json.loads(json_str)
print(data[‘name’]) # Output: John

داده های JSON را در یک فایل بنویسید:
import json

data = {‘name’: ‘Alice’, ‘age’: 25, ‘city’: ‘London’}
with open(‘data.json’, ‘w’) as file:
json.dump(data, file)

نتیجه: این کد یک را ایجاد می کند data.json فایل در دایرکتوری فعلی، حاوی:{“نام”: “آلیس”،”سن”: 25،”شهر”: “لندن”}

خواندن داده های JSON از یک فایل:
import json

with open(‘data.json’, ‘r’) as file:
data = json.load(file)
print(data) # Output: {‘name’: ‘Alice’, ‘age’: 25, ‘city’: ‘London’}

سریال سازی و سریال سازی سفارشی JSON:گاهی اوقات، JSON از برخی اشیاء پایتون (مانند datetime) پشتیبانی نمی کند، می توانیم روش های سریال سازی سفارشی را تعریف کنیم:
import json
from datetime import datetime

def datetime_serializer(obj):
if isinstance(obj, datetime):
return obj.isoformat()
raise TypeError(“Type not serializable”)

data = {‘name’: ‘Bob’, ‘timestamp’: datetime.now()}
json_str = json.dumps(data, default=datetime_serializer)
print(json_str) # Output: {“name”: “Bob”, “timestamp”: “2024-09-07T15:32:18.123456″}

سفارشی default پارامتر می تواند انواعی را که JSON به طور پیش فرض پشتیبانی نمی کند کنترل کند.

موارد استفاده

توسعه وب: انتقال داده ها با فرمت JSON بین قسمت جلویی و انتهایی که معمولاً برای بازیابی داده ها از API ها استفاده می شود.

فایل های پیکربندی: بسیاری از برنامه ها از فایل های JSON برای ذخیره داده های پیکربندی استفاده می کنند.

ورود به سیستم: ذخیره گزارش عملیات سیستم در قالب JSON برای تجزیه و تحلیل و پردازش آسان تر.

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

ملاحظات

محدودیت های نوع داده JSON: JSON انواعی از جمله رشته ها، اعداد، بولی ها، آرایه ها، اشیاء و تهی را پشتیبانی می کند، اما از اشیاء پیچیده پایتون مانند نمونه های کلاس یا توابع پشتیبانی نمی کند.

رمزگذاری UTF-8: ماژول json به طور پیش‌فرض از رمزگذاری UTF-8 استفاده می‌کند و برای مدیریت کاراکترهای بین‌المللی مناسب است.

اجتناب از بازنویسی داده های مهم: هنگام استفاده json.dump()، مراقب حالت باز فایل باشید تا مطمئن شوید که داده های مهم رونویسی نمی شوند.

11. pickle – سریال سازی و سریال زدایی از اشیاء

معرفی ویژگی

pickle یک ماژول در کتابخانه استاندارد پایتون است که برای سریال‌سازی اشیاء پایتون به جریان‌های بایت یا غیر سریالی کردن جریان‌های بایت به اشیاء اصلی استفاده می‌شود. این اجازه می دهد تا اشیا در فایل ها ذخیره شوند یا از طریق شبکه ها منتقل شوند. pickle تقریباً از تمام اشیاء پایتون، از جمله ساختارهای داده پیچیده و اشیاء سفارشی پشتیبانی می کند.

مثال های استفاده

یک شی را به یک فایل سریال تبدیل کنید:
import pickle

data = {‘name’: ‘Alice’, ‘age’: 30, ‘city’: ‘Wonderland’}

# Serialize the object and write to file
with open(‘data.pkl’, ‘wb’) as file:
pickle.dump(data, file)

یک شی از یک فایل را از حالت سریال خارج کنید:

import pickle

# Read and deserialize an object from a file
with open(‘data.pkl’, ‘rb’) as file:
data = pickle.load(file)
print(data) # Output: {‘name’: ‘Alice’, ‘age’: 30, ‘city’: ‘Wonderland’}

یک شی را در یک جریان بایت سریال کنید:
import pickle

data = [1, 2, 3, {‘a’: ‘A’, ‘b’: ‘B’}]

# Serialize the object into a byte stream
byte_stream = pickle.dumps(data)
print(byte_stream)

یک شیء را از یک جریان بایتی غیراصولی کنید:
import pickle

byte_stream = b’\x80\x04\x95\x1c\x00\x00\x00\x00\x00\x00\x00\x8c\x04list\x94\x8c\x04\x00\x00\x00\x00\x00\x00\x00\x8c\x03int\x94\x8c\x04\x00\x00\x00\x00\x00\x00\x00\x8c\x03dict\x94\x8c\x03\x00\x00\x00\x00\x00\x00\x00\x8c\x01a\x94\x8c\x01A\x94\x8c\x01b\x94\x8c\x01B\x94\x87\x94\x00\x00\x00\x00\x00\x00\x00′

# Deserialize the byte stream back into an object
data = pickle.loads(byte_stream)
print(data) # Output: [1, 2, 3, {‘a’: ‘A’, ‘b’: ‘B’}]

یک شی سفارشی را سریال کنید:
import pickle

class Person:
def __init__(self, name, age):
self.name = name
self.age = age

def __repr__(self):
return f”Person(name={self.name}, age={self.age})”

person = Person(“Bob”, 25)

# Serialize the custom object to file
with open(‘person.pkl’, ‘wb’) as file:
pickle.dump(person, file)

# Deserialize the custom object from file
with open(‘person.pkl’, ‘rb’) as file:
loaded_person = pickle.load(file)
print(loaded_person) # Output: Person(name=Bob, age=25)

سناریوهای استفاده

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

ملاحظات

امنیت: هنگامی که داده‌ها را سریال‌زدایی می‌کنید محتاط باشید، زیرا ترشی می‌تواند کد دلخواه را اجرا کند که به طور بالقوه منجر به خطرات امنیتی می‌شود. تا حد امکان از بارگذاری داده ها از منابع نامعتبر خودداری کنید.سازگاری: نسخه‌های مختلف پایتون ممکن است به‌طور کامل با داده‌های ترشی سازگار نباشند، مخصوصاً هنگام استفاده از نسخه‌های مختلف پایتون.عملکرد: سریال سازی و سریال زدایی از اشیاء بزرگ ممکن است بر عملکرد تأثیر بگذارد. استفاده از قالب‌های سریال‌سازی جایگزین (مانند JSON) را در نظر بگیرید.

12. pprint – قالب بندی ساختارهای داده پیچیده برای چاپ

معرفی ویژگی

pprint یک ماژول در کتابخانه استاندارد پایتون است که توانایی چاپ ساختارهای داده پیچیده را به صورت قالب بندی شده فراهم می کند. این می تواند ساختارهای داده تودرتو (مانند لغت نامه ها، لیست ها، تاپل ها) را در قالبی خواناتر خروجی دهد و به توسعه دهندگان کمک کند تا داده ها را بهتر اشکال زدایی کرده و مشاهده کنند.

مثال های استفاده

یک فرهنگ لغت تودرتو چاپ کنید:
from pprint import pprint

data = {
‘name’: ‘Alice’,
‘age’: 30,
‘address’: {
‘street’: ‘123 Main St’,
‘city’: ‘Wonderland’
},
‘hobbies’: [‘reading’, ‘hiking’, ‘coding’] }
pprint(data)

خروجی:
{‘address’: {‘city’: ‘Wonderland’, ‘street’: ‘123 Main St’},
‘age’: 30,
‘hobbies’: [‘reading’, ‘hiking’, ‘coding’],
‘name’: ‘Alice’}

یک لیست طولانی چاپ کنید:
from pprint import pprint

long_list = list(range(100))
pprint(long_list)

خروجی:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
40, 41, 42, 43, 44, 45, 46, 47, 48, 49,
50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
60, 61, 62, 63, 64, 65, 66, 67, 68, 69,
70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
80, 81, 82, 83, 84, 85, 86, 87, 88, 89,
90, 91, 92, 93, 94, 95, 96, 97, 98, 99]

یک فرهنگ لغت با تورفتگی سفارشی چاپ کنید:
from pprint import pprint

data = {
‘name’: ‘Bob’,
‘age’: 25,
‘address’: {
‘street’: ‘456 Elm St’,
‘city’: ‘Metropolis’
},
‘hobbies’: [‘cycling’, ‘cooking’, ‘traveling’] }
pprint(data, indent=2)

خروجی:
{‘name’: ‘Bob’,
‘age’: 25,
‘address’: {‘street’: ‘456 Elm St’, ‘city’: ‘Metropolis’},
‘hobbies’: [‘cycling’, ‘cooking’, ‘traveling’]}

یک لیست با عرض سفارشی چاپ کنید:
from pprint import pprint

data = list(range 50)
pprint(data, width=40)

خروجی:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
40, 41, 42, 43, 44, 45, 46, 47, 48, 49]

استفاده کنید pprint برای چاپ یک شیء سفارشی:
from pprint import pprint

class Person:
def __init__(self, name, age, address):
self.name = name
self.age = age
self.address = address

def __repr__(self):
return f”Person(name={self.name}, age={self.age}, address={self.address})”

person = Person(“Charlie”, 40, “789 Maple St”)
pprint(person)

خروجی:
Person(name=Charlie, age=40, address=789 Maple St)

سناریوهای استفاده

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

ملاحظات

pprint برای ساختارهای داده پیچیده تر مناسب است. برای ساختارهای داده ساده، با استفاده از منظم print کارآمدتر است.تنظیم کردن indent و width پارامترها می توانند فرمت خروجی و خوانایی را کنترل کنند، تنظیمات مناسب را با توجه به نیازهای خاص انتخاب کنند.

13. re – ابزار کنترل بیان منظم

معرفی ویژگی

این re ماژول در پایتون برای مدیریت عبارات منظم، ارائه قابلیت های قدرتمند برای تطبیق رشته ها، جستجو و جایگزینی استفاده می شود. عبارات منظم الگوهایی برای رشته های تطبیق هستند که می توانند برای دستکاری متن پیچیده مانند استخراج داده ها یا تأیید فرمت های ورودی استفاده شوند.

توابع رایج عبارتند از:

re.match(): مسابقات از ابتدای رشته.

re.search(): اولین مسابقه را در کل رشته جستجو می کند.

re.findall(): تمام رشته های فرعی که با عبارت منظم مطابقت دارند را پیدا می کند.

re.sub(): قسمت های همسان را با رشته دیگری جایگزین می کند.

re.split(): رشته را بر اساس عبارت منظم تقسیم می کند.

مثال های استفاده

تطبیق ساده:
import re

pattern = r’\d+’ # Matches one or more digits
result = re.match(pattern, ‘123abc’)
print(result.group()) # Output: 123

تابع re.match از ابتدای رشته شروع به تطبیق می کند. در مثال بالا، با ارقام 123 در ابتدا مطابقت داشت.

اولین مسابقه را در یک رشته پیدا کنید:
result = re.search(r'[a-z]+’, ‘123abc456′)
print(result.group()) # Output: abc

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

همه موارد منطبق را پیدا کنید:
result = re.findall(r’\d+’, ‘123abc456def789’)
print(result) # Output: [‘123’, ‘456’, ‘789’]

re.findall تمام قسمت هایی را که با الگو مطابقت دارند را برمی گرداند و در یک فرم لیست ارائه شده است.

رشته های همسان را جایگزین کنید:
result = re.sub(r’\d+’, ‘#’, ‘123abc456′)
print(result) # Output: #abc#

re.sub همه ارقام مطابق با # را جایگزین می کند.

رشته را بر اساس یک عبارت منظم تقسیم کنید:
result = re.split(r’\d+’, ‘abc123def456ghi’)
print(result) # Output: [‘abc’, ‘def’, ‘ghi’]

re.split رشته را به ارقام تقسیم می کند و در نتیجه یک لیست ایجاد می شود.

استخراج اطلاعات خاص با استفاده از گروه های نامگذاری شده:
pattern = r'(?P\d{4})-(?P\d{2})-(?P\d{2})’
match = re.search(pattern, ‘Date: 2024-09-07’)
print(match.group(‘year’)) # Output: 2024
print(match.group(‘month’)) # Output: 09
print(match.group(‘day’)) # Output: 07

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

سناریوهای استفاده

اعتبار سنجی فرم: فرمت هایی مانند ایمیل، شماره تلفن و کد پستی را اعتبارسنجی کنید.

email=”example@domain.com”
pattern = r’^\w+@[a-zA-Z_]+?\.[a-zA-Z]{2,3}$’
if re.match(pattern, email):
print(“Valid email”)
else:
print(“Invalid email”)

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

استخراج داده ها: داده های فرمت خاصی را از متون استخراج کنید، مانند تاریخ، زمان، و مقدار.

text=”Total cost is $123.45, and date is 2024-09-07.”
cost = re.search(r’\$\d+\.\d{2}’, text).group()
print(cost) # Output: $123.45

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

تجزیه و تحلیل گزارش: تجزیه و تحلیل گزارش های سیستم، استخراج مهرهای زمانی، آدرس های IP، پیام های خطا و غیره.

log = ‘192.168.0.1 – – [07/Sep/2024:14:55:36] “GET /index.html HTTP/1.1″ 200 2326′
ip = re.search(r’\d+\.\d+\.\d+\.\d+’, log).group()
print(ip) # Output: 192.168.0.1

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

جایگزینی رشته و قالب بندی: جایگزینی متن پیچیده یا قالب بندی را به سرعت از طریق تطبیق الگو انجام دهید.

text=”User ID: 1234, Date: 2024-09-07″new_text = re.sub(r’\d+’, ‘[ID]’, text)print(new_text) #Output: User ID: [ID], Date: [ID]

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

ملاحظات

تطبیق حریص در مقابل غیر حریص: به‌طور پیش‌فرض، عبارات منظم حریص هستند و سعی می‌کنند تا آنجا که ممکن است کاراکترها را مطابقت دهند. مطابقت غیر حریصانه را می توان با ?، به عنوان مثال، r' به دست آورد?>'.** از رجکس بیش از حد پیچیده اجتناب کنید: اگرچه عبارات منظم قدرتمند هستند، اما حفظ عبارات پیچیده ممکن است دشوار باشد. توصیه می شود آنها را ساده نگه دارید.** شخصیت های فرار*: برخی از کاراکترها در عبارات منظم معانی خاصی دارند (مانند .، *، +)، و هنگام استفاده باید با \ حذف شوند.

14. timeit.timeit – اندازه گیری زمان اجرای کد

معرفی ویژگی

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

مثال های استفاده

زمان اجرای کد ساده را اندازه گیری کنید:

import timeit

# Measure the execution time of a single line of code
execution_time = timeit.timeit(‘x = sum(range(100))’, number=10000)
print(f”Execution time: {execution_time} seconds”)

زمان اجرای یک تابع را اندازه گیری کنید:

import timeit

def test_function():
return sum(range(100))

execution_time = timeit.timeit(test_function, number=10000)
print(f”Execution time: {execution_time} seconds”)

استفاده کنید timeit برای اندازه گیری زمان اجرای یک بلوک کد:

import timeit

code_to_test = ”’
result = 0
for i in range(1000):
result += i
”’

execution_time = timeit.timeit(code_to_test, number=1000)
print(f”Execution time: {execution_time} seconds”)

استفاده کنید timeit برای اندازه گیری زمان اجرا با setup کد:

import timeit

setup_code = ”’
import random
data = [random.randint(1, 100) for _ in range(1000)] ”’

test_code = ”’
sorted_data = sorted(data)
”’

execution_time = timeit.timeit(test_code, setup=setup_code, number=1000)
print(f”Execution time: {execution_time} seconds”)

اندازه گیری عملکرد سناریوهای پیچیده:

import timeit

setup_code = ”’
import numpy as np
data = np.random.rand(1000)
”’

test_code = ”’
mean_value = np.mean(data)
”’

execution_time = timeit.timeit(test_code, setup=setup_code, number=1000)
print(f”Execution time: {execution_time} seconds”)

سناریوهای استفاده

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

ملاحظات

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

15. uuid – تولید شناسه های منحصر به فرد

معرفی ویژگی

این uuid ماژول در کتابخانه استاندارد پایتون برای تولید شناسه های منحصر به فرد جهانی (UUID) استفاده می شود. UUID ها شناسه های استاندارد شده ای هستند که به طور گسترده در سناریوهایی که نیاز به شناسایی منحصر به فرد دارند، مانند کلیدهای اصلی پایگاه داده، شناسه های شی در سیستم های توزیع شده و غیره استفاده می شوند. uuid ماژول از روش‌های مختلفی برای تولید UUID پشتیبانی می‌کند، از جمله روش‌هایی که بر اساس زمان، اعداد تصادفی و مقادیر هش هستند.

مثال های استفاده

یک UUID مبتنی بر زمان ایجاد کنید:

import uuid

uuid1 = uuid.uuid1()
print(f”UUID1: {uuid1}”)

خروجی:

UUID1: 123e4567-e89b-12d3-a456-426614174000

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

import uuid

uuid4 = uuid.uuid4()
print(f”UUID4: {uuid4}”)

خروجی:

UUID4: 9d6d8a0a-1e2b-4f8c-8c0d-15e16529d37e

یک UUID مبتنی بر نام ایجاد کنید:

import uuid

namespace = uuid.NAMESPACE_DNS
name = “example.com”
uuid3 = uuid.uuid3(namespace, name)
print(f”UUID3: {uuid3}”)

خروجی:

UUID3: 5d5c4b37-1c73-3b3d-bc8c-616c98a6a3d3

یک UUID مبتنی بر هش SHA-1 ایجاد کنید:

import uuid

namespace = uuid.NAMESPACE_URL
name = “http://example.com”
uuid5 = uuid.uuid5(namespace, name)
print(f”UUID5: {uuid5}”)

خروجی:

UUID5: 9b3f7e1d-f9b0-5d8b-9141-fb8b571f4f67

UUID را به رشته تبدیل کنید:

import uuid

uuid_obj = uuid.uuid4()
uuid_str = str(uuid_obj)
print(f”UUID as string: {uuid_str}”)

خروجی:

UUID as string: 2d5b44b8-4a0f-4f3d-a2b4-3c6e1f7f6a3b

سناریوهای استفاده

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

ملاحظات

نسخه های UUID: uuid ماژول نسخه های مختلفی از UUID ها را ارائه می دهد (مانند UUID1، UUID4، UUID3 و UUID5)، نسخه مناسب را بر اساس نیازهای واقعی انتخاب کنید.ملاحظات عملکرد: برای برنامه هایی که تعداد زیادی UUID تولید می کنند، برای بهینه سازی عملکرد، نسخه UUID مناسب را انتخاب کنید. به عنوان مثال، UUID4 بر اساس اعداد تصادفی است و سریعتر تولید می شود، اما ممکن است خطرات برخورد داشته باشد. UUID1 بر اساس اطلاعات زمان و گره است، تولید کندتر است اما منحصر به فرد بالاتری را ارائه می دهد.سازگاری قالب: هنگام انتقال UUID ها بین برنامه ها و سیستم های مختلف، از سازگاری در قالب اطمینان حاصل کنید، معمولاً از قالب رشته استاندارد برای انتقال استفاده می شود.

فهرست مطالب

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

1. all – بررسی کنید که آیا همه عناصر دارای شرایط هستند یا خیر

معرفی تابع

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

مثال های استفاده

  1. بررسی کنید که آیا همه اعداد یک لیست مثبت هستند یا خیر:

    numbers = [1, 2, 3, 4]
    result = all(num > 0 for num in numbers)
    print(result)  # Output: True
    
  2. بررسی کنید که آیا تمام کاراکترهای یک رشته حروف الفبا هستند یا خیر:

    text = "Hello"
    result = all(char.isalpha() for char in text)
    print(result)  # Output: True
    
  3. بررسی کنید که آیا همه مقادیر در یک فرهنگ لغت بزرگتر از 10 هستند:

    data = {'a': 11, 'b': 12, 'c': 9}
    result = all(value > 10 for value in data.values())
    print(result)  # Output: False
    

موارد استفاده

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

2. any – بررسی کنید که آیا هر یک از عناصر مطابق با شرایط هستند

معرفی تابع

این any تابع برای بررسی اینکه آیا حداقل یک عنصر در یک تکرار (مانند یک لیست یا تاپل) با یک شرط معین مطابقت دارد یا خیر استفاده می شود. اگر هر عنصری باشد True، برمی گردد True; در غیر این صورت باز می گردد False. اگر تکرار خالی باشد، برمی گردد False.

مثال های استفاده

  1. بررسی کنید که آیا اعداد بزرگتر از 10 در لیست وجود دارد یا خیر:

    numbers = [1, 5, 8, 12]
    result = any(num > 10 for num in numbers)
    print(result)  # Output: True
    
  2. بررسی کنید که آیا یک رشته دارای کاراکتر خاصی است یا خیر:

    text = "hello"
    result = any(char == 'h' for char in text)
    print(result)  # Output: True
    
  3. بررسی کنید که آیا مقادیری در یک فرهنگ لغت هیچ کدام نیستند:

    data = {'name': 'Alice', 'age': None, 'location': 'NY'}
    result = any(value is None for value in data.values())
    print(result)  # Output: True
    
  4. بررسی کنید که آیا یک تاپل حاوی عناصر غیر صفر است یا خیر:

    tup = (0, 0, 1, 0)
    result = any(tup)
    print(result)  # Output: True
    

موارد استفاده

بررسی وضعیت: هنگامی که می خواهید بررسی کنید که آیا حداقل یک عنصر در مجموعه ای از داده ها دارای شرایط خاصی است یا خیر، any ابزار بسیار کارآمدی است به عنوان مثال، بررسی اینکه آیا ورودی کاربر با استانداردهای خاصی مطابقت دارد یا اینکه مقادیری در لیست وجود دارد که معیارهای خاصی را برآورده می کند.

users = ['admin', 'guest', 'user1']
if any(user == 'admin' for user in users):
    print("Admin is present")
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

اعتبار سنجی داده ها: هنگام مدیریت فرم ها یا پایگاه داده ها، بررسی کنید که آیا فیلدهای داده خالی یا نامعتبر هستند.

fields = {'name': 'John', 'email': '', 'age': 30}
if any(value == '' for value in fields.values()):
    print("Some fields are empty!")
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

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

data_points = [3.2, 5.6, 0.0, -1.2, 4.8]
if any(x 
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

ملاحظات

any بلافاصله پس از مواجهه با اولی باز می گردد True عنصر و به بررسی عناصر باقی مانده ادامه نمی دهد، بنابراین دارای یک مزیت عملکردی است.
any اغلب با عبارات مولد استفاده می شود و به آن اجازه می دهد تا مجموعه داده های بزرگ را بدون مصرف حافظه زیاد مدیریت کند.
any و all یک جفت توابع بولی بسیار کاربردی هستند که می توانند به سرعت بسیاری از منطق کدهای بررسی شرایط را ساده کنند.

3. argparse – مدیریت آرگومان های خط فرمان

معرفی تابع

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

مثال های استفاده

  1. کنترل پارامترهای خط فرمان اساسی:

    import argparse
    parser = argparse.ArgumentParser(description="This is a demo script")
    parser.add_argument('--name', type=str, help='Enter your name')
    args = parser.parse_args()
    print(f"Hello, {args.name}!")
    

    مثال اجرا:

    python script.py --name Alice
    

    خروجی:

    Hello, Alice!
    
  2. تنظیم مقادیر پیش فرض و آرگومان های مورد نیاز:

    import argparse
    parser = argparse.ArgumentParser()
    parser.add_argument('--age', type=int, required=True, help='Enter your age')
    parser.add_argument('--city', type=str, default='Unknown', help='Enter your city')
    args = parser.parse_args()
    print(f"Age: {args.age}, City: {args.city}")
    

    مثال اجرا:

    python script.py --age 30 --city Beijing
    

    خروجی:

    Age: 30, City: Beijing
    
  3. پشتیبانی از آرگومان های بولی:

    import argparse
    parser = argparse.ArgumentParser()
    parser.add_argument('--verbose', action='store_true', help='Provide verbose output if set')
    args = parser.parse_args()
    if args.verbose:
        print("Verbose mode enabled")
    else:
        print("Default mode")
    

    مثال اجرا:

    python script.py --verbose
    

    خروجی:

    Verbose mode enabled
    
  4. مدیریت چندین آرگومان خط فرمان:

    import argparse
    parser = argparse.ArgumentParser(description="Calculator program")
    parser.add_argument('num1', type=int, help="First number")
    parser.add_argument('num2', type=int, help="Second number")
    parser.add_argument('--operation', type=str, default='add', choices=['add', 'subtract'], help="Choose operation type: add or subtract")
    args = parser.parse_args()
    if args.operation == 'add':
        result = args.num1 + args.num2
    else:
        result = args.num1 - args.num2
    print(f"Result: {result}")
    

    مثال اجرا:

    python script.py 10 5 --operation subtract
    

    خروجی:

    Result: 5
    

موارد استفاده

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

ملاحظات

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

4. collections.Counter – کلاس پیشخوان

معرفی تابع

Counter یک زیر کلاس فرهنگ لغت در داخل است collections ماژول، در درجه اول برای شمارش استفاده می شود. رخدادهای هر عنصر را در یک شیء تکرارپذیر، با عناصر به عنوان کلید و شمارش آنها به عنوان مقادیر، شمارش می کند و چندین عملیات شمارش راحت را ارائه می دهد.

مثال های استفاده

  1. شمارش فرکانس کاراکترها در یک رشته:

    from collections import Counter
    text = "hello world"
    counter = Counter(text)
    print(counter)  # Output: Counter({'l': 3, 'o': 2, 'h': 1, 'e': 1, ' ': 1, 'w': 1, 'r': 1, 'd': 1})
    
  2. شمارش وقوع عناصر در یک لیست:

    items = ['apple', 'banana', 'apple', 'orange', 'banana', 'apple']
    counter = Counter(items)
    print(counter)  # Output: Counter({'apple': 3, 'banana': 2, 'orange': 1})
    
  3. شناسایی رایج ترین عناصر:

    counter = Counter(items)
    most_common = counter.most_common(2)
    print(most_common)  # Output: [('apple', 3), ('banana', 2)]
    
  4. به روز رسانی پیشخوان:

    counter.update(['banana', 'orange', 'apple'])
    print(counter)  # Output: Counter({'apple': 4, 'banana': 3, 'orange': 2})
    
  5. عملیات جمع و تفریق شمارنده:

    counter1 = Counter(a=3, b=1)
    counter2 = Counter(a=1, b=2)
    result = counter1 + counter2
    print(result)  # Output: Counter({'a': 4, 'b': 3})
    result = counter1 - counter2
    print(result)  # Output: Counter({'a': 2})
    

موارد استفاده

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

ملاحظات

شمارش های منفی حفظ می شوند اما هنگام استفاده از روش هایی مانند most_common نمایش داده نمی شوند.
می توانید از عملگرهایی مانند +، -، &، و | استفاده کنید برای انجام عملیات جمع، تفریق، اتحاد و تقاطع در چندین شی Counter.

5. collections.defaultdict – دیکشنری با مقادیر پیش فرض

معرفی تابع

defaultdict یک زیر کلاس در پایتون است collections ماژولی که دیکشنری با مقادیر پیش فرض ارائه می کند. وقتی به کلیدی که وجود ندارد دسترسی پیدا می کنید، a را پرتاب نمی کند KeyError اما در عوض یک مقدار پیش فرض تعیین شده توسط یک تابع کارخانه ارائه شده در ایجاد فرهنگ لغت را برمی گرداند. این امر نیاز به بررسی دستی برای حضور کلید را کاهش می دهد و کد را با حذف مدیریت خطاهای غیر ضروری ساده می کند.

مثال های استفاده

  1. ایجاد دیکشنری با مقادیر پیش فرض:

    from collections import defaultdict
    
    # Default value is 0
    dd = defaultdict(int)
    dd['a'] += 1
    print(dd)  # Output: defaultdict(, {'a': 1})
    
  2. شمارش کاراکترها در یک رشته:

    text = "hello world"
    char_count = defaultdict(int)
    for char in text:
        char_count[char] += 1
    print(char_count)  # Output: defaultdict(, {'h': 1, 'e': 1, 'l': 3, 'o': 2, ' ': 1, 'w': 1, 'r': 1, 'd': 1})
    
  3. گروه بندی عناصر در یک لیست بر اساس طول:

    words = ["apple", "banana", "pear", "kiwi", "grape"]
    word_groups = defaultdict(list)
    for word in words:
        word_groups[len(word)].append(word)
    print(word_groups)  # Output: defaultdict(, {5: ['apple', 'pear', 'grape'], 6: ['banana'], 4: ['kiwi']})
    
  4. با استفاده از یک تابع پیش فرض کارخانه سفارشی:

    def default_value():
        return "default_value"
    
    dd = defaultdict(default_value)
    print(dd["nonexistent_key"])  # Output: "default_value"
    
  5. استفاده تودرتو از defaultdict:

    # Creating a nested defaultdict
    nested_dict = defaultdict(lambda: defaultdict(int))
    nested_dict['key1']['subkey'] += 1
    print(nested_dict)  # Output: defaultdict( at 0x...>, {'key1': defaultdict(, {'subkey': 1})})
    

موارد استفاده

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

ملاحظات

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

6. dataclasses.dataclass – کلاس های داده سبک

معرفی تابع

معرفی شده در پایتون 3.7، dataclass یک دکوراتور است که ایجاد کلاس های داده را با تولید خودکار روش هایی مانند ساده می کند __init__، __repr__، و __eq__. این نیاز به کد دیگ بخار را کاهش می دهد و به حفظ پایه های کد تمیز و قابل مدیریت کمک می کند.

مثال های استفاده

  1. ایجاد یک کلاس داده ساده:

    from dataclasses import dataclass
    
    @dataclass
    class Person:
        name: str
        age: int
    
    person = Person(name="Alice", age=30)
    print(person)  # Output: Person(name="Alice", age=30)
    
  2. تنظیم مقادیر پیش فرض:

    @dataclass
    class Person:
        name: str
        age: int = 25
    
    person = Person(name="Bob")
    print(person)  # Output: Person(name="Bob", age=25)
    
  3. تولید روش های مقایسه:

    @dataclass
    class Person:
        name: str
        age: int
    
    person1 = Person(name="Alice", age=30)
    person2 = Person(name="Alice", age=30)
    print(person1 == person2)  # Output: True
    
  4. انجماد کلاس‌های داده (تغییرناپذیر کردن ویژگی‌ها):

    @dataclass(frozen=True)
    class Person:
        name: str
        age: int
    
    person = Person(name="Alice", age=30)
    try:
        person.age = 31  # This will raise an error as the data class is frozen
    except AttributeError as e:
        print(e)
    
  5. مدیریت انواع داده های پیچیده:

    from dataclasses import dataclass
    from typing import List
    
    @dataclass
    class Team:
        name: str
        members: List[str]
    
    team = Team(name="Developers", members=["Alice", "Bob", "Charlie"])
    print(team)  # Output: Team(name="Developers", members=['Alice', 'Bob', 'Charlie'])
    

موارد استفاده

  • ساده کردن تعاریف کلاس داده: به جلوگیری از نوشتن دستی روش های رایج، کاهش افزونگی و خطاهای احتمالی کمک می کند.
  • ایجاد اشیاء تغییرناپذیر: با انجماد کلاس های داده، اطمینان حاصل می شود که اشیاء پس از ایجاد تغییرناپذیر هستند، مشابه تاپل ها اما با فیلدهای نامگذاری شده.
  • کپسوله سازی داده ها: از کلاس های داده برای کپسوله کردن منطق تجاری و ساختارهای داده در برنامه ها، مانند تعریف پروفایل های کاربر، محصولات، سفارشات و غیره استفاده می کند.

ملاحظات

  • کلاس های داده را می توان با تنظیم تغییرناپذیر ساخت frozen=True، باعث می شود نمونه ها بیشتر شبیه تاپل های نامگذاری شده رفتار کنند.
  • این field() تابع را می توان برای کنترل دانه ای بیشتر بر ویژگی های کلاس داده، اجازه دادن به مقادیر پیش فرض، حذف فیلدهای خاص از مقایسه و نمایش و غیره استفاده کرد.

7. datetime – رسیدگی به تاریخ و زمان

معرفی تابع

این datetime ماژول ابزارهای قدرتمندی برای مدیریت تاریخ و زمان ارائه می دهد. امکان بازیابی تاریخ و زمان فعلی، انجام محاسبات زمان و قالب بندی رشته های تاریخ و زمان را فراهم می کند. این ماژول برای کارهایی که نیاز به ردیابی، محاسبه یا نمایش زمان دارند ضروری است.

اجزای اصلی از datetime شامل:

  • datetime.datetime: ترکیبی از تاریخ و زمان را نشان می دهد.
  • datetime.date: فقط تاریخ (سال، ماه، روز) را نشان می دهد.
  • datetime.time: فقط زمان (ساعت، دقیقه، ثانیه) را نشان می دهد.
  • datetime.timedelta: برای محاسبه اختلاف زمانی استفاده می شود.

مثال های استفاده

  1. دریافت تاریخ و زمان فعلی:

    from datetime import datetime
    
    now = datetime.now()
    print(f"Current time: {now}")
    

    خروجی:

    Current time: 2024-09-07 15:32:18.123456
    
  2. قالب بندی تاریخ و زمان:

    from datetime import datetime
    
    now = datetime.now()
    formatted_time = now.strftime("%Y-%m-%d %H:%M:%S")
    print(f"Formatted time: {formatted_time}")
    

    خروجی:

    Formatted time: 2024-09-07 15:32:18
    

    strftime برای تبدیل اشیاء تاریخ و زمان به رشته ها مطابق با فرمت مشخص استفاده می شود. کدهای قالب رایج عبارتند از:
    %Y – سال چهار رقمی، به عنوان مثال، 2024
    %m – ماه دو رقمی، به عنوان مثال، 09
    %d – روز دو رقمی، به عنوان مثال، 07
    %H – ساعت دو رقمی (قالب 24 ساعته)
    %M – دقیقه دو رقمی
    %S – ثانیه دو رقمی

  3. تجزیه رشته های تاریخ:

    from datetime import datetime
    
    date_str = "2024-09-07 15:32:18"
    date_obj = datetime.strptime(date_str, "%Y-%m-%d %H:%M:%S")
    print(f"Parsed date object: {date_obj}")
    

    خروجی:

    Parsed date object: 2024-09-07 15:32:18
    

    strptime رشته ها را بر اساس فرمت مشخص شده به اشیاء تاریخ و زمان تبدیل می کند.

  4. محاسبه اختلاف زمانی:

    from datetime import datetime, timedelta
    
    now = datetime.now()
    future = now + timedelta(days=10)
    print(f"Date in 10 days: {future}")
    

    خروجی:

    Date in 10 days: 2024-09-17 15:32:18.123456
    

    timedelta برای نمایش تفاوت بین دو تاریخ یا زمان استفاده می شود و امکان محاسبه جمع و تفریق را فراهم می کند.

  5. دریافت اجزای تاریخ یا زمان:

    from datetime import datetime
    
    now = datetime.now()
    print(f"Current date: {now.date()}")
    print(f"Current time: {now.time()}")
    

    خروجی:

    Current date: 2024-09-07
    Current time: 15:32:18.123456
    

موارد استفاده

  • ورود به سیستم: به طور خودکار مُهرهای زمانی برای گزارش عملیات سیستم و گزارش های خطا ایجاد کنید.
  • وظایف برنامه ریزی شده: تأخیرها یا فواصل زمانی را برای عملیاتی مانند پشتیبان گیری خودکار سیستم پیکربندی کنید.
  • پردازش داده ها: مدیریت داده هایی که دارای مهر زمانی هستند، مانند تجزیه و تحلیل داده های سری زمانی یا فیلتر کردن بر اساس محدوده زمانی.
  • محاسبات زمان: تعداد روزها، ساعت ها و غیره را قبل یا بعد از تاریخ مشخصی محاسبه کنید.

ملاحظات

  • datetime.now() زمان فعلی را تا میکروثانیه بازیابی می کند. اگر میکروثانیه مورد نیاز نیست، استفاده کنید .replace(microsecond=0) برای حذف آنها
  • در حالی که timedelta محاسبات زمان را تسهیل می کند، برای محاسبات پیچیده منطقه زمانی، استفاده از آن را در نظر بگیرید pytz ماژول برای مدیریت پیچیده تر منطقه زمانی.

8. functools.lru_cache – نتایج عملکرد حافظه پنهان برای افزایش عملکرد

معرفی تابع

functools.lru_cache یک دکوراتور بسیار مفید است که نتایج توابع را در حافظه پنهان ذخیره می کند تا از محاسبات تکراری روی ورودی های یکسان جلوگیری کند و در نتیجه عملکرد را افزایش دهد. به ویژه در سناریوهایی که شامل محاسبات بازگشتی یا تماس های مکرر متعدد است، مانند محاسبات توالی فیبوناچی بازگشتی یا مشکلات برنامه نویسی پویا موثر است.

مخفف “LRU” مخفف “Last Recently Used” است، که نشان می دهد وقتی حافظه نهان به ظرفیت خود می رسد، ورودی هایی که اخیراً کمتر استفاده شده اند کنار گذاشته می شوند.

مثال های استفاده

  1. محاسبه بازگشتی دنباله فیبوناچی (با کش):

    from functools import lru_cache
    
    @lru_cache(maxsize=128)
    def fibonacci(n):
        if n  2:
            return n
        return fibonacci(n-1) + fibonacci(n-2)
    
    print(fibonacci(100))
    

    خروجی:

    354224848179261915075
    

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

  2. تعیین اندازه حافظه پنهان:

    @lru_cache(maxsize=32)  # Cache the most recent 32 call results
    def compute(x):
        # Assume this is a time-consuming function
        return x * x
    
    for i in range(40):
        print(compute(i))
    
    print(compute.cache_info())  # View cache status
    

    خروجی:

    CacheInfo(hits=0, misses=40, maxsize=32, currsize=32)
    

    این cache_info() این روش به شما امکان می دهد تا تعداد دفعات بازدید و از دست دادن حافظه پنهان، حداکثر ظرفیت و اندازه فعلی ورودی های ذخیره شده را مشاهده کنید.

  3. پاک کردن کش:

    fibonacci.cache_clear()  # Clear the cache
    print(fibonacci.cache_info())  # Output cache information to confirm the cache has been cleared
    
  4. مدیریت محاسبات پیچیده:

    @lru_cache(maxsize=100)
    def slow_function(x, y):
        # Simulate a time-consuming calculation
        import time
        time.sleep(2)
        return x + y
    
    # The first call will take 2 seconds
    print(slow_function(1, 2))  # Output: 3
    
    # The second call will use the cached result, almost instantaneously
    print(slow_function(1, 2))  # Output: 3
    

    خروجی:

    3
    3
    

    با کش کردن نتایج، تماس دوم با همان پارامترها می تواند مقدار قابل توجهی در زمان صرفه جویی کند.

موارد استفاده

  • بهینه سازی الگوریتم های بازگشتی: برای توابعی که نیاز به محاسبات مکرر دارند، مانند دنباله های فیبوناچی یا برنامه نویسی پویا.
  • مدیریت محاسبات پیچیده: برای توابعی که مستلزم محاسبات مکرر گسترده هستند، حافظه پنهان می تواند عملکرد را به طور قابل توجهی افزایش دهد، مانند پردازش درخواست وب یا ذخیره پرس و جو پایگاه داده.
  • بهینه سازی فراخوانی تابع: هنگام پردازش چندین بار ورودی های یکسان، حافظه پنهان می تواند از محاسبات اضافی یا عملیات وقت گیر جلوگیری کند.

ملاحظات

  • مدیریت اندازه کش: maxsize پارامتر حداکثر ظرفیت کش را کنترل می کند. تنظیم مناسب آن می تواند به تعادل عملکرد و استفاده از حافظه کمک کند. اگر روی None تنظیم شود، اندازه کش نامحدود است.
  • از کش کردن داده های غیر ضروری خودداری کنید: برای توابع با پارامترهای بسیار متغیر، کش می تواند مقدار قابل توجهی از حافظه را اشغال کند و باید با احتیاط استفاده شود.
  • سیاست تخلیه حافظه پنهان: lru_cache از خط مشی اخراج حداقل اخیراً استفاده شده (LRU) استفاده می کند، به این معنی که تمام نتایج حافظه پنهان را به طور نامحدود حفظ نمی کند، بلکه ورودی های کمتر استفاده شده اخیر را حذف می کند تا جایی برای موارد جدید ایجاد کند.

9. itertools.chain – چندین تکرار زنجیره ای با هم

معرفی تابع

itertools.chain یک تابع در است itertools ماژولی که به شما امکان می دهد چندین شیء تکرار شونده (مانند لیست ها، تاپل ها و مجموعه ها) را در یک تکرار شونده به هم متصل کنید. این به شما امکان می‌دهد تا بدون نیاز به حلقه‌های تودرتو، چندین تکرار را طی کنید، بنابراین ساختار کد را ساده می‌کند.

مثال های استفاده

  1. زنجیره ای کردن لیست های متعدد:

    from itertools import chain
    
    list1 = [1, 2, 3]
    list2 = [4, 5, 6]
    result = list(chain(list1, list2))
    print(result)  # Output: [1, 2, 3, 4, 5, 6]
    
  2. زنجیر کردن انواع مختلف تکرارپذیر:

    list1 = [1, 2, 3]
    tuple1 = (4, 5, 6)
    set1 = {7, 8, 9}
    result = list(chain(list1, tuple1, set1))
    print(result)  # Output: [1, 2, 3, 4, 5, 6, 7, 8, 9]
    
  3. زنجیر زدن رشته های متعدد:

    str1 = "ABC"
    str2 = "DEF"
    result = list(chain(str1, str2))
    print(result)  # Output: ['A', 'B', 'C', 'D', 'E', 'F']
    
  4. ادغام تکرارگرهای تو در تو:

    nested_list = [[1, 2], [3, 4], [5, 6]]
    result = list(chain.from_iterable(nested_list))
    print(result)  # Output: [1, 2, 3, 4, 5, 6]
    
  5. جابجایی ژنراتورها:

    def generator1():
        yield 1
        yield 2
    
    def generator2():
        yield 3
        yield 4
    
    result = list(chain(generator1(), generator2()))
    print(result)  # Output: [1, 2, 3, 4]
    

موارد استفاده

  • ادغام چندین منبع داده: هنگامی که نیاز به پیمایش چندین شیء تکرارپذیر دارید، با استفاده از زنجیره می توانید از حلقه های چند سطحی جلوگیری کنید.
  • ادغام لیست های تو در تو: chain.from_iterable می تواند اشیای تکرارپذیر تو در تو را صاف کند و کار با ساختارهای داده تودرتو را آسان تر کند.
  • ساده سازی کد: هنگامی که عملیات یکنواخت در چندین لیست یا ژنراتور مورد نیاز است، زنجیره می تواند کد اضافی را کاهش دهد و خوانایی را افزایش دهد.

ملاحظات

  • itertools.chain یک تکرار کننده است که فوراً نتایجی ایجاد نمی کند. فقط وقتی از آن عبور می کنید آنها را تولید می کند. بنابراین، برای مجموعه داده های بسیار بزرگ، عملکرد chain برتر است زیرا همه داده ها را به یکباره در حافظه بارگذاری نمی کند.
  • در صورت نیاز به الحاق اشیاء تکرارپذیر تو در تو، توصیه می شود از آن استفاده کنید chain.from_iterable به جای لانه سازی chain فراخوانی تابع

10. json – یک کمک بزرگ برای مدیریت داده های JSON

معرفی تابع

این json ماژول یک ماژول داخلی پایتون برای تجزیه، تولید و دستکاری داده های JSON (جاوا اسکریپت Object Notation) است. JSON یک فرمت تبادل داده سبک وزن است که به طور گسترده در ارتباطات داده بین برنامه های کاربردی وب و سرورها استفاده می شود. با استفاده از json ماژول، پایتون می تواند به راحتی رشته های با فرمت JSON را به اشیاء پایتون تجزیه کند یا اشیاء پایتون را به رشته های با فرمت JSON سریال کند.

توابع رایج عبارتند از:

  • json.dumps(): اشیاء پایتون را به رشته های JSON تبدیل می کند.
  • json.loads(): رشته های JSON را در اشیاء پایتون تجزیه می کند.
  • json.dump(): اشیاء پایتون را در یک فایل با فرمت JSON می نویسد.
  • json.load(): داده های JSON را از یک فایل می خواند و آن را به اشیاء پایتون تبدیل می کند.

مثال های استفاده

  1. اشیاء پایتون را به رشته های JSON تبدیل کنید:

    import json
    
    data = {'name': 'John', 'age': 30, 'city': 'New York'}
    json_str = json.dumps(data)
    print(json_str)  # Output: {"name": "John", "age": 30, "city": "New York"}
    
  2. رشته های JSON را در اشیاء پایتون تجزیه کنید:

    json_str = '{"name": "John", "age": 30, "city": "New York"}'
    data = json.loads(json_str)
    print(data['name'])  # Output: John
    
  3. داده های JSON را در یک فایل بنویسید:

    import json
    
    data = {'name': 'Alice', 'age': 25, 'city': 'London'}
    with open('data.json', 'w') as file:
        json.dump(data, file)
    

    نتیجه: این کد یک را ایجاد می کند data.json فایل در دایرکتوری فعلی، حاوی:
    {
    “نام”: “آلیس”،
    “سن”: 25،
    “شهر”: “لندن”
    }

  4. خواندن داده های JSON از یک فایل:

    import json
    
    with open('data.json', 'r') as file:
        data = json.load(file)
    print(data)  # Output: {'name': 'Alice', 'age': 25, 'city': 'London'}
    
  5. سریال سازی و سریال سازی سفارشی JSON:
    گاهی اوقات، JSON از برخی اشیاء پایتون (مانند datetime) پشتیبانی نمی کند، می توانیم روش های سریال سازی سفارشی را تعریف کنیم:

    import json
    from datetime import datetime
    
    def datetime_serializer(obj):
        if isinstance(obj, datetime):
            return obj.isoformat()
        raise TypeError("Type not serializable")
    
    data = {'name': 'Bob', 'timestamp': datetime.now()}
    json_str = json.dumps(data, default=datetime_serializer)
    print(json_str)  # Output: {"name": "Bob", "timestamp": "2024-09-07T15:32:18.123456"}
    

سفارشی default پارامتر می تواند انواعی را که JSON به طور پیش فرض پشتیبانی نمی کند کنترل کند.

موارد استفاده

  • توسعه وب: انتقال داده ها با فرمت JSON بین قسمت جلویی و انتهایی که معمولاً برای بازیابی داده ها از API ها استفاده می شود.
  • فایل های پیکربندی: بسیاری از برنامه ها از فایل های JSON برای ذخیره داده های پیکربندی استفاده می کنند.
  • ورود به سیستم: ذخیره گزارش عملیات سیستم در قالب JSON برای تجزیه و تحلیل و پردازش آسان تر.
  • سریال سازی داده ها: برای ذخیره و به اشتراک گذاری ساختارهای داده پایتون، مانند ذخیره داده ها از اسکراپرهای وب یا پارامترهای مدل یادگیری ماشین استفاده می شود.

ملاحظات

  • محدودیت های نوع داده JSON: JSON انواعی از جمله رشته ها، اعداد، بولی ها، آرایه ها، اشیاء و تهی را پشتیبانی می کند، اما از اشیاء پیچیده پایتون مانند نمونه های کلاس یا توابع پشتیبانی نمی کند.
  • رمزگذاری UTF-8: ماژول json به طور پیش‌فرض از رمزگذاری UTF-8 استفاده می‌کند و برای مدیریت کاراکترهای بین‌المللی مناسب است.
  • اجتناب از بازنویسی داده های مهم: هنگام استفاده json.dump()، مراقب حالت باز فایل باشید تا مطمئن شوید که داده های مهم رونویسی نمی شوند.

11. pickle – سریال سازی و سریال زدایی از اشیاء

معرفی ویژگی

pickle یک ماژول در کتابخانه استاندارد پایتون است که برای سریال‌سازی اشیاء پایتون به جریان‌های بایت یا غیر سریالی کردن جریان‌های بایت به اشیاء اصلی استفاده می‌شود. این اجازه می دهد تا اشیا در فایل ها ذخیره شوند یا از طریق شبکه ها منتقل شوند. pickle تقریباً از تمام اشیاء پایتون، از جمله ساختارهای داده پیچیده و اشیاء سفارشی پشتیبانی می کند.

مثال های استفاده

  1. یک شی را به یک فایل سریال تبدیل کنید:

    import pickle
    
    data = {'name': 'Alice', 'age': 30, 'city': 'Wonderland'}
    
    # Serialize the object and write to file
    with open('data.pkl', 'wb') as file:
        pickle.dump(data, file)
    
  2. یک شی از یک فایل را از حالت سریال خارج کنید:

    
    import pickle
    
    # Read and deserialize an object from a file
    with open('data.pkl', 'rb') as file:
        data = pickle.load(file)
    print(data)  # Output: {'name': 'Alice', 'age': 30, 'city': 'Wonderland'}
    
  3. یک شی را در یک جریان بایت سریال کنید:

    import pickle
    
    data = [1, 2, 3, {'a': 'A', 'b': 'B'}]
    
    # Serialize the object into a byte stream
    byte_stream = pickle.dumps(data)
    print(byte_stream)
    
  4. یک شیء را از یک جریان بایتی غیراصولی کنید:

    import pickle
    
    byte_stream = b'\x80\x04\x95\x1c\x00\x00\x00\x00\x00\x00\x00\x8c\x04list\x94\x8c\x04\x00\x00\x00\x00\x00\x00\x00\x8c\x03int\x94\x8c\x04\x00\x00\x00\x00\x00\x00\x00\x8c\x03dict\x94\x8c\x03\x00\x00\x00\x00\x00\x00\x00\x8c\x01a\x94\x8c\x01A\x94\x8c\x01b\x94\x8c\x01B\x94\x87\x94\x00\x00\x00\x00\x00\x00\x00'
    
    # Deserialize the byte stream back into an object
    data = pickle.loads(byte_stream)
    print(data)  # Output: [1, 2, 3, {'a': 'A', 'b': 'B'}]
    
  5. یک شی سفارشی را سریال کنید:

    import pickle
    
    class Person:
        def __init__(self, name, age):
            self.name = name
            self.age = age
    
        def __repr__(self):
            return f"Person(name={self.name}, age={self.age})"
    
    person = Person("Bob", 25)
    
    # Serialize the custom object to file
    with open('person.pkl', 'wb') as file:
        pickle.dump(person, file)
    
    # Deserialize the custom object from file
    with open('person.pkl', 'rb') as file:
        loaded_person = pickle.load(file)
    print(loaded_person)  # Output: Person(name=Bob, age=25)
    

سناریوهای استفاده

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

ملاحظات

امنیت: هنگامی که داده‌ها را سریال‌زدایی می‌کنید محتاط باشید، زیرا ترشی می‌تواند کد دلخواه را اجرا کند که به طور بالقوه منجر به خطرات امنیتی می‌شود. تا حد امکان از بارگذاری داده ها از منابع نامعتبر خودداری کنید.
سازگاری: نسخه‌های مختلف پایتون ممکن است به‌طور کامل با داده‌های ترشی سازگار نباشند، مخصوصاً هنگام استفاده از نسخه‌های مختلف پایتون.
عملکرد: سریال سازی و سریال زدایی از اشیاء بزرگ ممکن است بر عملکرد تأثیر بگذارد. استفاده از قالب‌های سریال‌سازی جایگزین (مانند JSON) را در نظر بگیرید.

12. pprint – قالب بندی ساختارهای داده پیچیده برای چاپ

معرفی ویژگی

pprint یک ماژول در کتابخانه استاندارد پایتون است که توانایی چاپ ساختارهای داده پیچیده را به صورت قالب بندی شده فراهم می کند. این می تواند ساختارهای داده تودرتو (مانند لغت نامه ها، لیست ها، تاپل ها) را در قالبی خواناتر خروجی دهد و به توسعه دهندگان کمک کند تا داده ها را بهتر اشکال زدایی کرده و مشاهده کنند.

مثال های استفاده

  1. یک فرهنگ لغت تودرتو چاپ کنید:

    from pprint import pprint
    
    data = {
        'name': 'Alice',
        'age': 30,
        'address': {
           'street': '123 Main St',
           'city': 'Wonderland'
        },
        'hobbies': ['reading', 'hiking', 'coding']
    }
    pprint(data)
    

    خروجی:

    {'address': {'city': 'Wonderland', 'street': '123 Main St'},
     'age': 30,
     'hobbies': ['reading', 'hiking', 'coding'],
     'name': 'Alice'}
    
  2. یک لیست طولانی چاپ کنید:

    from pprint import pprint
    
    long_list = list(range(100))
    pprint(long_list)
    

    خروجی:

    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
    10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
    20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
    30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
    40, 41, 42, 43, 44, 45, 46, 47, 48, 49,
    50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
    60, 61, 62, 63, 64, 65, 66, 67, 68, 69,
    70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
    80, 81, 82, 83, 84, 85, 86, 87, 88, 89,
    90, 91, 92, 93, 94, 95, 96, 97, 98, 99]
    
  3. یک فرهنگ لغت با تورفتگی سفارشی چاپ کنید:

    from pprint import pprint
    
    data = {
        'name': 'Bob',
        'age': 25,
        'address': {
            'street': '456 Elm St',
            'city': 'Metropolis'
        },
        'hobbies': ['cycling', 'cooking', 'traveling']
    }
    pprint(data, indent=2)
    

    خروجی:

    {'name': 'Bob',
     'age': 25,
     'address': {'street': '456 Elm St', 'city': 'Metropolis'},
     'hobbies': ['cycling', 'cooking', 'traveling']}
    
  4. یک لیست با عرض سفارشی چاپ کنید:

    from pprint import pprint
    
    data = list(range 50)
    pprint(data, width=40)
    

    خروجی:

    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
     10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
     20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
     30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
     40, 41, 42, 43, 44, 45, 46, 47, 48, 49]
    
  5. استفاده کنید pprint برای چاپ یک شیء سفارشی:

    from pprint import pprint
    
    class Person:
        def __init__(self, name, age, address):
            self.name = name
            self.age = age
            self.address = address
    
        def __repr__(self):
            return f"Person(name={self.name}, age={self.age}, address={self.address})"
    
    person = Person("Charlie", 40, "789 Maple St")
    pprint(person)
    

    خروجی:

    Person(name=Charlie, age=40, address=789 Maple St)
    

سناریوهای استفاده

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

ملاحظات

pprint برای ساختارهای داده پیچیده تر مناسب است. برای ساختارهای داده ساده، با استفاده از منظم print کارآمدتر است.
تنظیم کردن indent و width پارامترها می توانند فرمت خروجی و خوانایی را کنترل کنند، تنظیمات مناسب را با توجه به نیازهای خاص انتخاب کنند.

13. re – ابزار کنترل بیان منظم

معرفی ویژگی

این re ماژول در پایتون برای مدیریت عبارات منظم، ارائه قابلیت های قدرتمند برای تطبیق رشته ها، جستجو و جایگزینی استفاده می شود. عبارات منظم الگوهایی برای رشته های تطبیق هستند که می توانند برای دستکاری متن پیچیده مانند استخراج داده ها یا تأیید فرمت های ورودی استفاده شوند.

توابع رایج عبارتند از:

  • re.match(): مسابقات از ابتدای رشته.
  • re.search(): اولین مسابقه را در کل رشته جستجو می کند.
  • re.findall(): تمام رشته های فرعی که با عبارت منظم مطابقت دارند را پیدا می کند.
  • re.sub(): قسمت های همسان را با رشته دیگری جایگزین می کند.
  • re.split(): رشته را بر اساس عبارت منظم تقسیم می کند.

مثال های استفاده

  1. تطبیق ساده:

    import re
    
    pattern = r'\d+'  # Matches one or more digits
    result = re.match(pattern, '123abc')
    print(result.group())  # Output: 123
    

    تابع re.match از ابتدای رشته شروع به تطبیق می کند. در مثال بالا، با ارقام 123 در ابتدا مطابقت داشت.

  2. اولین مسابقه را در یک رشته پیدا کنید:

    result = re.search(r'[a-z]+', '123abc456')
    print(result.group())  # Output: abc
    

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

  3. همه موارد منطبق را پیدا کنید:

    result = re.findall(r'\d+', '123abc456def789')
    print(result)  # Output: ['123', '456', '789']
    

    re.findall تمام قسمت هایی را که با الگو مطابقت دارند را برمی گرداند و در یک فرم لیست ارائه شده است.

  4. رشته های همسان را جایگزین کنید:

    result = re.sub(r'\d+', '#', '123abc456')
    print(result)  # Output: #abc#
    

    re.sub همه ارقام مطابق با # را جایگزین می کند.

  5. رشته را بر اساس یک عبارت منظم تقسیم کنید:

    result = re.split(r'\d+', 'abc123def456ghi')
    print(result)  # Output: ['abc', 'def', 'ghi']
    

    re.split رشته را به ارقام تقسیم می کند و در نتیجه یک لیست ایجاد می شود.

  6. استخراج اطلاعات خاص با استفاده از گروه های نامگذاری شده:

    pattern = r'(?P\d{4})-(?P\d{2})-(?P\d{2})'
    match = re.search(pattern, 'Date: 2024-09-07')
    print(match.group('year'))  # Output: 2024
    print(match.group('month'))  # Output: 09
    print(match.group('day'))  # Output: 07
    

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

سناریوهای استفاده

اعتبار سنجی فرم: فرمت هایی مانند ایمیل، شماره تلفن و کد پستی را اعتبارسنجی کنید.

email="example@domain.com"
pattern = r'^\w+@[a-zA-Z_]+?\.[a-zA-Z]{2,3}$'
if re.match(pattern, email):
    print("Valid email")
else:
    print("Invalid email")
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

استخراج داده ها: داده های فرمت خاصی را از متون استخراج کنید، مانند تاریخ، زمان، و مقدار.

text="Total cost is $123.45, and date is 2024-09-07."
cost = re.search(r'\$\d+\.\d{2}', text).group()
print(cost)  # Output: $123.45
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

تجزیه و تحلیل گزارش: تجزیه و تحلیل گزارش های سیستم، استخراج مهرهای زمانی، آدرس های IP، پیام های خطا و غیره.

log = '192.168.0.1 - - [07/Sep/2024:14:55:36] "GET /index.html HTTP/1.1" 200 2326'
ip = re.search(r'\d+\.\d+\.\d+\.\d+', log).group()
print(ip)  # Output: 192.168.0.1
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

جایگزینی رشته و قالب بندی: جایگزینی متن پیچیده یا قالب بندی را به سرعت از طریق تطبیق الگو انجام دهید.

text="User ID: 1234, Date: 2024-09-07"
new_text = re.sub(r'\d+', '[ID]', text)
print(new_text) #Output: User ID: [ID], Date: [ID]
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

ملاحظات

تطبیق حریص در مقابل غیر حریص: به‌طور پیش‌فرض، عبارات منظم حریص هستند و سعی می‌کنند تا آنجا که ممکن است کاراکترها را مطابقت دهند. مطابقت غیر حریصانه را می توان با ?، به عنوان مثال، r' به دست آورد<.>?>'.
** از رجکس بیش از حد پیچیده اجتناب کنید: اگرچه عبارات منظم قدرتمند هستند، اما حفظ عبارات پیچیده ممکن است دشوار باشد. توصیه می شود آنها را ساده نگه دارید.
** شخصیت های فرار
*: برخی از کاراکترها در عبارات منظم معانی خاصی دارند (مانند .، *، +)، و هنگام استفاده باید با \ حذف شوند.

14. timeit.timeit – اندازه گیری زمان اجرای کد

معرفی ویژگی

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

مثال های استفاده

  1. زمان اجرای کد ساده را اندازه گیری کنید:

    import timeit
    
    # Measure the execution time of a single line of code
    execution_time = timeit.timeit('x = sum(range(100))', number=10000)
    print(f"Execution time: {execution_time} seconds")
    
  2. زمان اجرای یک تابع را اندازه گیری کنید:

    import timeit
    
    def test_function():
        return sum(range(100))
    
    execution_time = timeit.timeit(test_function, number=10000)
    print(f"Execution time: {execution_time} seconds")
    
  3. استفاده کنید timeit برای اندازه گیری زمان اجرای یک بلوک کد:

    import timeit
    
    code_to_test = '''
    result = 0
    for i in range(1000):
        result += i
    '''
    
    execution_time = timeit.timeit(code_to_test, number=1000)
    print(f"Execution time: {execution_time} seconds")
    
  4. استفاده کنید timeit برای اندازه گیری زمان اجرا با setup کد:

    import timeit
    
    setup_code = '''
    import random
    data = [random.randint(1, 100) for _ in range(1000)]
    '''
    
    test_code = '''
    sorted_data = sorted(data)
    '''
    
    execution_time = timeit.timeit(test_code, setup=setup_code, number=1000)
    print(f"Execution time: {execution_time} seconds")
    
  5. اندازه گیری عملکرد سناریوهای پیچیده:

    import timeit
    
    setup_code = '''
    import numpy as np
    data = np.random.rand(1000)
    '''
    
    test_code = '''
    mean_value = np.mean(data)
    '''
    
    execution_time = timeit.timeit(test_code, setup=setup_code, number=1000)
    print(f"Execution time: {execution_time} seconds")
    

سناریوهای استفاده

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

ملاحظات

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

15. uuid – تولید شناسه های منحصر به فرد

معرفی ویژگی

این uuid ماژول در کتابخانه استاندارد پایتون برای تولید شناسه های منحصر به فرد جهانی (UUID) استفاده می شود. UUID ها شناسه های استاندارد شده ای هستند که به طور گسترده در سناریوهایی که نیاز به شناسایی منحصر به فرد دارند، مانند کلیدهای اصلی پایگاه داده، شناسه های شی در سیستم های توزیع شده و غیره استفاده می شوند. uuid ماژول از روش‌های مختلفی برای تولید UUID پشتیبانی می‌کند، از جمله روش‌هایی که بر اساس زمان، اعداد تصادفی و مقادیر هش هستند.

مثال های استفاده

  1. یک UUID مبتنی بر زمان ایجاد کنید:

    import uuid
    
    uuid1 = uuid.uuid1()
    print(f"UUID1: {uuid1}")
    

    خروجی:

    UUID1: 123e4567-e89b-12d3-a456-426614174000
    
  2. یک UUID مبتنی بر اعداد تصادفی ایجاد کنید:

    import uuid
    
    uuid4 = uuid.uuid4()
    print(f"UUID4: {uuid4}")
    

    خروجی:

    UUID4: 9d6d8a0a-1e2b-4f8c-8c0d-15e16529d37e
    
  3. یک UUID مبتنی بر نام ایجاد کنید:

    import uuid
    
    namespace = uuid.NAMESPACE_DNS
    name = "example.com"
    uuid3 = uuid.uuid3(namespace, name)
    print(f"UUID3: {uuid3}")
    

    خروجی:

    UUID3: 5d5c4b37-1c73-3b3d-bc8c-616c98a6a3d3
    
  4. یک UUID مبتنی بر هش SHA-1 ایجاد کنید:

    import uuid
    
    namespace = uuid.NAMESPACE_URL
    name = "http://example.com"
    uuid5 = uuid.uuid5(namespace, name)
    print(f"UUID5: {uuid5}")
    

    خروجی:

    UUID5: 9b3f7e1d-f9b0-5d8b-9141-fb8b571f4f67
    
  5. UUID را به رشته تبدیل کنید:

    import uuid
    
    uuid_obj = uuid.uuid4()
    uuid_str = str(uuid_obj)
    print(f"UUID as string: {uuid_str}")
    

    خروجی:

    UUID as string: 2d5b44b8-4a0f-4f3d-a2b4-3c6e1f7f6a3b
    

سناریوهای استفاده

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

ملاحظات

نسخه های UUID: uuid ماژول نسخه های مختلفی از UUID ها را ارائه می دهد (مانند UUID1، UUID4، UUID3 و UUID5)، نسخه مناسب را بر اساس نیازهای واقعی انتخاب کنید.
ملاحظات عملکرد: برای برنامه هایی که تعداد زیادی UUID تولید می کنند، برای بهینه سازی عملکرد، نسخه UUID مناسب را انتخاب کنید. به عنوان مثال، UUID4 بر اساس اعداد تصادفی است و سریعتر تولید می شود، اما ممکن است خطرات برخورد داشته باشد. UUID1 بر اساس اطلاعات زمان و گره است، تولید کندتر است اما منحصر به فرد بالاتری را ارائه می دهد.
سازگاری قالب: هنگام انتقال UUID ها بین برنامه ها و سیستم های مختلف، از سازگاری در قالب اطمینان حاصل کنید، معمولاً از قالب رشته استاندارد برای انتقال استفاده می شود.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا