رفتن به مطلب

آموزش پایتون


Mohammad Aref

ارسال های توصیه شده

سینتکس

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

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
به برنامه‌نویسان پایتون پیشنهاد می‌شود نیز آورده شده است؛ رعایت این اصول به یکدستی کدهای جامعه پایتون کمک می‌کند.

 

سینتکس (

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

 

سطرها

مفسر پایتون و همچنین کاربر، کدهای درون هر ماژول را در قالب تعدادی سطر می‌بینند؛ سطرهای فیزیکی (Physical Lines) و منطقی (Logical Lines). سطرهای فیزیکی در واقع همان سطرهایی است که توسط ویرایشگرهای متن شماره‌گذاری می‌شوند و به راحتی توسط کاربر قابل تشخیص هستند ولی سطرهای منطقی برداشت مفسر از اجزای برنامه است؛ هر سطر منطقی بیانگر یک دستور (Statement) پایتون است. برای نمونه دستور print در نسخه 2x پایتون را در نظر بگیرید:

 

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

 

در نمونه کد بالا: سطر یکم، یک دستور انتساب (Assign) را نشان می‌دهد؛ این دستور مقدار سمت راست خودش را به متغیر msg نسبت می‌دهد. کم و بیش با دستور سطر دوم نیز آشنا هستید این دستور مقدار مربوط به متغیر دریافتی را بر روی خروجی نمایش می‌دهد. در اینجا دو دستور یعنی دو سطر منطقی وجود دارد که هر یک در قالب یک سطر فیزیکی پیاده‌سازی شده است.

 

هر چند که پیشنهاد می‌شود همیشه هر سطر فیزیکی تنها شامل یک سطر منطقی باشد ولی یک سطر فیزیکی را می‌توان شامل چند سطر منطقی نیز در نظر گرفت:

 

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

در این حالت می‌بایست سطرهای منطقی (یا همان دستور‌ها)، توسط کاراکتر ; (Semicolon) از یکدیگر جدا گردند.

 

گاهی نیز بهتر است برای خوانایی بیشتر، یک سطر منطقی را در قالب چند سطر فیزیکی پیاده‌سازی نماییم:

 

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

 

در نمونه کد بالا: دو سطر فیزیکی نخست از دید مفسر به شکل تنها یک سطر منطقی دیده می‌شود. در پایتون برای شکستن یک دستور در چند سطر فیزیکی از کاراکتر \ (Backslash) استفاده می‌گردد. البته توجه داشته باشید که از \ نمی‌توان برای شکستن سطر توضیح (Comment) استفاده کرد و همچنین نمی‌توان پس از آن هیچ توضیحی درج کرد.

 

[

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
]: طول هر سطر فیزیکی نباید از ۷۹ کاراکتر بیشتر شود. برای متن‌های طولانی نیز مانند توضیح (Comment) و Docstring طول هر سطر فیزیکی باید حداکثر ۷۲ کاراکتر در نظر گرفته شود.

 

برای خوانایی بیشتر بهتر است دستور‌های طولانی شکسته شوند. دستورهایی که شامل { }، [ ] و ( ) هستند را می‌توان بدون استفاده از \ شکست و در قالب چند سطر فیزیکی نوشت:

 

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

 

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

 

«سطرهای خالی» (Blank lines): سطری که تنها حاوی فضای خالی (Spaceها یا Tabها) باشد، توسط مفسر نادیده گرفته می‌شود و به بایت‌کد ترجمه نمی‌گردد. از این سطرها می‌توان برای خوانایی بیشتر کدها بهره گرفت - مانند سطر سوم در نمونه کد پایین:

 

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

لینک به دیدگاه

مستندسازی

هر چند اساس طراحی زبان پایتون بر خوانایی بالای کد است ولی «مستندسازی» (Documentation) برنامه یعنی استفاده از امکاناتی همچون ارایه توضیح در کدها می‌تواند به درک و خوانایی هر چه بهتر کدهای برنامه برای مراجعات آینده برنامه‌نویس و افراد دیگری که می‌خواهند بر روی توسعه آن فعال باشند یا از آن استفاده کنند نیز بسیار مفید خواهد بود. در این بخش به بررسی دو امکان درج Comment و Docstring برای مستند‌سازی برنامه می‌پردازیم.

 

توضیح

یک «توضیح» (Comment) در زبان پایتون توسط کاراکتر # آغاز می‌شود و با پایان سطر فیزیکی هم پایان می‌پذیرد. توضیح‌ها نیز مانند سطرهای خالی توسط مفسر نادیده گرفته شده و به بایت‌کد ترجمه نمی‌شوند.

 

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

 

توضیح در پایتون تنها به شکل تک سطری تعریف شده است و برای درج توضیح‌هایی با بیش از یک سطر فیزیکی باید توجه داشت که هر سطر به صورت جداگانه می‌بایست با # آغاز شود.

 

[

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
]: متن توضیح‌ با یک فضای خالی (Space) بعد از # آغاز شود. در توضیح‌های چند سطری برای جداسازی پاراگراف‌ها از یک سطر توضیح بدون متن (سطری خالی که با # آغاز می‌شود) استفاده شود. هنگام درج توضیح در همان سطرهای دستور، توضیح حداقل به اندازه دو فضای خالی از انتهای دستور فاصله داده شود.

 

 

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

 

Docstring

در کنار «توضیح»؛ ”Docstring“ نیز امکان دیگری در پایتون برای ارایه توضیح بیشتر درباره کدهای برنامه است. متن Docstring توسط سه علامت نقل قول (""" یا ''') شروع و پایان می‌یابد [

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
] و معمولا از آن به عنوان نخستین دستور در ماژول، کلاس، تابع و متد استفاده می‌شود که در این شرایط Docstring توسط مفسر نادیده گرفته نمی‌شود و در زمان اجرا نیز با استفاده از صفت __doc__ قابل دستیابی است:

 

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

 

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

 

n\ بیانگر پایان سطر جاری و رفتن به سطر بعدی است - برای مشاهده درست این چنین متن‌هایی که حاوی n\ هستند می‌بایست از print استفاده نمایید.

 

مخاطب متن «توضیح‌» موجود در کد، کاربرانی می‌باشند که آن کد را توسعه می‌دهند در حالی که مخاطب اصلی Docstring‌ها کاربرانی است که از کد مربوط به آن استفاده می‌کنند بنابراین Docstring باید به توضیح چگونگی استفاده از کد (به صورت خاص: ماژول، تابع، کلاس و متد) بپردازد.

 

Docstring باید به عنوان دستور نخست درج گردد و این نکته برای یک ماژول در صورت وجود سطرهای اجرای مفسر و تعیین کد‌گذاری به صورت پایین در نظر گرفته می‌شود:

 

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

 

بسته‌ها (Packages) نیز می‌توانند Docstring داشته باشند؛ برای این منظور Docstring باید درون ماژول init__.py__ نوشته شود.

 

Docstring‌ها در هر جای دیگری از کدهای برنامه نیز به عنوان جایگزینی برای توضیح‌های چند سطری قابل استفاده هستند که در این حالت مفسر آن‌ها نادیده گرفته و دیگر قابل دستیابی نیستند.

لینک به دیدگاه

تورفتگی

بلاک‌بندی در زبان پایتون توسط «تورفتگی» (Indentation) سطرها مشخص می‌گردد؛ این عمل در زبان‌هایی مانند C توسط آکولاد { } انجام می‌شود. تورفتگی در واقع عبارت است از میزان فضای خالی (Spaceها و Tabها) هر دستور از ابتدای سطر فیزیکی خود. نکته مهم این است که تمام دستورهای موجود در یک بلاک می‌بایست به یک میزان فاصله نسبت به سرآیند خود تورفتگی داشته باشند:

 

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

 

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

 

در تصویر پایین به شیوه تورفتگی‌ بلاک‌ها نسبت به سرآیند خود توجه نمایید:

0zekzfx66i9tsq07eqs.png

 

[

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
]: در ایجاد تورفتگی استفاده از کلید Space نسبت به کلید Tab ترجیح داده می‌شود - برای هر مرتبه تورفتگی از چهار کلید Space استفاده نمایید.

روش رایج ایجاد تورفتگی استفاده از کلید Space است و سعی کنید هرگز به صورت ترکیبی از کلیدهای Sapce و Tab استفاده نکنید هر چند که در نسخه 3x پایتون امکان استفاده ترکیبی از این دو کلید وجود ندارد! اگر مایل به استفاده از کلید Tab هستید باید به صورت یکدست تمام تورفتگی‌های برنامه خود را فقط با استفاده از آن ایجاد نمایید.

 

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

 

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

 

در دستورهایی به مانند پایین نیز ایجاد تراز آرگومان‌ها هم حالت مناسبی است:

 

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

لینک به دیدگاه
  • 1 ماه بعد...

دستور

«دستور» (Statement) واحدی از کد است که شامل کلمه‌های کلیدی بوده، اجرا می‌گردد و کاری را به انجام می‌رساند. در پایتون دو نوع دستور وجود دارد:

دستورهای ساده (

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
) : دستورهایی هستند که تنها در یک سطر منطقی پیاده‌سازی می‌شوند. مانند دستور import، دستور pass، دستور انتساب، فراخوانی تابع و...

دستورهای مرکب (
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
) : گروهی از دستورها هستند که می‌توانند یک بخشی (مانند: دستور def - تعریف تابع) یا چند بخشی (مانند: دستور شرط if / elif / else) باشند؛ هر بخش (Clause) نیز شامل یک سرآیند (Header) و یک بدنه (Suite) است. هر سرآیند با یک کلمه کلیدی آغاز می‌شود و با یک : (Colon) نیز پایان می‌پذیرد. بدنه پس از سرآیند و با رعایت سطح تورفتگی بیشتر نسبت به آن نوشته می‌شود:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

 

لینک به دیدگاه

شناسه

«شناسه» (Identifier) نامی است نمادین که به دلخواه کاربر تعیین و از آن برای شناسایی (identify) متغیر‌ها، توابع، کلاس‌ها، ماژول‌ها یا دیگر اشیا پایتون از یکدیگر استفاده می‌شود. انتخاب شناسه در پایتون نکاتی دارد که می‌بایست از سوی کاربر در نظر گرفته شود:

  • تنها با یکی از حروف بزرگ یا کوچک الفبا انگلیسی (A..Z یا a..z) یا کاراکتر _ (Underscore) شروع شود.
  • در ادامه می‌تواند هیچ یا چند حرف الفبا انگلیسی (کوچک و بزرگ)، کاراکتر _ و عدد (9..0) - با هر ترتیبی - آورده شود.
  • هیچ محدودیتی در طول شناسه وجود ندارد و می‌تواند از یک تا هر تعداد کاراکتر باشد.

با یک نگاه حرفه‌ای‌تر، ساختار لغوی (Lexical) شناسه به شکل پایین بیان می‌شود [

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
]:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

در تعاریف 

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
: از پرانتز ( ) برای گروه‌بندی استفاده می‌شود. نماد | به معنی یا می‌باشد و از آن برای جدا‌سازی دو عبارت متفاوت استفاده می‌شود. نماد * به معنی صفر بار تکرار یا بیشتر می‌باشد. [درسی جداگانه به regex اختصاص خواهد یافت]

  • استفاده از کاراکترهای خاص به مانند .، !، @، #، $، % و... مجاز نمی‌باشد.
  • استفاده از «فاصله» (Space) مجاز نمی‌باشد.
  • استفاده از «خط تیره» (Hyphen) یعنی کاراکتر - برای جداسازی کلمه‌ها در نام ماژول مجاز است ولی پیشنهاد نمی‌شود.

برای نمونه - چند شناسه درست:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

برای نمونه - چند شناسه نادرست:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

همانطور که از درس یکم می‌دانیم، پایتون یک زبان حساس به حرف (Case Sensitive) است و مفسر آن بین حروف کوچک (Lowercase) و بزرگ (Uppercase) به مانند a و A تمایز می‌گذارد.

برای نمونه، تمامی شناسه‌های CaR ،cAR ،CAr ،caR ،cAr ،Car ،car و CAR متفاوت با یکدیگر ارزیابی می‌شوند.

در پایتون از تکنیکی به نام 

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
 استفاده می‌شود. توسط این تکنیک و تنها با شیوه انتخاب شناسه‌ها، نقشی خاص به آن‌ها داده می‌شود:

  • شناسه خصوصی (Private) ماژول: اگر شناسه‌ای با یک کاراکتر _ آغاز شود (و نه پایان پذیرد) توسط مفسر پایتون در این نقش ارزیابی می‌گردد. مانند: name_ (و نه: _name_ یا _name)
  • شناسه خصوصی کلاس: اگر شناسه‌ای با دو کاراکتر _ آغاز شود (و نه پایان پذیرد) توسط مفسر پایتون در این نقش ارزیابی می‌گردد. مانند: name__ (و نه: __name__ یا __name)

جدا از این مورد، در پایتون صفت‌ها (Attributes) و متدهای خاصی وجود دارد که از پیش تعریف گشته‌اند و برای مفسر مفهوم مشخصی دارند. شناسه این صفت‌ها و متدها با دو کاراکتر _ آغاز می‌شود و همینطور پایان می‌پذیرد؛ درست به مانند صفت‌های __class__ و __doc__ که پیش از این استفاده کردیم.

بنابراین به هنگام استفاده از کاراکتر _ در شناسه (به خصوص در ابتدای آن) باید آگاهی کافی داشته باشیم. [به موارد اشاره شده در آینده پرداخته خواهد شد.]

[

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
]: شیوه استاندارد انتخاب شناسه برای کلاس‌، تابع، متد و متغیر به صورت پایین است:

کلاس‌ها به شیوه PascalCase - یعنی تنها حرف نخست هر کلمه بزرگ باشد و کلمه‌ها بدون فاصله کنار هم قرار بگیرند - نام‌گذاری شوند. مانند: AnimalClass ،Animal.
نام انتخابی برای یک تابع و متد‌ نیز باید تنها شامل حروف کوچک باشد و برای جداسازی کلمه‌ها از _ استفاده شود. مانند: bubble_sort ،binary_search و... البته می‌توان از شیوه camelCase (همانند PascalCase با این تفاوت که حرف نخست کلمه یکم هم می‌بایست حرف کوچک باشد) نیز استفاده نماییم. مانند: bubbleSort ،binarySearch و...
نام‌ متغیرها تنها باید شامل حروف کوچک باشد که کلمه‌های آن توسط _ از یکدیگر جدا شده‌اند. مانند: body_color ،color و...

برای شناسه‌های تک حرفی توجه داشته باشید که از انتخاب حروف l (اِل کوچک) و I (آی بزرگ) اجتناب کنید زیرا این دو حرف در برخی فونت‌ها شبیه هم هستند و البته همینطور حرف O (اُ بزرگ) که می‌تواند شبیه به صفر باشد.

کلمه‌های کلیدی
نکته پایانی در مورد شناسه‌ها این است که: نمی‌توان یک شناسه را برابر با یکی از «کلمه‌های کلیدی» (keywords) پایتون انتخاب کرد. کلمه‌های کلیدی در واقع شناسه‌هایی هستند که از پیش برای مفسر پایتون تعریف شده‌اند و معنای مشخصی برای آن دارند. فهرست این کلمه‌های در پایتون به صورت پایین است:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

در کتابخانه استاندارد پایتون ماژولی به نام keyword وجود دارد [

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
]:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

تابع ()iskeyword بررسی می‌کند که آیا آرگومان دریافتی یکی از کلمه‌های کلیدی می‌باشد یا نه؛ در صورت تایید مقدار True را باز می‌گرداند. kwlist نیز در واقع یک شی لیست حاوی تمام کلمه‌های کلیدی است.
شاید کنجکاو باشید تعداد کلمه‌های کلیدی پایتون را بدانید؛ برای این منظور نیازی به شمارش دستی نیست!:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

تابع ()len تعداد اعضای یک شی را باز می‌گرداند [

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
].

برخی نکات:

  • در پایتون 3x: تنها کلمه‌های کلیدی True ،False و None با حرف بزرگ آغاز می‌شوند.
  • در پایتون 2x: کلمه‌های کلیدی True ،False و None تعریف نشده است.
  • در پایتون 3x: از آنجا که print به یک تابع تبدیل گشته، کلمه کلیدی print تعریف نشده است.

[

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
]: چنانچه می‌خواهید شناسه‌ای مشابه با یکی از کلمه‌های کلیدی انتخاب نمایید؛ می‌توانید این کار را با استفاده از یک _ در انتهای کلمه مورد نظر به انجام برسانید. مانند: _def

لینک به دیدگاه
  • 2 هفته بعد...

متغیر

یک «متغیر» (Variable) در بیشتر زبان‌های برنامه‌نویسی به مانند C بیانگر محلی در حافظه می‌باشد که مقداری در آن قرار گرفته است. برای نمونه سه دستور پایین را در نظر بگیرید:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

در نمونه کد بالا: دستور ;int a = 1 بیان می‌کند که محلی از حافظه به نام a برای نگهداری اعداد صحیح (integers) در نظر گرفته شود و مقدار 1 در آن قرار بگیرد؛ از این پس متغیر a معرف این نقطه از حافظه می‌باشد (درست به مانند یک جعبه) که اکنون حاوی مقدار 1 است (شکل پایین - یک). در ادامه دستور ;a = 2 موجب می‌شود مقدار پیشین متغیر a حذف (از جعبه خارج) و مقدار جدید یعنی 2 در آن قرار داده شود (شکل پایین - دو). توجه داشته باشید که در این دسته زبان‌ها، نوع (type) توسط متغیر تعیین می‌گردد و تلاش برای قرار دادن نوع داده دیگری به غیر از int در متغیر a (به مانند 3.7 یا "string") موجب بروز خطا در زمان کامپایل می‌گردد. دستور سوم:‌ ;int b = a در ابتدا موجب ایجاد یک محل جدید در حافظه با نام b و از نوع همان اعداد صحیح می‌شود و سپس مقدار درون متغیر a را درون آن کپی می‌کند؛ اکنون دو محل برای نگهداری نوع داده int در حافظه موجود است که هر دو حاوی مقدار 2 می‌باشند (شکل پایین - سه).

do.php?imgf=153950537607161.png

ولی در پایتون:

یک متغیر چیزی نیست جز یک نام که به یک شی مشخص در حافظه ارجاع (یا اشاره) دارد. تعریف متغیر در پایتون بسیار ساده است و تنها با انتساب (Assign) شی به یک نام ایجاد می‌گردد. نمادِ =، عملگر (Operator) انتساب در پایتون است. در تعریف متغیر پایتون برخلاف آنچه در زبان C مشاهده کردیم ;int a،‌ نیازی به تعیین نوع برای آن نیست چرا که نوع (type) از روی شی تعیین می‌گردد و یک متغیر در طول زمان اجرا می‌تواند به شی‌هایی از انواع متفاوت ارجاع داشته باشد. برای نمونه سه دستور پایین را در نظر بگیرید:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

مفسر با رسیدن به دستور a = 1، سه گام پایین را انجام می‌دهد:

  1. یک شی از نوع اعداد صحیح و مقدار 1 را در جایی از حافظه ایجاد می‌کند. چرا اعداد صحیح؟ نوع توسط شی تعیین می‌گردد و 1 عددی است صحیح!.
  2. متغیرِ (یا همان نامِ) a را در جایی دیگر از حافظه ایجاد می‌کند (البته در صورتی که قبلا ایجاد نشده باشد).
  3. یک پیوند از متغیر a به شی 1 برقرار می‌کند. به این پیوند «ارجاع» (Reference) گفته می‌شود که به صورت یک اشاره‌گر (Pointer) در حافظه پیاده‌سازی می‌گردد.

do.php?imgf=153950545234541.png

انتساب شی دیگری (که می‌تواند از هر نوع دیگری باشد) به یک متغیر موجود؛ موجب حذف ارجاع قبلی آن و ارجاع به شی جدید می‌شود. دستور a = 2 موجب ایجاد شی 2، حذف ارجاع متغیر a به شی 1 و ایجاد ارجاعی جدید از متغیر a به شی 2 می‌شود. هر متغیر نامی است برای اشاره به یک شی؛ دستور b = a نیز می‌گوید: یک متغیر جدید با نام b ایجاد گردد و به همان شی‌ای ارجاع داشته باشد که متغیر a ارجاع دارد.

ولی اکنون که ارجاعی به شی 1 وجود ندارد، با آن چه می‌شود؟

هر شی شامل یک «شمارنده ارجاع» (Reference Counter) نیز هست؛ به این صورت که در هر لحظه تعداد ارجاع‌ها به آن شی را نشان می‌دهد و با هر ارجاع جدید به شی، یک واحد به آن اضافه می‌شود و با حذف هر ارجاع نیز یک واحد کاهش می‌یابد. چنانچه مقدار آن به صفر برسد، شی آن توسط تکنیک ”Garbage Collection“ پاک می‌گردد و مقدار حافظه‌ای که توسط شی مصرف شده بود آزاد می‌گردد. برای مشاهده تعداد ارجاع‌ها به یک شی می‌توان از تابع ()getrefcount درون ماژول sys استفاده کرد [

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
].

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

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

در نمونه کد بالا همانطور که مشاهده می‌نمایید تعداد ارجاع‌ها به شی 1 و 2 خارج از حد انتظار است که نشان می‌دهد در پشت صحنه اجرای مفسر پایتون نیز ارجاع‌های دیگری به این اشیا وجود دارد.

انتساب چندگانه

امکان ایجاد همزمان چند متغیر یا انتساب‌های چندگانه در پایتون وجود دارد - می‌توان چند متغیر که همگی به یک شی ارجاع دارند را ایجاد کرد:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

برای انتساب اشیا متفاوت می‌بایست از ویرگول (Comma) و تنها یک عملگر انتساب (=) استفاده نماییم - توجه داشته باشید که تعداد عناصر دو طرف عملگر انتساب می‌بایست برابر باشد:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

یکی از کاربردهای انتساب چندگانه این است که می‌توان اشیا دو متغیر را به سادگی و تنها با یک سطر دستور با یکدیگر عوض کرد:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

ثابت

«ثابت» (Constant) به متغیری گفته می‌شود که مقدار آن همواره ثابت بوده و پس از تعریف دیگر امکان تغییر مقدار آن وجود ندارد. برای نمونه یک ثابت در زبان Java به شکل پایین تعریف می‌گردد - پس از دستور پایین هر گونه تلاش برای تغییر مقدار ثابت HOURS با خطا روبرو می‌گردد:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

در پایتون امکانی برای تعریف ثابت پیش‌بینی نشده است!.

علاوه بر امکان ایجاد ثابت‌ها برخی موارد دیگر هم هست که در پایتون نادیده گرفته شده است. در واقع فرض پایتون بر این است که کاربران او افراد باهوشی هستند که از پس مشکلات برمی‌آیند؛ در نتیجه می‌گوید: من به کاربرانم اعتماد دارم پس نیازی نیست که تمام کارها را من برای آن‌ها انجام دهم، یک برنامه‌نویس باید بتواند ریسک کند!.

ولی برای ایجاد ثابت می‌توانید متغیر‌های مورد نظر خود را در ماژولی جدا تعریف نمایید و در هر جایی که لازم بود با import آن به متغیرهای مورد نظر خود دسترسی یابید:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

البته اگر تغییر‌ناپذیر بودن متغیرها برایتان اهمیت ویژه دارد می‌توانید ماژولی حاوی کد پایین ایجاد نمایید [

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
]:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

درک کد کلاس const_ نیاز مطالعه درس‌های کلاس و استثنا‌ها (Exceptions) دارد. ولی برای توضیحی کوتاه در این درس باید گفت که:

مفسر پایتون برای اینکه بداند کدام نام به کدام مقدار یا شی ارجاع دارد از ساختاری مشابه {... ,name : value} که به نوع دیکشنری (Dictionary) معروف است استفاده می‌کند؛ صفت‌های هر شی و مقدار‌ آن‌ها نیز توسط چنین ساختاری نگهداری می‌شود که برای مشاهده این دیکشنری که در واقع همان فهرستی از صفت‌‌‌های هر شی به همراه مقدار آن‌هاست می‌توانید از صفت ویژه __dict__ استفاده نمایید. متد __setattr__ [

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
] از متدهای ویژه است - این متدها امکانی هستند تا بتوانیم برای مواقعی خاص، رفتارهای مشخصی را تعریف نماییم - __setattr__ هر زمان که به یکی از صفت‌های شی‌ای از کلاس مقداری نسبت داده شود به صورت خودکار فراخوانی می‌گردد و وظیفه آن ذخیره صفت‌ها و مقدار آن‌ها در این دیکشنری است.

در اینجا رفتار متد __setattr__ کمی تغییر داده شده است به این صورت که بررسی می‌شود (سطر 9) چنانچه پیش از این صفت مورد نظر وجود نداشته باشد (یعنی: پیش از این هیچ مقداری به آن انتساب داده نشده است که بخواهد در فهرست باشد؛ تعریف متغیر را به یاد بیاورید) همراه با مقدار به فهرست صفت‌های شی افزوده خواهد شد (سطر 11)؛ در غیر این صورت یک خطا گزارش می‌گردد که موجب توقف اجرای متد شده و در نتیجه از درج جدید در فهرست که موجب تغییر مقدار صفت مورد نظر می‌گردد جلوگیری خواهد شد (سطر 10).

با ماژول‌ها هم در پایتون به صورت شی برخورد می‌شود، پس مفسر پایتون باید بداند کدام نام ماژول به کدام شی مربوط است؛ sys.modules یک دیکشنری حاوی تمام ماژول‌هایی است که در این لحظه از اجرای برنامه بارگذاری شده‌اند. [__sys.modules[__name به عضوی از این دیکشنری که نام آن __name__ است اشاره دارد. می‌دانیم که __name__ بیانگر نام ماژول جاری است؛ بنابراین عبارت [__sys.modules[__name معرف نامی است که به شی ماژول constant.py ارجاع دارد. دستور سطر 14 موجب می‌شود تا ارجاع این نام به ماژول حذف شود و در عوض به شی‌ای از کلاس const_ نسبت داده شود که این عمل موجب حذف شی ماژول از حافظه می‌گردد (چون که دیگر ارجاعی به آن وجود ندارد). از طرفی می‌دانیم که با import هر ماژول، تمام محتویان آن اجرا می گردد؛ با import ماژول constant.py و پس از اجرای کدهای آن به ويژه سطر 14 همانطور که گفته شده ماژول مربوطه حذف می‌شود ولی کدهای آن هنوز در بایت‌کد باقی است. بنابراین پس از import می‌توان به آسانی از نام ماژول که اکنون ارجاع به شی‌ای از کلاس const_ دارد برای ایجاد صفت‌ها که حکم ثابت‌های ما را دارند استفاده کرد.

[

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
]: برای نام‌گذاری ثابت‌ها (Constants) تنها از حروف بزرگ و برای جداسازی کلمه‌ها نیز از ـ استفاده شود. مانند: MAX_OVERFLOW ،TOTAL و...

لینک به دیدگاه

عملگرها

«عملگر» (Operator) به نمادی گفته می‌شود که عمل مشخصی را بر روی اشیا به انجام می‌رساند؛ به مانند عملگر انتساب = که پیش از این بررسی شد. همچنین به اشیایی که عملگر‌ بر روی آن‌ها عملی را به انجام می‌رساند «عملوند» (Operand) گفته می‌شود. عملگرها دارای انواع مختلفی هستند که در ادامه بررسی خواهیم کرد.

۱. عملگرهای حسابی (Arithmetic Operators): + - * ** / // %

  • + جمع (Addition): مقدار عملوندهای دو طرف خود را با یکدیگر جمع می‌کند. 2 + 1 حاصل: 3
  • - تفریق (Subtraction): مقدار عملوند سمت راست را از مقدار عملوند سمت چپ خود منها می‌کند: 4 - 7 حاصل: 3
  • * ضرب (Multiplication): مقدار عملوندهای دو طرف خود را در یکدیگر ضرب می‌کند: 2 * 5 حاصل: 10
  • ** توان (Exponent): مقدار عملوند سمت چپ را به توان مقدار عملوند سمت راست خود می‌رساند. 3 ** 2 حاصل: 8
  • / تقسیم (Division): مقدار عملوند سمت چپ را بر مقدار عملوند سمت راست خود تقسیم می‌کند و خارج قسمت را برمی‌گرداند:
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

همانطور که در نمونه کد بالا مشاهده می‌‌شود؛ در نسخه‌های 3x حاصل هر تقسیمی همواره به صورت عدد اعشاری محاسبه می‌گردد ولی در نسخه‌های 2x حاصل تقسیم دو عدد صحیح به همان صورت عدد صحیح محاسبه و از مقدار اعشار (در صورت وجود) صرف نظر می‌گردد. می‌توان به صورت پایین این ویژگی را به نسخه‌های 2x اضافه کرد [

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
]:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
  • // تقسیم گردشده پایین (Floor Division): مقدار عملوند سمت چپ را بر مقدار عملوند سمت راست خود تقسیم می‌کند و خارج قسمت را با حذف مقدار اعشاری (در صورت وجود) برمی‌گرداند. حاصل این عملگر برای اعداد صحیح به صورت یک عدد صحیح محاسبه می‌گردد، به نتایج نمونه کد پایین توجه نمایید:
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
  • % باقی‌ مانده (Modulus): مقدار عملوند سمت چپ را بر مقدار عملوند سمت راست خود تقسیم می‌کند و باقی‌ مانده را برمی‌گرداند. 3 % 7 حاصل: 1

۲. عملگرهای مقایسه‌ (Comparison Operators): == =! <> < > =< =>

  • == برابر (Equal): چنانچه مقدار عملوندهای دو طرف برابر باشند، True را برمی‌گرداند. 1 == 3 : False
  • =! نابرابر (Not Equal): چنانچه مقدار عملوندهای دو طرف برابر نباشند، True را برمی‌گرداند. 1 =! 3 : True
  • <> نابرابر (Not Equal): عملکرد آن همانند =! است ولی فقط در نسخه 2x پایتون قابل استفاده است. 1 <> 3 : True
  • < بزرگتر از (Greater Than): چنانچه مقدار عملوند سمت چپ بزرگتر از مقدار عملوند سمت راست آن باشد، True را برمی‌گرداند. 5 < 3 : False
  • > کوچکتر از (Less Than): چنانچه مقدار عملوند سمت چپ کوچکتر از مقدار عملوند سمت راست آن باشد، True را برمی‌گرداند. 5 > 3 : True
  • =< برابر یا بزرگتر از (Greater Than or Equal): چنانچه مقدار عملوند سمت چپ برابر یا بزرگتر از مقدار عملوند سمت راست آن باشد، True را برمی‌گرداند. 5 =< 7 : True
  • => برابر یا کوچکتر از (Less Than or Equal): چنانچه مقدار عملوند سمت چپ برابر یا کوچکتر از مقدار عملوند سمت راست آن باشد، True را برمی‌گرداند. 5 => 7 : False

۳. عملگرهای انتساب (Assignment Operators):

  • = عملوند سمت راست را به عملوند سمت چپ خود نسبت می‌دهد. چنانچه یک عبارت محاسباتی در سمت راست باشد، حاصل آن را به عملوند سمت چپ نسبت می‌دهد:
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
  • =+ =- =* =** =/ =// =% عملگرهای ترکیبی (انتساب حسابی): این عملگرها ابتدا عمل مربوط به عملگر حسابی را بر روی مقدار عملوندهای دو طرف خود به انجام می‌رسانند و سپس حاصل را به عملوند سمت چپ نسبت می‌دهند:
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

۴. عملگرهای بیتی (Bitwise Operators): & | ^ ~ >> <<

این دسته از عملگرها، عمل مشخصی را بر روی تک تک بیت‌های عملوند‌(ها) انجام می‌دهند. در پایتون برای استفاده از این عملگرها لزومی به تبدیل اعداد به پایه دو (دودویی یا باینری Binary) وجود ندارد ولی در اینجا برای مشاهده بهتر عملکرد آن‌ها از اعداد دودویی استفاده کرده‌ایم. در زبان پایتون اعداد پایه دو همواره می‌بایست با یک 0b شروع شوند:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

از تابع ()bin می‌توان برای به دست آوردن مقدار دودویی یک عدد ده‌دهی استفاده کرد؛ البته توجه داشته باشید که این تابع مقدار دودویی را در قالب متنی (نوع String) بر می‌گرداند - نکته دیگر اینکه در حالت تعاملی پایتون با وارد کردن اعداد دودویی، خروجی ده‌دهی به دست می‌آید:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
  • &: معادل AND بیتی است - تنها بیت‌هایی از خروجی آن 1 خواهند بود که هر دو بیت متناظر از عملوندهای آن 1 باشند:
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
  • |: معادل OR بیتی است - تنها بیت‌هایی از خروجی آن 0 خواهند بود که هر دو بیت متناظر از عملوندهای آن 0 باشند:
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
  • ^: معادل XOR بیتی است - تنها بیت‌هایی از خروجی آن 1 خواهند بود که هر دو بیت متناظر از عملوندهای آن مخالف یکدیگر باشند:
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
  • ~ معادل NOT بیتی و تک عملوندی است - هر یک از بیت‌های عملوند خود را از 0 به 1 و برعکس تبدیل می‌کند:
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

یک شیوه برای نمایش اعداد علامت دار دودویی، همین عمل یعنی برعکس کردن بیت‌ها (0 به 1 و 1 به 0) است که به آن نمایش «مکمل یک» (

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
) اعداد دودویی گفته می‌شود. ولی مفسر پایتون به صورت پیش‌فرض اعداد علامت دار را به شیوه رایج‌تر دیگری ارزیابی می‌کند که به نام نمایش «مکمل دو» (
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
) شناخته می‌شود؛ در این روش پس از برعکس شدن بیت‌ها، حاصل با عدد 1 جمع می‌شود. بنابراین در نمونه کد بالا حاصل NOT عدد a برابر 11111100 می‌شود که نمایش عدد 4 - در پایه دو به شیوه مکمل دو است:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

می‌توان مقدار a ~ را برابر حاصل عبارت 1 - a- در نظر گرفت. بنابراین:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
  • >> شیفت چپ (Left Shift): بیت‌های عملوند سمت چپ را به مقدار عملوند سمت راست خود به سمت چپ جابه‌جا می‌کند - مکان‌های رد شده با صفر مقداردهی می‌شوند:
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
  • << شیفت راست (Right Shift): بیت‌های عملوند سمت چپ را به مقدار عملوند سمت راست خود به سمت راست جابه‌جا می‌کند - مکان‌های رد شده با صفر مقداردهی می‌شوند:
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
  • =& =| =^ =>> =<< عملگرهای ترکیبی (انتساب بیتی): این عملگرها ابتدا عمل مربوط به عملگر بیتی را بر روی عملوندهای دو طرف خود به انجام می‌رسانند و سپس حاصل را به عملوند سمت چپ نسبت می‌دهند.

۵. عملگرهای منطقی (Logical Operators):

این عملگرها عبارتند از  not or and که در دستورات شرطی کاربرد دارند. عملگرهای منطقی عملوند‌های خود را بر اساس ارزش‌‌های True (درست) و False (نادرست) مورد ارزیابی قرار می‌دهند و نتایج خود را بر اساس جدول پایین برمی‌گردانند. عملگر not تک عملوندی است.

not b not a a or b a and b b a
True False True False False True
False True True False True False
True True False False False False
False False True True True True

عملگر and تنها زمانی که هر دو عملوند آن ارزش True داشته باشند، True را بر می‌گرداند. عملگر or تنها زمانی که هر دو عملوند آن ارزش False داشته باشند، False را برمی‌گرداند. عملگر not نیز ارزش عملود خود را برعکس می‌کند (True به False و False به True).

۶. عملگرهای عضویت (Membership Operators):

شامل دو عملگر in و not in می‌باشد که از آن‌ها برای بررسی وجود یک مقدار در میان اعضای یک دنباله (sequence مانند: رشته، لیست و...) استفاده می‌شود.

  • in: اگر مقدار عملوند سمت چپ خود را در عملوند سمت راست بیابد، True و در غیر این صورت False را بر می‌گرداند.
  • not in: اگر مقدار عملوند سمت چپ خود را در عملوند سمت راست نیابد، True و در غیر این صورت False را بر می‌گرداند.
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

۷. عملگرهای هویت (Identity Operators):

شامل دو عملگر is و is not است که از آن‌ها برای بررسی یکی بودن دو شی استفاده می‌شود.

  • is: اگر هر دو عملوند به یک شی ارجاع داشته باشند، True و در غیر این صورت False را بر می‌گرداند.
  • is not: اگر هر دو عملوند به یک شی ارجاع نداشته باشند، True و در غیر این صورت False را بر می‌گرداند.
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

اولویت‌ها

چنانچه عبارتی شامل چندین عملگر باشد؛ اینکه ابتدا عمل کدامیک بررسی شود، در حاصل نتیجه تاثیر‌گذار خواهد بود. هر کدام از عملگرها اولویتی دارند که می‌بایست بر اساس آن به ترتیب بررسی شوند. در بخش پایین به بررسی اولویت عملگرها خواهیم پرداخت - اولویت از بالا به پایین کاهش میابد:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

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

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

 

لینک به دیدگاه

انواع آماده شی - بخش اول

انواع عددی

در زبان پایتون دسته‌ای از انواع شی وجود دارد که برای کار با داده‌های عددی ایجاد گشته‌اند؛ از این جهت به عنوان «انواع عددی» (Numeric Types) شناخته می‌شوند. این انواع شی عبارتند از:

صحیح (Integer)
ممیز شناور (Floating-Point)
مختلط (Complex)
دسیمال (Decimal)
کسر (Fraction)
بولی (Boolean)

صحیح

این نوع از اشیا تمام اعداد مثبت و منفی بدون «ممیز اعشار» را شامل می‌شوند؛ مانند: 1234، 26- و...

ارایه نوع عدد صحیح از موارد اختلاف در نسخه‌های 2x و 3x می‌باشد.

در نسخه‌های 2x اعداد صحیح در قالب دو نوع int (با محدودیت اندازه) و long (بدون محدودیت اندازه) بیان می‌شوند:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

به این صورت که اگر عدد صحیحی با حرف L (اِل بزرگ) یا l (اِل کوچک) پایان یابد؛ به صورت نوع long در نظر گرفته خواهد شد. البته توجه داشته باشید چنانچه در نوع int سرریز (

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
) رخ دهد؛ خطایی به وجود نخواهد آمد و پایتون به صورت خودکار شی نوع int را به شی‌ای از نوع long تبدیل (Convert) خواهد کرد.

بیشینه و کمینه مقدار یک شی از نوع int به ترتیب با استفاده از sys.maxint و sys.maxint - 1 - قابل دریافت است که می‌توانید این مقادیر را در یک نمونه کامپیوتر با معماری ۶۴ بیتی به صورت پایین مشاهده نمایید:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

در نسخه‌های 3x اعداد صحیح تنها در قالب یک نوع int (بدون محدودیت اندازه) ارایه می‌گردد و باید توجه داشت که استفاده از حرف L (یا l) در پایان اعداد صحیح مجاز نمی‌باشد:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

در این نسخه‌ها sys.maxint حذف شده است ولی می‌توان به جای آن از sys.maxsize استفاده کرد که مقدار آن در نمونه کامپیوتر پیش برابر پایین است:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

توجه: منظور از اندازه نامحدود اعداد این است که اندازه این اشیا تنها محدود به میزان حافظه‌ (Memory) آزاد بوده و تا هر اندازه‌ای که حافظه در دسترس باشد می‌توانند در محاسبات رشد داشته باشند.

در هر دو شاخه از پایتون؛ اعداد صحیح را می‌توان علاوه بر پایه ده؛ در پایه دو (Binary)، پایه هشت (Octal) و پایه شانزده (Hexadecimal) نیز در نظر گرفت. به این صورت که:

  • اعداد پایه دو می‌بایست با یک 0b یا 0B (صفر و حرف بی کوچک یا بزرگ) آغاز گردند؛ مانند: 0b11 که برابر عدد 3 در پایه ده است:
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
  • اعداد پایه هشت می‌بایست با یک 0o یا 0O (صفر و حرف اُ کوچک یا بزرگ) آغاز گردند؛ مانند: 0o14 که برابر عدد 12 در پایه ده است:
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

همچنین در نسخه‌های 2x برای مشخص کردن عددی در این پایه می‌توان به جای 0o یا 0O، تنها از یک صفر 0 استفاده کرد:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
  • اعداد پایه شانزده می‌بایست با یک 0x یا 0X (صفر و حرف اِکس کوچک یا بزرگ) آغاز گردند؛ مانند: 0xA5 که برابر عدد 165 در پایه ده است:
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

همانطور که در نمونه کدهای بالا نیز قابل مشاهده است؛ نوع شی صحیح در پایه‌های گوناگون تفاوتی نمی‌کند (همان int است) و در پایتون تنها از یک سینتکس متفاوت برای مشخص کردن آن‌ها استفاده شده است. همچنین علاوه بر وارد کردن این اشیا در حالت تعاملی؛ تابع (یا دستور) print نیز این اشیا را به پایه ده تبدیل کرده و سپس چاپ می‌‌کند.

برای تبدیل یک عدد صحیح در پایه ده به هر یک از این پایه‌ها می‌توانید از تابع‌های آماده ()bin [

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
] برای تبدیل به پایه دو، ()oct [
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
] برای تبدیل به پایه هشت و ()hex [
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
] برای تبدیل به پایه شانزده استفاده نمایید. تنها توجه داشته باشید که خروجی هر یک از این تابع‌ها به صورت یک شی از نوع رشته یا String برگردانده می‌شود و نه یک نوع عددی:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

و برای برگرداندن پایه اعداد صحیح به پایه ده می‌توان از کلاس ()int [

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
] استفاده کرد. آرگومان‌های نمونه این کلاس به صورت (int(str, base می‌باشد؛ آرگومان یکم: str می‌بایست یک «رشته عددی» یعنی یک عدد صحیح (در هر پایه‌ای) داخل نمادهای نقل قول (Quotation) باشد که آرگومان دوم، پایه (Base) آن را مشخص می‌کند. در نهایت این کلاس یک شی int متناظر با آرگومان یکم ولی در پایه ده را برمی‌گرداند:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

توجه داشته باشید که می‌توان اعداد را بدون حرف مشخص کننده پایه (0x 0o 0b) به این کلاس ارسال کنیم. همچنین از این کلاس می‌توان برای تبدیل نوع رشته‌های عددی در پایه ده به عدد صحیح استفاده کرد. مقدار پیش‌فرض آرگومان پایه 10 است؛ بنابراین در هنگام ارسال اعداد در این پایه، نیازی به ذکر پایه 10 نمی‌باشد:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

()int بدون آرگومان یک شی صفر از نوع صحیح را برمی‌گرداند.

توجه: منظور از «رشته عددی»، رشته‌ای است که به گونه‌ای بتوان آن را به یک عدد ارزیابی نمود. مانند: "25"، "0x2F" و... که بدیهی است قرار دادن رشته‌هایی همچون "0w55" و... - که به هیچ شکلی نمی‌توان آن‌ها را به عددی در پایتون ارزیابی نمود - در آرگومان ()int موجب بروز خطا می‌گردد.

با تفاوت شیوه ارایه نوع اعداد صحیح در بین نسخه‌های 2x و 3x پایتون آشنا شده‌ایم. فقط باید توجه داشت که در نسخه‌های 2x پایتون؛ کلاس ()int [

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
] یک شی از نوع int را برمی‌گرداند و برای ایجاد اشیایی از نوع long کلاس مشابه دیگری با نام ()long [
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
] در دسترس است:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

در هر دو شاخه از پایتون؛ اعداد در پایه ده را می‌توان با نوع عددی - نه به شکل رشته عددی - نیز به تابع ()int (یا ()long) ارسال نمود.

برای به دست آوردن اندازه یا میزان حافظه گرفته شده توسط یک شی به واحد بایت (Byte) می‌توان از تابع ()getsizeof [

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
] درون ماژول sys استفاده نماییم - خروجی این تابع برای دو شی صحیح دلخواه در یک نمونه کامپیوتر ۶۴ بیتی به صورت پایین است:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

 

لینک به دیدگاه

ممیز شناور

تمام اعداد مثبت و منفی که شامل یک «ممیز اعشار» هستند در پایتون به صورت اشیایی با نوع float (معادل نوع double در زبان C) ارایه می‌شوند؛ مانند: 3.1415، .5 (برابر 5.0) و...

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

جزییات این نوع با استفاده از sys.float_info [

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
] قابل مشاهده است:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

گاهی برای نمایش اعداد از شیوه «نماد علمی» (

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
) استفاده می‌شود؛ در پایتون هم می‌توان از حرف E یا e که معادل «ضرب در ۱۰ به توانِ» می‌باشد، برای این منظور استفاده کرد.

برای نمونه: عبارت 4 × 105، به شکل 4E5 یا 4e5 بیان می‌شود. پایتون این نوع اعداد را نیز در قالب اعداد ممیز شناور (اشیایی از نوع float) ارايه می‌دهد:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

می‌توان از کلاس ()float [اسناد پایتون] برای تبدیل اعداد یا رشته‌های عددی به یک شی ممیز شناور استفاده کرد:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

()float بدون آرگومان یک شی صفر از نوع ممیز شناور را برمی‌گرداند.

چنانچه عددی از نوع ممیز شناور در آرگومان کلاس ()int قرار بگیرد؛ تنها بخش صحیح عدد برگردانده می‌شود:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

با استفاده از کلاس ()float می‌توانیم اشیایی با مقدارهای مثبت و منفی «بی‌نهایت» (infinity) برابر: inf یا infinity و «تعریف نشده» (Not a Number) برابر: NaN ایجاد نماییم - چگونگی کوچک یا بزرگ نوشتن حروف این کلمه‌ها تفاوتی در آن‌ها ایجاد نمی‌کند:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

دو شی NaN با یکدیگر برابر نیستند.

برای بررسی اینکه مقدار یک شی «بی‌نهایت» یا «تعریف نشده» است؛ می‌توان به ترتیب از تابع‌های ()isinf [اسناد پایتون] و ()isnan [

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
] درون ماژول math استفاده نماییم:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

 

لینک به دیدگاه
  • 2 هفته بعد...

مختلط

همانطور که می‌دانیم اعداد مختلط (

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
) از یک بخش حقیقی (Real) و یک بخش موهومی (Imaginary) تشکیل شده‌اند. این اعداد در پایتون الگویی برابر RealPart + ImaginaryPart j دارند که حرف j نشانگر «واحد موهومی» است. این اعداد در پایتون توسط اشیایی با نوع complex ارایه می‌شوند:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

از کلاس ()complex [

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
] می‌توان برای ایجاد یک شی complex استفاده کرد. این کلاس الگویی مشابه (complex(real, imag دارد؛ آرگومان‌های نمونه real و imag بیانگر اعدادی هستند که به ترتیب قرار است در بخش‌های حقیقی و موهومی عدد مختلط مورد نظر وجود داشته باشند. اگر هر کدام از آرگومان‌ها ارسال نگردند به صورت پیش‌فرض صفر در نظر گرفته خواهند شد:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

همچنین با استفاده از دو صفت real و imag می‌توان بخش‌های حقیقی و موهومی هر شی complex را به دست آورد. توجه داشته باشید که جدا از این که اعداد از چه نوعی در تشکیل یک نوع مختلط شرکت کرده باشند؛ بخش‌های عدد مختلط به صورت عدد ممیز شناور تفکیک می‌گردند:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

()complex توانایی دریافت یک رشته عددی و تبدیل آن به عدد مختلط را نیز دارد. تنها باید توجه داشت که نباید داخل این رشته هیچ فضای خالی وجود داشته باشد:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

توجه: امکان قرار دادن رشته عددی (مختلط) یا خود شی عدد مختلط در آرگومان کلاس‌های ()int (یا ()long) و ()float وجود ندارد و موجب بروز خطا می‌شود.

لینک به دیدگاه

دسیمال

اساس طراحی این نوع برای استفاده در مواقعی است که خطا نوع ممیز شناور قابل گذشت نیست [

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
] مانند توسعه برنامه حسابداری. مفسر پایتون برای ارایه نوع ممیز شناور به کامپیوتر از کدگذاری Binary Floating-Point (
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
) استفاده می‌کند. این کدگذاری اعداد در پایه ده که مورد نظر کاربر هستند را - مانند 0.1 - به شکل دقیق ارایه نمی‌دهد؛ به عنوان نمونه عدد  0.1 برابر با عددی نزدیک به 0.10000000000000001 در محاسبات کامپیوتر شرکت داده می‌شود؛ هر چند که این عدد بسیار نزدیک به 0.1 است ولی به هر حال خود آن نیست!. این موضوع ممکن است در برخی موارد موجب خطا منطقی در برنامه گردد:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

در نمونه کد بالا کاربر انتظار دارد که عبارت سطر دوم با ارزش درستی True ارزیابی گردد که این اتفاق نمی‌افتد.

در پایتون نوع دسیمال با ایجاد شی از کلاس  Decimal درون ماژول decimal در دسترس قرار گرفته است [

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
]. به نمونه کد پایین توجه نمایید:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

به شیوه‌های گوناگونی می‌توان شی دسیمال ایجاد کرد:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
  • از آنجا که نوع ممیز شناور دقیق نیست؛ این اعداد را حتما به صورت رشته به Decimal ارسال نمایید (سطر دوم).
  • اعداد را می‌توان به صورت یک شی تاپل (Tuple) - ساختاری مشابه: (... ,Ο, Ο, Ο) - ارسال کرد (سطر چهارم). شیوه نماد علمی را به یاد بیاورید؛ تاپل مورد نظر باید ساختاری مشابه الگو (sign, digits, exponent) داشته باشد که در آن sign مثبت بودن (توسط عدد صفر) یا منفی بودن (توسط عدد یک) را مشخص می‌کند، digits خود تاپلی است که رقم‌های دخیل را بیان می‌کند و exponent نیز بیانگر همان توان است.

میزان دقت (Precision) و عمل گرد کردن (Rounding) اعداد از نوع دسیمال با استفاده از یک شی Context قابل کنترل است؛ این شی یک سری اطلاعات پیکربندی را در اختیار اشیا دسیمال قرار می‌دهد که برای دسترسی به آن باید از تابع ()getcontext [اسناد پایتون] درون ماژول decimal استفاده کرد. تابع ()getcontext شی Context اشیا دسیمال جاری برنامه را برمی‌گرداند. در برنامه‌نویسی چندنخی (Multithreading) هر نخ (thread) شی Context خاص خود را دارد؛ بنابراین این تابع شی Context مربوط به نخ فعال را برمی‌گرداند:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

همانطور که در نمونه کد بالا مشاهده می‌شود دقت محاسبات اعداد دسیمال را می‌توان با استفاده از صفت prec شی Context به شکل دلخواه تنظیم نمود؛ مقدار پیش‌فرض این صفت 28 است. بدیهی است برای اینکه اعداد در محدوده دقت کوچکتری نسبت به طول خود قرار بگیرند نیاز به گرد شدن دارند؛ برای تنطیم عمل گرد کردن در اعداد دسیمال نیز از صفت rounding که مقدار پیش‌فرض آن "ROUND_HALF_EVEN" است، استفاده می‌شود:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

صفت rounding می‌بایست حاوی مقادیر ثابتی به شرح پایین باشد:

  • ROUND_CEILING - گرد کردن به سمت مثبت بی‌نهایت: یعنی برای اعداد مثبت ارقام خارج از محدوده حذف می‌گردند و آخرین رقم باقی مانده یک واحد افزایش می‌یابد مثلا عدد 2.52 به 2.6 گرد می‌شود. برای اعداد منفی نیز تنها اعداد خارج از محدوده حذف می‌گردند مثلا عدد 2.19- به 2.1- گرد می‌شود.
  • ROUND_FLOOR - گرد کردن به سمت منفی بی‌نهایت: یعنی برای اعداد منفی ارقام خارج از محدوده حذف می‌گردند و آخرین رقم باقی مانده یک واحد افزایش می‌یابد مثلا عدد 2.52- به 2.6- گرد می‌شود. برای اعداد مثبت نیز تنها اعداد خارج از محدوده حذف می‌گردند مثلا عدد 2.19 به 2.1 گرد می‌شود.
  • ROUND_DOWN - گرد کردن به سمت صفر: یعنی برای اعداد مثبت و منفی تنها ارقام خارج از محدوده حذف می‌گردند مثلا عدد 2.58 به 2.5 و عدد 2.58- به 2.5- گرد می‌شود.
  • ROUND_UP - گرد کردن به دور از صفر: یعنی برای اعداد مثبت و منفی ارقام خارج از محدوده حذف می‌گردند و آخرین رقم باقی مانده یک واحد افزایش می‌یابد مثلا عدد 2.52 به 2.6 و عدد 2.52- به 2.6- گرد می‌شود.
  • ROUND_HALF_DOWN - اگر رقم ابتدایی بخش حذف شده بزرگتر از 5 باشد به روش ROUND_UP و در غیر این صورت به روش ROUND_DOWN گرد می‌گردد. مثلا عدد 2.58 به 2.6 و عدد 2.55 به 2.5 گرد شده و همینطور عدد 2.58- به 2.6- و عدد 2.55- به 2.5- گرد می‌شود.
  • ROUND_HALF_UP - اگر رقم ابتدایی بخش حذف شده بزرگتر یا برابر 5 باشد به روش ROUND_UP و در غیر این صورت به روش ROUND_DOWN گرد می‌گردد. مثلا عدد 2.55 به 2.6 و عدد 2.51 به 2.5 گرد شده - همینطور عدد 2.55- به 2.6- و عدد 2.51- به 2.5- گرد می‌کند.
  • ROUND_HALF_EVEN - همانند ROUND_HALF_DOWN است ولی در مواقعی که رقم ابتدایی بخش حذف شده برابر 5 باشد رفتار آن متفاوت می‌شود: در این حالت اگر آخرین رقم باقی مانده زوج باشد به شیوه ROUND_DOWN و اگر فرد باشد به روش ROUND_UP گرد می‌گردد. مثلا عدد 2.68 به 2.7، 2.65 به 2.6 و 2.75 به 2.8 - همینطور عدد 2.68- به 2.7-، 2.65- به 2.6- و 2.75- به 2.8- گرد می‌کند.
  • ROUND_05UP - اگر بر اساس روش ROUND_DOWN آخرین رقم باقی مانده 0 یا 5 باشد؛ به روش ROUND_UP و در غیر این صورت به همان شیوه ROUND_DOWN گرد می‌کند. مثلا عدد 2.58 به 2.6 و 2.48 به 2.4 - همینطور عدد 2.58- به 2.6- و 2.48- به 2.4- گرد می‌شود.

ماژول decimal یا نوع دسیمال پایتون شامل جزییات و ویژگی‌های بسیار بیشتری است که برای آگاهی از آن‌ها می‌بایست صفحه مربوط به آن در

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
را مطالعه نمایید.

لینک به دیدگاه
  • 2 هفته بعد...

کسر

این نوع برای پشتیبانی اعداد گویا (Rational) در پایتون ارایه شده است و با ایجاد شی از کلاس Fraction درون ماژول fractions در دسترس قرار می‌گیرد [

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
]:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

علاوه‌بر روش بالا که به صورت مستقیم صورت و مخرج کسر - از نوع صحیح - مشخص شده است؛ به روش‌های دیگری نیز می‌توان یک شی کسری ایجاد نمود:

  • از یک شی ممیز شناور - بهتر است این نوع به صورت رشته وارد شود:
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

متد ()limit_denominator می‌تواند یک شی ممیز شناور را با محدود کردن مخرج در یک مقدار بیشینه به صورت تقریبی به یک شی کسر تبدیل نماید:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
  • از یک شی دسیمال:
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
  • از یک رشته کسری - صورت و مخرج کسر می‌بایست از نوع صحیح باشند:
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
  • از یک شی کسر دیگر:
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

با استفاده از دو صفت numerator و denominator می‌توان به ترتیب به صورت و مخرج شی کسر دسترسی یافت:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

از این نوع شی به سادگی می توان در انواع محاسبات ریاضی استفاده کرد؛ برای نمونه به تکه کد پایین توجه نمایید:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

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

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

ب.م.م

ماژول fractions علاوه بر نوع کسری؛ حاوی تابع ()gcd [

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
] نیز است. این تابع «بزرگترین مقسوم‌علیه مشترک» (
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
) دو عدد را برمی‌گرداند:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

 

لینک به دیدگاه

بولی

کلاسی که در پایتون از آن برای ایجاد شی بولی استفاده می‌شود (bool) در واقع یک کلاس فرزند از کلاس اعداد صحیح (int) است. این نوع شی تنها می‌تواند یکی از دو مقدار True (درست) یا False (نادرست) را داشته باشد که True برابر با عدد صحیح 1 و False برابر با عدد صحیح 0 ارزیابی می‌گردد:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

کلاس ()bool یا متد ()__bool__ مقدار بولی یک شی را برمی‌گرداند [

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
]:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

در پایتون اشیا پایین به مقدار بولی False (نادرست) ارزیابی می‌گردند:

  • None
  • False
  • شی صفر (در انواع گوناگون): 0، 0.0، 0j
  • تمام اشیا دنباله‌ خالی: ""، ()، []
  • شی دیکشنری خالی: {}
  • شی مجموعه خالی: ()set
لینک به دیدگاه
  • 1 ماه بعد...

رشته

نوع «رشته» (String) در پایتون با قرار گرفتن دنباله‌ای از کاراکترها درون یک جفت نماد نقل قول (Quotation) تکی ' ' یا دو تایی " " ایجاد می‌شود؛ به مانند "Python Strings" یا 'Python Strings' که تفاوتی با یکدیگر از نظر نوع ندارند:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

بیشتر مواقع در حالت تعاملی نیازی به استفاده از تابع (یا دستور) print نمی‌باشد ولی باید توجه داشته باشیم که حالت تعاملی بر بدون ابهام بودن این خروجی‌ها توجه دارد بنابراین آن‌ها را با جزییات نمایش می‌دهد که مناسب برنامه‌نویس است؛ برای نمونه حتما به چگونگی نمایش انواع دسیمال و کسری توجه کرده‌اید یا در نمونه کد بالا مشاهده می‌شود که نوع رشته به همراه نماد نقل قول نمایش داده شده است یا اگر متن رشته شامل کاراکترهای Escape باشد، آن‌ها را بدون تفسیر به همان شکل به خروجی می‌فرستد. اما print توجه بر خوانایی خروجی خود دارد و تا حد امکان جزییات را پنهان می‌کند؛ در نتیجه متن تمیزتری را نمایش می‌دهد که بیشتر مناسب کاربر نهایی است.

در پایتون برخلاف برخی از زبان‌ها نوع کاراکتر یا char وجود ندارد؛ در این زبان یک کاراکتر چیزی جز یک رشته با طول یک نیست.

در پایتون می‌توان از نمادهای نقل قول در داخل یکدیگر نیز بهره برد؛ در این شرایط تنها می‌بایست نماد نقل قول داخلی با بیرونی متفاوت باشد. چنانچه می‌خواهید از نماد نقل قول یکسانی استفاده نمایید، باید از کاراکترهای Escape کمک بگیرید که در ادامه بررسی خواهند شد:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

از درس پیش با Docstring آشنا شده‌ایم؛ در کاربردی دیگر از سه نماد نقل قول """ یا ''' برای ایجاد شی رشته نیز استفاده می‌شود. مزیت این نوع رشته در این است که می‌توان متن آن را به سادگی در چند سطر و با هر میزان تورفتگی دلخواه نوشت؛ این موضوع در زمان‌هایی که قصد استفاده از کدهای خاص به مانند HTML در برنامه خود داشته باشیم، بسیار مفید خواهد بود:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

دنباله‌ها

برخی از انواع شی پایتون به مانند رشته، تاپل (tuple)، لیست (list) و... با عنوان دنباله (Sequence) نیز شناخته می‌شوند. دنباله ویژگی‌هایی دارد که در اینجا به کمک نوع رشته بررسی خواهیم کرد. رشته در واقع یک دنباله از کاراکترهاست در نتیجه می‌توان هر یک از اعضای این دنباله را با استفاده از اندیس (Index) موقعیت آن دستیابی نمود؛ اندیس اعضا از سمت چپ با عدد صفر شروع و به سمت راست یک واحد یک واحد افزایش می‌یابد. به عنوان نمونه برای شی 'Python Strings' می‌توانیم شمای اندیس‌گذاری را به صورت پایین در نظر بگیریم:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

برای دستیابی اعضای یک دنباله با نام seq از الگو [seq[i که i اندیس عضو مورد نظر است؛ استفاده می‌شود:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

چند نکته:

  • الگو [seq[-i اعضا دنباله را از سمت راست پیمایش می کند؛ اندیس سمت راست ترین عضو 1- است و به ترتیب به سمت چپ یک واحد یک واحد کاهش می‌یابد.
  • الگو [seq[i:j اعضایی از دنباله را که در بازه‌ای از اندیس i تا قبل از اندیس j هستند را دستیابی می‌کند. برای بیان نقاط «از ابتدا» و «تا انتها» می‌توان به ترتیب i و j را ذکر نکرد.
  • الگو [seq[i:j:k همانند قبلی است با این تفاوت که k اندازه گام پیمایش اعضا را تعیین می‌کند.
  • با استفاده از تابع ()len می‌توان تعداد اعضای یک دنباله را به دست آورد [
    برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
    ].
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

باید توجه داشت که یک شی رشته جزو انواع immutable پایتون است و مقدار (یا اعضا دنباله) آن را نمی‌توان تغییر داد؛ برای مثال نمی‌توان شی 'Python Strings' به 'Python-Strings' تغییر داد - برای این کار تنها می‌بایست یک شی جدید ایجاد کرد:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

عملگرها برای رشته

با رشته‌ها نیز می‌توان از عملگرهای + (برای پیوند رشته‌ها) و * (برای تکرار رشته‌ها) بهره برد:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

برای پیوند می‌توان از عملگر + صرف نظر کرد و تنها با کنار هم قرار دادن رشته‌ها آن‌ها را پیوند داد؛ البته این روش در مواقعی که از متغیر استفاده می‌کنید درست نمی‌باشد:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

برای بررسی برابر بودن مقدار دو رشته مانند دیگر اشیا می‌توان از عملگر == استفاده کرد:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

از عملگرهای عضویت هم می‌توان برای بررسی وجود کاراکتر یا رشته‌ای درون رشته‌ای دیگر استفاده کرد:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

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

کاراکترهای Escape

به صورت پیش‌فرض تعدادی کاراکتر خاص تعریف شده است که می‌توان آن‌ها را درون رشته‌ها بکار برد. تمام این کاراکترها با یک \ آغاز می‌شوند به همین دلیل گاهی نیز به نام Backslash Characters خوانده می‌شوند. در واقع این کاراکترها امکانی برای درج برخی دیگر از کاراکترها هستند که نمی‌توان آن‌ها را به سادگی توسط صفحه‌کلید وارد کرد. برای نمونه یکی از کاراکترهای Escape رایج n\ است که بیانگر کاراکتری با کد اسکی 10 (LF) به نام newline می‌باشد؛ n\ در هر جایی از رشته (یا متن) که درج گردد در هنگام چاپ سطر جاری را پایان می‌دهد و ادامه رشته (یا متن) از سطر جدید آغاز می‌‌شود [

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
]:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

برخی از این کاراکترها به شرح پایین است:

  • n\ - پایان سطر جاری و رفتن به سطر جدید
  • t\ - برابر کد اسکی 9 (TAB): درج هشت فاصله (کلید Space)
  • uxxxx\ - درج یک کاراکتر یونیکد 16 بیتی با استفاده از مقدار هگزادسیمال (پایه شانزده) آن : "u067E\"
  • Uxxxxxxxx\ - درج یک کاراکتر یونیکد 32 بیتی با استفاده از مقدار هگزادسیمال (پایه شانزده) آن : "U0001D11E\"
  • ooo\ - درج یک کاراکتر با استفاده از مقدار اُکتال (پایه هشت) آن : "123\"
  • xhh\ - درج یک کاراکتر با استفاده از مقدار هگزادسیمال (پایه شانزده) آن : "x53\"
  • '\ - درج یک کاراکتر '
  • "\ - درج یک کاراکتر "
  • \\ - درج یک کاراکتر \

این ویژگی رشته‌ها گاهی موجب مشکل می‌شود؛ فرض کنید می‌خواهیم آدرس فایلی از سیستم عامل ویندوز را چاپ نماییم:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

برای حل مشکل نمونه کد بالا می‌توان هر جا که نیاز به \ است از \\ استفاده کرد: "C:\\new\\text\\sample.txt". ولی راهکار جامع‌تر ایجاد «رشته‌های خام» (Raw Strings) است؛ در این نوع رشته‌، کاراکترهای Escape بی‌اثر هستند. رشته خام با افزوده شدن یک حرف r یا R به ابتدای یک رشته معمولی ایجاد می‌گردد:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

تبدیل کد به کاراکتر و برعکس

می‌دانیم برای اینکه کامپیوتر بتواند کاراکتر‌ها را درک کند نیاز به سیستم‌هایی است که آن‌ها را برای تبدیل به کدهای پایه دو کدگذاری کند؛ به مانند سیستم اَسکی (ASCII) یا سیستم‌های جامع‌تری مانند UTF-8 که تحت استاندارد یونیکد (Unicode) در دسترس هستند. گاهی نیاز است به این کدها دسترسی داشته باشیم و با کاراکترها بر اساس آن‌ها کار کنیم؛ برای این منظور در پایتون می‌توان از دو تابع ()ord (تبدیل کد به کاراکتر) [

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
] و ()chr (تبدیل کاراکتر به کد) [
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
] استفاده کرد. تابع ()ord یک رشته تک کاراکتری را گرفته و یک عدد (در پایه ده) که بیانگر کد کاراکتر مورد نظر می‌باشد را برمی‌گرداند. تابع  ()chr نیز کد کاراکتری (که می‌بایست عددی در پایه ده باشد) را گرفته و کاراکتر مربوط به آن را برمی‌گرداند:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

از آنجا که نسخه‌های 2x پایتون به صورت پیش‌فرض از کدگذاری تحت استاندارد یونیکد پشتیبانی نمی‌کنند؛ برای گرفتن کاراکتر یونیکد (کاراکترهای خارج از محدوده اَسکی) از کد آن، می‌بایست از تابع جداگانه‌ای با نام ()unichr [

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
] استفاده نماییم:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

تبدیل به نوع رشته

برای تبدیل اشیایی از نوع دیگر به نوع رشته؛ کلاس ()str [

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
] و تابع ()repr [
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
] وجود دارد. کلاس ()str یک نمونه غیر رسمی (informal) از نوع شی رشته را برمی‌گرداند؛ غیر رسمی از این جهت که توسط آن جزییات شی رشته پنهان می‌شود. اما تابع ()repr یک نمونه رسمی (official) از نوع رشته پایتون را برمی‌گرداند. کمی قبل‌تر راجب تفاوت خروجی print و حالت تعاملی صحبت کردیم؛ در واقع خروجی ()str مناسب برای چاپ است و همانند print جزییات این نوع شی را ارایه نمی‌دهد در حالی که ()repr به مانند حالت تعاملی یک ارايه (representation) کامل از شی رشته را برمی‌گرداند:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

همچنین به جای این دو می‌توانید از متدهای ()__str__ و ()__repr__ استفاده نمایید:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

قالب‌بندی رشته‌ (String Formatting)

قالب‌بندی امکانی برای جایگزین کردن یک یا چند مقدار (به بیان بهتر: شی) - گاهی همراه با اعمال تغییر دلخواه - درون یک رشته است که به دو شکل در پایتون پیاده‌سازی می‌گردد [

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
]:

۱. قالب سنتی - با الگو  (s..." % (values%..."

از دو بخش تشکیل شده است؛ بخش سمت چپ عملگر %، رشته‌ای را مشخص می‌کند که شامل یک یا چند کد جایگذاری شی می‌باشد - کدهای جایگذاری همگی با یک کاراکتر % شروع می‌شوند؛ مانند: s% - و در سمت راست آن شی‌هایی برای جایگزین شدن در رشته، داخل پرانتز قرار دارد؛ این اشیا به ترتیب از سمت چپ درون رشته جایگذاری می‌گردند:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

برخی از کدهای جایگذاری به شرح پایین است:

  • s% - جایگزینی در قالب یک رشته به شکل خروجی کلاس ()str
  • r% - جایگزینی در قالب یک رشته به شکل خروجی تابع ()repr
  • c% - جایگزینی در قالب یک کاراکتر: یک عدد صحیح که نشانگر کد کاراکتر می‌باشد را به کاراکتر یونیکد تبدیل کرده و درون رشته قرار می دهد.
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
  • d% یا i% - جایگزینی در قالب یک عدد صحیح در پایه ده
  • o% - جایگزینی در قالب یک عدد صحیح در پایه هشت
  • x% - جایگزینی در قالب یک عدد صحیح در پایه شانزده با حروف کوچک
  • X% - جایگزینی در قالب یک عدد صحیح در پایه شانزده با حروف بزرگ
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
  • f% - جایگزینی در قالب یک عدد ممیز شناور (دقت پیش‌فرض: ۶) در پایه ده
  • F% - همانند f% ؛ با این تفاوت که nan و inf را به شکل NAN و INF درج می‌کند.
  • e% - جایگزینی در قالب یک عدد ممیز شناور به شکل نماد علمی با حرف کوچک
  • E% - جایگزینی در قالب یک عدد ممیز شناور به شکل نماد علمی با حرف بزرگ
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

همچنین این الگو را می‌توان با استفاده از یک شی دیکشنری - این نوع شی در بخش دوم درس انواع شی بررسی می‌گردد - پیاده‌سازی نمود. در این شیوه اشیا با استفاده از کلید جایگذاری می‌گردند و دیگر ترتیب آن‌ها اهمیتی ندارد. به نمونه کد پایین توجه نمایید:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

در اصل می‌توان برای بخش سمت چپ این قالب، ساختاری مانند پایین را در نظر گرفت:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
  • در هر استفاده وجود هر یک از []ها اختیاری است یا بستگی به مورد استفاده دارد.
  • (keyname) - درج کلید داخل پرانتز - در مواقع استفاده از شی دیکشنری آورده می‌شود.
  • flags - می‌تواند یکی از سه نماد +، − و 0 باشد. + موجب درج علامت عدد می‌شود (علامت اعداد منفی به صورت پیش‌فرض درج می‌گردد؛ این علامت بیشتر برای درج علامت اعداد مثبت به کار می‌رود)، − موجب چپ‌چین شدن مقدار می‌گردد (حالت پیش‌فرض راست‌چین است) و 0 تعیین می‌کند که فضای خالی اضافی با صفر پر گردد (در حالت پیش‌فرض Space گذاشته می‌شود).
  • width - اندازه رشته را تعیین می‌کند؛ در مواردی که اندازه تعیین شده بیشتر از اندازه واقعی مقدار باشد، فضای اضافی را می‌توان با صفر یا فضای خالی (Space) پر کرد و البته زمانی که کمتر تعیین گردد، این گزینه نادیده گرفته می‌شود.
  • precision. - در مورد اعداد ممیز شناور، دقت یا تعداد ارقام بعد از ممیز را تعیین می‌کند (دقت پیش‌فرض: ۶). در مواردی که تعداد تعیین شده کمتر از تعداد واقعی ارقام بعد ممیز باشد، عدد گِرد می‌گردد. به وجود . پیش از آن توجه نمایید.
  • typecode - بیانگر همان حرف تعیین کننده نوع کد جایگذاری می‌باشد.
  • به جای width و precision. می توان از * استفاده کرد که در این صورت عدد مربوط به آن‌ها نیز در بخش سمت راست آورده می‌شود و شی جایگزینی می‌بایست درست پس از آن ذکر گردد. این گزینه در مواقعی که لازم است این اعداد در طول اجرای برنامه تعیین گردند کاربرد دارد.
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

۲. قالب جدید، فراخوانی متد ()format - با الگو (format(values."...{}..."

در این قالب که در نسخه‌های 2.6، 2.7 و 3x پایتون در دسترس است؛ اشیا، آرگومان‌های یک متد مشخص هستند و با استفاده اندیس موقعیت‌ یا نام آن‌ها داخل {} در رشته جایگذاری می‌گردند:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

ملاحظه: همانطور که در درس تابع‌ خواهیم آموخت؛ بدون نیاز به رعایت ترتیب می‌توان آرگومان‌ها را با انتساب مقدار مورد نظر به آن‌ها ارسال نمود.

با هر ترتیبی می‌توان اشیا را جایگذاری نمود:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

از نسخه 2.7 و بالاتر چنانچه بخواهیم اشیا به ترتیبی که در آرگومان متد قرار دارد جایگذاری شوند؛ نیازی به ذکر اندیس یا نام آرگومان نمی‌باشد:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

با آوردن یک * پشت آرگومانی که یک شی دنباله است می‌توان اعضای آن را دستیابی نمود. البته چنانچه بخواهیم از آرگومان‌های دیگری نیز استفاده کنیم لازم است آن‌ها در ابتدای متد قرار داشته باشند که در این صورت شمارش اندیس از آن‌ها شروع می‌گردد؛ به نمونه کد پایین توجه نمایید:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

بخش درون رشته این قالب نیز ساختاری مشابه پایین دارد:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
  • fieldname - اندیس یا نام آرگومان است.
  • conversionflag! - می‌تواند یکی از حروف r و s باشد که به ترتیب ()repr و ()str را بر روی شی فراخوانی می‌کنند. توجه داشته باشید که این حروف با ! شروع می‌شوند:
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
  • formatspec: - چگونگی درج شی در رشته را تعیین می‌کند. با : شروع می‌شود و خود ساختاری به مانند پایین دارد:
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
  • در هر استفاده وجود هر یک از []ها اختیاری است یا بستگی به مورد استفاده دارد.
  • fill - می‌تواند هر کاراکتر قابل چاپی باشد - از این گزینه برای پر کردن فضای خالی که توسط width ایجاد گردیده، استفاده می‌شود.
  • align - می‌تواند یکی از کاراکترهای <، > یا ^ باشد که به ترتیب بیانگر حالت راست‌چین، چپ‌چین و وسط‌چین می‌باشند. width نیز پس از آن‌ها آورده می‌شود که میزان اندازه رشته را تعیین می‌کند.
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
  • sign - برای نمایش علامت اعداد کاربرد دارد و می‌تواند یکی از نمادهای +، − یا یک فضا خالی (Space) باشد. به این صورت که: + علامت تمام اعداد مثبت و منفی را درج می‌کند و − نیز تنها موجب درج علامت اعداد منفی می‌شود. در صورت استفاده از فضای خالی، علامت اعداد منفی درج شده ولی به جای علامت اعداد مثبت یک کاراکتر فضای خالی وارد می‌شود.
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
  • برخلاف قالب سنتی، می‌توان تبدیل پایه دو را هم داشته باشیم. تبدیل پایه در این قالب با استفاده از حروف b (پایه دو)، o (حرف اُ کوچک - پایه هشت) و x یا X (پایه شانزده) انجام می‌شود. چنانچه یک نماد # به پیش از آن‌ها افزوده شود، پیشوند پایه نیز درج می‌گردد:
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
  • با استفاده از یک , (کاما Comma) می‌توان یک عدد را سه رقم سه رقم از سمت راست جدا نمود:
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
  • بخش‌هایی از قالب سنتی در این قالب نیز تعریف شده‌ است. گزینه‌های precision ،typecode. و width به همان صورتی هستند که در قالب سنتی بیان گشته است. البته موارد typecode کمی کمتر است؛ به عنوان نمونه در این قالب کد i وجود ندارد و تنها می‌توان از d برای اعداد صحیح در پایه ده استفاده کرد:
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
  • برای بیان درصد می‌توان از % به جای f استفاده کرد:
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
  • در قالب سنتی با استفاده از * می‌توانستیم گزینه‌های خود را در طرف دیگر مقداردهی نماییم؛ در قالب جدید برای این منظور می‌توان مانند کاری که برای جایگذاری اشیا انجام می‌دادیم، از { } استفاده کرده و مقدار گزینه‌ها را در جایگاه آرگومان متد تعریف نماییم:
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

برخی از متدهای کاربردی یک شی رشته

  • ()capitalize [
    برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
    ] - یک کپی از رشته که نخستین حرف آن به صورت بزرگ (Capital) نوشته شده است را برمی‌گرداند:
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
  • (center(width [
    برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
    ] - یک عدد صحیح که تعیین کننده اندازه رشته است گرفته و رشته را به صورت وسط‌چین شده درون این بازه برمی‌گرداند. در صورتی که اندازه تعیین شده کوچکتر از اندازه واقعی رشته ((len(string) باشد؛ رشته بدون تغییر بازگردانده می‌شود. این متد یک آرگومان اختیاری هم دارد که توسط آن می‌توان کاراکتری را برای پر کردن فضای خالی تعیین نمود:
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

دو متد مشابه دیگر با الگو (rjust(width [

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
] و (ljust(width [
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
] نیز هستند که به ترتیب برای راست‌چین و چپ‌چین کردن متن رشته استفاده می‌شوند:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
  • (count(sub [
    برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
    ] - یک رشته را گرفته و تعداد وقوع آن در رشته اصلی را برمی‌گرداند. این متد دو آرگومان اختیاری نیز دارد [[start[, end,] که می‌توان نقطه شروع و پایان عمل این متد را مشخص نمود:
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
  • (endswith(suffix [
    برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
    ] - یک رشته را گرفته و چنانچه رشته اصلی با آن پایان یافته باشد مقدار True و در غیر این صورت False را برمی‌گرداند. این متد دو آرگومان اختیاری نیز دارد [[start[, end,] که می‌توان نقطه شروع و پایان عمل این متد را مشخص نمود:
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

(find(sub [

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
] - یک رشته را گرفته و اندیس شروع آن را برای نخستین وقوع درون رشته اصلی برمی‌گرداند؛ در صورتی که آرگومان دریافتی در رشته اصلی یافت نشود مقدار 1- برگردانده می‌شود. این متد دو آرگومان اختیاری نیز دارد [[start[, end,] که می‌توان نقطه شروع و پایان عمل این متد را مشخص نمود:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

متد مشابه دیگری نیز با الگو (rfind(sub [

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
] وجود دارد؛ ولی با این تفاوت که اندیس شروع آرگومان دریافتی را برای آخِرین وقوع درون رشته اصلی برمی‌گرداند:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

در صورتی که نیازی به اندیس ندارید و تنها می‌خواهید وجود یک رشته را درون رشته‌ای مشخص بررسی نمایید؛ از عملگر in استفاده کنید:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
  • (index(sub [
    برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
    ] - همانند متد (find(sub است با این تفاوت که اگر آرگومان دریافتی در رشته اصلی یافت نشود یک خطا ValueError را گزارش می‌دهد:
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

متد دیگری نیز با الگو (rindex(sub [

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
] وجود دارد که مانند (rfind(sub عمل می‌کند ولی با این تفاوت که اگر آرگومان دریافتی در رشته اصلی یافت نشود یک خطا ValueError را گزارش می‌دهد:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
  • (join(iterable [
    برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
    ] - یک دنباله با اعضایی تمام از نوع رشته را به صورت آرگومان دریافت می‌کند و با استفاده از رشته اصلی اعضای آن‌ را به یکدیگر پیوند داده و برمی‌گرداند:
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
  • (split(sep [
    برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
    ] - یک کاراکتر را دریافت کرده و رشته را بر اساس آن از هم جدا کرده و به صورت یک شی لیست (list) برمی‌گرداند. این متد یک آرگومان اختیاری نیز دارد که می توان تعداد عمل جداسازی را تعیین نمود:
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

متد مشابه دیگری نیز با الگو (rsplit(sep [

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
] وجود دارد ولی با این تفاوت که رشته را از سمت راست پیمایش می‌کند:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
  • (replace(old, new [
    برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
    ] - دو رشته به صورت آرگومان دریافت می‌کند؛ در تمام رشته اصلی بخش‌هایی که برابر مقدار آرگومان old هستند را با آرگومان new جایگزین می‌کند و سپس رشته جدید را برمی‌گرداند. این متد یک آرگومان اختیاری نیز دارد که می‌توان تعداد عمل جایگزینی را تعیین نمود:
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
  • ()lower [
    برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
    ] - تمام حروف الفبا انگلیسی موجود در رشته را به حرف کوچک تبدیل می‌کند و برمی‌گرداند:
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

برعکس؛ متد ()upper [

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
] تمام حروف الفبا انگلیسی موجود در رشته را به حرف بزرگ تبدیل می‌کند و برمی‌گرداند:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
  • ()islower [
    برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
    ] - اگر رشته حداقل شامل یکی از حروف الفبا انگلیسی بوده و تمام حروف الفبا آن به صورت کوچک باشند مقدار True و در غیر این صورت False را برمی‌گرداند:
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

برعکس؛ متد ()isupper [

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
] اگر رشته حداقل شامل یکی از حروف الفبا انگلیسی بوده و تمام حروف الفبا آن به صورت بزرگ باشند مقدار True و در غیر این صورت False را برمی‌گرداند:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
  • ()isalpha [
    برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
    ] - اگر رشته حداقل شامل یک کاراکتر بوده و تمام کاراکترهای آن تنها یکی از حروف الفبا انگلیسی (کوچک یا بزرگ) باشند مقدار True و در غیر این صورت False را برمی‌گرداند:
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
  • ()isalnum [
    برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
    ] - اگر رشته حداقل شامل یک کاراکتر بوده و تمام کاراکترهای آن تنها یکی از عددهای 0 تا 9 یا حروف الفبا انگلیسی (کوچک یا بزرگ) باشند مقدار True و در غیر این صورت False را برمی‌گرداند:
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
  • ()isdigit [
    برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
    ] - اگر رشته حداقل شامل یک کاراکتر بوده و تمام کاراکترهای آن تنها یکی از عددهای 0 تا 9 باشند مقدار True و در غیر این صورت False را برمی‌گرداند:
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

چگونگی ارايه نوع رشته از موارد اختلاف اساسی در نسخه‌های 2x و 3x پایتون است.

در نسخه‌های 2x یک نوع جامع str که محدود به کدگذاری ASCII است؛ هر دو قالب رشته‌های معمولی و داده‌های باینری (متن‌های کدگذاری شده، فایل‌های مدیا و پیام‌های شبکه) را در بر می‌گیرد - رشته باینری با یک حرف b در آغاز آن‌ مشخص می‌گردد. در این سری از نسخه‌ها نوع دیگری نیز با نام unicode وجود دارد که رشته‌های خارج از محدوده کدگذاری ASCII را در بر می‌گیرد؛ برای ایجاد این نوع اشیا می‌بایست رشته مورد نظر با یک حرف u آغاز گردد:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

علاوه‌بر قرار دادن حرف u در ابتدای رشته برای ایجاد رشته یونیکد، می‌توان از تابع ()unicode [

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
] نیز با مشخص کردن سیستم کدگذاری استفاده کرد:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

بنابراین انواع رشته در پایتون 2x:

  • رشته‌های معمولی (محدود به کدگذاری اَسکی) + داده‌های باینری: str
  • رشته‌های یونیکد : unicode

ولی در نسخه‌های 3x رشته توسط سه نوع ارایه می‌گردد. اکنون کدگذاری پیش‌فرض کاراکترها در پایتون از ASCII بسیار گسترده‌تر شده است و از استاندارد یونیکد پشتیبانی می‌کند بنابراین نوع str به تنهایی می‌تواند تقریبا تمامی کاراکترهای دنیا را شامل شود و دیگر نیازی به نوع جداگانه و استفاده از حرف u برای مشخص کردن رشته‌های یونیکد نیست؛ بنابراین در این نسخه‌ها برای تمام رشته‌های اسکی و یونیکد تنها یک نوع str ارایه شده است. تغییر دیگری نیز رخ داده که نوع داده باینری از رشته‌های معمولی جدا شده است و توسط نوع جدیدی با نام bytes ارایه می‌گردد:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

بنابراین انواع رشته در پایتون 3x:

  • رشته‌های معمولی (اَسکی و یونیکد): str
  • داده‌های باینری: bytes
  • نوع تغییر پذیر (Mutable) برای داده‌های باینری: bytearray - این نوع در واقع یک دنباله تغییر پذیر از نوع bytes است که در نسخه‌های 2.6 و 2.7 نیز در دسترس است.

در پایتون 3x برای ایجاد نوع bytes علاوه‌بر حرف b می‌توان از کلاس ()bytes [

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
] نیز استفاده کرد که در آرگومان این کلاس برای نوع رشته لازم است که سیستم کدگذاری آن را نیز مشخص نماییم؛ داده‌های عددی را نیز بهتر است به شکل یک شی لیست ارسال نماییم:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

اکنون برای تبدیل نوع bytes به str نیاز به کدگشایی یا Decode کردن داده‌ها داریم؛ این کار را می‌توان با استفاده از متد ()decode یا کلاس ()str با مشخص کردن سیستم کدگشایی به انجام رساند:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

همانند کلاس ()bytes این بار برای ایجاد نوع bytearray از کلاس ()bytearray [

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
] استفاده می‌شود:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

 

لینک به دیدگاه
  • 2 هفته بعد...

انواع آماده شی - بخش دوم

لیست

نوع «لیست» (List) انعطاف‌ پذیرترین نوع آماده در پایتون می‌باشد. این نوع همانند رشته یک «دنباله» (Sequence) بوده ولی برخلاف آن یک نوع «تغییر پذیر» (Mutable) است. شی لیست با استفاده از کروشه [ ] ایجاد می‌گردد و می‌تواند عضوهایی - با هر نوع - داشته باشد که توسط کاما , از یکدیگر جدا می‌شوند؛ نوع لیست در واقع محلی برای نگهداری اشیا گوناگون است:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

عضوهای لیست می‌توانند از هر نوعی باشند؛ حتی یک لیست:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

شی لیست جزو انواع دنباله پایتون است و می‌توان عضوها را بر اساس اندیس موقعیت آن‌ها دستیابی نمود:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

و همچنین تعداد عضوهای هر شی لیست را توسط تابع ()len [

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
] به دست آورد:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

چنانچه یک دنباله جزو عضوهای شی لیست باشد، با استفاده از الگو [seq[j می‌توان عضوهای آن را نیز دستیابی نمود که در آن i اندیسی است که به یک عضو شی لیست اشاره دارد و j نیز اشاره به اندیس داخلی عضو i دارد؛ این الگو به همین شیوه می‌تواند ادامه یابد:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

یکی از مثال‌های رایج شی لیست‌، شبیه‌سازی ساختار ماتریس (

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
) است:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

شی لیست جزو انواع Mutable پایتون است و می‌توان عضوهای آن را تغییر داد؛ این تغییر می‌تواند به شکل حذف، درج عضو جدید یا جایگزین کردن یک یا چند عضو باشد. پایتون متدهای کاربردی زیادی برای دستکاری و تغییر شی لیست دارد که در ادامه به آن‌ها نیز خواهیم پرداخت ولی در این بخش می‌خواهیم به بررسی چگونگی ایجاد تغییر با استفاده از عملگر انتساب بپردازیم:

  • جایگزین کردن:
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
  • درج کردن - i در الگو [seq[i:i به موقعیتی از شی seq اشاره دارد که می‌خواهیم درج در آن نقطه انجام شود؛ در این شیوه توجه داشته باشید که شی‌ای که می‌خواهید درون لیست درج کنید می‌بایست یک دنباله باشد:
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
  • حذف کردن - کافی است یک شی لیست خالی ([]) را به یک یا چند عضو از شی لیست مورد نظر انتساب دهیم:
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

دستور del

با استفاده از دستور del [

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
] نیز می‌توان یک عضو یا یک تکه از شی لیست را حذف کرد:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

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

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

انتساب چندگانه

می‌توان یک شی لیست - یا در کل یک شی دنباله - را به تعدادی نام انتساب داد و متغیرهای جداگانه‌ای ایجاد نمود؛ این عمل Unpacking خوانده می‌شود. در این شرایط مفسر پایتون هر عضو دنباله را با حفظ ترتیب به یکی از نام‌ها انتساب می‌دهد که در حالت عادی می‌بایست تعداد نام‌ها با عضوهای دنباله برابر باشد:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

ولی می‌توان یکی از نام‌ها را توسط نماد * نشانه‌گذاری کرد؛ در این شرایط مفسر پایتون توازنی را بین عضوهای دنباله و نام‌ها ایجاد می‌کند که در این حالت تمام عضوهای اضافی - در قالب یک شی لیست - به نام نشانه‌گذاری شده انتساب داده می‌شود. البته باید توجه داشت که ترتیب عضوهای دنباله در هر شرایطی رعایت خواهد شد؛ به نمونه کدهای پایین توجه نمایید:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

کپی کردن

همانند دیگر اشیا می‌توان با انتساب یک متغیر موجود از شی لیست به یک نام جدید، متغیر دیگری از این نوع شی ایجاد کرد. البته همانطور که پیش‌تر نیز بیان شده است؛ در این حالت شی کپی نمی‌گردد و تنها یک ارجاع جدید از این نام جدید به شی آن متغیر داده می‌شود. این موضوع با استفاده از تابع ()id [

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
] قابل آزمودن است؛ خروجی این تابع برابر نشانی شی در حافظه می‌باشد و بدیهی است که دو مقدار id یکسان برای دو متغیر نشان از یکی بودن شی آن‌هاست:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

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

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

اگر این موضوع را یک مشکل بدانیم برای رفع آن می‌توان از شی متغیر یک کپی ایجاد کرده و این کپی را به متغیر جدید نسبت دهیم؛ در این شرایط هر دو متغیر به اشیایی جداگانه در محل‌هایی متفاوت از حافظه اشاره خواهند داشت. در حالت عادی برای کپی کردن یک شی لیست نیاز به کار جدیدی نیست و می‌توان از اندیس گذاری [:] - به معنی تمامی عضوها - استفاده کرد:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

do.php?imgf=154627726492271.png

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

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

do.php?imgf=154627726497442.png

در پایتون کپی شی به دو شیوه «سطحی» (Shallow Copy) و «عمیق» (Deep Copy) انجام می‌شود که به ترتیب توسط تابع‌های ()copy و ()deepcopy از درون ماژول copy در دسترس هستند [

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
]. در شیوه کپی سطحی همانند کاری که پیش از این انجام دادیدم - یعنی انتساب با استفاده از اندیس [:] - اشیا داخلی کپی نمی‌شوند و تنها یک ارجاع جدید به آن‌ها داده می‌شود؛ در حالی که توسط شیوه کپی عمیق از تمامی اشیا (تغییر پذیر) داخلی نیز یک کپی ایجاد می‌گردد:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

عملگرها برای لیست

می‌توان از عملگرهای + (برای پیوند لیست‌ها) و * (برای تکرار عضوهای لیست) بهره برد:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

برای بررسی برابر بودن مقدار دو شی لیست مانند دیگر اشیا می‌توان از عملگر == استفاده کرد:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

از عملگرهای عضویت هم می‌توان برای بررسی وجود شی‌ای درون لیست استفاده کرد:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

تفاوت عملگرهای == و is

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

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

از درس پنجم به یاد داریم که هر شی در پایتون حاوی یک «شناسه» (identity)، یک «نوع» (type) و یک «مقدار» (value) است. عملگر == دو شی را از نظر یکسان بودن «مقدار» مورد بررسی قرار می‌دهد در حالی که عملگر is دو شی را از نظر یکسان بودن «شناسه» (خروجی تابع ()id) یا همان نشانی آن‌ها در حافظه مورد بررسی قرار می‌دهد.

پیش از این هم بیان شده بود که مفسر پایتون برای صرفه‌جویی در زمان و حافظه از ساخت مجدد اشیا نوع «صحیح» و «رشته» کوچک موجود اجتناب می‌کند و تنها یک ارجاع جدید به آن‌ها می‌دهد. اما این موضوع در مورد اشیا دیگر درست نمی‌باشد و مفسر پایتون برای هر متغیری که برای این نوع اشیا تعریف می‌گردد یک شی جدید ایجاد می‌کند و به آن ارجاع می‌دهد:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

تبدیل به شی لیست

با استفاده از کلاس ()list [

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
] می‌توان یک شی لیست ایجاد کرد یا اشیایی که از نوع دنباله هستند را به یک شی لیست تبدیل نمود:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

متدهای کاربردی یک شی لیست

شی لیست تغییر پذیر است و متدهای آن برخلاف شی رشته یک شی جدید تغییر یافته را برنمی‌گردانند بلکه تغییرات را بر روی همان شی ایجاد می‌کنند.

  • (append(x - شی x را به انتهای لیست مورد نظر اضافه می‌کند:
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

عملکرد این متد ((L.append(x) همانند عمل [L + [x است:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
  • (extend(s - عضوهای شی دنباله s را به انتهای لیست مورد نظر اضافه می‌کند:
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
  • (insert(i, x - یک عضو جدید (مانند x) را در موقعیتی از لیست با اندیس دلخواه (مانند i) قرار می‌دهد:
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
  • (remove(x - در لیست مورد نظر از سمت چپ به دنبال شی‌ x می‌گردد و نخستین مورد یافت شده را از لیست حذف می‌کند. چنانچه هیچ عضو برابری با شی x یافت نشود یک خطا گزارش می‌دهد:
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

توجه: در مواردی که می‌خواهید اندیس خاصی از لیست را حذف نمایید؛ از دستور del استفاده کنید.

  • ([pop([i - عضو متناظر با اندیس i را از لیست حذف و به عنوان خروجی برمی‌گرداند. چنانچه اندیس به متد فرستاده نشود به صورت پیش‌فرض آخرین عضو از لیست مورد نظر را حذف و برمی‌گرداند:
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

توجه: نماد [ ] در الگو متدها تنها روشی برای بیان اختیاری بودن عبارت درون آن می‌باشد و جزیی از متد نیست.

  • ([index(x[, n - در لیست مورد نظر از سمت چپ به دنبال شی x می‌گردد و اندیس نخستین مورد یافت شده را برمی‌گرداند. این متد یک آرگومان اختیاری (n) نیز دارد که به کمک آن می‌توان تعیین نمود اندیس چندمین مورد یافت شده برگردانده شود. چنانچه هیچ عضو برابری با شی x یافت نشود یک خطا گزارش می‌دهد:
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
  • (count(x - تعداد وقوع شی x را در لیست مورد نظر برمی‌گرداند:
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
  • ()clear - تمام عضوهای لیست مورد نظر را حذف می‌کند. عملکرد این متد معادل دستور [:]del L می‌باشد:
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
  • ()reverse - عضوهای لیست مورد نظر را وارونه می‌کند:
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
  • ()sort - عضوهای یک لیست را مرتب می‌کند:
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

این متد در حالت پیش‌فرض به صورت صعودی اقدام به مرتب سازی می‌کند ولی می‌توان با فرستادن مقدار True به آرگومان اختیاری reverse، شیوه آن را به نزولی تغییر داد:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

متد ()sort آرگومان اختیاری دیگری نیز با نام key دارد که می‌توان با ارسال یک تابع تک آرگومانی به آن عمل دلخواهی را بر روی تک تک عضوهای لیست مورد نظر، پیش از مقایسه و مرتب‌سازی به انجام رساند. البته باید توجه داشت که تنها می‌بایست نام تابع به آرگومان متد فرستاده شود و نه الگو کامل آن؛ برای مثال تابع با الگو (func(x باید به صورت key=func فرستاده شود. چنانچه آرگومان key فرستاده شود، این متد عضوهای لیست را به تابع تعیین شده می‌فرستد و در انتها خروجی آن‌ها را برای عمل مرتب‌سازی در نظر می‌گیرد. به نمونه کد پایین توجه نمایید:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

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

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

در نمونه کد بالا str.lower به چه معنی است؟

در درس پیش با کلاس ()str که از آن برای ایجاد شی رشته استفاده می‌شد آشنا شدیم و با برخی از متدهای آن که برای یک شی رشته در دسترس بود (مانند: ()join) نیز کار کردیم. در آینده توسط درس مربوط به کلاس‌ها خواهیم آموخت که می‌توان با استفاده از نام کلاس و بدون ایجاد شی، متدهای داخل آن را فراخوانی نمود؛ در اینجا نیز همین اتفاق افتاده است و (lower(s متدی تک آرگومانی داخل کلاس str می‌باشد که توسط نام این کلاس فراخوانی شده است.

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

نکته: با استفاده از تابع آماده ()dir [

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
] می‌توانیم لیستی از تمام صفت‌ها و متدهای در دسترس یک شی را دریافت نماییم.

به جای متد ()sort می‌توان از تابع آماده ()sorted [

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
] نیز با همین توضیح استفاده کرد:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

ایجاد پشته

«پشته» (

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
) ساختاری برای نگهداری موقت داده‌ها می‌باشد به شکلی که آخرین داده‌ای که در آن قرار می‌گیرد نخستین داده‌ای خواهد بود که خارج می‌گردد؛ این شیوه سازمان‌دهی LIFO یا Last In, First Out خوانده می‌شود. پشته تنها از دو عمل (یا متد) پشتیبانی می‌کند: push که داده‌ای را بالای تمام داده‌های موجود در آن قرار می‌دهد و pop که بالاترین داده را از آن خارج می‌کند.

ساختار پشته را می‌توان به سادگی با استفاده از نوع لیست در پایتون پیاده‌سازی کرد؛ به این صورت که برای یک شی لیست متد ()append معادل عمل push و متد ()pop نیز معادل عمل pop خواهد بود:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

 

لینک به دیدگاه
  • 2 هفته بعد...

تاپل

نوع «تاپِل» (Tuple) همانند نوع list است ولی با این تفاوت که تغییر پذیر نیست و عضوهای آن درون پرانتز () قرار داده می‌شوند:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

در انتهای شی تاپل تک عضوی می‌بایست یک نماد کاما قرار داد؛ به مانند: (,1). از آنجا که از پرانتز در عبارت‌ها نیز استفاده می‌شود؛ با این کار مفسر پایتون یک شی تاپل را از عبارت تشخیص می دهد:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

برای ایجاد شی تاپل حتی می‌توان از گذاردن پرانتز صرف نظر کرد و تنها اشیا (یا عبارت‌ها) را با کاما از یکدیگر جدا نمود:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

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

به دلیل شباهت‌های بسیار شی تاپل به شی لیست از ارایه توضیحات تکراری اجتناب کرده و تنها به ذکر چند مثال در ارتباط با نوع تاپل می‌پردازیم:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

به دلیل ساختار ارجاعی بین اشیا در پایتون که توسط تصاویر بخش لیست نیز نمایش داده شد؛ اشیا تغییر پذیر درون شی تاپل، ویژگی‌های خود را داشته و همچنان تغییر پذیر خواهند بود:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

همچنین به نمونه کدهای پایین در مورد Unpacking توجه نمایید:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

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

در هنگام انتساب متغیر تاپل به موضوع کپی نشدن اشیا تغییر پذیر توجه داشته باشید و در صورت نیاز از ماژول copy استفاده نمایید:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

همانند شی لیست؛ شی تاپل نیز به دو متد ()index و ()count دسترسی دارد - این موضوع با استفاده از تابع ()dir قابل بررسی است:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

استفاده از راهنما را که فراموش نکرده‌اید؟!:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

هر زمان که نیاز به اِعمال تغییر در شی تاپل باشد؛ می‌توان شی مورد نظر را به صورت موقت به یک شی لیست تبدیل کرد. در این حالت می‌توان از ویژگی و متدهای شی لیست بهره برد و تغییرات دلخواه را اعمال کرد و در نهایت با یک تبدیل نوع دیگر دوباره به شی تاپل بازگشت. برای این منظور می‌توان با استفاده از کلاس ()list یک دنباله - در اینجا یک شی تاپل - را به شی لیست تبدیل کرد و در طرف دیگر توسط کلاس ()tuple نیز یک دنباله - در اینجا یک شی لیست - را به شی تاپل تبدیل نمود:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

البته در مواقعی که می‌خواهید عضوهای درون یک شی تاپل را مرتب (Sort) کنید، نیازی به تبدیل نوع لیست نمی‌باشد و می‌توانید از تابع ()sorted استفاده نمایید؛ این تابع مطابق آنچه که پیش از این معرفی شد یک شی تاپل را می‌گیرد و یک شی لیست با همان عضوها اما مرتب شده را برمی‌گرداند:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

کلاس ()tuple بدون آرگومان یک شی تاپل خالی را ایجاد می‌کند:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

 

لینک به دیدگاه
  • 2 هفته بعد...

دیکشنری

یکی دیگر از انواع انعطاف پذیر آماده در پایتون «دیکشنری» (Dictionary) می‌باشد که با نام کوتاه شده dict ارایه شده است. اشیا نوع دیکشنری با استفاده از نماد آکولاد { } معرفی‌ می‌شوند و هر داده در آن به شکل یک جفت «کلید:مقدار» (key:value) ذخیره می‌گردد. از این نوع شی با عنوان شی mapping (نگاشت) پایتون نیز یاد می‌شود چرا که در این نوع هر شی «کلید» به یک شی «مقدار» map یا نگاشت داده می‌شود. شی دیکشنری دنباله نیست ولی تغییر پذیر بوده و «مقدار» هر عضو توسط «کلید» متناظر با آن دستیابی می‌شود. شی «مقدار» می‌تواند از هر نوعی باشد حتی یک شی دیکشنری دیگر ولی شی «کلید» تنها می‌بایست از انواع «تغییر ناپذیر» انتخاب شود و باید توجه داشت که تمام «کلید»‌های یک شی دیکشنری می‌بایست «یکتا» (Unique) باشند.

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

در نمونه کد بالا؛ اشیا 1، 2 و 3 کلید‌های شی d هستند که به ترتیب با اشیای 'One' و 'Two' و 'Three' نگاشت شده‌اند. برای دستیابی هر مقدار شی دیکشنری dic از الگو [dic[key استفاده می‌کنیم که key در آن، کلید متصل به مقدار مورد نظر می‌باشد:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

[d[3 اشاره به مقدار 'Three' دارد؛ و از آنجا که این شی یک دنباله است می‌توان به روش دنباله‌ها (یعنی با استفاده از اندیس موقعیت) عضوهای این شی را نیز دستیابی نماییم.

به چند مثال دیگر توجه نمایید:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

ساختار نوع دیکشنری مشابه «جدول درهم‌سازی» (

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
) است و کاربرد‌های فراوانی در الگوریتم‌های جستجو دارد. از این نوع همچنین می‌توان برای سازماندهی و ذخیره داده‌ها بر روی فایل استفاده کرد؛ برای نمونه فرض کنید می‌خواهیم چند فیلم با بازی Benedict Cumberbatch را به گونه‌ای در اختیار داشته باشیم که بتوانیم آن‌ها را بر اساس سال ساخت دستیابی نماییم:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

از تابع ()len نیز می‌توان برای به دست آوردن تعداد عضوهای شی دیکشنری (جفتِ کلید:مقدار) استفاده کرد:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

با انتساب یک مقدار جدید به یک کلید موجود از شی دیکشنری می‌توان مقدار آن کلید را تغییر داد و با انتساب یک مقدار به یک کلید جدید که در شی دیکشنری وجود ندارد یک عضو جدید به آن شی افزوده می‌شود:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

برخلاف شی لیست یا تاپل (یا در کل دنباله‌ها) که داده‌هایی منظم (Ordered) هستند و ترتیب یا جایگاه قرار گرفتن عضوهای آن‌ها اهمیت دارد، یک شی دیکشنری این طور نیست و ترتیب عضوها در آن کاملا بی اهمیت است.

با استفاده از دستوری مشابه [del dic[key نیز می‌توان یک عضو شی دیکشنری را حذف کرد:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

امکانی برای تغییر کلیدها وجود ندارد مگر آنکه عضو مورد نظر را حذف کرده و یک عضو جدید (همان مقدار ولی با کلیدی جدید) اضافه نمایید:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

عملگرها برای دیکشنری

عملگرهای + و * برای اشیا دیکشنری تعریف نشده‌اند.

از عملگرهای عضویت می‌توان برای بررسی وجود یک کلید در شی دیکشنری استفاده کرد:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

در مورد عملکرد عملگر برابری == و عملگرهای هویت (is و is not) صحبت شده است؛ این عملگرها برای اشیا دیکشنری نیز کاربرد دارند.

کپی کردن

همانطور که گفته شد شی دیکشنری از انواع «تغییر پذیر» پایتون است و همان توضیحاتی که در مورد شی لیست بیان شد؛ در اینجا هم درست است و گاهی نیاز می‌شود که از ماژول copy برای کپی اشیا دیکشنری استفاده نماییم:

  • بدون کپی کردن:
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
  • کپی سطحی:
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
  • کپی عمیق:
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

تبدیل به شی دیکشنری

برای تبدیل دیگر اشیا به نوع دیکشنری یا در کل ایجاد شی دیکشنری از کلاس ()dict [

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
] استفاده می‌شود. توجه داشته باشید که عضوهای شی دیکشنری از طریق آرگومان‌ها و به شکل «کلید=مقدار» به کلاس فرستاده می‌شوند:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

در این حالت برای انتخاب کلیدها باید قوانین انتخاب نام در پایتون را رعایت نماییم؛ برای مثال کلیدی که با عدد شروع شود مجاز نمی‌باشد.

برای فرستادن کلیدها و مقدارها می‌توانیم از تابع ()zip [

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
] استفاده کنیم و خروجی این تابع را به عنوان آرگومان به کلاس dict ارسال کنیم. می‌توان اینگونه تصور کرد که این تابع تعدادی شی دنباله را می‌گیرد و عضوهای نظیر به نظیر آن‌ها را در کنار هم قرار می‌دهد؛ این دنباله‌ها باید تعداد عضو برابری داشته باشند؛ چرا که عضوهای اضافی هر دنباله نادیده گرفته می‌شود. خروجی ()zip یک شی جدید از نوع zip است و برای مشاهده معمولا آن را به نوع لیست تبدیل می‌کنند:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

در آینده باز هم از تابع ()zip استفاده خواهیم کرد.

برخی از متدهای کاربردی یک شی دیکشنری

  • ()items [
    برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
    ] تمام عضوهای شی را برمی‌گرداند - ()values [
    برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
    ] تمام مقدارهای موجود در شی را بر می‌گرداند - ()keys [
    برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
    ] تمام کلیدهای موجود در شی را بر می‌گرداند:
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

توجه داشته باشید که در نسخه‌های 3x پایتون خروجی این متدها از نوع متفاوتی است که با استفاده از ()type می‌توانید مشاهده کنید؛ این نوع dict_view نامیده می‌شود [

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
]. این متدها یک کپی از داده‌های مورد نظر (عضوها یا مقدارها یا کلیدها) را بر نمی‌گردانند بلکه می‌توان گفت پنجره‌ای برای مشاهده آنچه که هست باز می‌کنند و در هر زمان که این داده‌ها تغییر کنند این خروجی‌ها نیز تغییر می‌کنند. برای مشاهده بهتر این خروجی‌ها می‌توانید آن‌ها را به نوع لیست تبدیل نمایید:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

این متدها در پایتون 2x چنین خروجی ندارند و تنها یکی کپی از داده‌ها را برمی‌گردانند. البته در نسخه 2.7 متدهای معادلی با عنوان‌های ()viewitems [

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
] و ()viewvalues [
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
] و ()viewkeys [
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
] پورت شده است:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
  • ()clear [
    برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
    ] - تمام عضوهای یک شی دیکشنری را حذف می‌کند:
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
  • ()copy [
    برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
    ] - این متد یک کپی سطحی از شی برمی‌گرداند:
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
  • (fromkeys(seq [
    برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
    ] - یک دنباله از کلیدها را دریافت و یک شی جدید دیکشنری با استفاده از آن‌ها ایجاد می‌کند؛ البته کلیدهای این شی فاقد مقدار هستند که می‌بایست در زمانی دیگر به آن‌ها مقدار داد:
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

توجه داشته باشید که این متد توسط خود کلاس dict فراخوانی می‌شود.

این متد یک آرگومان اختیاری نیز دارد که توسط آن می‌توان یک شی را به عنوان «مقدار» پیش‌فرض کلید‌ها تعیین نمود:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
  • (pop(key [
    برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
    ] - عضو دارنده کلید key را حذف و مقدار آن را برمی‌گرداند. چنانچه عضوی با این کلید یافت نشود شی پیش‌فرض تعیین شده (آرگومان دوم که اختیاری است) را برمی‌گرداند و اگر این آرگومان ارسال نشده باشد یک خطا گزارش می‌دهد:
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

از این متد می‌توان برای تغییر راحت‌تر کلیدها استفاده کرد!:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

متد مشابه دیگری نیز با نام ()popitem [

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
] - که بدون آرگومان است - در دسترس می‌باشد؛ این متد در هر فراخوانی یک عضو از شی مورد نظر را به صورت دلخواه حذف و به شکل تاپل (key, value) برمی‌گرداند و چنانچه دیکشنری خالی باشد یک خطا KeyError گزارش می‌دهد:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
  • (get(key [
    برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
    ] - مقدار مربوط به کلید key را برمی‌گرداند. چنانچه درون شی مورد نظر هیچ عضوی با این کلید وجود نداشته باشد شی پیش‌فرض تعیین شده (آرگومان دوم که اختیاری است) را برمی‌گرداند و اگر این آرگومان ارسال نشده باشد هیچ خطایی گزارش نمی‌دهد:
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
  • (setdefault(key [
    برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
    ] - مقدار مربوط به کلید key را برمی‌گرداند. چنانچه عضوی با این کلید درون شی مورد نظر وجود نداشته باشد، کلید را به همراه مقدار پیش‌فرض تعیین شده (آرگومان دوم که اختیاری است) درون شی اضافه می‌کند و خود این مقدار را برمی‌گرداند؛ اگر آرگومان دوم ارسال نشده باشد به صورت پیش‌فرض مقدار None در نظر گرفته خواهد شد:
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
  • ()update [
    برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
    ] - یک شی دیکشنری دیگر را به عنوان آرگومان می‌گیرد و عضوهای شی مورد نظر را بر اساس آن تغییر می‌دهد:
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

 

لینک به دیدگاه

مجموعه

«مجموعه» (Set) از انواع «نامنظم» (Unordered) و «تغییر پذیر» (Mutable) پایتون است که معادل مفهوم مجموعه در ریاضیات می‌باشد. هر عضو مجموعه می‌بایست یکتا و یکی از انواع «تغییر ناپذیر» باشد. نوع مجموعه یا set در نسخه‌ 3x با کمی تفاوت ارایه شده است. در نسخه‌های 2x تنها می‌توان با استفاده از کلاس ()set [

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
] اقدام به ایجاد این اشیا نمود در حالی که در پایتون 3x این کار به سادگی و تنها با استفاده از نماد آکولاد { } نیز امکان پذیر شده است؛ (البته این ویژگی به نسخه 2.7 هم پورت شده است). در دو نمونه کد پایین به چگونگی تعریف و نمایش شی مجموعه توجه نمایید:

نسخه‌های 2x:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

نسخه‌های 3x:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

هیچ سینتکس خاصی برای ایجاد یا بیان یک شی خالی از نوع مجموعه وجود ندارد و تنها می‌بایست از کلاس ()set - بدون آرگومان - استفاده کرد. توجه داشته باشید که {} بیانگر یک شی دیکشنری خالی است و نه یک مجموعه خالی:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

از تابع ()len می‌توان برای به دست آوردن تعداد عضوهای یک شی مجموعه نیز استفاده کرد:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

عملگرها برای مجموعه

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

  • | اجتماع (Union): مانند A | B که حاصل آن مجموعه‌ای می‌باشد که تمام عضوهای مجموعه A و مجموعه B را داشته باشد و هیچ عضو اضافه دیگری نداشته باشد.
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
  • & اشتراک (Intersection): مانند A & B که حاصل آن مجموعه‌ای می‌باشد که تنها شامل عضوهایی است که هم در مجموعه A هستند و هم در مجموعه B:
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
  • - تفاضل (Difference): مانند A - B که حاصل آن مجموعه‌ای می‌باشد که تنها شامل عضوهایی از مجموعه A است كه در مجموعه B نيستند:
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
  • ^ تفاضل متقارن (Symmetric difference): مانند A ^ B که حاصل آن مجموعه‌ای می‌باشد که برابر اجتماع ِ تفاضل A از B و تفاضل B از A می‌باشد یعنی: (A-B) | (B-A):
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

تفاضل متقارن را می‌توان به صورت پایین نیز تعریف کرد:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
  • > زیرمجموعه (Subset): مانند A < B که اگر مجموعه A زیرمجموعه‌ای از مجموعه B باشد مقدار True را برمی‌گرداند. در مقابل عملگر < قرار دارد که برای مثال در عبارت  A > B اگر مجموعه A یک Superset برای مجموعه B باشد مقدار True را برمی‌گرداند:
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

برخی از عملگرهای عمومی نیز برای اشیا مجموعه قابل استفاده هستند:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

برخی از متدهای کاربردی یک شی مجموعه

  • ()union [
    برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
    ] - تعدادی شی مجموعه را دریافت می‌کند و یک مجموعه جدید که برابر اجتماع شی مورد نظر با آن‌ها است را برمی‌گرداند:
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

به صورت مشابه می‌توان از متدهای ()intersection [

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
] برای اشتراک، ()difference [
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
] برای تفاضل، ()symmetric_difference [
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
] - که تک آرگومانی است - برای تفاضل متقارن، ()issubset [
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
] و ()issuperset [
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
] - که هر دو تک آرگومانی هستند - برای بررسی زیرمجموعه یا Superset بودن استفاده کرد.

  • ()clear [
    برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
    ] - تمام عضوهای یک شی مجموعه را حذف می‌کند:
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
  • (add(x [
    برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
    ] - شی تغییر ناپذیر x را در صورتی که از قبل درون شی مجموعه مورد نظر وجود نداشته باشد به آن اضافه می‌کند:
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
  • (remove(x [
    برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
    ] - عضو x را از شی مجموعه مورد نظر حذف می‌کند. در صورتی که x درون مجموعه وجود نداشته باشد یک خطا گزارش می‌دهد:
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

متد مشابه دیگری نیز با الگو (discard(x [

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
] وجود دارد که این متد چنانچه x وجود داشته باشد آن را حذف می‌کند؛ بنابرین در صورت نبودن x خطایی گزارش نمی‌گردد:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

()pop [

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
] - این متد آرگومانی ندارد و به صورت دلخواه یک عضو از مجموعه را حذف و به عنوان خروجی برمی‌گرداند. در مواردی که مجموعه خالی باشد یک خطا گزارش می گردد:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

frozenset

همانطور که پیش از این بیان شد مجموعه یک شی «تغییر پذیر» است با عضوهای «تغییر ناپذیر» و به دلیل همین تغییر پذیری است که می‌توانیم به سادگی توسط متدها عضوی به آن افزوده یا حذف نماییم. ”frozenset“ یک نوع جدید مجموعه است. همانگونه که می‌توانیم یک شی تاپل را معادل یک شی لیست تغییر ناپذیر تصویر کنیم؛ frozenset را نیز می‌توان یک شی مجموعه تغییر ناپذیر تصور کرد. نوع frozenset همان نوع set است، با تمام ویژگی‌های آن به غیر از تغییر پذیری که با استفاده از کلاس ()frozenset ایجاد می‌گردد:

نسخه‌های 2x:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

نسخه‌های 3x:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

با استفاده از تابع ()dir می‌توان متوجه متدهای در دسترس شی frozenset شد:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

 

لینک به دیدگاه

NoneType

این نوع شی فاقد مقدار است و با انتساب ثابت None [

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.
] به یک نام ایجاد می‌گردد:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

None در پایتون 3x جزو کلمه‌های کلیدی (keywords) تعریف شده است.

لینک به دیدگاه

به گفتگو بپیوندید

هم اکنون می توانید مطلب خود را ارسال نمایید و بعداً ثبت نام کنید. اگر حساب کاربری دارید، برای ارسال با حساب کاربری خود اکنون وارد شوید .

مهمان
ارسال پاسخ به این موضوع ...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از 75 اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به صورت لینک

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.


×
×
  • اضافه کردن...