درک کامل تورفتگی(indentation) در پایتون
# تورفتگی در پایتون چیست؟
تورفتگی فضای سفید اصلی قبل از هر عبارت پایتون است. تورفتگی در زبان های دیگر مانند c، c++ فقط برای خوانایی است، اما در پایتون، تورفتگی یک مفهوم بسیار مهم و اجباری است که هنگام نوشتن کد پایتون باید رعایت شود، در غیر این صورت، خطای IndentationError توسط مفسر پایتون ایجاد میشود.
دلیل مهم بودن تورفتگی در پایتون این است که تورفتگی هدف دیگری غیر از خوانایی کد دارد. پایتون عباراتی را که سطح تورفتگی یکسانی دارند به عنوان یک بلوک کد میشناسد. بنابراین در حالی که در زبانهایی مانند c، c++، یک بلوک کد با آکولاد {} نشان داده میشود، در پایتون یک بلوک گروهی از عبارات است که دارای سطح تورفتگی یکسان هستند.
با نگاه به تصویر بالا به راحتی میتوانیم تورفتگی در پایتون را درک کنیم:
- تمام عباراتی که در همان سطح تورفتگی قرار دارند متعلق به یک بلوک واحد هستند، بنابراین در تصویر بالا، دستورات خط 1، خط 2 و خط 7 متعلق به یک بلوک هستند که صفر یا کمترین سطح تورفتگی را دارد. عبارات 3 و 5 یک مرحله تورفتگی دارند، از این رو آنها با هم بلوک دیگری را در سطح اول فرورفتگی تشکیل می دهند. به طور مشابه، عبارات 4 و 6 دو مرحله تورفتگی دارند، بنابراین آنها با هم بلوک دیگری را در سطح دوم فرورفتگی تشکیل می دهند.
- در زیر دستور خط 2 که یک دستور if است، دستورات 3 و 5 یک پله تورفتگی دارند، بنابراین هر دو به یک بلوک تعلق دارند. و از آنجایی که خط 2 یک دستور if است، بلوک فرورفته در زیر if بدنه if را تشکیل می دهد. بنابراین در اینجا بدنه دستور if در خط 2 شامل تمام خطوطی است که در زیر آن فرورفته هستند، یعنی خطوط 3،4،5 و 6.
- اکنون که می دانیم این دستور در خطوط 3،4،5 و 6 بدنه دستور if را در خط 2 تشکیل می دهد، اجازه دهید تورفتگی آنها را بفهمیم. عبارات 3 و 5 به طور یکنواخت دارای تورفتگی هستند بنابراین به یک بلوک (block2 از مفسر) تعلق دارند و یک به یک اجرا می شوند.
- خط 4 بدنه دستور if را در خط 3 تشکیل می دهد، همانطور که می دانیم هر دستوری که در زیر if قرار دارد بدنه دستور if را تشکیل می دهد، به طور مشابه دستور خط 6 بدنه عبارت else را در خط 5 تشکیل می دهد.
به این ترتیب است که تورفتگی به تعریف بلوک ها و همچنین تشخیص اینکه بلوک به کدام عبارات تعلق دارد کمک می کند.
دوره پیشنهادی: دوره آموزش پایتون
+ مثال از تورفتگی پایتون
در مثال اول، یک شرط if به همراه بدنه else را داریم که به شکل درستی از تورفتگی پایتون استفاده کرده است:
name = 'amir'
if name == 'amir':
print('WelCome amir..')
print('How are you?')
else:
print('Dude! whoever you are ')
print('Why you here?')
print('Have a great day!')
در کد بالا، یک متغیر با مقدار amir داریم. در خط بعدی با شرط if بررسی کردیم که اگر متغیر name برابر amir بود دو جمله چاپ شود، در غیر اینصورت دو جمله دیگر چاپ شود:
WelCome amir..
How are you?
Happy Coding!
در مثال دوم، یک حلقه while داریم که از عدد 1 تا 6 را چاپ میکند:
i = 1
while(i <= 6):
print("Value is " + str(i))
i = i + 1
# OUTPUT
Value is 1
Value is 2
Value is 3
Value is 4
Value is 5
Value is 6
مقاله پیشنهادی: بهترین کتابخانه های پایتون برای کار با http
# پیغام خطای IndentationError پایتون
- اگر به درستی تورفتگی ها پایتون را مدیریت نکنید، ممکن است به خطای تورفتگی برخورد کنید. به طور مثال در کد زیر که بعد از شرط if تورفتگی رعایت نشده است، مفسر پایتون خطای IndentationError خواهد داد:
if( 1 == 1):
print("This is test code")
# OUTPUT
File "/home/amir/Desktop/python/two.py", line 2
print("This is test code")
^
IndentationError: expected an indented block
- همچنین تعداد تورفتگی ها در یک بلوک کد نیز باید به یک اندازه باشد. در مثال زیر، جملات print به درستی تورفتگی را رعایت نکرده اند:
if( 1 == 1):
print("This is test code")
print("This is test code1")
- تورفتگی در اول خط نیز مجاز نمیباشد. در کد زیر، شرط if یک سطح تورفتگی اضافی دارد:
if( 1 == 1):
print("This is test code")
مقاله پیشنهادی: wsgi پایتون چیست؟
# قوانین تورفتگی پایتون
- پایتون از 4 فاصله به عنوان فضاهای تورفتگی پیش فرض استفاده می کند. با این حال، تعداد فضاها می تواند هر چیزی باشد، این به خود کاربر بستگی دارد. اما حداقل یک فاصله برای تورفتگی یک عبارت مورد نیاز است.
- خط اول کد پایتون نمی تواند دارای تورفتگی باشد.
- تورفتگی در پایتون برای تعریف بلوک های دستوری اجباری است.
- تعداد فضاها باید در یک بلوک کد یکسان باشد.
- استفاده از space به جای tab برای تورفتگی در پایتون ترجیح داده می شود. همچنین، برای ایجاد تورفتگی اگر از هر دو Space یا Tabs استفاده کنید، اختلاف این دو در تورفتگی میتواند باعث خطای تورفتگی شود.