در پایتون، شناسه ها (نام متغیرها، توابع، کلاس ها و غیره) باید طبق قوانین تعریف شوند. نام هایی که از قوانین پیروی نمی کنند نمی توانند به عنوان شناسه استفاده شوند و منجر به خطا می شوند.
اطلاعات زیر در اینجا ارائه شده است.
- نویسه هایی که می توانند و نمی توانند در شناسه ها (نام ها) استفاده شوند
- کاراکترهای اسکی
- کاراکتر یونیکد
- نرمال سازی (به عنوان مثال در ریاضیات)
- بررسی کنید که آیا رشته یک شناسه معتبر است:
isidentifier()
- کلماتی که نمی توانند به عنوان شناسه (نام) استفاده شوند (کلمات رزرو شده)
- کلماتی که نباید به عنوان شناسه استفاده شوند (نام)
- قراردادهای نامگذاری برای PEP8
توضیحات زیر در پایتون 3 ارائه شده است و ممکن است در پایتون 2 متفاوت باشد.
نویسه هایی که می توانند و نمی توانند در شناسه ها (نام ها) استفاده شوند
کاراکترهایی را نشان می دهد که می توانند و نمی توانند به عنوان شناسه (نام) استفاده شوند.
علاوه بر این، اگرچه چیزهای زیادی برای نوشتن وجود دارد، اساساً تنها چیزی که باید به خاطر بسپارید موارد زیر است.
- از حروف بزرگ و کوچک، اعداد و زیرخط استفاده کنید.
- حرف اول (اول) نمی تواند عدد باشد.
کاراکترهای اسکی
کاراکترهای ASCII که می توانند به عنوان شناسه (نام) استفاده شوند عبارتند از حروف بزرگ و کوچک (A~Z,a~z)، اعداد (0~9) و زیرخط (_). حروف الفبا به حروف بزرگ و کوچک حساس است.
AbcDef_123 = 100
print(AbcDef_123)
# 100
نمادهای غیر از زیرخط را نمی توان استفاده کرد.
# AbcDef-123 = 100
# SyntaxError: can't assign to operator
همچنین نمی توان از اعداد در ابتدا (حرف اول) استفاده کرد.
# 1_abc = 100
# SyntaxError: invalid token
در ابتدا می توان از خط زیر نیز استفاده کرد.
_abc = 100
print(_abc)
# 100
با این حال، توجه داشته باشید که خط زیر در ابتدا ممکن است معنای خاصی داشته باشد.
کاراکتر یونیکد
از پایتون 3 می توان از کاراکترهای یونیکد نیز استفاده کرد.
変数1 = 100
print(変数1)
# 100
همه کاراکترهای یونیکد قابل استفاده نیستند و بسته به دسته بندی یونیکد، برخی از آنها قابل استفاده نیستند. برای مثال نمی توان از علائمی مانند علائم نگارشی و پیکتوگرام استفاده کرد.
# 変数。 = 100
# SyntaxError: invalid character in identifier
# ☺ = 100
# SyntaxError: invalid character in identifier
به مستندات رسمی کدهای دسته یونیکد که می توان استفاده کرد مراجعه کنید.
در بسیاری از موارد، استفاده از حروف چینی و غیره مزیتی ندارد، زیرا فقط می توان از کاراکترهای یونیکد (بدون خطا) استفاده کرد.
نرمال سازی (به عنوان مثال در ریاضیات)
کاراکترهای یونیکد برای تفسیر به شکل عادی NFKC تبدیل می شوند. به عنوان مثال، الفبای تمام عرض به الفبای نیمه عرض (کاراکترهای ASCII) تبدیل می شوند.
توجه داشته باشید که حتی اگر کد منبع نمایش متفاوتی را نشان دهد، همان شی در نظر گرفته می شود و رونویسی می شود.
ABC = 100
ABC = -100
print(ABC)
# -100
print(ABC)
# -100
print(ABC is ABC)
# True
بررسی کنید که آیا رشته یک شناسه معتبر است: isidentifier()
معتبر بودن یا نبودن یک رشته به عنوان شناسه را می توان با روش رشته isidentifier() بررسی کرد.
اگر به عنوان شناسه معتبر باشد true و اگر نامعتبر باشد false را برمی گرداند.
print('AbcDef_123'.isidentifier())
# True
print('AbcDef-123'.isidentifier())
# False
print('変数1'.isidentifier())
# True
print('☺'.isidentifier())
# False
کلماتی که نمی توانند به عنوان شناسه (نام) استفاده شوند (کلمات رزرو شده)
برخی از کلمات (کلمات رزرو شده) وجود دارند که نمی توانند به عنوان شناسه استفاده شوند حتی اگر رشته های معتبر به عنوان شناسه (نام) باشند.
از آنجایی که یک کلمه رزرو شده یک رشته معتبر به عنوان یک شناسه است، isidentifier() true را برمی گرداند، اما اگر به عنوان یک شناسه استفاده شود، خطا رخ می دهد.
print('None'.isidentifier())
# True
# None = 100
# SyntaxError: can't assign to keyword
برای دریافت لیستی از کلمات رزرو شده و بررسی اینکه آیا یک رشته یک کلمه رزرو شده است، از ماژول کلمه کلیدی کتابخانه استاندارد استفاده کنید.
کلماتی که نباید به عنوان شناسه استفاده شوند (نام)
به عنوان مثال، نام توابع داخلی پایتون را می توان به عنوان شناسه استفاده کرد، بنابراین می توانید مقادیر جدیدی را به عنوان متغیر به آنها اختصاص دهید.
به عنوان مثال، len() یک تابع داخلی است که تعداد عناصر یک لیست یا تعداد کاراکترهای یک رشته را برمی گرداند.
print(len)
# <built-in function len>
print(len('abc'))
# 3
اگر مقدار جدیدی را به این نام len اختصاص دهید، تابع اصلی بازنویسی می شود و غیرقابل استفاده می شود. توجه داشته باشید که هنگام تخصیص مقدار جدید هیچ خطایی یا اخطاری چاپ نخواهد شد.
print(len('abc'))
# 3
len = 100
print(len)
# 100
# print(len('abc'))
# TypeError: 'int' object is not callable
یکی دیگر از اشتباهات رایج استفاده از list = [0, 1, 2] است که استفاده از list() را غیرممکن می کند. مراقب باش.
قراردادهای نامگذاری برای PEP8
PEP مخفف Python Enhancement Proposal است، سندی که ویژگیهای جدید و سایر جنبههای پایتون را توصیف میکند.
PEP stands for Python Enhancement Proposal. A PEP is a design document providing information to the Python community, or describing a new feature for Python or its processes or environment.
PEP 1 — PEP Purpose and Guidelines | Python.org
PEP8 هشتمین مورد است و “راهنمای سبک برای کد پایتون”، یعنی راهنمای سبک پایتون را توصیف می کند.
قراردادهای نامگذاری نیز ذکر شده است.
برای جزئیات بیشتر به لینک بالا مراجعه کنید، اما به عنوان مثال، سبک نوشتاری زیر توصیه می شود.
- مدول
lowercase_underscore
- حروف کوچک + زیرخط
- بسته
lowercase
- تمام حروف کوچک
- کلاس ها، استثنائات
CapitalizedWords
(CamelCase
)- حرف اول یک کلمه را بزرگ بنویسید، بدون خط زیر
- توابع، متغیرها و روش ها
lowercase_underscore
- حروف کوچک + زیرخط
- مقدار ثابت
ALL_CAPS
- حروف بزرگ + خط زیر خط
با این حال ، اگر سازمان شما قراردادهای نامگذاری خاص خود را ندارد ، توصیه می شود از PEP8 پیروی کنید.