پرش به محتوا

بهینه‌سازی‌های تاثیرگذار بر متغیرها در پایتون

از متسین

در پایتون، کدها پیشز ([؟] معناء:پیشز [آوایش: [[و:پیشز|آواثاء:پیشز]]؛ تلفظ «پیشز»: 📥]) اجرشتن ([؟] معناء:اجرشتن [آوایش: [[و:اجرشتن|آواثاء:اجرشتن]]؛ تلفظ «اجرشتن»: 📥]) در ماشین مجازی، به مرحله بهینش [؟ آوایش: [[و:بهینش|آواثاء:بهینش]] 📥؛ معنی «بهینش» به فارسی «معناء:بهینش» و معادل «بهینش» به انگلیسی «عدلاء:بهینش» است] ورویشند ([؟] معناء:ورویشند.می [آوایش: [[و:ورویشتن|آواثاء:ورویشند]]؛ تلفظ «ورویشتن»: 📥]). دو مورد از بهینش‌های [؟ آوایش: [[و:بهینش|آواثاء:بهینش‌های]] 📥؛ معنی «بهینش‌های» به فارسی «معناء:بهینش‌های» و معادل «بهینش» به انگلیسی «عدلاء:بهینش» است] اهمئا ([؟] معناء:اهمئا [آوایش: [[و:اهمئا|آواثاء:اهمئا]]؛ تلفظ «اهمئا»: 📥]) که یگانشتن ([؟] معناء:یگانشتن [آوایش: [[و:یگانشتن|آواثاء:یگانشتن]]؛ تلفظ «یگانشتن»: 📥]) دلماءهای [؟ آوایش: [[و:دلماء|آواثاء:دلماءهای]] 📥؛ معنی «دلماءهای» به فارسی «معناء:دلماءهای» و معادل «دلماء» به انگلیسی «عدلاء:دلماء» است] برخی نوعپال‌ها [؟ آوایش: [[و:نوعپال|آواثاء:نوعپال‌ها]] 📥؛ معنی «نوعپال‌ها» به فارسی «معناء:نوعپال‌ها» و معادل «نوعپال» به انگلیسی «عدلاء:نوعپال» است] باعثد ([؟] معناء:باعثد/می [آوایش: [[و:باعثتن|آواثاء:باعثد]]؛ تلفظ «باعثتن»: 📥])، این‌ها ئند ([؟] معناء:ئند [آوایش: [[و:ئدن|آواثاء:ئند]]؛ تلفظ «ئدن»: 📥]):

داندن ([؟] معناء:داندن [آوایش: [[و:داندن|آواثاء:داندن]]؛ تلفظ «داندن»: 📥]) این بهینش‌ها [؟ آوایش: [[و:بهینش|آواثاء:بهینش‌ها]] 📥؛ معنی «بهینش‌ها» به فارسی «معناء:بهینش‌ها» و معادل «بهینش» به انگلیسی «عدلاء:بهینش» است] تاید ([؟] معناء:تاید.مید [آوایش: [[و:تاید|آواثاء:تاید]]؛ تلفظ «تاید»: 📥]) بانجَد ([؟] معناء:بانجَد [آوایش: [[و:انجدن|آواثاء:بانجَد]]؛ تلفظ «انجدن»: 📥]) (به):

🛠

بهینش [؟ آوایش: [[و:بهینش|آواثاء:بهینش]] 📥؛ معنی «بهینش» به فارسی «معناء:بهینش» و معادل «بهینش» به انگلیسی «عدلاء:بهینش» است] پایتون وابسته به نسخه و اسسش‌های [؟ آوایش: [[و:اسسش|آواثاء:اسسش‌های]] 📥؛ معنی «اسسش‌های» به فارسی «معناء:اسسش‌های» و معادل «اسسش» به انگلیسی «عدلاء:اسسش» است] متفمئا ([؟] معناء:متفمئا [آوایش: [[و:متفمئا|آواثاء:متفمئا]]؛ تلفظ «متفمئا»: 📥]) آن ئَد ([؟] معناء:ئَد [آوایش: [[و:ئدن|آواثاء:ئَد]]؛ تلفظ «ئدن»: 📥])؛ اطلع‌های ([؟] معناء:اطلع‌های [آوایش: [[و:اطلع|آواثاء:اطلع‌های]]؛ تلفظ «اطلع»: 📥]) بیِنشته ([؟] معناء:بیِنشته [آوایش: [[و:بیِنشتن|آواثاء:بیِنشته]]؛ تلفظ «بیِنشتن»: 📥]) در این نویسماء ([؟] معناء:نویسماء [آوایش: [[و:نویسماء|آواثاء:نویسماء]]؛ تلفظ «نویسماء»: 📥]) برای اسسش [؟ آوایش: [[و:اسسش|آواثاء:اسسش]] 📥؛ معنی «اسسش» به فارسی «معناء:اسسش» و معادل «اسسش» به انگلیسی «عدلاء:اسسش» است] CPython نسخه ۳.۹ ئَد ([؟] معناء:ئَد [آوایش: [[و:ئدن|آواثاء:ئَد]]؛ تلفظ «ئدن»: 📥]):

import platform  
import sys  

# یافتن نسخه پایتون
python_version = platform.python_version()  
# یافتن اَسِسِش پایتون 
python_implementation = platform.python_implementation()  

print(f"Python Version: {python_version}")  
print(f"Python Implementation: {python_implementation}")
خروجی
Python Version: 3.9.2
Python Implementation: CPython

معناء:بهینش (بهینش) معناء:بنشماء (بنشماء)

در این بهینش [؟ آوایش: [[و:بهینش|آواثاء:بهینش]] 📥؛ معنی «بهینش» به فارسی «معناء:بهینش» و معادل «بهینش» به انگلیسی «عدلاء:بهینش» است] برخی از دلماءهای [؟ آوایش: [[و:دلماء|آواثاء:دلماءهای]] 📥؛ معنی «دلماءهای» به فارسی «معناء:دلماءهای» و معادل «دلماء» به انگلیسی «عدلاء:دلماء» است] int -عددهای بین [-۵, ۲۵۶]- و str - رشته‌های شبیه شناسین ([؟] معناء:شناسین [آوایش: [[و:شناسین|آواثاء:شناسین]]؛ تلفظ «شناسین»: 📥]) (حتی اگر نویسه نخست اشان ([؟] معناء:اشان [آوایش: [[و:اشان|آواثاء:اشان]]؛ تلفظ «اشان»: 📥]) عدد بئَد ([؟] معناء:بئَد [آوایش: [[و:ئدن|آواثاء:بئَد]]؛ تلفظ «ئدن»: 📥])) - بیلحاظ ([؟] معناء:بیلحاظ [آوایش: [[و:بیلحاظ|آواثاء:بیلحاظ]]؛ تلفظ «بیلحاظ»: 📥]) به چگونه ایجدن ([؟] معناء:ایجدن [آوایش: [[و:ایجدن|آواثاء:ایجدن]]؛ تلفظ «ایجدن»: 📥]) اشان ([؟] معناء:اشان [آوایش: [[و:اشان|آواثاء:اشان]]؛ تلفظ «اشان»: 📥])، در تدک ([؟] معناء:تدک [آوایش: [[و:تدک|آواثاء:تدک]]؛ تلفظ «تدک»: 📥]) یگانه بشوند:

a = int(12)
b = int('12')
c = int('1100', 2)

print(f"a: {hex(id(a))}\nb: {hex(id(b))}\nc: {hex(id(c))}")
print(f"a is b -> {a is b}, a is c -> {a is c}")

print('=' * 20)

a = '0_some_long_string'
b = '0_some_long_string'

print(f"a is b -> {a is b}")
خروجی
a: 0x7ff3dfc6d680
b: 0x7ff3dfc6d680
c: 0x7ff3dfc6d680
a is b -> True, a is c -> True
====================
a is b -> True
⚠︎دقت. این بهینش [؟ آوایش: [[و:بهینش|آواثاء:بهینش]] 📥؛ معنی «بهینش» به فارسی «معناء:بهینش» و معادل «بهینش» به انگلیسی «عدلاء:بهینش» است] تنها بر شیءهای int (نه هرنوع ([؟] معناء:هرنوع [آوایش: [[و:هرنوع|آواثاء:هرنوع]]؛ تلفظ «هرنوع»: 📥]) عددی) که بین [-۵, ۲۵۶] باشند، انجشد ([؟] معناء:انجشد [آوایش: [[و:انجشتن|آواثاء:انجشد]]؛ تلفظ «انجشتن»: 📥]):
a = 10.0
b = 10.0

print(f"a: {hex(id(a))}", f"b: {hex(id(b))}")
print(f"a is b -> {a is b}")

print("=" * 20)

a = 257
b = 257

print(f"a: {hex(id(a))}", f"b: {hex(id(b))}")
print(f"a is b -> {a is b}")
خروجی
a: 0x70325b90f9d0 b: 0x70325b561e50
a is b -> False
====================
a: 0x70325b562bd0 b: 0x70325b561f30
a is b -> False
⚠︎دقت. و تنها بر رشته‌ها هی ([؟] معناء:هی [آوایش: [[و:هی|آواثاء:هی]]؛ تلفظ «هی»: 📥]) که تاید ([؟] معناء:تاید [آوایش: [[و:تاید|آواثاء:تاید]]؛ تلفظ «تاید»: 📥]) بعنوان نام شناسین [؟ آوایش: [[و:شناسین|آواثاء:شناسین]] 📥؛ معنی «شناسین» به فارسی «معناء:شناسین» و معادل «شناسین» به انگلیسی «عدلاء:شناسین» است] ببهرشند ([؟] معناء:ببهرشند [آوایش: [[و:بهرشتن|آواثاء:ببهرشند]]؛ تلفظ «بهرشتن»: 📥])، با این متفماء ([؟] معناء:متفماء [آوایش: [[و:متفماء|آواثاء:متفماء]]؛ تلفظ «متفماء»: 📥]) که نویسه نخست اشان ([؟] معناء:اشان [آوایش: [[و:اشان|آواثاء:اشان]]؛ تلفظ «اشان»: 📥]) تاید ([؟] معناء:تاید [آوایش: [[و:تاید|آواثاء:تاید]]؛ تلفظ «تاید»: 📥]) عدد بئَد ([؟] معناء:بئَد [آوایش: [[و:ئدن|آواثاء:بئَد]]؛ تلفظ «ئدن»: 📥]): [البته تاید ([؟] معناء:تاید [آوایش: [[و:تاید|آواثاء:تاید]]؛ تلفظ «تاید»: 📥]) همه شیءهای str را بنشمد ([؟] معناء:بنشمد [آوایش: [[و:بنشمدن|آواثاء:بنشمد]]؛ تلفظ «بنشمدن»: 📥]): «درون‌ریزی شیءها در پایتون»
a = 'some long string'
b = 'some long string'
print(a is b)
خروجی
False
⚠︎دقت. این بهینش ([؟] معناء:بهینش [آوایش: [[و:بهینش|آواثاء:بهینش]]؛ تلفظ «بهینش»: 📥]) چون بر شیءهای دگرشناپذیر [؟ آوایش: [[و:دگرشناپذیر|آواثاء:دگرشناپذیر]] 📥؛ معنی «دگرشناپذیر» به فارسی «معناء:دگرشناپذیر» و معادل «دگرشناپذیر» به انگلیسی «عدلاء:دگرشناپذیر» است] (مثلا int و str) انجشد ([؟] معناء:انجشد [آوایش: [[و:انجشتن|آواثاء:انجشد]]؛ تلفظ «انجشتن»: 📥])، امن ئد ([؟] معناء:ئد [آوایش: [[و:ئدن|آواثاء:ئد]]؛ تلفظ «ئدن»: 📥]).

اثر معناء:بنشمدن (بنشمدن) بر سرعت معناء:ارزجش (ارزجش)

بنشمدن ([؟] معناء:بنشمدن [آوایش: [[و:بنشمدن|آواثاء:بنشمدن]]؛ تلفظ «بنشمدن»: 📥]) هنگام جملدن ([؟] معناء:جملدن [آوایش: [[و:جملدن|آواثاء:جملدن]]؛ تلفظ «جملدن»: 📥]) کدها و پردازش متن‌ها، بویژه هنگامیکه شمار ارزجدن‌ها ([؟] معناء:ارزجدن‌ها [آوایش: [[و:ارزجدن|آواثاء:ارزجدن‌ها]]؛ تلفظ «ارزجدن»: 📥]) بسیار زیاد باشد، سودمند ئد ([؟] معناء:ئد [آوایش: [[و:ئدن|آواثاء:ئد]]؛ تلفظ «ئدن»: 📥])؛ چون بجای سانجدن ([؟] معناء:سانجدن [آوایش: [[و:سانجدن|آواثاء:سانجدن]]؛ تلفظ «سانجدن»: 📥]) رشته‌ها با عملپال [؟ آوایش: [[و:عملپال|آواثاء:عملپال]] 📥؛ معنی «عملپال» به فارسی «معناء:عملپال» و معادل «عملپال» به انگلیسی «عدلاء:عملپال» است] ==، تاید ([؟] معناء:تاید [آوایش: [[و:تاید|آواثاء:تاید]]؛ تلفظ «تاید»: 📥]) آن‌ها را با is، که بسیار سریع‌تر ئَد ([؟] معناء:ئَد [آوایش: [[و:ئدن|آواثاء:ئَد]]؛ تلفظ «ئدن»: 📥])، بنتارجد ([؟] معناء:بنتارجد [آوایش: [[و:بنتارجد|آواثاء:بنتارجد]]؛ تلفظ «بنتارجد»: 📥]):

import sys
import time

times = 10_000_000

def compare_eq(n):
    a = 'This is a long string...' * 500
    b = 'This is a long string...' * 500
    for i in range(n):
        result = a == b

def compare_is(n):
    a = sys.intern('This is a long string...' * 500)
    b = sys.intern('This is a long string...' * 500)
    for i in range(n):
        result = a is b

start = time.perf_counter()
compare_eq(times)
end = time.perf_counter()
print(f"Equality:\t {end - start}")

start = time.perf_counter()
compare_is(times)
end = time.perf_counter()
print(f"Interning:\t {end - start}")
خروجی
Equality:	 2.832107431953773
Interning:	 0.3474436930846423

معناء:بهینش (بهینش) معناء:بهلانماء (بهلانماء)

در پایتون، این نوع بهینش [؟ آوایش: [[و:بهینش|آواثاء:بهینش]] 📥؛ معنی «بهینش» به فارسی «معناء:بهینش» و معادل «بهینش» به انگلیسی «عدلاء:بهینش» است]، که در مرحله جملدن [؟ آوایش: [[و:جملدن|آواثاء:جملدن]] 📥؛ معنی «جملدن» به فارسی «معناء:جملدن» و معادل «جملدن» به انگلیسی «عدلاء:جملدن» است] کد ئَد ([؟] معناء:ئَد [آوایش: [[و:ئدن|آواثاء:ئَد]]؛ تلفظ «ئدن»: 📥])، برای بهیندن ([؟] معناء:بهیندن [آوایش: [[و:بهیندن|آواثاء:بهیندن]]؛ تلفظ «بهیندن»: 📥]) بخش‌های کوچک کد بانجشد ([؟] معناء:بانجشد [آوایش: [[و:انجشتن|آواثاء:بانجشد]]؛ تلفظ «انجشتن»: 📥])؛ بطوریکه:

def my_func():
    a = 24 * 60
    
print(my_func.__code__.co_consts)
خروجی
(None, 1440)
def my_func():
    b =(1, 2) * 2
    f = ['a', 'b'] * 3

print(my_func.__code__.co_consts)
خروجی
(None, (1, 2, 1, 2), 'a', 'b', 3)
def my_func(e):
    if e in [1, 2, 3]:
        pass
    
print(my_func.__code__.co_consts)
خروجی
(None, (1, 2, 3))