اجازه ندهید کد به شما موهای خاکستری بدهد! 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
.
مثال های استفاده
-
بررسی کنید که آیا همه اعداد یک لیست مثبت هستند یا خیر:
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 ' 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\d{2})-(?P \d{2}) گروههای نامگذاریشده اجازه نامگذاری هر زیررشته همسان را میدهند و استخراج بعدی را تسهیل میکنند.
سناریوهای استفاده
اعتبار سنجی فرم: فرمت هایی مانند ایمیل، شماره تلفن و کد پستی را اعتبارسنجی کنید.
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 ها بین برنامه ها و سیستم های مختلف، از سازگاری در قالب اطمینان حاصل کنید، معمولاً از قالب رشته استاندارد برای انتقال استفاده می شود.