Telegram Web
Python Positional-Only Parameters

اینو توی کتاب Fluent Python دیده بودم.
با مثال یادش بگیریم:
def hello(a, b, /):
print(a, b)

توی تعریف تابع hello از اسلش استفاده کردم. این اسلش کارش برعکس ستاره است تقریبا
کاربرد * اینجوری بود
def bye(a, *, b):
print(a, b)

حالا بخواهیم دو تا تابع رو اجرا کنیم:
hello('salam', 'ali') #ok
bye('bye', b='ali') #ok

hello(a='salam', b='ali') #error
hello(a='salam', 'ali') #error
hello('salam', b='ali') #error
bye('bye', 'ali') #error


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

اگه میدونستی 👎🏻 بده لطفا
👍22👎822
کلاس های تو در تو در پایتون یا inner class یا nested class

توی پایتون میشه یه کلاس رو توی کلاس دیگه تعریف کرد، اینجوری مثلا:
class Car:
def __init__(self, name, engine_type):
self.name = name
self.engine = self.Engine(engine_type)

class Engine:
def __init__(self, engine_type):
self.type = engine_type

def start(self):
print(f"{self.type} engine is starting...")

اینجوری استفاده کنیم:
my_car = Car("405", "tu5")
print(my_car.name) #405
my_car.engine.start() # tu5 engine is staring

این حرکت زیاد مرسوم نیست، ولی مثلا برای این کدهای بالا، کلاس Engine تا Car وجود نداشته باشه، قابل استفاده نیست. و یه جورایی صراحتا مشخص کردیم که کلاس Engine وابسته اس به Car.

استفاده ش توی جنگو رو که می دونید کجاهاس؟
توی مدل ها، توی فرم ها و... وقتی یه سری تنظیمات رو توی Meta تعریف می کنیم.
البته، توی جنگو مثل کدی که بالا نوشتم استفاده نشده، این تیکه کد از سورس جنگوعه و داره از Meta استفاده میکنه:
class ModelBase(type):
"""Metaclass for all models."""

def __new__(cls, name, bases, attrs, **kwargs):
super_new = super().__new__

# Also ensure initialization is only performed for subclasses of Model
# (excluding Model class itself).
parents = [b for b in bases if isinstance(b, ModelBase)]
if not parents:
return super_new(cls, name, bases, attrs)

# Create the class.
module = attrs.pop("__module__")
new_attrs = {"__module__": module}
classcell = attrs.pop("__classcell__", None)
if classcell is not None:
new_attrs["__classcell__"] = classcell
attr_meta = attrs.pop("Meta", None)
# Pass all attrs without a (Django-specific) contribute_to_class()
# method to type.__new__() so that they're properly initialized
# (i.e. __set_name__()).

اون attr_meta داره تنظیمات رو بر میداره و...
🆒52
رفتار تابع id توی پایتون ضایع م کرد

توی جلسه دوم آموزش جنگو برای همکاران هنرستان
یه جا خواستم با تابع id یه مفهومی رو توضیح بدم
اینو نوشتم:
m = 10
m1 = 10
print(id(m))
print(id(m1))

خروجی هر دو print یه عدد شد.

دلیلش رو می دونستید؟
لطفا 👎🏻 بزنید اگه نمی دونستی.

ویرایش:

در راستای فهمیدن دلیلش به اینم رسیدم:
https://docs.python.org/3/c-api/long.html?utm_source=chatgpt.com#c.PyLong_FromLong

لینکه میگه:
CPython keeps an array of integer objects for all integers between -5 and 256. When you create an int in that range you actually just get back a reference to the existing object.


اینم ببینید و خواستید تست کنید:
# tuples
t = ('A', 'B')
print(id(t))

t1 = ('A', 'B')
print(id(t1))

# strings
s1 = 'ABC'
s2 = 'ABC'
print(id(s1))
print(id(s2))


به قول کامنت دوستان Immutable هستن.

Python cache the strings and tuple objects and use them to save memory space.
Caching can work only with immutable objects, notice that integer, string, tuples are immutable. So Python implementation can use caching to save memory space and improve performance.
👎26👍182
Forwarded from Milad Hatami
Media is too big
VIEW IN TELEGRAM
⭕️💢کافه جنگو💢⭕️

آموزش جنگو پایتون
جلسه : دوم
موضوع این جلسه: ارث بری در پایتون و ساخت اولین پروژه جنگو

رشته: فنی پایه 11 کتب جدید

پایه: 11 فنی و 11 و 12 کاردانش

درس: وب

سطح: متوسط

مدرس: مهندس حاتمی

🔻🔻🔻🔻🔻🔻

#کافه_دانش
#کافه_جنگو
#جلسه_2
#سطح_متوسط_پیشرفته
#توسعه_وب
#یادگیری_مفاهیم_وب
#دبیرخانه_کشوری_رایانه
#مستقر_در_استان_زنجان
#کانال_شاد_دبیرخانه_رایانه
@Yvt_computer
#کافه_دانش
www.tgoop.com/Zncd_ir_Cafe
#آدرس_سایت_دبیرخانه_رایانه
ZNCD.ir
👍6🔥32
جنگولرن
⭕️💢کافه جنگو💢⭕️ آموزش جنگو پایتون جلسه : دوم موضوع این جلسه: ارث بری در پایتون و ساخت اولین پروژه جنگو رشته: فنی پایه 11 کتب جدید پایه: 11 فنی و 11 و 12 کاردانش درس: وب سطح: متوسط مدرس: مهندس حاتمی 🔻🔻🔻🔻🔻🔻 #کافه_دانش #کافه_جنگو #جلسه_2 #سطح_متوسط_پیشرفته…
این ویدئو رو برای همکاران آموزش و پرورش ساختم.
کلاس به صورت آنلاین بود.
بیش از 45 نفر در کلاس شرکت داشتن. و استقبال خوبی شد، خداروشکر.

لینک آپارت این ویدئو:
https://www.aparat.com/v/tczby8h

ویدئو جلسه دوم - آپارات
سال آینده ظاهرا قراره پایتون و جنگو به کلاس 11 رشته شبکه و نرم افزار رایانه، فنی و حرفه ای اضافه بشه.

توی این ویدئو که برای همکاران هنرستانی برگزار شد، ارث بری در پایتون رو توضیح دادیم.
بعدش رفتیم سراغ نکاتی در مورد نصب جنگو و نسخه های جنگو
سپس venv مون رو ساختیم و بعد از نصب آخرین نسخه جنگو، پروژه رو ایجاد کردیم و اجراش کردیم.
سعی کردم مطالبی که توی این قسمت مطرح کردم، بیشتر ارتباط با جنگو رو داشته باشه.
توی این دوره قراره بر اساس کتاب Django 5 By Example پیش بریم. ولی مفاهیمی فراتر از کتاب رو قطعا پوشش خواهیم داد.
تمرکز این دوره بر پرسش و پاسخ خواهد بود. که بتونیم به همکاران راهنمایی بدیم.


اگه نکته ای یا انتقادی دارید، توی کامنت ها بنویسید لطفا
👏31
جنگولرن
رفتار تابع id توی پایتون ضایع م کرد توی جلسه دوم آموزش جنگو برای همکاران هنرستان یه جا خواستم با تابع id یه مفهومی رو توضیح بدم اینو نوشتم: m = 10 m1 = 10 print(id(m)) print(id(m1)) خروجی هر دو print یه عدد شد. دلیلش رو می دونستید؟ لطفا 👎🏻 بزنید اگه نمی…
نظر فنی یکی از دوستان در مورد این پست:

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

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

https://docs.python.org/3/reference/executionmodel.html#structure-of-a-program

A Python program is constructed from code blocks. A block is a piece of Python program text that is executed as a unit. The following are blocks: a module, a function body, and a class definition. Each command typed interactively is a block.

شما باید ببینید code block شما که به عنوان یک unit داره compile میشه چیه !

یکم عقب تر بیام، اینکه int های توی اون رنج موقع startup مفسر کش میشن یه حرف درسته و همه جا هم درسته. اینکه immutable type ها میتونن که share بشن (چون share شدنشون مشکل ساز نیست + مموری ذخیره میشه) حرف درستیه.

شما وقتی توی "شل" پایتون میزنید:

>>> a = 1000
>>> b = 1000
>>> a is b
False
>>> c = 999; d = 999
>>> c is d
True

به متن داکیومنت دقت کنید، الان توی a و b این ۲ تا توی ۲ تا code block یا unit مختلف هستن . از طرفی توی اون رنجی که همیشه کش میشن هم نیستن در نتیجه id ها فرق میکنه. توی c و d این ۲ تا باهم compile شدن. با اینکه توی اون رنج نیستن ولی یک آبجکت ساخته شده برای optimization.

یه مثال دیگه با code block عه فانکشن:

>>> def fn1():
...     a = 1000
...     b = 1000
...     print("id of 'a'", id(a))
...     print("id of 'b'", id(b))
...
>>> def fn2():
...     c = 1000
...     print("id of 'c'", id(c))
...
>>> fn1()
id of 'a' 2441294813616
id of 'b' 2441294813616
>>> fn2()
id of 'c' 2441294813264
>>>

اون 1000 ای که توی fn2 هست id ش یه چیزه. ولی توی fn1 هر دوتا یکی شدن.

حالا یه code block مرسوم چیه؟ ماژول! دلیل اینکه اون دوست توی ماژولش عدد خارج از اون رنج مینوشت و id ها یکی میشدن اینه که خب ماژول هم یه code block عه.

یه کامنت دیگه هم سعی کرده بودن با محاسبات این رو نقض کنن:
>>> e = 100 ; f = 10 ** 2
>>> e is f
True

یه چیزی تو پایتون هست به اسم peephole opmization (یکی از مراحل compile هست) این یکی از کارایی که میکنه میاد محاسبات رو انجام میده موقع کامپایل و دیگه ده به توان ۲ رو یک راست مینویسه ۱۰۰.  پس این محاسبات رو میتونید literal تو کد بنویسید برای خوانایی. هیچ کاهش پرفورمنسی ندارید.

یه چیز دیگم که یادم رفت اضافه کنم اینا implementation detail هستن. ممکنه تو نسخه های مختلف تغییر کنه. ولی فرقی به حال ما که برنامه نویس هستیم نمیکنه چون کدی نمیزنیم که وابسته به این مدل رفتار ها باشه.  صرفا دونستنش جالبه برای کسی که علاقه داره
👏81😁1🤮1
سخن بزرگان

ما توی الستیک سرچ دنبال سرچ ایم؟
نه ما دنبال relevancy هستیم.
یعنی نزدیک ترین جواب به جواب ما
👍10
2025/10/24 15:37:09
Back to Top
HTML Embed Code: