اصول زبان پایتون در GIS-فصل 4
4.1معرفی
این فصل اصول زبان پایتون، از جمله استفاده از انواع داده ها و ساختارهای داده، متغیرها، کلمات کلیدی، عبارات و عبارات، روش ها، توابع و ماژول ها را پوشش می دهد. این عناصر سینتکس اولیه برای نوشتن کد در پایتون را تشکیل می دهند. بخش دوم این فصل به کنترل گردش کار، از جمله استفاده از دستورات شرطی، انشعاب، و حلقه می پردازد. این ساختارها عنصر مهمی از اسکریپت های پردازش جغرافیایی برای ArcGIS Pro هستند و برای عملیات دسته ای اساسی هستند. بخش سوم این فصل به بهترین شیوه ها در نوشتن اسکریپت ها، از جمله نام گذاری، سازماندهی کد و ارائه نظرات اختصاص دارد.
توجه داشته باشید:به عنوان یک یادآوری مهم، این کتاب به طور انحصاری بر پایتون 3 تمرکز دارد. اگرچه بسیاری از کدها بین نسخههای 2 و 3 یکسان باقی میمانند، تفاوتهای مهمی وجود دارد که این فصل توضیح نمیدهد. برای کسانی که اسکریپت های موجود در پایتون 2 نوشته شده اند،برنامه نویسی پیشرفته پایتون برای ArcGIS Pro استراتژی هایی را در مورد نحوه انتقال اسکریپت های نوشته شده در Python 2 برای ArcGIS Desktop 10.x به Python 3 برای ArcGIS Pro پوشش می دهد.
4.2مکان یابی اسناد و منابع پایتون
قبل از ورود به سینتکس پایتون، مفید است که مکان جستجوی اسناد پایتون را مرور کنید. اگر پایتون را بهعنوان بخشی از نصب معمولی ArcGIS Pro نصب کردهاید، میتوانید پیوندهایی به کتابچههای راهنمای Python از داخل IDLE پیدا کنید. IDLE را شروع کنید و از منوی بالا، روی Help > Python Docs کلیک کنید. کتابچه راهنمای Python شامل مستندات کامل برای نسخه پایتون است که بر روی رایانه شما نصب شده است.
همین اسناد پایتون را میتوانید به صورت آنلاین در اینجا نیز پیدا کنیدhttps://docs.python.org. شما چندین نسخه از اسناد را برای نسخه های مختلف پایتون پیدا خواهید کرد، از جمله 2.7، 3.6، 3.7، 3.8 و غیره. نسخه های موجود در طول زمان با انتشار به روز رسانی ها تغییر خواهند کرد. همچنین میتوانید مستندات کامل را در قالبهای PDF، HTML و متن دانلود کنید.
توجه: در زمان نگارش، نسخه فعلی پایتون 3.8 است، در حالی که نسخه 3.9 در دست توسعه است. نسخه ای که با ArcGIS Pro 2.5 استفاده می شود، با این حال، 3.6.9 است و این نسخه استفاده شده در این کتاب است. با این وجود، تفاوتهای بین این نسخهها جزئی است و در صورت وجود، تأثیر زیادی روی نمونههای کد این کتاب ندارد.
مستندات پایتون گسترده است. برای مثال، نسخه PDF مرجع کتابخانه پایتون بیش از 2000 صفحه است. اگر به تازگی در پایتون شروع کرده اید، این می تواند ترسناک باشد. اسناد، با این حال، به معنای خواندن جلد به جلد نیست. در عوض، اسناد معمولاً برای جستجوی انتخابی نحو برای وظایف خاص استفاده می شود. این فصل شما را با اصول پایتون آشنا میکند، که اصطلاحات اولیه مورد نیاز برای استفاده مؤثرتر از اسناد را در اختیار شما قرار میدهد.
وب سایت پایتون به آدرسhttps://www.python.orgهمچنین حاوی بسیاری از منابع اضافی برای یادگیری پایتون، از جمله “راهنمای مبتدی برای پایتون” درhttps://wiki.python.org/moin/BeginnersGuideو مجموعه ای از آموزش های مقدماتی درhttps://wiki.python.org/moin/BeginnersGuide/NonProgrammers. شما به سرعت متوجه خواهید شد که منابع زیادی در پایتون وجود دارد که توسط یک جامعه کاربری بزرگ و فعال ایجاد شده است.
4.3کار با انواع داده ها و ساختارها
پایتون از چندین نوع داده مختلف از جمله رشته ها، اعداد، بولی ها، لیست ها، تاپل ها، دیکشنری ها و غیره استفاده می کند. نوع داده یک شی تعیین می کند که چه نوع مقادیری می تواند داشته باشد و چه عملیاتی را می توان روی شی انجام داد. مقادیر رشته شامل کاراکترهایی است که می تواند شامل حروف، اعداد یا انواع دیگر کاراکترها باشد. دو نوع داده عددی وجود دارد: اعداد صحیح (اعداد کامل) و شناور، یا اعداد ممیز شناور (اعداد کسری). بولی ها فقط می توانند حاوی مقادیر باشنددرست است، واقعییانادرست. لیست ها، تاپل ها و فرهنگ لغت ها انواع داده های پیچیده تری هستند که از مجموعه ای از عناصر داده تشکیل شده اند.
برخی از انواع داده ها می توانند بیش از یک مقدار داشته باشند و به آنها ساختار داده می گویند. ساختار داده مجموعهای از عناصر است که به روشی معنادار ساختار یافتهاند – برای مثال، عناصری که به ترتیب شمارهگذاری میشوند. ابتدایی ترین ساختار داده در پایتون توالی است که در آن به هر عنصر یک عدد یا شاخص اختصاص داده می شود. رشته ها، لیست ها و تاپل ها نمونه هایی از دنباله ها هستند. از آنجایی که توالی ها ساختار داده ذاتی یکسانی دارند، کارهای خاصی وجود دارد که می توانید با هر نوع دنباله ای انجام دهید. نمونه هایی از کار با دنباله ها در ادامه این فصل ظاهر می شود.
رشته ها، اعداد و تاپل ها تغییر ناپذیر هستند، به این معنی که شما نمی توانید آنها را تغییر دهید بلکه فقط آنها را با مقادیر جدید جایگزین کنید. فهرست ها و فرهنگ لغت ها قابل تغییر هستند، به این معنی که عناصر داده را می توان تغییر داد. بخش های زیر این مفاهیم را نشان می دهد.
4.4کار با اعداد
اعداد می توانند اعداد صحیح یا شناور باشند. اعداد صحیح اعداد کامل هستند، یعنی اعدادی که جزء کسری ندارند، به این معنی که اعشار ندارند، به عنوان مثال، 1 و -34. شناورها یا اعداد ممیز شناور، اعدادی هستند که دارای اعشار هستند، به عنوان مثال، 1.0 و -34.8307. اگرچه هر دو اعداد صحیح و شناور انواع داده های عددی هستند، بسته به نحو پایتون متفاوت عمل می کنند، بنابراین تمایز مهم است.
یک مثال ساده را در نظر بگیرید:
>>> 3 – 8
-5
نتیجه مقدار -5 است. به اندازه کافی ساده در اصطلاح پایتون، اعداد 3 و 8 را عملوند و علامت منفی (-) عملگر نامیده می شود. انواع مختلفی از عملگرها وجود دارد – در این بخش، تمرکز بر روی عملگرهای حسابی است.
مثال اصلی دیگر از عملگرهای حسابی:
>>> 5 + 12
17
در مرحله بعد، استفاده از تقسیم در پایتون را در نظر بگیرید:
>>> 7/2
3.5
نتیجه کد 3.5 است. حتی اگر صورت و مخرج اعداد صحیح هستند، نتیجه به عنوان یک شناور برای گرفتن قسمت کسری گزارش می شود. به این تقسیم واقعی یا تقسیم ممیز شناور گفته می شود.
نوع دیگری از تقسیم که منجر به یک عدد صحیح می شود، تقسیم طبقه نامیده می شود و از آن استفاده می کند//نماد. شما به سادگی نماد تقسیم را تایپ کنید (/) دو برابر. مثال را در نظر بگیرید:
>>> 7 // 2
3
نتیجه 3 است. نتیجه حاصل از تقسیم به اعداد اعشار بریده شده (نه گرد) است. هنگام کار با اعداد منفی، تقسیم طبقات ممکن است کمی مشکل باشد. در این مورد، عملگر گرد “بالا” را به نزدیکترین عدد صحیح گرد می کند، اما از نظر ریاضی، به پایین گرد می شود زیرا نتیجه منفی است. مثال را در نظر بگیرید:
>>> -7 // 2
-4
نتیجه 4- ممکن است در ابتدا تا حدی غیرقابل تصور به نظر برسد، بنابراین در تقسیم بندی طبقات مراقب باشید. همچنین توجه داشته باشید که تقسیم طبقه همیشه یک نتیجه از نوع عدد صحیح را برمیگرداند، حتی اگر مقدار یک عدد صحیح کامل باشد. هنگامی که صورت یا مخرج یک شناور باشد، مقدار بازگشتی واقعی نیز یک شناور خواهد بود، اما همچنان به نزدیکترین عدد صحیح گرد می شود.
>>> -7.0 // 2
-4.0
محاسبه بعدی چطور؟
>>> 17 % 4
1
عملگر % در اینجا مخفف مدول یا باقیمانده بعد از تقسیم است. بنابراین، 17% 4 باقیمانده 17 تقسیم بر 4 را ارزیابی می کند که به 1 می رسد.
اگر محاسبه شامل یک شناور باشد چه؟
>>> 17.0 % 4
1.0
نتیجه یک شناور است که با مثال های قبلی برای تقسیم مطابقت دارد.
بعد، ضرب را در پایتون در نظر بگیرید:
>>> 3*8
24
و اگر از شناور استفاده شود چطور؟
>>> 3.0 * 8
24.0
اینجا جای تعجب نیست
در نهایت، استفاده از عملگر توان است که از آن استفاده می کند**نماد. شما به سادگی نماد ضرب (*) را دو بار تایپ کنید. به مثال زیر توجه کنید:
>>> 8 ** 3
512
و دوباره، استفاده از شناور بر نتیجه تأثیر می گذارد:
>>> 8.0 ** 3
512.0
عملگرهای اساسی حسابی برای اعداد صحیح و شناورها در جدول 4.1 خلاصه شده است.
اپراتور | شرح | عدد صحیح | نقطه شناور | ||
مثال | نتیجه | مثال | نتیجه | ||
– | منها کردن | 9 – 2 | 7 | 9 – 2.0 | 7.0 |
+ | اضافه | 9 + 2 | 11 | 9 + 2.0 | 11.0 |
/ | بخش | 9/2 | 4.5 | 9 / 2.0 | 4.5 |
// | تقسیم طبقات | 9 // 2 | 4 | 9 // 2.0 | 4.0 |
% | مدول | 9% 2 | 1 | 9٪ 2.0 | 1.0 |
* | ضرب | 9*2 | 18 | 9 * 2.0 | 18.0 |
** | توان | 9 ** 2 | 81 | 9 ** 2.0 | 81.0 |
بخش های زیر استفاده از عملگرهای اضافی را بررسی می کند.
4.5کار با متغیرها و نامگذاری
اسکریپت های پایتون از متغیرها برای ذخیره اطلاعات استفاده می کنند. یک متغیر اساساً نامی است که یک مقدار را نشان می دهد یا به آن اشاره می کند. همچنین می توانید آن را ظرفی در نظر بگیرید که مقداری را ذخیره می کند. برای مثال، ممکن است بخواهید از یک متغیر x برای نشان دادن عدد 17 استفاده کنید. نحوه انجام این کار در پایتون به این صورت است:
>>> x = 17
در این دستور انتساب، مقدار 17 را به متغیر x نسبت می دهید. هنگامی که یک مقدار را به یک متغیر اختصاص می دهید، می توانید از متغیر در یک عبارت استفاده کنید. مثلا:
>>> x = 17
>>> x * 2
34
توجه داشته باشید که قبل از استفاده از متغیر باید مقداری را به آن اختصاص دهید. خط کدx * 2مستلزم آن است که قبل از آن خط کد قرار گیردx = 17، که مقدار 17 را به x نسبت می دهد.
اگر از یک متغیر قبل از تخصیص یک مقدار استفاده کنید چه؟ شما یک خطا دریافت خواهید کرد. مثال زیر را در نظر بگیرید که در آن متغیر y در قسمت های قبلی کد شما استفاده نمی شود:
>>> y * 2
این کد یک پیغام خطایی ایجاد می کند که شامل موارد زیر است:
NameError: نام ‘y’ تعریف نشده است
همیشه قبل از استفاده از آنها در یک عبارت با یک عملگر، اطمینان حاصل کنید که به متغیرهای شما یک مقدار اختصاص داده شده است.
توجه داشته باشید:توصیه می شود از یک فضای واحد در اطراف اپراتورها استفاده کنید – به عنوان مثال،x = 17، به جایx=17. مورد دوم نادرست نیست، اما فاصله ها خوانایی کد شما را بهبود می بخشد.
یک یادداشت کوتاه در مورد سایر زبان های برنامه نویسی لازم است. اگر با زبان هایی مانند C++ یا جاوا آشنایی دارید، یاد گرفته اید که ابتدا یک متغیر را تعریف کرده و نوع آن (مثلاً رشته، عدد و غیره) را قبل از اینکه بتوانید به آن مقدار اختصاص دهید، تعریف کنید. پایتون نیازی به اعلان آن ندارد و می توانید مستقیماً یک مقدار به آن اختصاص دهید. اگر از زبان های برنامه نویسی دیگر استفاده نکرده اید، استفاده از متغیرها در پایتون بصری است. همچنین کارآمد است و باعث ایجاد خطوط کد کمتری می شود.
پایتون چگونه میداند که متغیر شما چه نوع است؟ نوع در مقداری که به آن اختصاص میدهید ضمنی است. برای مثال،x = 17به این معنی است که x یک عدد صحیح است، در حالی کهx = 17.629یعنی x یک شناور است وx = “GIS”یعنی x یک رشته است. این نوع تخصیص به عنوان تخصیص پویا شناخته می شود که گاهی اوقات به عنوان “تایپ پویا” نامیده می شود.
شما می توانید نوع یک متغیر را با اختصاص یک مقدار جدید به آن تغییر دهید. مثلا:
>>> a = 0.123
>>> 2 * الف
0.246
>>> a = 123
>>> 2 * الف
246
در ابتدا به متغیر a مقدار 0.123 اختصاص داده می شود و بنابراین یک شناور است. بعداً در کد، به همان متغیر مقدار 123 اختصاص داده می شود و به جای آن به یک عدد صحیح تبدیل می شود. این مثال پیامدهای تخصیص پویا در پایتون را نشان می دهد.
متغیرهای متعددی را می توان در یک خط اختصاص داد که اسکریپت های شما را فشرده نگه می دارد. مثلا:
>>> x، y، z = 1، 2، 3
مثل این هست که:
>>> x = 1
>>> y = 2
>>> z = 3
گاهی اوقات باید از یک متغیر در اسکریپت خود استفاده کنید، اما ممکن است از قبل ندانید که مقدار آن چقدر خواهد بود. در چنین مواقعی می توانید متغیر را بدون اختصاص مقدار به آن ایجاد کنید. دو گزینه برای انجام این کار وجود دارد. گزینه اول یک رشته خالی ایجاد می کند:
k = “”
توجه داشته باشید که بین نقل قول ها فاصله وجود ندارد.
گزینه دوم یک متغیر بدون نوع ایجاد می کند:
p = هیچ
از نظر فنی، نوع این متغیر استNoneTypeاگر نوع داده را با استفاده ازtype()تابع، اما به سادگی به این معنی است که متغیر هیچ مقداری ندارد.
وقتی کد خود را می نویسید، می توانید در مورد نام متغیرهای خود تصمیم بگیرید. شما انعطاف پذیری زیادی دارید، اما قوانین اساسی برای نامگذاری متغیرها وجود دارد:
- نام متغیرها می تواند فقط از حروف، اعداد و زیرخط (_) تشکیل شود. هیچ فاصله یا کاراکتر ویژه دیگری مجاز نیست.
- نام متغیرها نمی توانند با یک رقم شروع شوند. بنابراین، var3 یک نام متغیر معتبر است، اما 3var نیست.
- کلمات کلیدی پایتون را نمی توان به عنوان نام متغیر استفاده کرد. کلمات کلیدی شامل عباراتی ماننداگروتلاش كردن. در ادامه این فصل کلمات کلیدی بیشتری را مشاهده خواهید کرد و همچنین نحوه مشاهده تمامی کلمات کلیدی در پایتون را مشاهده خواهید کرد.
- توابع پایتون نباید به عنوان نام متغیر استفاده شوند. این شامل عملکردهایی مانندچاپ()وtype(). اگرچه استفاده از یک تابع به عنوان نام متغیر، یک خطای فوری ایجاد نمی کند، اما اگر در همان اسکریپت استفاده شود، در استفاده صحیح از تابع اختلال ایجاد می کند.
- نام متغیرها به حروف بزرگ و کوچک حساس هستند. بنابراین، var3 و Var3 دو متغیر متفاوت هستند.
علاوه بر قوانین مربوط به متغیرها که از نظر فنی صحیح هستند، در اینجا چند دستورالعمل برای ایجاد نام متغیرهای خوب وجود دارد:
- از نام های توصیفی استفاده کنید. فکر کردن از قبل در مورد چیزی که یک متغیر می نامید به شما کمک می کند کدی بنویسید که دنبال کردن آن آسان باشد. همچنین می تواند به شما کمک کند معنی متغیر را به خاطر بسپارید. برای مثال، متغیری به نام «count» از متغیری که به سادگی «c» نامیده میشود، معنادارتر است.
- از قراردادها پیروی کنید بیشتر زبانهای برنامهنویسی سنتهای خاصی دارند و پایتون یک راهنمای سبک رسمی برای کد پایتون (PEP 8) دارد. سبک پیشنهادی برای نام متغیرها استفاده از نام های کوتاه و تمام حروف کوچک با کلماتی است که برای خوانایی لازم با زیرخط (_) از هم جدا شده اند. از استفاده از زیرخط به عنوان حرف اول خودداری کنید زیرا این علامت در پایتون معنای خاصی دارد. راهنمای سبک کامل را میتوانید در اینجا پیدا کنیدhttps://www.python.org/dev/peps/pep-0008.
- آن را کوتاه نگه دارید. اگرچه نام متغیرهای طولانی از نظر فنی مشکلی ندارند، چرا متغیر خود را چیزی مانند number_of_cells_in_a_raster_dataset صدا کنید؟ نامهای طولانی احتمال اشتباهات تایپی را افزایش میدهند و خواندن کد شما را سختتر میکنند.
- از سردرگمی اجتناب کنید. به طور کلی از استفاده از موارد زیر در نام متغیرها خودداری کنید: حرف کوچک l، حرف بزرگ I و حرف بزرگ O. دو حرف اول از این حروف شبیه به یکدیگر و عدد 1 هستند و سومی شبیه عدد 0 است.
نامگذاری اسکریپت های پایتون از همین قوانین و دستورالعمل های اساسی پیروی می کند.
در زیر چند نمونه از نام متغیرهای خوب آورده شده است:
- پیشخوان
- میدان 5
- my_file
در زیر نمونه هایی از نام متغیرها وجود دارد که باعث ایجاد خطا می شود:
- 1var (با یک عدد شروع می شود)
- del (کلید واژه پایتون)
- name$ (شامل یک کاراکتر خاص)
- نام من (شامل یک فاصله)
در نهایت، موارد زیر نمونههایی از نام متغیرهایی هستند که خطایی ایجاد نمیکنند اما تشویق نمیشوند:
- dataSize (از حروف بزرگ استفاده می کند)
- FEATURECLASS (از همه سرپوش ها استفاده می کند)
- رابطه gisprojectdatabaseable (بیش از حد طولانی و گیج کننده)
- o10LOil (کاراکترهای گیج کننده)
اولین نمونه از این نمونه ها، dataSize، از سبکی به نام camel case استفاده می کند که به عنوان camelCase نیز نوشته شده است. در این سبک، نام متغیرها از ترکیب دو یا چند کلمه بدون فاصله یا زیرخط تشکیل شده است که اولین کلمه با حروف کوچک نوشته می شود و بقیه کلمات با یک حرف بزرگ شروع می شوند. این سبک محبوب است، اما راهنمای سبک برای کد پایتون استفاده از آن را منع می کند. اگر می خواهید به شدت از سبک رسمی پیروی کنید، نباید از جعبه شتر استفاده کنید. با این حال، camel case معمولی ترین سبکی است که برای نام متغیرها در زبان های برنامه نویسی دیگر مانند C++ و Java استفاده می شود. بنابراین، برنامه نویسانی که از چندین زبان استفاده می کنند، اغلب از این سبک در پایتون نیز استفاده می کنند، زیرا هیچ مشکل نحوی ایجاد نمی کند. این گروه شامل بسیاری از برنامه نویسان Esri است که پایتون می نویسند.
جایگزین های بهتری که از راهنمای سبک پیروی می کنند، datasize یا data_size برای بهبود خوانایی هستند. این مثال اخیر snake case نامیده می شود که به آن snake_case نیز گفته می شود که در آن کلمات با یک زیرخط و بدون فاصله از هم جدا می شوند.
صرف نظر از اینکه کدام سبک استفاده می شود، مهمترین جنبه برای نامگذاری قراردادها سازگاری است. بنابراین، اگر سبک خاصی را به کار میگیرید، در کل کد خود ثابت باشید. این نه تنها در مورد متغیرها، بلکه برای سایر عناصر کد و همچنین نام اسکریپت ها نیز صدق می کند. سازگاری تشخیص عناصر کد را آسان تر می کند.
4.6نوشتن عبارات و عبارات
هنگامی که متغیرهایی برای کار با آنها دارید، می توانید شروع به نوشتن عبارات و عبارات پایتون کنید.
یک عبارت یک مقدار است. مثلا،2 * 17عبارتی است که مقدار 34 را نشان می دهد. عبارات ساده از مقادیر تحت اللفظی (مانند 17) با استفاده از عملگرها و توابع ساخته می شوند. بخش 4.10 عملکردها را پوشش می دهد. عبارات پیچیده تر را می توان با ترکیب عبارات ساده تر ایجاد کرد. عبارات همچنین می توانند شامل متغیرهایی باشند.
از سوی دیگر، یک دستور دستوری است که به رایانه میگوید کاری را انجام دهد. این می تواند شامل تغییر مقدار متغیرها از طریق تخصیص، چاپ مقادیر روی صفحه، وارد کردن ماژول ها و بسیاری از عملیات های دیگر باشد.
تفاوت بین عبارات و عبارات کمی ظریف اما مهم است. به مثال زیر توجه کنید:
>>> 2 * 17
34
اینجا،2 * 17یک بیان است. دارای مقدار (34) است که به طور خودکار در صفحه مفسر تعاملی پایتون چاپ می شود. حال موارد زیر را در نظر بگیرید:
>>> x = 2 * 17
اینجا،x = 2 * 17یک بیانیه است به متغیر x یک مقدار اختصاص داده شده است، اما خود عبارت یک مقدار نیست. یک ویژگی تعیین کننده عبارات این است که آنها کاری را انجام می دهند. یک دستور به خودی خود یک مقدار نیست، و از این رو، در مثال قبل، مفسر تعاملی پایتون مقداری را چاپ نمی کند – شما باید ازچاپ()عملکرد برای آن:
>>> x = 2 * 17
>>> چاپ (x)
34
عباراتی که مقادیری را به متغیرها اختصاص می دهند از جمله مهمترین عبارات در هر زبان برنامه نویسی هستند. در نگاه اول، گزارههای انتساب ممکن است به نظر فقط بهعنوان محفظههای موقتی برای ارزشها عمل کنند، اما قدرت واقعی در این واقعیت نهفته است که برای دستکاری آنها نیازی به دانستن چه ارزشهایی ندارید. در نتیجه، میتوانید اسکریپتهای پایتون بنویسید که متغیرها را بدون اطلاع از مقادیری که در نهایت ممکن است نگه دارند، دستکاری میکنند. برای مثال، میتوانید کد بنویسید تا لیستی از اعداد را پردازش کنید و بزرگترین عدد را در لیست بیابید، اما هنگام نوشتن کد، نیازی به دانستن فهرست دقیق اعداد ندارید.
4.7با استفاده از رشته ها
از جمله مهم ترین انواع داده ها می توان به رشته ها اشاره کرد. مجموعهای از کاراکترها که با علامتهای نقل قول احاطه شدهاند، یک رشته واقعی یا بهطور ساده یک رشته نامیده میشود. شما قبلاً نمونه ای از آن را هنگام نوشتن کد مشاهده کرده ایدچاپ (“سلام جهان”)در فصل 2. شما می توانید یک متغیر رشته ای را با اختصاص دادن یک رشته به معنای واقعی کلمه ایجاد کنید. به مثال زیر توجه کنید:
>>> نام = “پل”
به نام متغیر مقدار Paul اختصاص داده شده است و به دلیل اینکه مقدار در علامت نقل قول است، متغیر یک رشته است. علامت نقل قول در اینجا الزامی است. به عنوان مثال، کد زیر یک خطا ایجاد می کند:
>>> نام = پل
پیام خطا شامل موارد زیر خواهد بود:
NameError: نام “Paul” تعریف نشده است
بنابراین، علامت نقل قول برای ایجاد یک رشته مورد نیاز است.
می توانید از علامت نقل قول استفاده کنید (“”) یا دو علامت نقل قول (“”). در پایتون، این دو سبک از علامت نقل قول یک هدف دارند و به جای هم استفاده می شوند. گیومهها مانند قفسههای کتاب هستند و به رایانه میگویند که رشته از کجا شروع میشود و کجا به پایان میرسد. وجود دو راه برای نشان دادن محلهای کتاب، انعطافپذیری را فراهم میکند. برای مثال، اگر از یک جفت گیومه دوتایی برای احاطه متن خود استفاده میکنید، میتوانید به تعداد دلخواه در داخل رشته از علامت نقل قول استفاده کنید و بالعکس. مثلا:
>>> print (“گفتم: “بریم!”)
استفاده از علامت نقل قول تکی در اطراف این رشته گیج کننده خواهد بود. همچنین یک خطای نحوی ایجاد می کند زیرا انتهای رشته به درستی خوانده نمی شود.
>>> چاپ (“گفتم: “بیا بریم!”)
SyntaxError: نحو نامعتبر است
حتی اگر این دو نوع علامت نقل قول را می توان به جای هم استفاده کرد، اما باید به صورت جفت استفاده شوند. هر یک از دو علامت نقل قول را می توان به عنوان نقل قول ابتدایی استفاده کرد، اما فقط از همان نوع نقل قول می توان به عنوان نقل قول پایانی استفاده کرد. مثلا:
>>> نام = “پل”
SyntaxError: EOL هنگام اسکن رشته به معنای واقعی کلمه
نتیجه یک نوع خاص از خطای نحوی است که به عنوان خطای پایان خط یا EOL شناخته می شود، زیرا هیچ نقل قول پایانی یافت نشد.
به عنوان یادآوری، علامت نقل قول در پایتون همیشه مستقیم است، برای هر دو تک (‘) و دو برابر (“) نقل قول ها وقتی علامت نقل قول را در ویرایشگر پایتون تایپ می کنید، به طور خودکار به درستی قالب بندی می شوند. وقتی علامت نقل قول را در یک برنامه پردازش کلمه تایپ می کنید، اغلب به صورت خودکار به علامت نقل قول مجعد یا مایل، به عنوان مثال، “متن جدید” قالب بندی می شوند. این نقلقولها هنگام نوشتن متن از نظر تایپی درست هستند، اما کپی کردن این علامتها در پایتون باعث ایجاد خطا میشود:
x = “متن جدید”
SyntaxError: نویسه نامعتبر در شناسه
توجه داشته باشید:از نوشتن کد در برنامه پردازش کلمه و سپس کپی کردن آن در ویرایشگر پایتون خودداری کنید. همه گیومه های فرفری باید جایگزین شوند.
رشتهها اغلب در اسکریپتهای پردازش جغرافیایی استفاده میشوند، مخصوصاً هنگام تعریف پارامترهای ابزار. برای مثال از مسیرها یا مسیرهای جزئی برای تعریف ورودی و خروجی یک ابزار استفاده می شود و این مسیرها به صورت رشته ای ذخیره می شوند. بنابراین، عملگرهای رشته ای در کار با مجموعه داده ها در فضاهای کاری مختلف مهم هستند.
چند کار را که می توانید با رشته ها انجام دهید در نظر بگیرید. به عنوان مثال، شما می توانید رشته ها را به سادگی با “افزودن” آنها به هم متصل کنید:
>>> x = “G”
>>> y = “من”
>>> z = “S”
>>> چاپ (x + y + z)
GIS
ممکن است استفاده از عملگرهای حسابی روی رشته ها غیر منطقی به نظر برسد. با این حال، وقتی در نظر بگیرید که رشتهها فقط دنبالهای از کاراکترها هستند، منطقی است که دنبالههای موجود را در یک دنباله جدید ترکیب کنید. و ساده ترین راه برای ترکیب چیزها با مثبت است (+) اپراتور.
هنگام ترکیب رشته ها برای تشکیل یک رشته جدید، ممکن است بخواهید فاصله بین آنها را با استفاده از دو علامت نقل قول در اطراف یک فاصله اضافه کنید (“”). مثلا:
>>> x = “جغرافیایی”
>>> y = “اطلاعات”
>>> z = “سیستم ها”
>>> چاپ (x + ” ” + y + ” ” + z)
سیستم های اطلاعات جغرافیایی
رشته ها می توانند شامل کاراکترهای عددی باشند. با این حال، هنگام تلاش برای ترکیب رشته ها و اعداد، ابتدا اعداد باید به یک رشته تبدیل شوند. به مثال زیر توجه کنید:
>>> دما = 32
>>> print (“دما” + دما + “درجه است”)
نتیجه یک پیام خطا است زیرا نمی توانید یک رشته و یک عدد را با هم اضافه کنید:
TypeError: باید str باشد نه int
می توانید استفاده کنیدstr()تابع تبدیل عدد به رشته کد صحیح به صورت زیر است:
>>> دما = 100
>>> print(“دما” + str(temp) + “درجه است”)
دما 100 درجه است
در این مثال،str()نمونه ای از یک تابع است. تبدیل مقدار متغیر از یک نوع به نوع دیگر به عنوان ریخته گری شناخته می شود. کد مثال قبلی نمونه دیگری از قالب بندی رشته با استفاده از کد است+عملگر برای به هم پیوستن رشته ها. بخش 4.13 روش های جایگزین برای قالب بندی رشته ها را پوشش می دهد.
در پایتون، رشتهها بهطور پیشفرض، رشتههای یونیکد هستند. به طور کلی، می توانید رشته ها را به عنوان “متن ساده” در نظر بگیرید. متن به عنوان کاراکترهای خاص ذخیره می شود و زبان های مختلف از مجموعه های متفاوتی از کاراکترها استفاده می کنند. این تنوع می تواند در پلتفرم های مختلف رایانه مشکلاتی ایجاد کند و ممکن است کاراکترها به درستی نمایش داده نشوند. ممکن است هنگام تلاش برای خواندن صفحات وب یا ایمیل ها به زبان های مختلف با این وضعیت مواجه شده باشید. برای غلبه بر این مشکلات، سیستم یونیکد به گونه ای طراحی شده است که هر شخصیت از هر زبان را نشان دهد. این در تضاد با انواع دیگر رشته ها است – برای مثال، ASCII (تبادل اطلاعات کد استاندارد آمریکایی) به 256 کاراکتر مختلف محدود شده است. وقتی به تمام زبان های دنیا فکر می کنید (مثلاً چینی، فرانسوی، آلمانی، روسی، تایلندی و غیره)، 256 کاراکتر مختلف به وضوح کافی نیست.
ASCII و Unicode هر دو سیستم های رمزگذاری هستند – طرح های استاندارد برای نمایش کاراکترهای دنیای واقعی به بایت هایی که توسط رایانه ها استفاده می شود. ASCII تنها از یک بایت استفاده می کند، جایی که 256 کاراکتر مختلف از آن می آیند (یعنی 1 بایت برابر با 8 بیت است و 2 (برای باینری) به توان 8 برابر با 256 می شود). پرکاربردترین استاندارد برای یونیکد UTF-8 (فرمت تبدیل یونیکد 8 بیتی) است. این استاندارد از 1 تا 8 بایت استفاده می کند. این برنامه با ASCII سازگار است، اما از تمام زبان های اصلی جهان پشتیبانی می کند. UTF-8 می تواند حاوی حدود 1.1 میلیون کد کاراکتر مختلف باشد، اگرچه در حال حاضر تنها حدود 10 درصد به کاراکترهای دنیای واقعی اختصاص داده شده است. اکثر صفحات وب جهان که امروزه مورد استفاده قرار می گیرند از UTF-8 استفاده می کنند.
از آنجایی که پایتون از رشته های یونیکد استفاده می کند، می توانید با کاراکترهایی از زبان های مختلف کار کنید. می توانید با استفاده از نویسه های خاص در یونیکد بنویسید\uدنباله فرار به عنوان مثال، یونیکد 0394 برای دلتای حرف بزرگ یونانی استفاده می شود:
>>> “\u0394”
‘Δ’
به عنوان مثال دیگر، Unicode 00E7 برای حرف کوچک لاتین c با cedilla استفاده می شود:
>>> “\u00E7”
‘ç’
در نهایت، Unicode 0B90 برای حرف U تامیل استفاده می شود:
>>> “\u0B89”
‘ﮉ’
نیازی به یادآوری هیچ یک از این کدها نیست. نکته این است که کاراکترهای تمام زبان های اصلی دنیا در پایتون پشتیبانی می شوند. و از آنجایی که پایتون از استاندارد پرکاربرد UTF-8 استفاده می کند، ابزارهای آنلاین متعددی برای جستجوی کدهای هر کاراکتر وجود دارد.
به طور پیش فرض رشته ها در پایتون رشته های یونیکد هستند. اشکال دیگری از رمزگذاری را می توان در پایتون استفاده کرد، اما باید در نظرات در ابتدای اسکریپت مشخص شود.
4.8استفاده از لیست ها
یکی دیگر از انواع داده های مهم در پایتون لیست ها هستند. یک لیست شامل دنباله ای از موارد است که با پرانتز ([ ]) احاطه شده اند، که گاهی اوقات به عنوان “پرانتز مربع” نامیده می شود، و موارد با کاما از هم جدا می شوند. خود آیتم ها می توانند از اعداد، رشته ها یا چندین نوع داده دیگر از جمله لیست تشکیل شده باشند. همه موارد در یک لیست واحد معمولاً از نوع داده یکسانی هستند، اگرچه لازم نیست. لیست ها اغلب در اسکریپت های پردازش جغرافیایی استفاده می شوند. به عنوان مثال، ممکن است بخواهید لیستی از تمام کلاس های ویژگی در یک فضای کاری ایجاد کنید و عملیاتی را روی تمام کلاس های ویژگی در لیست انجام دهید.
یکی از راه های ایجاد لیست این است که همه موارد را تایپ کنید. مثال زیر لیستی از اعداد را ایجاد می کند:
>>> mylist = [1، 2، 4، 8، 16، 32، 64]
توجه داشته باشید که آیتم ها با کاما و به دنبال آن یک فاصله از هم جدا شده اند. فضا مورد نیاز نیست، اما خواندن لیست را آسان تر می کند.
آیتم های فهرست به اعداد محدود نمی شوند بلکه می توانند از رشته ها نیز تشکیل شوند:
>>> mywords = [“jpg”، “bmp”، “tif”، “img”]
شما می توانید محتویات لیست را با استفاده ازچاپ()عملکرد به شرح زیر است:
>>> چاپ (mywords)
[“jpg”، “bmp”، “tif”، “img”]
توجه داشته باشید که اقلام هنگام چاپ، ترتیب اصلی خود را حفظ می کنند. یک لیست یک توالی مرتب شده از اقلام است. بخش 4.15 چگونگی دستکاری لیست ها، از جمله ترتیب آیتم ها را مورد بحث قرار می دهد.
به طور کلی، عناصر یک لیست، مانند نمونه های نشان داده شده، از یک نوع هستند. با این حال، عناصر می توانند انواع مختلفی داشته باشند، مانند مثال زیر:
>>> فهرست جدید = [1، 2، 4، 8، “jpg”، “bmp”]
اگرچه این قالب مجاز است، سناریوهای کمی وجود دارد که بخواهید از چنین لیستی استفاده کنید.
4.9کار با اشیاء پایتون
اکنون که چندین نوع داده مختلف را در پایتون مشاهده کرده اید (یعنی اعداد، رشته ها و لیست ها)، مهم است که مفهوم پایتون یک زبان برنامه نویسی شی گرا و همه چیز در پایتون یک شی است را دوباره بررسی کنید. هر شی دارای موارد زیر است: (1) یک مقدار; (2) یک هویت، که یک شناسه منحصر به فرد است. و (3) یک نوع، که نوع مقادیری است که یک شی می تواند داشته باشد.
به مثال زیر توجه کنید:
>>> نام = “پل”
این عبارت یک شی (نام) ایجاد می کند، و این شی یک مقدار (Paul) دارد:
>>> نام
‘پل’
شی همچنین دارای یک شناسه منحصر به فرد است که بسته به رایانه خاصی که استفاده می شود متفاوت است. شما می توانید این شناسه منحصر به فرد را با استفاده ازشناسه()عملکرد:
>>> شناسه (نام)
593835200
شناسه منحصربهفرد توسط رایانه برای پیگیری شی (و ارزش و ویژگیهای آن) ارائه میشود، اما دانستن عدد واقعی مورد استفاده اهمیتی ندارد.
در نهایت، شی دارای یک نوع است، که می توان با استفاده ازtype()عملکرد:
>>> نوع (نام)
<class ‘str’>
مفهوم مهم دیگر این است که متغیرها در پایتون پویا هستند. به مثال زیر توجه کنید:
>>> var1 = 100
>>> نوع (var1)
<class ‘int’>
>>> var2 = 2.0
>>> نوع (var2)
<class ‘float’>
نوع شی متغیرها بر اساس ماهیت مقدار اختصاص داده شده به آن تعیین می شود. این ویژگی تا حدودی منحصر به پایتون است، زیرا در بسیاری از زبان های برنامه نویسی دیگر، متغیرها ابتدا باید اعلام شوند (و یک نوع داده شوند)، که ثابت می ماند.
تبدیل نوع شی را می توان با استفاده از ریخته گری انجام داد. به مثال زیر توجه کنید:
>>> var = 100
>>> نوع (var)
<class ‘int’>
>>> 2 * var
200
متغیر فراخوانی شدvarیک عدد صحیح است و می توانید از آن در محاسبات استفاده کنید. سپس، متغیر به صورت رشته ای ریخته می شود:
>>> newvar = str(var)
>>> نوع (newvar)
<class ‘str’>
>>> چاپ (newvar)
100
>>> 2* newvar
‘100100’
هنگامی که متغیر به عنوان یک رشته ریخته می شود، مقدار آن هنوز 100 است، اما اکنون یک رشته است، نه یک عدد صحیح. وقتی مقدار را چاپ می کنید، همچنان مانند یک عدد به نظر می رسد. هنگامی که عملیاتی را روی آن انجام می دهید – مثلاً با استفاده از یک عملگر حسابی – مشخص می شود که مقدار دیگر یک عدد نیست. در این مثال، عملگر ضرب روی رشته باعث می شود که مقدار دو بار چاپ شود.
تلاش برای ریختن یک رشته مانند”پل”به عنوان یک عدد، با این حال، منطقی نیست. مثلا:
>>> نام = “پل”
>>> newname = int(name)
نتیجه یک پیام خطا است:
ValueError: لفظ واقعی برای int() با پایه 10: ‘Paul’
ارسال یک عدد به عنوان یک رشته معمولاً برای انجام کارهایی مانند چاپ پیام ها استفاده می شود. معکوس، ریختن یک رشته به عنوان یک عدد، نیز به طور گسترده استفاده می شود. یک سناریوی معمولی زمانی است که یک اسکریپت مقادیر را از یک فایل متنی یا منبع دیگری که حاوی ترکیبی از متن و اعداد است می خواند. هنگامی که بخش های عددی را شناسایی کردید، می توانید از ریخته گری استفاده کنید تا اطمینان حاصل کنید که مقادیر به جای رشته ها به صورت اعداد خوانده می شوند. ریختن یک عدد صحیح به عنوان شناور و بالعکس نیز رایج است.
4.10با استفاده از توابع
عبارات و عبارات پایتون از متغیرها و توابع در میان عناصر دیگر استفاده می کنند. متغیرها قبلاً در این فصل مورد بحث قرار گرفتند. یک تابع مانند یک برنامه کوچک است که برای انجام یک عمل استفاده می شود. شما قبلاً چندین عملکرد از جمله مشاهده کرده ایدint()،چاپ()،str()، وtype(). این بخش نگاه دقیق تری به عملکردها و نحوه استفاده از آنها دارد.
نحو کلی یک تابع است
<function>(<پارامترها>)
در این نحو،<عملکرد>مخفف نام تابع و به دنبال آن پارامترهای تابع داخل پرانتز است. به پارامترهای تابع، آرگومان نیز گفته می شود. و این اصطلاحات اغلب به جای هم استفاده می شوند. بنابراین، نحو کلی را می توان به صورت زیر نیز نوشت:
<function>(<Arguments>)
اکثر توابع به یک یا چند پارامتر یا آرگومان نیاز دارند که به عنوان ورودی برای تابع عمل می کنند. استفاده از یک تابع به عنوان فراخوانی تابع نامیده می شود. وقتی یک تابع را فراخوانی میکنید، پارامترهایی را به آن میدهید و یک مقدار را برمیگرداند. و چون یک مقدار را برمی گرداند، فراخوانی تابع یک نوع عبارت است.
در نظر بگیریدچاپ()عملکردی که قبلاً با آن آشنا هستید.
>>> نام = “پل”
>>> چاپ (نام)
پل
در این مثال، پارامتر ازچاپ()تابع یک متغیر است و این متغیر یک مقدار دارد. درچاپ()تابع مقدار را با چاپ کردن آن در خط بعدی کد به مفسر تعاملی خروجی می دهد.
توجه داشته باشید:پایتون 2 از هر دو استفاده می کندچاپبیانیه وچاپ()تابع، اما در پایتون 3 فقط می توانید ازچاپ()عملکرد. از آنجایی که ArcGIS Pro فقط با پایتون 3 کار می کند، باید از آن استفاده کنیدچاپ()عملکرد.
استفاده از دستور چاپ در پایتون 3 منجر به یک خطای نحوی می شود:
>>> نام = “پل”
>>> چاپ نام
SyntaxError: پرانتز در فراخوانی برای چاپ وجود ندارد
پایتون شامل مجموعه ای از توابع اصلی به نام توابع داخلی است که می توانید مستقیماً در هر عبارت یا عبارتی از آنها استفاده کنید. درچاپ()،str()، وtype()توابع بخشی از این توابع داخلی هستند. مثال دیگری از یک تابع داخلی، تابع قدرت استقدرت ()، به شرح زیر است:
>>> توان (2،3)
8
درقدرت ()تابع 2 را به توان 3 یا مقدار 8 را برمی گرداند. در این حالت پارامترها 2 و 3 هستند و تابع مقدار 8 را برمی گرداند.
برای مشاهده توابع داخلی موجود، می توانید ازdir()عملکرد به شرح زیر است:
>>> dir (__builtins__)
توجه داشته باشید:
دو زیرخط (__) قبل و بعد از “builtins” وجود دارد.
درdir()تابع تمام خصوصیات و متدهای شی مشخص شده را برمی گرداند. در این مثال،ساخته شدهماژولی است که شامل تمام توابع داخلی است وdir (__builtins__)لیستی از آن توابع را برمی گرداند. اگر ابتدا ماژول را با استفاده ازتوده های وارداتی، همچنین می توانید استفاده کنیدdir (ساختمان ها).
همچنین می توانید برای مشاهده توابع داخلی موجود به اسناد پایتون مراجعه کنید. برای Python 3.6، لیست کامل توابع داخلی را می توان در اینجا مشاهده کرد:https://docs.python.org/3.6/library/functions.html.
پایتون شامل چندین توابع داخلی است – تعداد زیادی از آنها برای بررسی جزئیات در اینجا بسیار زیاد است، اما چندین مورد از آنها در نمونه های آینده استفاده می شود. هنگامی که تابعی را که می خواهید استفاده کنید شناسایی کردید، ممکن است لازم باشد توضیحات تابع و نحو را مرور کنید. این توضیحات در یک رشته مستندات یا docstring ذخیره می شود. با استفاده از__doc__ویژگی. مثلا:
>>> چاپ (pow.__doc__)
توجه داشته باشید:دو خط زیر (__) قبل و بعد از “doc” وجود دارد.
در این مثال،چاپ()تابع در مفسر تعاملی پایتون مورد نیاز نیست، اما قالب بندی بهتری را برای خروجی فراهم می کند.
یک جایگزین بصری تر برای چاپ رشته مستند، استفاده از داخلی استکمک()عملکرد، به شرح زیر است:
>>> کمک (pow)
درکمک()تابع شرحی ازقدرت ()عملکرد:
راهنما در مورد پاو تابع داخلی در ساختارهای داخلی ماژول:
pow(x، y، z=هیچکدام، /)
معادل x**y (با دو آرگومان) یا x**y % z (با سه آرگومان)
برخی از انواع، مانند ints، در صورت فراخوانی با استفاده از فرم سه آرگومان، قادر به استفاده از الگوریتم کارآمدتری هستند.
اسناد آنلاین پایتون معمولاً اطلاعات دقیق تری را ارائه می دهد، همانطور که در شکل نشان داده شده است.
درقدرت ()تابع دارای سه آرگومان است که با کاما از هم جدا می شوند. دو تا از این آرگومان ها مورد نیاز است (x و y) و سومی (z) اختیاری است که با براکت نشان داده می شود. توضیحات اشاره به (**) که عملگر اصلی در پایتون برای توان است.
توجه داشته باشید:توضیحات در اسناد رسمی پایتون می تواند تا حدودی فنی و رمزآلود باشد. آنها همچنین حاوی چند نمونه کد دقیق هستند. به طور کلی، یادگیری در مورد یک تابع جدید که با آن آشنا نیستید از بسیاری از منابع آنلاین، کتاب ها و کتابچه های راهنمای دیگر در مورد Python که حاوی نمونه های کد بیشتری هستند، آسان تر است. مستندات پایتون برای بررسی نحو رسمی خوب است، اما اغلب بهترین منبع برای یادگیری نحوه استفاده از این نحو نیست.
چندین عملکرد داخلی رایج دیگر در جدول 4.2 فهرست شده است. این فهرست جامع نیست، اما حاوی برخی از توابع پرکاربردتر است.
عملکرد | شرح | مثال | برمی گرداند |
شکم (x) | قدر مطلق یک عدد را برمی گرداند | شکم (-8) | 8 |
شناور (x) | یک رشته یا عدد را به یک شناور تبدیل می کند | شناور (“8.0”) | 10.0 |
int(x) | یک رشته یا عدد را به یک عدد صحیح تبدیل می کند | int (“8”) | 8 |
پوو (x,y[,z]) | x را به توان y برمی گرداند | قدرت (4، 3) | 64 |
دور (x[,n]) | شناور داده شده را به n رقم بعد از اعشار گرد می کند | دور (2.3648, 2) | 2.36 |
str(x) | نمایش رشته ای از یک شی داده شده را برمی گرداند | خیابان (10) | “10” |
پایتون به توابع داخلی محدود نمی شود، و همانطور که در بخش 4.20 توضیح داده شد، می توان با استفاده از ماژول ها به توابع اضافی دسترسی پیدا کرد. شما همچنین می توانید توابع خود را ایجاد کنید.
4.11استفاده از روش ها
روش ها مانند توابع هستند. متد تابعی است که با یک شی (مثلاً یک عدد، یک رشته یا یک لیست) کوپل شده است. روشی به شرح زیر استفاده می شود:
<object>.<روش>(<arguments>)
این نحو به نظر می رسد که یک تابع را فراخوانی می کند، اما اکنون شی قبل از متد قرار می گیرد که یک نقطه آنها را از هم جدا می کند. استفاده از این دوره را نشانه گذاری نقطه می گویند. نشانه گذاری نقطه به طور گسترده ای در برنامه نویسی شی گرا استفاده می شود. نشان می دهد که آنچه بعد از نقطه می آید متعلق به قبل از نقطه است. در این مورد، روش متعلق به شی است. بخشهای بعدی این فصل کاربردهای دیگر نماد نقطه را نشان میدهد.
در اینجا یک مثال ساده است:
>>> موضوع = “سیستم های اطلاعات جغرافیایی”
>>> topic.count(“i”)
2
در این مثال به موضوع متغیر یک رشته اختصاص داده شده است. از آنجا که متغیر به عنوان یک رشته تعریف می شود، پایتون به طور خودکار تمام روش های مرتبط با یک شی رشته را در دسترس قرار می دهد. در خط دوم کد،شمردن()روش نامیده می شود. آرگومان، در این مورد، یک رشته فرعی (حرف i) است و نتیجه تعداد دفعاتی است که رشته فرعی در شی رشته رخ می دهد. درشمردن()روش به حروف بزرگ و کوچک حساس است، همانطور که بیشتر دستور زبان پایتون حساس است.
روشها به رشتهها محدود نمیشوند—بسیاری از انواع دادههای داخلی پایتون دارای روشهای مرتبط هستند و هنگام کار با اشیاء در اسکریپتهای پایتون بهطور گسترده از آنها استفاده میشود. بخش های زیر شامل نمونه های بیشتری از استفاده از روش ها می باشد.
4.12کار با رشته ها
رشته ها یک نوع داده داخلی مفید هستند و اغلب در اسکریپت های پایتون استفاده می شوند. بسیاری از پارامترهای geoprocessing رشتههایی هستند – به عنوان مثال، نام یک پروژه در یک فضای کاری، نام یک کلاس ویژگی در یک پایگاه جغرافیایی، و نام یک فیلد در یک جدول. در بسیاری از موارد، این رشته ها تا حدودی پیچیده هستند. برای مثال، مسیر یک کلاس ویژگی ممکن است شبیه به C:\EsriPress\Python\Data\zipcodes.shp باشد. بنابراین بررسی روشهای رشتهای اضافی برای کار با رشتهها مفید است.
درپایین تر ()متد یک نسخه کوچک از مقدار رشته را برمی گرداند:
>>> mytext = “GIS جالب است”
>>> print(mytext.lower())
gis باحاله
دربالا ()متد یک نسخه بزرگ از مقدار رشته را برمی گرداند:
>>> mytext = “GIS جالب است”
>>> print(mytext.upper())
GIS جالب است
درعنوان()متد یک نسخه title-case از مقدار رشته را برمی گرداند – یعنی هر کلمه با یک حرف بزرگ شروع می شود:
>>> mytext = “GIS جالب است”
>>> print(mytext.title())
Gis باحال است
رشتهها (و سایر دنبالههای پایتون مانند لیستها) دارای یک سیستم موقعیتیابی شاخص هستند که از طیفی از مقادیر محصور شده در براکت استفاده میکند. به هر کاراکتر در یک رشته یک عدد شاخص اختصاص داده می شود. پایتون یک زبان مبتنی بر صفر است، به این معنی که اولین کاراکتر در یک دنباله با شاخص صفر [0] شروع می شود. فضاها مانند هر شخصیت دیگری شمرده می شوند. رشته زیر را در نظر بگیرید:
>>> mystring = “سیستم های اطلاعات جغرافیایی”
کد برای به دست آوردن کاراکتر اول به شرح زیر است:
>>> mystring[0]
‘G’
از این روش می توان برای به دست آوردن هر کاراکتری استفاده کرد:
>>> mystring[23]
‘S’
برای شروع شمارش از آخر می توانید از اعداد شاخص منفی استفاده کنید. آخرین مورد در لیست شاخص −1 است. این امکان به دست آوردن آخرین مورد را بدون اطلاع از تعداد دقیق می دهد:
>>> mystring[-1]
‘s’
بنابراین برای هر رشته معین، می توانید با استفاده از دو عدد شاخص مختلف به یک کاراکتر خاص اشاره کنید: یک شاخص مثبت بر اساس نمایه سازی رو به جلو و یک شاخص منفی بر اساس نمایه سازی معکوس.
برای نشان دادن این الگو برای رشته مثال در شکل:
>>> text = “جغرافیا”
>>> متن[5]
‘آ’
>>> متن[-4]
‘آ’
به دست آوردن یک کاراکتر منفرد از یک رشته (یا به طور کلی، یک عنصر منفرد از یک دنباله) به سادگی نمایه سازی نامیده می شود.
رشته ها را می توان به رشته های کوچکتر برش داد. برش از دو شاخص استفاده می کند که با یک کولون از هم جدا شده اند. اولین شاخص تعداد اولین نویسه ای است که می خواهید در آن قرار دهید. شاخص دوم، تعداد کاراکتر اولی است که نمیخواهید وارد کنید. به عنوان مثال، کد زیر یک لیست جدید ایجاد می کند که حاوی عناصری است که با شماره شاخص 11 شروع می شوند، تا عنصر با ایندکس شماره 22 اما شامل آن نمی شود:
>>> mystring = “سیستم های اطلاعات جغرافیایی”
>>> mystring [11:22]
‘اطلاعات’
در ابتدا، برش می تواند گیج کننده و یک منبع رایج خطا باشد. نکته کلیدی برای درک برش این است که تشخیص دهیم شاخص دوم، تعداد کاراکتر اولی است که نباید گنجانده شود. مثال زیر را با دقت در نظر بگیرید:
>>> text = “جغرافیا”
>>> متن [2:5]
“اوگر”
اولین شاخص شماره 2 مربوط به حرف o است – این اولین کاراکتری است که شامل می شود. شاخص دوم شماره 5 مربوط به حرف a است – این اولین کاراکتری است که شامل نمی شود. بنابراین، آخرین کاراکتری که باید شامل شود، حرف r در فهرست شماره 4 است و حرف a برگردانده نمی شود.
کنار گذاشتن یکی از شاخصها به این معنی است که محدودیتی در محدوده اعمال نمیکنید. به عنوان مثال، کد زیر رشتهای متشکل از کاراکترهایی را که با شماره شاخص 11 شروع میشوند تا بالاترین عدد شاخص یا آخرین کاراکتر را برمیگرداند:
>>> mystring = “سیستم های اطلاعات جغرافیایی”
>>> mystring[11:]
‘سیستم های اطلاعاتی’
از سوی دیگر، کد زیر رشتهای متشکل از کاراکترهایی را برمیگرداند که با کمترین عدد شاخص شروع میشوند (که صفر است)، تا و شامل شماره شاخص 9.
>>> mystring = “سیستم های اطلاعات جغرافیایی”
>>> mystring[:10]
“جغرافیایی”
این سیستم موقعیت یابی شاخص برای سایر توالی ها از جمله لیست ها نیز استفاده می شود. بخش 4.15 استفاده از اعداد شاخص را با جزئیات بیشتری بررسی می کند.
درپیدا کردن()متد یک زیررشته را شناسایی می کند و وقتی رشته پیدا شد، سمت چپ ترین عدد شاخص را برمی گرداند. وقتی رشته پیدا نشد مقدار 1- برگردانده می شود.
>>> mystring = “سیستم های اطلاعات جغرافیایی”
>>> mystring.find (“اطلاعات”)
11
پایتونپیدا کردن()روش مانند اکثر پایتون به حروف بزرگ و کوچک حساس است، به شرح زیر:
>>> mystring = “سیستم های اطلاعات جغرافیایی”
>>> mystring.find(“اطلاعات”)
-1
مقدار بازگشتی 1- به این معنی است که رشته فرعی پیدا نشد.
درکه درکلمه کلیدی مشابه استپیدا کردن()متد اما یک مقدار بولی ازدرست است، واقعییانادرست:
>>> mystring = “سیستم های اطلاعات جغرافیایی”
>>> “اطلاعات” در mystring
درست است، واقعی
درپیوستن()متد برای پیوستن به عناصر یک لیست استفاده می شود:
>>> list_gis = [“جغرافیایی”، “اطلاعات”، “سیستم ها”]
>>> string_gis = ” ”
>>> string_gis.join(list_gis)
“سیستم های اطلاعات جغرافیایی”
در اینجا، عناصر موجود در لیست به یک رشته متصل می شوند. شی رشته (string_gis) متدی به نام داردپیوستن(). مقدار شی رشته، در این مورد، یک فاصله است (“”) و استدلال ازپیوستن()متد لیستی از عناصری است که باید به یک رشته متصل شوند.
برعکسپیوستن()روش استشکاف()روش. استدلال ازشکاف()متد جداکننده ای است که رشته ورودی را به لیستی از عناصر تقسیم می کند. مثال زیر نیز از یک فاصله استفاده می کند، اما می تواند هر کاراکتر دیگری باشد.
>>> pythonstring = “Geoprocessing با استفاده از اسکریپت های Python”
>>> pythonlist = pythonstring.split(” “)
>>> پایتون لیست
[‘Geoprocessing’, ‘using’, ‘Python’, ‘scripts’]
یکی دیگر از روشهای رایج برای دستکاری نام مسیرها و فایلها، روش استنوار ()روش. عمومینوار ()متد به شما امکان می دهد هر ترکیبی از کاراکترها را به هر ترتیبی از انتهای یک رشته موجود حذف کنید. مثلا:
>>> mytext = “نظر دادن اسکریپت ها خوب است”
>>> mytext.strip (“Cdo”)
“اسکریپت های یادداشت g است”
توجه داشته باشید کهنوار ()متد مشخص نیست: هر کاراکتری را از ابتدا یا انتهای رشته حذف میکند، صرف نظر از ترتیبی که کاراکترها در آرگومان فهرست شدهاند، و صرف نظر از اینکه همه کاراکترها در هر دو انتهای رشته گنجانده شدهاند یا خیر.
درlstrip()وrstrip()روشها با محدود کردن stripping به ترتیب در سمت چپ یا سمت راست رشته، کنترل بیشتری را فراهم میکنند. مثلا:
>>> mytext = “نظر دادن اسکریپت ها خوب است”
>>> mytext.rstrip (“Cdo”)
‘اسکریپت های نظر دادن g است’
توجه داشته باشید که در این مورد، “Co” پیشرو حذف نمی شود زیراrstrip()روش فقط کاراکترهای انتهایی را حذف می کند.
فراخوانی یکی از متدهای نواری بدون هیچ آرگومان، فضاهای پیشرو یا انتهایی را که در کدنویسی به آن فضای سفید نیز میگویند، حذف میکند. این روش برای تمیز کردن رشته هایی که ممکن است در برنامه دیگری فرمت شده باشند مفید است. به مثال زیر توجه کنید:
>>> سفید = “این متن من است”
>>> white.strip()
“این متن من است”
بجاینوار (),همچنین می توانید استفاده کنیدنوار (“”).
توجه داشته باشید:هنگام استفاده از روش های برهنه کردن، به ویژه از روش های استریپ مراقب باشیدنوار ()خود روش، زیرا ترتیب وارد کردن کاراکترها به عنوان آرگومان مهم نیست. شما به راحتی می توانید کاراکترهای بیشتری از آنچه در نظر داشتید حذف کنید.
درجایگزین کردن()متد بسیار خاص تر است و همه رخدادهای یک زیررشته خاص را با زیررشته دیگری جایگزین می کند. این کار مانند عملیات Find-and-Replace در یک ویرایشگر متن عمل می کند. مثلا:
>>> mygis = “سیستم های اطلاعات جغرافیایی”
>>> mygis.replace(“Systems”، “Science”)
“علوم اطلاعات جغرافیایی”
درجایگزین کردن()این روش همچنین می تواند برای حذف پسوند فایل از نام فایل ها با جایگزین کردن یک رشته فرعی با یک رشته خالی استفاده شود (“”). این رویکرد خاص تر ازنوار ()روش، زیرا یک زیررشته خاص را هر جا که اتفاق می افتد حذف می کند و سپس آن را جایگزین می کند. مثلا:
>>> myfile = “streams.shp”
>>> myfile.replace(“.shp”, “”)
“جریان ها”
درجایگزین کردن()روش قوی تر از روش های سلب است. همان کد مثال را با استفاده از کد در نظر بگیریدrstrip()روش در عوض:
>>> myfile = “streams.shp”
>>> myfile.rstrip(.shp”)
“جریان”
درrstrip()روش نه تنها پسوند فایل، بلکه یک کاراکتر دیگر را از نام فایل حذف می کند. بدون توجه به ترتیبی که کاراکترها در آرگومان فهرست شده اند، هر کاراکتری را از انتهای رشته حذف می کند. واضح است که این حذف مورد نظر نیست، و بنابراین روش های حذف برای دستکاری پسوند فایل توصیه نمی شود.
توجه داشته باشید:فصل 6 رویکردهای جایگزین و قوی تر برای حذف پسوند فایل برای مجموعه داده های GIS معمولی را پوشش می دهد.
4.13چاپ و قالب بندی رشته
چاپ به طور گسترده در اسکریپت ها برای بررسی مقادیر متغیرها و تأیید کامل شدن یک مرحله استفاده می شود. چاپ همچنین برای درخواست ورودی از کاربر و ارائه نتایج به کاربر در قالب پیام ضروری است. درچاپ()تابع مقادیر متغیرها را به عنوان پیام به مفسر تعاملی چاپ می کند و اغلب این مقادیر شامل رشته ها می شود. همانطور که در مثالهای قبلی نشان داده شد، گاهی اوقات این کار مستلزم ریختهگری متغیرها به شرح زیر است:
>>> دما = 100
>>> print(“دما” + str(temp) + “درجه است”)
دما 100 درجه است
با این حال، این نوع الحاق رشته ها می تواند کمی دست و پا گیر شود. یک جایگزین بهتر استفاده از قالب بندی رشته است که رویکردی انعطاف پذیرتر و قوی تر برای استفاده از رشته ها، از جمله برای مقاصد چاپ، ارائه می دهد. چندین روش برای قالب بندی رشته وجود دارد.
یکی از پرکاربردترین تکنیک ها استفاده ازقالب ()روش. ابتدایی ترین کاربرد آن درج یک مقدار در یک رشته با استفاده از مکان یا فیلد جایگزین است. مثال قبلی را که برای استفاده از آن بازنویسی شده است در نظر بگیریدقالب ()روش:
>>> دما = 100
>>> print(“دمای هوا {0} درجه است”. فرمت(دمای))
دما 100 درجه است
در این مثال،{0}یک فیلد جایگزین متشکل از یک عدد شاخص است که با پرانتزهای { } احاطه شده است. هر چیزی که در پرانتزها وجود نداشته باشد، متن تحت اللفظی محسوب می شود. مقدار داخل فیلد جایگزینی با آرگومان the جایگزین می شودقالب ()روش – در این مورد، مقدار متغیر temp.
شماره شاخص مورد نیاز نیست و کد زیر همان نتیجه را ایجاد می کند:
>>> print(“دما {} درجه است”. فرمت (دمای))
این رویکرد برای قالببندی رشتهها به شرح زیر به فیلدهای جایگزین منفرد محدود نمیشود:
>>> نام کاربری = “پل”
>>> رمز عبور = “surf$&9*”
>>> print(“رمز عبور {0} {1} است”.format(نام کاربری، رمز عبور))
رمز عبور پل surf$&9* است
باز هم به اعداد شاخص نیازی نیست و موارد زیر نیز صحیح است:
>>> print(“رمز عبور {} {}”.format(نام کاربری، رمز عبور))
به طور پیش فرض، آرگومان های ازقالب ()انتظار می رود روش به همان ترتیب فیلدهای جایگزین باشد. بنابراین اعداد شاخص اختیاری هستند. با این حال، اعداد شاخص امکان استفاده از آرگومان ها را بدون نظم می دهد. مثال زیر را در نظر بگیرید که در آن آرگومانها با تنظیم اعداد شاخص استفاده نمیشوند:
>>> print(“رمز عبور {1} {0} است”.format(رمز عبور، نام کاربری))
رمز عبور پل surf$&9* است
درقالب ()روش به طور گسترده ای برای سازماندهی پیام های چاپی به شیوه ای سازگار استفاده می شود. یک روش جایگزین استفاده از عملگر % به عنوان مکان نگهدار است که گاهی اوقات به عنوان قالب بندی رشته “سبک قدیمی” از آن یاد می شود. با استفاده از این رویکرد، مثال قبلی به شرح زیر است:
>>> نام کاربری = “پل”
>>> رمز عبور = “surf$&9*”
>>> print(“رمز عبور %s %s است” %(نام کاربری، رمز عبور))
رمز عبور پل surf$&9* است
در این مثال، استفاده از%sنشان می دهد که مکان نگهدار برای یک رشته در نظر گرفته شده است. گزینه های دیگر عبارتند از٪منبرای عدد صحیح و%dبرای اعشار
اگرچه تفاوت بین این دو رویکرد برای قالب بندی رشته تا حدودی ظریف به نظر می رسد، استفاده ازقالب ()روش ارجح است به عنوان مثال، استفاده از شاخص ها امکان تنظیم مجدد ترتیب نمایش آرگومان ها را فراهم می کند.
توجه داشته باشید:قالب بندی رشته با استفاده ازقالب ()به شدت بیش از استفاده از عملگر % توصیه می شود. مورد دوم در پایتون 3 منسوخ نشده است اما ممکن است منجر به خطاهای غیرمنتظره شود. درقالب ()این روش در مقایسه با استفاده از عملگر % به عنوان قالب بندی به سبک قدیمی، گاهی اوقات به عنوان قالب بندی رشته “سبک جدید” نامیده می شود.
علاوه برقالب ()روش و عملگر %، رویکرد جدیدتری برای قالب بندی رشته ها به نام رشته های f وجود دارد. رشتههای F به اصطلاح رشتههای قالببندی شده نیز گفته میشود. آنها حروف الفبای رشته ای هستند که با حرف f پیشوند شده و شامل عباراتی در پرانتز هستند. این عبارات با مقادیر خود در زمان اجرا جایگزین می شوند.
مثال قبلی را در نظر بگیرید، اما اکنون با استفاده از رشته های f، به صورت زیر:
>>> دما = 100
>>> چاپ (f”دما {temp} درجه است”)
دما 100 درجه است
این مثال نشان می دهد که چگونه رشته های f شبیه به استفاده ازstr.format()اما کوتاه تر
رشته های F نیز برای چندین مقدار کار می کنند:
>>> نام کاربری = “پل”
>>> رمز عبور = “surf$&9*”
>>> print(f” رمز عبور {username} {password} است”)
اگرچه روش های دیگر قالب بندی رشته ها هنوز قابل استفاده است، رشته های f مختصر، خوانا و راحت هستند. آنها همچنین سریع هستند و کمتر در معرض خطا هستند. در نتیجه، رشته های f به شدت توصیه می شود.
4.14با استفاده از منطق بولی
پایتون همچنین با منطق بولی کار می کند که حول ارزش صدق عبارات و اشیا ساخته شده است. بسیاری از عبارات در یک زمینه بولی ارزیابی می شوند، که به شما امکان می دهد شرایط را ارزیابی کنید (یعنی درست یا نادرست بودن آنها) و تصمیم بگیرید بسته به نتیجه آن شرایط چگونه ادامه دهید. منطق بولی به روش های مختلفی در پایتون پیاده سازی می شود، از جمله نوع داده بولی، متغیرهای بولی، عبارات بولی و عملگرهای بولی. این بخش با مثال هایی به بررسی این مفاهیم می پردازد.
پایتون یک نوع داده Boolean را ارائه می دهد که می تواند تنها یکی از دو مقدار را داشته باشد.درست است، واقعییانادرست. به عنوان مثال، می توانید بررسی کنید که آیا یک متغیر مقدار مشخصی دارد یا خیر، و نتیجه می تواند فقط باشددرست است، واقعییانادرست. کد زیر یک عدد را به یک متغیر اختصاص می دهد و سپس بررسی می کند که آیا این عدد از یک عدد دیگر کوچکتر است یا خیر:
>>> x = 7
>>> x < 10
درست است، واقعی
یا می توانید بررسی کنید که آیا عدد با عدد دیگری برابر است یا خیر:
>>> x = 3
>>> x == 8
نادرست
یک علامت مساوی (=) برای یک دستور انتساب استفاده می شود، در حالی که یک علامت دو برابر (==) برای بررسی اینکه آیا دو شیء دارای ارزش یکسانی هستند استفاده می شود.
این عبارات به عنوان عبارات بولی شناخته می شوند، که عباراتی هستند که به ارزیابی می شونددرست است، واقعییانادرست. این عبارات می توانند از عملگرهای منطقی یا بولی استفاده کنند. عملگرهای منطقی شامل (==)، برابر نیست با (!=)، کمتر از (<)، بزرگتر از (>) و چندین مورد دیگر. نتیجه را می توان به یک متغیر اختصاص داد:
>>> x = 7
>>> t = x < 10
>>> ت
درست است، واقعی
نوع داده این متغیر Boolean است:
>>> نوع (t)
<class ‘bool’>
مقادیر بولیدرست است، واقعیونادرستبه حروف کوچک و بزرگ حساس هستند ودرست است، واقعییادرست است، واقعیخطا ایجاد خواهد کرد. مثلا:
>>> a = درست است
یک Boolean ایجاد می کند، در حالی که
>>> a = درست است
یک خطا ایجاد می کند:
NameError: نام “true” تعریف نشده است
عبارات بولی همچنین می توانند از عملگرهای بولی با استفاده از کلمات کلیدی پایتون استفاده کنندو،یا، ونه. یک متغیر Boolean را در نظر بگیرید که روی آن تنظیم شده استدرست است، واقعی:
>>> a = درست است
درنهاپراتور به طور منطقی این را برعکس می کند:
>>> نه یک
نادرست
دروویاعملگرها برای مقایسه دو بولی استفاده می شوند. دریااپراتور نتیجه می دهددرست است، واقعیاگر یکی از آنها Boolean باشددرست است، واقعی:
>>> a = درست است
>>> b = نادرست
>>> a یا b
درست است، واقعی
درواپراتور نتیجه می دهددرست است، واقعیفقط در صورتی که هر دو Boolean باشنددرست است، واقعی:
>>> a و b
نادرست
عملگرهای بولی به حروف بزرگ و کوچک حساس هستند. به عنوان مثال، استفاده ازویاوخطا ایجاد خواهد کرد.
>>> a و b
SyntaxError: نحو نامعتبر است
انواع دادهها مانند رشتهها یا اعداد ممکن است درست یا نادرست به نظر نرسند، اما اگر رشته خالی یا عدد صفر باشد چه؟ با استفاده از عبارت می توانید صحت یک مقدار را بررسی کنیدbool()تابع، که درست یا نادرست بودن شی را تعیین می کند. به مثال زیر توجه کنید:
>>> text = “چیزی”
>>> bool (متن)
درست است، واقعی
هنگامی که یک رشته حداقل یک کاراکتر داشته باشد، رشته به ارزیابی می شوددرست است، واقعی. و وقتی رشته خالی است؟
>>> notext = “”
>>> bool (بدون متن)
نادرست
یک رشته خالی به ارزیابی می شودنادرست.
نتایج برای مقادیر عددی مشابه است:
>>> عدد = 123
>>> bool (شماره)
درست است، واقعی
>>> صفر = 0
>>> bool (صفر)
نادرست
عدد صفر (0 یا 0.0) به ارزیابی می شودنادرست، در حالی که هر عدد دیگری به ارزیابی می شوددرست است، واقعی.
دو کلمه کلیدی دیگر پایتون در اینجا شایسته ذکر هستند:استوهیچ یک. اول،استکلمه کلیدی ارزیابی می کند که آیا دو متغیر به یک شی اشاره دارند یا خیر.
>>> var1 = [1، 2، 3]
>>> var2 = var1
>>> var1 var2 است
درست است، واقعی
یک عبارت با استفاده ازاستکلمه کلیدی یک Boolean برمی گرداند. این عبارت تعیین می کند که آیا دو متغیر به یک شی اشاره دارند یا نه، نه اینکه آیا مقدار یکسانی دارند یا خیر. به عنوان مثال، کد زیر دو متغیر را با یک مقدار مقایسه می کند، اما آنها اشیاء متفاوتی هستند.
>>> var1 = [1، 2، 3]
>>> var2 = [1، 2، 3]
>>> var1 var2 است
نادرست
این مثال ها تفاوت بین آن ها را نشان می دهداستکلمه کلیدی و برابر با (==) عملگر، که مقادیر متغیرها را مقایسه می کند، نه خود اشیاء را.
>>> var1 = [1، 2، 3]
>>> var2 = [1، 2، 3]
>>> var1 == var2
درست است، واقعی
درهیچ یککلمه کلیدی در پایتون برای تعریف یک مقدار تهی یا بدون مقدار استفاده می شود.هیچ یکیک نوع داده برای خودش است—یعنی،NoneType:
>>> x = هیچ
>>> نوع (x)
<کلاس ‘NoneType’>
نوع دادههیچ یکبه False ارزیابی می کند:
>>> bool(x)
نادرست
درهیچ یکنوع داده گاهی اوقات برای بررسی اینکه آیا ورودی های کاربر دارای یک مقدار معتبر هستند یا نه استفاده می شود. این با عدد صفر یا یک رشته خالی متفاوت است.
>>> خالی = “”
>>> خالی == هیچ
نادرست
منطق بولی، از جمله کلمات کلیدی در این بخش، به طور گسترده ای در اسکریپت ها برای ارزیابی شرایط و تعیین مسیر عمل مناسب بر اساس آن شرایط استفاده می شود.
4.15کار با لیست ها
لیست ها یک نوع داده همه کاره پایتون هستند و به طرق مختلف قابل دستکاری هستند. در بخش قبلی، مشاهده کردید که چگونه آیتم های یک لیست به یکدیگر متصل می شوند تا یک رشته را تشکیل دهند و چگونه یک رشته واحد به آیتم های یک لیست تقسیم می شود. در این بخش، چند روش دیگر برای دستکاری لیست ها را مشاهده خواهید کرد.
لیست زیر را در نظر بگیرید:
>>> شهرها = [“آستین”، “بالتیمور”، “کلولند”، “دنور”، “یوجین”]
تعداد آیتم های یک لیست را می توان با استفاده از داخلی پایتون تعیین کردlen()عملکرد، به شرح زیر است:
>>> چاپ (لن (شهرها))
5
لیست ها را می توان با استفاده ازمرتب سازی()روش. مرتبسازی پیشفرض حروف عددی است، اما میتوان آن را با استفاده از عبارت معکوس کردمعکوس()استدلال ازمرتب سازی()روش، به شرح زیر:
>>> citys.sort(reverse=True)
>>> چاپ (شهرها)
[“یوجین”، “دنور”، “کلولند”، “بالتیمور”، “آستین”]
>>> city.sort()
>>> چاپ (شهرها)
[“آستین”، “بالتیمور”، “کلولند”، “دنور”، “یوجین”]
توجه کنید که چگونه روش هایی مانند sort()لیست را تغییر دهید اما چیزی برنگردانید. به همین دلیل است که پیام های چاپی اضافه می شوند تا بتوانید ببینید چه اتفاقی برای لیست افتاده است. هنگام استفاده از یک مترجم تعاملی، می توانید به سادگی از آن استفاده کنیدشهرهابجایچاپ (شهرها)، و نتیجه یکسان خواهد بود. با این حال، هنگام آزمایش کد خود در یک اسکریپت مستقل،چاپ (شهرها)باعث می شود پیام در پنجره تعاملی ظاهر شود، در حالی که فقط با استفاده ازشهرهاهیچ کاری نمی کرد بنابراین توصیه می شود از پیام های چاپی برای اهداف آزمایشی استفاده کنید.
لیست ها در پایتون دنباله ای هستند، درست مانند رشته ها. بنابراین، درست مانند رشتهها، فهرستهای پایتون ایندکس میشوند و با شاخص صفر [0] شروع میشوند. این اعداد فهرست می توانند موارد خاصی را در لیست به دست آورند یا لیست را به لیست های کوچکتر تقسیم کنند. کد دریافت مورد دوم از لیست قبلی به شرح زیر است:
>>> شهرها[1]
“بالتیمور”
برای شروع شمارش از آخر می توانید از اعداد شاخص منفی استفاده کنید. آخرین مورد در لیست شاخص −1 است. استفاده از یک عدد شاخص منفی این امکان را فراهم می کند که آخرین مورد را بدون اطلاع از تعداد دقیق بدست آورید:
>>> شهرها[-1]
“یوجین”
کد زیر مورد دوم به آخر را دریافت می کند:
>>> شهرها[-2]
“دنور”
استفاده از شاخص ها لیست اصلی را تغییر نمی دهد، بلکه فقط آیتم را از لیست به عنوان یک مقدار بدست می آورد.
لیست ها را می توان به لیست های کوچکتر تقسیم کرد. باز هم، درست مانند بریدن رشته ها عمل می کند. برش از دو شاخص استفاده می کند که با یک کولون از هم جدا شده اند. اولین شاخص تعداد اولین عنصری است که می خواهید در آن قرار دهید. شاخص دوم تعداد اولین عنصری است که نمیخواهید در آن قرار دهید. به عنوان مثال، کد زیر یک لیست جدید ایجاد می کند که حاوی عناصری است که با شاخص شماره 2 شروع می شوند تا عنصر با شاخص شماره 4 اما شامل آن نمی شود:
>>> شهرها [2:4]
[“کلولند”، “دنور”]
کنار گذاشتن یکی از شاخصها به این معنی است که محدودیتی در محدوده اعمال نمیکنید. به عنوان مثال، کد زیر یک لیست جدید متشکل از مواردی ایجاد می کند که با شماره 2 شروع می شود تا بالاترین عدد شاخص را شامل می شود:
>>> شهرها[2:]
[“کلولند”، “دنور”، “یوجین”]
کد زیر موارد را تا شاخص شماره 2 به دست می آورد، اما شامل آن نمی شود:
>>> شهرها[:2]
[‘Austin’، ‘Baltimore’]
با استفاده از یک عدد شاخص واحد – برای مثال،شهرها[1]-مقدار یک آیتم را برمیگرداند – در این مورد، یک رشته. در مقابل، برش یک لیست جدید را برمی گرداند، حتی اگر فقط یک مورد داشته باشد. تفاوت ها را در نظر بگیرید. در اینجا کد دریافت مورد دوم از لیست به عنوان یک رشته است:
>>> شهرها[1]
“بالتیمور”
و در اینجا کد دریافت مورد دوم از لیست به عنوان یک لیست جدید است:
>>> شهرها [1:2]
[‘بالتیمور’]
این تمایز مهم است زیرا رشته ها و لیست ها انواع مختلفی از اشیاء هستند و شما می توانید با هر نوع کارهای مختلفی انجام دهید. اگر لیستی فقط با یک عنصر داشته باشید، و بخواهید مقدار آن عنصر را به دست آورید – یعنی نه به عنوان یک لیست، چه؟ از شاخص صفر [0] استفاده کنید.
>>> mylist = [“پیتر”]
>>> فهرست من[0]
“پیتر”
یکی دیگر از عملیات مهم فهرست، عضویت را با استفاده ازکه درکلمه کلیدی. بررسی می کند که آیا چیزی درست است یا خیر و مقداری از آن را برمی گردانددرست است، واقعییانادرست. به مثال زیر توجه کنید:
>>> شهرها = [“آستین”، “بالتیمور”، “کلولند”، “دنور”، “یوجین”]
>>> “بالتیمور” در شهرها
درست است، واقعی
>>> “سیاتل” در شهرها
نادرست
عناصر را می توان با استفاده ازدلبیانیه. به عنوان مثال، کد زیر یک عنصر خاص را از یک لیست بر اساس شماره فهرست حذف می کند:
>>> شهرها = [“آستین”، “بالتیمور”، “کلولند”، “دنور”، “یوجین”]
>>> شهرهای دل[2]
>>> شهرها
[“آستین”، “بالتیمور”، “دنور”، “یوجین”]
علاوه بر استفاده از اعداد فهرست، می توانید لیست ها را با استفاده از روش ها دستکاری کنید. شما قبلا دیده ایدمرتب سازی()روش. سایر روشهای فهرست رایج عبارتند ازضمیمه ()،شمردن()،توسعه دادن، گسترش()،فهرست مطالب()،insert()،ترکیدن()، وبرداشتن(). بحث مختصری در مورد برخی از این روش های فهرست در ادامه می آید.
درضمیمه ()متد یک عنصر را به انتهای لیست اضافه می کند:
>>> شهرها = [“آستین”، “بالتیمور”]
>>> citys.append (“کلولند”)
>>> شهرها
[“آستین”، “بالتیمور”، “کلولند”]
درشمردن()متد تعداد دفعاتی که یک عنصر در یک لیست رخ می دهد را تعیین می کند:
>>> yesno = [“درست”، “درست”، “نادرست”، “درست”، “نادرست”]
>>> yesno.count (“درست”)
3
درتوسعه دادن، گسترش()متد به شما امکان می دهد چندین مقدار را همزمان اضافه کنید:
>>> لیست 1 = [1، 2، 3، 4]
>>> لیست 2 = [11، 12، 13، 14]
>>> list1.extend(list2)
>>> لیست 1
[1، 2، 3، 4، 11، 12، 13، 14]
درفهرست مطالب()متد شاخص اولین وقوع یک مقدار را پیدا می کند:
>>> mylist = [“سریع”، “روباه”، “پرش”، “بالا”، “تنبل”، “سگ”]
>>> mylist.index(“the”)
5
به یاد داشته باشید که پایتون به حروف بزرگ و کوچک حساس است، به همین دلیل است که نتیجه ایندکس شماره 5 است، نه صفر (0).
درinsert()این روش امکان درج یک عنصر را در یک لیست در یک مکان مشخص به شرح زیر میسازد:
>>> شهرها = [“آستین”، “کلولند”، “دنور”، “یوجین”]
>>> citys.insert(1، “Baltimore”)
>>> شهرها
[“آستین”، “بالتیمور”، “کلولند”، “دنور”، “یوجین”]
درترکیدن()متد یک عنصر را از یک لیست در یک مکان مشخص حذف می کند و مقدار این عنصر را به صورت زیر برمی گرداند:
>>> شهرها = [“آستین”، “بالتیمور”، “کلولند”، “دنور”، “یوجین”]
>>> citys.pop(3)
“دنور”
>>> شهرها
[“آستین”، “بالتیمور”، “کلولند”، “یوجین”]
درترکیدن()روش همان کاری را انجام داد کهدلبیانیه. تنها تفاوت این است کهترکیدن()متد مقدار عنصر حذف شده را برمی گرداند، در حالی کهدلبیانیه ندارد.
دربرداشتن()متد اولین رخداد یک مقدار را به صورت زیر حذف می کند:
>>> اعداد = [1، 0، 1، 0، 1، 0، 1، 0، 1، 0]
>>> numbers.remove(0)
>>> اعداد
[1، 1، 0، 1، 0، 1، 0، 1، 0]
نیازی به حفظ تمام این روش ها نیست. درخواست های تکمیل خودکار کد با فهرست کردن همه روش های کاربردی به شما کمک می کند. برای مثال، مثال کد زیر را در پنجره پایتون در نظر بگیرید. پس از ایجاد لیستی به نام شهرها، مفسر تعاملی پایتون زمانی که شروع به تایپ خط بعدی کد می کنید، آن را به عنوان یک لیست می شناسد. بنابراین، پس از تایپ شهرها و به دنبال آن یک نقطه (.، همانطور که در شکل نشان داده شده است، یک لیست کشویی از روش های لیست از شما خواسته می شود.
شرح
لیست شامل append()، clear()، copy()، count()، extension()، index()، insert()، pop()، remove()، reverse()، و غیره.
هنگامی که یک متد را انتخاب کردید، همانطور که در شکل نشان داده شده است، سینتکس متد از شما خواسته می شود.
مثالهای قبلی نشان دادهاند که چگونه میتوانید عناصر یک لیست را با تایپ مقادیر مستقیم در کد خود ایجاد کنید. همچنین می توانید ابتدا یک لیست خالی ایجاد کنید و سپس عناصری را به صورت زیر به آن اضافه کنید:
>>> حروف = [ ]
>>> letters.append(“A”)
اگر عناصر را از یک تابع یا منبع دیگری دریافت می کنید و برای افزودن آنها به لیستی نیاز دارید، می تواند مفید باشد.
راه دیگری برای ایجاد یک لیست برای تبدیل شی دیگری که حاوی عناصر مورد علاقه است. این شی دیگر باید یک شی تکرار شونده یا تکرار شونده باشد، به این معنی که شما باید بتوانید روی محتوای آن تکرار کنید. دنباله ها نمونه ای از تکرارپذیرها هستند که شامل رشته ها، لیست ها و تاپل ها می شود. ساخته شده درلیست ()تابع یک لیست از عناصر موجود در یک تکرار ایجاد می کند.
به مثال زیر توجه کنید:
>>> letter_string = (“GIS”)
>>> لیست_حروف = لیست (رشته_حروف)
>>> چاپ (لیست_حروف)
[‘G’، ‘I’، ‘S’]
درلیست ()تابع لیستی را ایجاد می کند که از هر کاراکتر در رشته تشکیل شده است. این شبیه به ریخته گری بین رشته و عدد صحیح استstr()وint(). با این حال، استفاده ازلیست ()عملکرد کمی متفاوت است به عنوان مثال، به صورت معکوس کار نمی کند، و شما نمی توانید لیست را با استفاده از رشته اصلی به رشته اصلی تبدیل کنیدstr():
>>> خ (لیست_حروف)
“[‘G’، ‘I’، ‘S’]”
محدودیت دیگر این است که نمی توانید یک عدد را به لیست تبدیل کنید. مثلا:
>>> اعداد = 123
>>> لیست (اعداد)
این یک خطا ایجاد می کند:
TypeError: شیء ‘int’ قابل تکرار نیست
اعداد قابل تکرار نیستند و بنابراین استدلال معتبری برای اعداد نیستندلیست ()عملکرد. برای تبدیل اعداد به یک لیست، ابتدا باید مقدار را به یک تکرار شونده، مانند یک رشته، به صورت زیر تبدیل کنید:
>>> لیست (خیابان (اعداد))
[‘1’، ‘2’، ‘3’]
برای افزودن مقدار واقعی به عنوان یک عنصر به یک لیست (به جای ارقام جداگانه)، می توانید با یک لیست خالی شروع کنید و سپس عدد را به صورت زیر اضافه کنید:
>>> عدد = 123
>>> لیست_شماره = []
>>> number_list.append(شماره)
>>> چاپ (لیست_شماره)
[123]
درلیست ()تابع همچنین می تواند در تاپل ها و دیکشنری ها استفاده شود. بخش های بعدی این موارد را با جزئیات بیشتری پوشش می دهد. در مورد دیکشنری،لیست ()تابع فقط کلیدها (اشیاء منحصر به فرد) یک فرهنگ لغت را برمی گرداند.
>>> ages = {“Adam”: 23، “Beatrice”: 25، “Calvin”: 19}
>>> لیست (سنین)
[‘آدام’، ‘بئاتریس’، ‘کالوین’]
در مورد تاپل، دنباله ای از اشیاء تغییرناپذیر، هر عنصر تاپل به عنصری در لیست تبدیل می شود. مثلا:
>>> mytuple = (4، 5، 6)
>>> لیست (mytuple)
[4، 5، 6]
یکی دیگر از استفاده های رایج ازلیست ()تابع ایجاد لیستی از مقادیر از یک شی است که توسط یک تابع متفاوت ایجاد شده است. به عنوان مثال، داخلیدامنه()تابع لیستی از مقادیر را ایجاد می کند. کد زیر یک شی ایجاد می کند که حاوی مقادیر 1 تا 5 است:
>>> r = محدوده (1، 6)
دردامنه()تابع یک شی محدوده، نه یک لیست را برمی گرداند. درلیست ()تابع یک لیست از این شی محدوده ایجاد می کند، به شرح زیر:
>>> لیست (r)
[1، 2، 3، 4، 5]
لیست ها یک نوع داده رایج هنگام نوشتن اسکریپت های پردازش جغرافیایی هستند. فصل 6 نمونه های بیشتری از کار با لیست ها را ارائه می دهد.
4.16کار با تاپل ها
لیست ها در پایتون رایج هستند و معمولاً هنگام نوشتن اسکریپت های پردازش جغرافیایی از لیست ها استفاده می کنید، از جمله لیست پروژه ها، نقشه ها، لایه ها، کلاس های ویژگی، فیلدها و موارد دیگر. لیست ها همه کاره هستند زیرا همانطور که در بخش قبل بحث شد می توانید آنها را به طرق مختلف تغییر دهید. با این حال، گاهی اوقات ممکن است بخواهید از یک لیست بدون اجازه دادن به تغییر عناصر آن استفاده کنید. این جایی است که تاپل ها وارد می شوند. یک تاپل (با قافیه “پنج”) دنباله ای از عناصر است، درست مانند یک لیست، اما یک تاپل تغییر ناپذیر است، به این معنی که نمی توان آن را تغییر داد. نحو یک تاپل ساده است – دنباله ای از مقادیر را با کاما از هم جدا کنید و یک تاپل خواهید داشت. به عنوان مثال، کد زیر یک تاپل با پنج عنصر را برمی گرداند:
>>> تاپل من = 1، 2، 3، 4، 5
>>> تاپل من
(1، 2، 3، 4، 5)
برای ایجاد یک تاپل، نیازی به استفاده از پرانتز نیست، اگرچه اغلب برای وضوح اضافه می شوند. چگونه یک تاپل تنها با یک عنصر بدست آوریم؟ یک کاما اضافه کنید، حتی اگر هیچ عنصری پس از کاما وجود نداشته باشد:
>>> 6،
(6،)
کار با تاپل ها مانند کار با لیست ها است. عناصر موجود در تاپل دارای یک شاخص هستند که می توان از آن برای بدست آوردن عناصر خاصی از تاپل استفاده کرد. مثلا:
>>> x = (“a”، “b”، “c”)
>>> x[0]
‘آ’
با این حال، توالی عناصر را نمی توان تغییر داد. بنابراین، عملیات لیست مانند حذف، افزودن، حذف و غیره توسط تاپل ها پشتیبانی نمی شوند. تنها روش هایی که روی تاپل ها کار می کنند، هستندشمردن()وفهرست مطالب()زیرا این روش ها توالی عناصر را تغییر نمی دهند. عملیات های دیگر، مانند برش، را می توان اعمال کرد اما تاپل متفاوتی را برگرداند. اجرای کد زیر یک تاپل را برش می دهد و یک تاپل متفاوت را برمی گرداند:
>>> x = (“a”، “b”، “c”، “d”، “e”، “f”، “g”)
>>> x[2:5]
(‘c’، ‘d’، ‘e’)
توجه داشته باشید که عملیات برش یک تاپل دیگر را برمی گرداند و تاپل اصلی مانند قبل باقی می ماند. شما نمی توانید عناصر یک تاپل را برخلاف عناصر یک لیست تغییر دهید.
اگر نمی توانید یک تاپل را اصلاح کنید، چرا تاپل ها مهم هستند؟ ابتدا، برخی از توابع و ماژولهای داخلی پایتون، تاپلها را برمیگردانند – در این صورت، باید با آنها مقابله کنید. دوم، تاپل ها اغلب در لغت نامه ها استفاده می شوند که در ادامه به آنها پرداخته می شود. علاوه بر این، بسیاری از ابزارهای پردازش جغرافیایی در ArcGIS Pro از لیست ها و تاپل ها به عنوان پارامترهای ورودی استفاده می کنند. اگرچه لیست ها و تاپل ها را نمی توان به جای هم استفاده کرد، اما گاهی اوقات آنها برای یک هدف استفاده می شوند.
توجه داشته باشید:به طور کلی، اگر مجموعهای از مقادیر را ارسال میکنید که تغییر نمیکنند، به جای فهرست از یک تاپل استفاده کنید.
ساخته شده درtuple()تابع یک تکرارپذیر را به تاپل تبدیل می کند. کد زیر نشان می دهد که چگونه یک لیست به یک تاپل تبدیل می شود.
>>> فهرست من = [1، 2، 3]
>>> تاپل (mylist)
(1، 2، 3)
درtuple()تابع همچنین روی رشته ها و دیکشنری ها کار می کند، اما نه بر روی اعداد، همانلیست ()عملکرد.
4.17کار با دیکشنری ها
لیست ها و تاپل ها برای گروه بندی عناصر در یک ساختار مفید هستند و عناصر را می توان با شماره شاخص آنها که با صفر (0) شروع می شود، ارجاع داد. کار با اعداد شاخص خوب کار می کند، اما محدودیت هایی دارد. نمونه ای از لیست شهرهای زیر را در نظر بگیرید:
>>> شهرها = [“آستین”، “بالتیمور”، “کلولند”، “دنور”]
فرض کنید می خواهید پایگاه داده ای داشته باشید که شامل ایالت هر شهر باشد. شما می توانید این کار را با ایجاد یک لیست به صورت زیر انجام دهید:
>>> ایالات = [“تگزاس”، “مریلند”، “اوهایو”، “کلرادو”]
از آنجایی که اعداد فهرست مطابقت دارند، می توانید با استفاده از شماره فهرست لیست دیگر به عناصر یک لیست دسترسی داشته باشید. به عنوان مثال، برای دریافت ایالت کلیولند، از کد زیر استفاده کنید:
>>> ایالات[cities.index(“کلولند”)]
اوهایو
این فرآیند مفید اما دست و پا گیر است. به عنوان مثال، برخی از لیست ها دارای عناصر زیادی هستند که خواندن محتوای هر لیست را خسته کننده می کند. علاوه بر این، در مثال ایالت ها و شهرها، برخی از ایالت ها بیش از یک شهر خواهند داشت. همچنین، انجام تنها یک ویرایش جزئی در یکی از لیست ها، کل توالی را مختل می کند. می توانید از تاپل ها استفاده کنید تا مطمئن شوید که هیچ تغییری در دنباله ایجاد نمی شود، اما این نیز محدودیت هایی دارد. آنچه شما واقعاً نیاز دارید یک جدول جستجو است که به شرح زیر عمل می کند:
>>> حالت نمای [“کلولند”]
اوهایو
جدول جستجو معمولاً برای نمایش اطلاعات از یک جدول بر اساس مقدار مربوطه در جدول دیگر استفاده می شود. عملیات اتصال جدول در ArcGIS Pro نمونه ای از استفاده از جدول جستجو است. در پایتون، یکی از راههای پیادهسازی جدول جستجو، استفاده از دیکشنری است. دیکشنری ها از جفت کلید و مقادیر مربوط به آنها تشکیل شده اند. جفت ها نیز به عنوان آیتم های فرهنگ لغت نامیده می شوند. یک آیتم فرهنگ لغت از یک کلید و سپس یک دونقطه و سپس مقدار مربوطه تشکیل شده است. موارد با کاما از هم جدا می شوند. خود فرهنگ لغت با پرانتز احاطه شده است.
فرهنگ لغت مثال قبل به شرح زیر است:
>>> statelookup = {“Austin”: “Texas”، “Baltimore”: “Maryland”، “Cleveland”: “Ohio”، “Denver”: “Colorado”}
اکنون می توانید از این فرهنگ لغت برای جستجوی وضعیت هر شهر استفاده کنید:
>>> حالت نمای [“کلولند”]
اوهایو
ترتیب ایجاد موارد در فرهنگ لغت مهم نیست. فرهنگ لغت قابل تغییر است و اگر جفت کلیدها و مقادیر مربوط به آنها دست نخورده باشند، فرهنگ لغت به کار خود ادامه می دهد. هنگام ایجاد فرهنگ لغت به خاطر داشته باشید که کلیدها باید منحصر به فرد باشند، اما مقادیر لازم نیست منحصر به فرد باشند. در مثال قبلی، فرهنگ لغت میتواند چندین شهر در یک حالت داشته باشد، اما فرهنگ لغت نباید دارای نامهای تکراری باشد.
دیکشنری ها را می توان به طور همزمان ایجاد و پر کرد، مانند مثال قبل. همچنین می توانید ابتدا فقط با استفاده از پرانتز یک فرهنگ لغت خالی ایجاد کنید و سپس مواردی را به آن اضافه کنید. در اینجا کد ایجاد یک فرهنگ لغت خالی جدید آمده است:
>>> منطقه بندی = {}
موارد را می توان با استفاده از پرانتز و بیانیه انتساب به شرح زیر اضافه کرد:
>>> zoning[“RES”] = “مسکونی”
می توانید به افزودن موارد به فرهنگ لغت ادامه دهید. کد به شرح زیر است:
>>> zoning[“IND”] = “صنعت”
>>> منطقه بندی[“WAT”] = “آب”
>>> چاپ (منطقه بندی)
{‘IND’: ‘صنعت’، ‘RES’: ‘مسکونی’، ‘WAT’: ‘آب’}
آیتم ها را می توان با استفاده از همان نحو تغییر داد. تنظیم مقدار با استفاده از کلیدی که از قبل در حال استفاده است، مقدار موجود را بازنویسی می کند. کد به شرح زیر است:
>>> منطقه بندی[“IND”] = “صنعتی”
>>> چاپ (منطقه بندی)
{‘IND’: ‘صنعتی’، ‘RES’: ‘مسکونی’، ‘WAT’: ‘آب’}
موارد را می توان با استفاده از براکت ها حذف کرددلبیانیه به شرح زیر
>>> منطقه بندی[“WAT”]
>>> چاپ (منطقه بندی)
{‘IND’: ‘Industry’, ‘RES’: ‘Residential’}
چندین روش فرهنگ لغت وجود دارد. درکلیدها()متد یک شی view را برمی گرداند که لیستی از تمام کلیدهای فرهنگ لغت را به صورت زیر نمایش می دهد:
>>> zoning.keys()
dict_keys ([‘IND’، ‘RES’])
یک شی نمای دیکشنری مانند پنجره ای روی کلیدها و مقادیر است. درلیست ()تابع لیستی از کلیدهای داخل شی view را به شرح زیر بدست می آورد:
>>> لیست (zoning.keys())
[‘IND’، ‘RES’]
درارزش های()متد یک شی view را برمی گرداند که لیستی از تمام مقادیر موجود در فرهنگ لغت را نمایش می دهد. درلیست ()تابع لیستی از مقادیر را به صورت زیر بدست می آورد:
>>> لیست(zoning.values())
[‘صنعتی’، ‘مسکونی’]
درموارد()متد یک شی view را برمی گرداند که لیستی از همه موارد موجود در فرهنگ لغت را نشان می دهد – یعنی همه جفت های کلید-مقدار. درلیست ()تابع لیستی از موارد را به شرح زیر بدست می آورد:
>>> لیست(zoning.values())
[‘صنعتی’، ‘مسکونی’]
لغت نامه ها و فهرست ها چندین ویژگی مشترک دارند. هر دو قابل تغییر هستند، به این معنی که عناصر را می توان اضافه یا حذف کرد. هر دو می توانند تودرتو باشند، به این معنی که یک لیست می تواند شامل یک لیست باشد، یک لیست می تواند حاوی یک فرهنگ لغت باشد، یک فرهنگ لغت می تواند حاوی یک لیست باشد و غیره. با این حال، فهرست ها و فرهنگ لغت ها در نحوه دسترسی به عناصر متفاوت هستند. عناصر لیست با موقعیت آنها در لیست قابل دسترسی هستند، در حالی که عناصر فرهنگ لغت با کلید آنها قابل دسترسی هستند. علاوه بر این، لیست ها دنباله ای در نظر گرفته می شوند و عناصر بر اساس نحوه ایجاد لیست مرتب می شوند. دیکشنری ها دنباله نیستند و عناصر مرتب نیستند.
فصل های بعدی چندین مثال از استفاده از فرهنگ لغت در هنگام نوشتن اسکریپت های پردازش جغرافیایی ارائه می دهند.
4.18با استفاده از مجموعه ها
علاوه بر لیست ها، تاپل ها و دیکشنری ها، پایتون شامل یک نوع داده دیگر برای سازماندهی عناصر به نام مجموعه است. مجموعه مجموعه ای نامرتب از عناصر بدون تکرار است. این ویژگی یک مجموعه را مانند یک لیست می کند، اما هیچ نظمی در عناصر وجود ندارد و عناصر یک مجموعه منحصر به فرد هستند. ایجاد یک مجموعه مانند ایجاد یک لیست یا یک تاپل است، اما عناصر با پرانتز محصور شده اند:
>>> مجموعه_تعداد = {0، 1، 2، 4، 5}
هنگامی که موارد تکراری وارد می شوند، به طور خودکار حذف می شوند.
>>> مجموعه_تعداد = {1، 1، 1}
>>> مجموعه_اعداد
{1}
عناصر یک مجموعه باید تغییر ناپذیر باشند که شامل اعداد صحیح، شناورها، رشته ها و تاپل ها می شود.
یک مجموعه همچنین می تواند با تبدیل یک لیست یا یک تاپل با استفاده ازتنظیم()عملکرد. مثلا:
>>> mylist = [“G”، “I”، “S”]
>>> myset = مجموعه (mylist)
>>> myset
{‘I’، ‘S’، ‘G’}
این مثال نشان می دهد که ترتیب عناصر لزوما حفظ نمی شود زیرا عناصر یک مجموعه مرتب نیستند.
همچنین می توانید از یک رشته به عنوان آرگومان the استفاده کنیدتنظیم()تابع، اما از آنجایی که یک رشته قابل تکرار است، هر کاراکتر منحصربهفرد به عنصری از مجموعه تبدیل میشود:
>>> mytext = “می سی سی پی”
>>> myset = مجموعه (متن متن)
>>> myset
{‘p’، ‘s’، ‘i’، ‘M’}
امکان ایجاد یک مجموعه خالی وجود دارد، اما پرانتزهای خالی ({ }) به عنوان یک فرهنگ لغت خالی تفسیر می شوند. بنابراین تنها راه برای ایجاد یک مجموعه خالی استفاده از آن استتنظیم()عملکرد:
>>> newset = set()
>>> نوع (اخبار)
<class ‘set’>
برخی از عملیاتهایی که میتوانید روی لیستها و تاپلها انجام دهید، میتوانند روی مجموعهها نیز اعمال شوند – برای مثال،len()تابع وکه دراپراتور:
>>> myset = مجموعه (“tesselation”)
>>> myset
{‘t’, ‘l’, ‘i’, ‘s’, ‘a’, ‘n’, ‘o’, ‘e’}
>>> len (myset)
8
>>> “s” در myset
درست است، واقعی
یکی از نقاط قوت مجموعه ها این است که با استفاده از عملگرهای مختلف به راحتی می توان آنها را دستکاری کرد. دو مجموعه زیر را در نظر بگیرید:
>>> مجموعه 1 = {1، 2، 4، 7، 8}
>>> set2 = {1، 5، 8، 10}
اتحاد دو مجموعه از تمام عناصر هر دو مجموعه تشکیل شده است. می توانید از عملگر اتحادیه (|) یااتحاد. اتصال()روش:
>>> set1 | مجموعه 2
یا
>>> set1.union(set2)
این منجر به
{1، 2، 4، 5، 7، 8، 10}
توجه داشته باشید:تفاوت ظریفی بین اپراتور اتحادیه و اپراتور وجود دارداتحاد. اتصال()روش. اپراتور اتحادیه فقط در دو مجموعه کار می کند، در حالی کهاتحاد. اتصال()متد هر تکرار شونده (مانند یک لیست) را می گیرد و آن را به یک مجموعه تبدیل می کند.
محل تلاقی دو مجموعه شامل تمام عناصر مشترک هر دو مجموعه است:
>>> set1 و set2
یا
>>> set1.intersection(set2)
این منجر به
{8، 1}
چندین عملگر دیگر برای مقایسه دو یا چند مجموعه وجود دارد، از جمله تعیین تفاوت بین دو مجموعه (تفاوت()روش یا-عملگر)، تعیین اینکه آیا دو مجموعه دارای عناصر مشترک هستند (isdisjoint()روش)، و تعیین اینکه آیا یک مجموعه زیرمجموعه دیگری است (زیر مجموعه ()روش یا<=اپراتور).
یک مجموعه تغییرپذیر است، درست مانند یک لیست، و بنابراین می تواند با استفاده از چندین روش، از جمله، تغییر یابداضافه کردن()،ترکیدن()،برداشتن()، وبه روز رسانی(). از طرف دیگر، یک مجموعه از نمایه سازی پشتیبانی نمی کند زیرا عناصر یک مجموعه مرتب نیستند.
4.19کار با مسیرها
هنگامی که فایل ها در یک کامپیوتر سازماندهی می شوند، از ساختار پوشه ای برای تسهیل بازیابی فایل ها با استفاده از یک مسیر استفاده می شود. یک مسیر شامل نام پوشههایی است که با علامتهای بک اسلش (\) از هم جدا شدهاند و به صورت اختیاری با نام فایل دنبال میشوند. یک مثال از مسیر برای یک فضای کاری C:\EsriPress\Python\Data\ است. نمونهای از مسیر برای یک shapefile C:\EsriPress\Python\Data\rivers.shp است.
اگرچه معمولاً هنگام نوشتن مسیرها از بک اسلش استفاده می شود، پایتون با اسلش به عنوان یک کاراکتر فرار رفتار می کند. مثلا،\nنشان دهنده یک خوراک خط، و\ tیک برگه را نشان می دهد. بنابراین، در پایتون، باید از استفاده از بک اسلش در مسیرها اجتناب کنید. مثالی برای نشان دادن این رفتار در زیر آمده است. مسیر زیر را امتحان کنید:
>>> mypath = “C:\Projects\Nanaimo\Data.gdb”
به اندازه کافی ساده به نظر می رسد. اما وقتی برای اجرای این خط کد Enter را فشار دهید، مانند شکل با خطا مواجه می شوید.
خطای نحوی ناشی از استفاده است\ Nدر مسیر زیرا\nبرای تغذیه خط استفاده می شود، فرض اساسی این است که شما می خواهید تایپ کنید\nبجای\ N. اگر استفاده کنید چه اتفاقی می افتد\nبجای؟
>>> mypath = “C:\Projects\nanaimo\Data.gdb”
هیچ خطایی ظاهر نمی شود. اما همه اش خوب نیست:
>>> چاپ (mypath)
ج: \ پروژه ها
anaimo\Data.gdb
حتی اگر مسیر در علامت نقل قول و در نتیجه یک رشته باشد، استفاده از\nمنجر به یک خط جدید با شخصیت ها می شود\وnانداخته شدن مشکل مشابهی در هنگام استفاده رخ می دهد\ t. این کد منجر به اضافه شدن یک برگه و کاراکترها می شود\وتیحذف می شوند:
>>> mypath = “C:\Projects\temp.gdb”
>>> چاپ (mypath)
ج: \ پروژه ها emp.gdb
در نتیجه، شما نباید از بک اسلش های معمولی (\) در مسیرهای خود استفاده کنید، حتی اگر استفاده نمی کنید\nیا\ tبرای هر مسیر مشخص این شانس بسیار زیاد است که فراموش کرده و ناخواسته خطایی در اسکریپت های خود ایجاد کنید.
سه روش صحیح برای تعیین مسیر در پایتون وجود دارد:
- از یک اسلش رو به جلو (/) استفاده کنید – برای مثال،
“C:/EsriPress/Python/Data”
- از دو اسلش به عقب (\\) استفاده کنید – برای مثال،
“C:\\EsriPress\\Python\\Data”
- با قرار دادن حرف r قبل از یک رشته از یک رشته به معنای واقعی کلمه استفاده کنید – برای مثال،
r”C:\EsriPress\Python\Data”
حرف r مخفف “رشته خام” است، به این معنی که یک بک اسلش به عنوان یک کاراکتر فرار خوانده نمی شود.
سبکی که برای مسیرها استفاده می کنید یک موضوع ترجیحی است. توصیه می شود از یک سبک واحد استفاده کنید و با آن بمانید. این کتاب از اسلش های رو به جلو استفاده می کند، مانند “C:/EsriPress/Python/Data”، اما خوب است که از انواع دیگر علامت گذاری آگاه باشید.
یکی از روش هایی که برخی از کدنویس ها برای کاهش تایپ و جلوگیری از اشتباهات تایپی از آن استفاده می کنند، کپی کردن مسیر خود به طور مستقیم از مدیر فایل خود است. فایل منیجر خود (یعنی File Explorer) را باز کنید و به پوشه مورد نظر بروید. هنگامی که پوشه در نوار پیمایش بالا نشان داده شد، روی نوار کلیک راست کرده و روی Copy address as text کلیک کنید.
سپس می توانید مسیر دقیق را در یک اسکریپت قرار دهید. با این حال، هنگامی که این کار را انجام می دهید، مسیر از بک اسلش استاندارد (\) استفاده می کند. مثلا:
C:\Projects\Data\Study_Area\Itaquaquecetuba
برای جلوگیری از جایگزینی هر بک اسلش، سریعتر است که کاراکتر r را در جلو تایپ کنید:
r”C:\Projects\Data\Study_Area\Itaquaquecetuba”
این سهولت استفاده یکی از دلایلی است که چرا این یک سبک محبوب برای مسیرهای نوشتن است.
در پایتون مسیرها به صورت رشته ذخیره می شوند. به عنوان مثال، کد زیر مسیر یک shapefile را به یک متغیر رشته ای اختصاص می دهد:
>>> inputfc = “C:/EsriPress/Python/Data/rivers.shp”
هنگامی که یک مسیر به یک متغیر اختصاص داده می شود، مسیر می تواند برای ارجاع داده های روی دیسک استفاده شود.
توجه داشته باشید:در صورت عدم ارجاع کد، این کتاب از بک اسلش معمولی (\) برای مسیرهایی مانند C:\EsriPress\Python\Data\rivers.shp استفاده می کند. این سبک روش صحیحی برای نوشتن مسیرها در متن عمومی است، اما برای نوشتن مسیرها در کد پایتون صحیح نیست.
4.20کار با ماژول ها
توابع بسیار بیشتری در پایتون وجود دارد تا توابع داخلی. استفاده از آنها مستلزم استفاده از ماژول ها است. یک ماژول مانند یک افزونه است که می تواند برای گسترش قابلیت های آن به پایتون وارد شود. به طور معمول، یک ماژول از چندین عملکرد تخصصی تشکیل شده است. ماژول ها با استفاده از دستور خاصی به نام وارد می شوندوارد كردن. نحو کلی برایوارد كردنبیانیه به شرح زیر است:
>>> وارد کردن <module>
یک ماژول متداول استفاده می شودریاضیمدول. وارد کردن آن به پایتون به صورت زیر عمل می کند:
>>> وارد کردن ریاضی
هنگامی که یک ماژول را وارد می کنید، تمام توابع آن ماژول برای استفاده در پایتون در دسترس هستند. برای فراخوانی یک تابع از ماژول وارد شده، همچنان باید با نوشتن زیر به خود ماژول مراجعه کنید:
<module>.<function>
توجه داشته باشید که نحو همان علامت نقطه ای را نشان می دهد که برای اشیا و روش ها استفاده می شد. نماد نقطه در اینجا برای نشان دادن اینکه تابع به ماژول تعلق دارد استفاده می شود.
به عنوان مثال، برای استفاده از تابع کسینوسcos()ازریاضیماژول از کد زیر استفاده کنید:
>>> math.cos (1)
0.54030230586813977
مهم است بدانید که این کد تنها پس از وارد کردن ماژول کار می کند. به عنوان مثال، اگر کد خود را باmath.cos (1)به عنوان اولین خط کد بدون اینکه ابتدا کد را وارد کنیدریاضیماژول، یک پیغام خطایی دریافت خواهید کرد که شامل موارد زیر است:
NameError: نام “ریاضی” تعریف نشده است
توجه داشته باشید کهmath.cos()تابع فرض می کند که مقدار ورودی بر حسب رادیان است. برای دریافت توضیحات یک تابع، ازکمک()عملکرد:
>>> کمک (math.cos)
به نتیجه توجه کنید:
راهنمایی در مورد تابع داخلی cos در ریاضیات ماژول:
cos (…)
cos(x):
کسینوس x (با رادیان اندازه گیری شده) را برمی گردانیم.
درکمک()تابع یک راه راحت برای دسترسی به مستندات ماژول ها، توابع، کلاس ها و متدها در پایتون است.
برای دریافت لیست تمام عملکردهای یک ماژول، ازdir()عملکرد:
>>> درس (ریاضی)
این تابع همه توابع را چاپ می کندریاضیماژول به ترتیب حروف الفبا به عنوان یک لیست پایتون.
همه ماژول ها نیز مستندات خاص خود را دارند. به عنوان مثالریاضیماژول به طور مفصل برای Python 3.6 در توضیح داده شده استhttps://docs.python.org/3.6/library/math.html.
یکی از دلایل استفاده از نحو<module>.<function>برای فراخوانی یک تابع این است که توابع از ماژول های مختلف می توانند نام یکسانی داشته باشند. اگر مطمئن هستید که از بیش از یک تابع با همان نام در یک اسکریپت استفاده نمیکنید، میتوانید با استفاده از یک نوع از کد خود را کوتاه کنید.وارد كردنبیانیه:
>>> از cos واردات ریاضی
>>> cos (1)
0.54030230586813977
زمانی که ازاز <module> import <function>بیانیه، می توانید تابع را بدون پیشوند ماژول آن استفاده کنید.
ماژول دیگر استزمانمدول. شما می توانید عملکردهای را بررسی کنیدزمانماژول با استفاده از کد زیر:
>>> زمان واردات
>>> کارگردان (زمان)
کد فهرستی از تمام توابع موجود در آن را چاپ می کندزمانمدول. برخی از ساده ترها را امتحان کنید. درtime.time()تابع زمان فعلی را به عنوان تعداد ثانیه از تاریخ “عصر” یا مرجع تعیین می کند. این وابسته به پلتفرم است—برای یونیکس، 0 ساعت در 1 ژانویه 1970 است، و این همان چیزی است که پایتون به طور پیش فرض از آن استفاده می کند.
>>> time.time()
1539107680.2387223
نتیجه از پلت فرمی به پلتفرم دیگر متفاوت است، اما میتوانید از این عملکرد برای زمانبندی مطمئن چیزی استفاده کنید. به عنوان مثال، اگر می خواهید تعیین کنید که چقدر طول می کشد تا یک روش انجام شود، زمان قبل و بعد از عمل را برای تعیین تفاوت ثبت می کنید.
درزمان محلی()تابع زمان را بر حسب ثانیه به اجزایی که تاریخ و زمان محلی فعلی را تشکیل می دهند تبدیل می کند:
>>> time.localtime()
time.struct_time(tm_year=2018, tm_mon=10, tm_mday=9, tm_hour=10, tm_min=55, tm_sec=51, tm_wday=1, tm_yday=282, tm_isdst=1)
کد یک تاپل حاوی عناصر زیر را برمیگرداند: سال، ماه، روز ماه، ساعت، دقیقه، ثانیه، روز هفته (دوشنبه صفر است)، روز سال و زمان صرفهجویی در نور روز.
درasctime()تابع زمان را به صورت زیر به رشته تبدیل می کند:
>>> time.asctime()
‘سهشنبه 9 اکتبر 2018 10:56:50’
درکلمه کلیدیماژول را می توان برای مشاهده لیستی از کلمات کلیدی پایتون استفاده کرد. کلمات کلیدی هرگز نباید به عنوان نام متغیرها استفاده شوند، بنابراین بررسی لیست کلمات کلیدی به شرح زیر مفید است:
>>> وارد کردن کلمه کلیدی
>>> چاپ (keyword.kwlist)
[‘نادرست’، ‘هیچک’، ‘درست’، ‘و’، ‘به عنوان’، ‘اثبات’، ‘شکست’، ‘کلاس’، ‘ادامه’، ‘def’، ‘del’، ‘elif’، ‘ else»، «به جز»، «بالاخره»، «برای»، «از»، «جهانی»، «اگر»، «واردات»، «in»، «است»، «لامبدا»، «غیر محلی»، «نه» , ‘یا’، ‘گذر’، ‘افزایش’، ‘بازگشت’، ‘تلاش’، ‘در حالی’، ‘با’، ‘بازده’]
لیست را بررسی کنید و به آن توجه کنیدوارد كردنگنجانده شده است، همانطور که هستنددلوکه در. شما با بسیاری از این کلمات کلیدی آشنا خواهید شد – به عنوان مثال، بخش گردش کار در آینده در این فصل بیانیه ها را پوشش می دهد.اگر،elif، ودیگر.
ماژولهای بسیار بیشتری در پایتون در دسترس هستند و فصلهای آینده نمونههایی از آنها را در سرتاسر ارائه میدهند. همچنین مهم است بدانید که می توانید ماژول ها را از منابع دیگر وارد کنید. مرتبط ترین مثال ArcPy است. ArcPy به دلیل اینکه شامل چندین ماژول است به عنوان یک بسته شناخته می شود، اما از منظر نوشتن یک اسکریپت، شبیه یک ماژول است. وقتی اسکریپت هایی برای کار با ArcGIS Pro می نویسید، اولین کاری که معمولا انجام می دهید این است که ArcPy را وارد کنید تا به تمام ابزارهای ArcGIS Pro دسترسی پیدا کنید. ArcPy از همین روش استفاده می کند<module>.<function>نحوی که قبلاً در این فصل دیده اید. فصل 5 این نحو را با جزئیات بیشتر و همچنین نگاهی بسیار دقیق تر به عملکرد ArcPy پوشش می دهد.
4.21کنترل گردش کار با استفاده از دستورات شرطی
کدی که تا به حال به آن نگاه کرده اید یک جریان ساده و متوالی دارد. هر عبارت یا عبارت یک بار به ترتیب وقوع اجرا می شود. برنامه های پیچیده تر نیاز دارند که بخش های خاصی از کد خود را به صورت انتخابی اجرا کنید یا بخش هایی از آن را تکرار کنید. شاخهبندی یکی از راههای کنترل گردش کار در اسکریپت شماست. اساساً به معنای تصمیم گیری برای انتخاب یک مسیر یا مسیر دیگر است. انشعاب معمولاً ازاگرساختار و انواع آن زیراگرساختار، اسکریپت ها می توانند به بخشی از کد منشعب شوند یا بر اساس شرایط تنظیم شده از آن عبور کنند. یک مثال ساده را در نظر بگیرید که از آن استفاده می کندتصادفیمدول.
واردات تصادفی
x = random.randint(1، 6)
چاپ (x)
اگر x == 6:
چاپ (“شما برنده می شوید!”)
درrandom.randint(1، 6)بیان یک عدد صحیح تصادفی بین 1 و 6 ایجاد می کند، انگار که یک تاس می اندازد، و مقدار چاپ می شود. اگر مقدار 6 باشد، رشته “شما برنده می شوید!” چاپ می شود. اگر مقدار برابر با 6 نباشد چه اتفاقی می افتد؟ هیچ چیز – خط بعدی کد نادیده گرفته می شود.
همهاگرساختارها یک شرط دارند که یا درست است یا نادرست. شرایط اغلب با استفاده از عملگرهای مقایسه ایجاد می شود. عملگرهای اصلی در جدول 4.3 فهرست شده اند. توجه داشته باشید که نماد “برابر” یک علامت مساوی دوگانه (==) است، نه یک علامت مساوی (=)، همانطور که ممکن است انتظار داشته باشید. استفاده از علامت مساوی منفرد برای تخصیص یک مقدار به یک متغیر محفوظ است. از این رو،x = 6یک تکلیف است، در حالی کهx == 6یک شرط است
اپراتور | شرح | شرایط نمونه | نتیجه |
== | مساوی با | 4 == 9 | نادرست |
!= | برابر نیست با | 4! = 9 | درست است، واقعی |
> | بزرگتر از | 4 > 9 | نادرست |
< | کمتر از | 4 < 9 | درست است، واقعی |
>= | بزرگتر یا مساوی با | 3>= 3 | درست است، واقعی |
<= | کمتر یا مساوی با | 3 <= 2 | نادرست |
همچنین به چند نکته در مورد نحو ساختار انشعاب توجه کنید. اول،اگرعبارت با یک دونقطه دنبال می شود – این نحو مورد نیاز است و شروع کد تورفتگی را در خط بعدی نشان می دهد. دوم،اگرعبارت را می توان به تنهایی مورد استفاده قرار داد – یعنی بدون اینکه یک علامت دنبال شودelifیادیگربیانیه، همانطور که اغلب در سایر زبان های برنامه نویسی مورد نیاز است. سوم، خط زیراگرعبارت تورفتگی دارد – این تورفتگی بخش مهمی از کدنویسی در پایتون است.
برای بررسی، ساختار اساسی یکاگربیانیه به شرح زیر است:
اگر x == 6:
چاپ (“شما برنده می شوید!”)
در خط اول کد، کلمه کلیدیاگربه دنبال آن یک وضعیت و سپس کولون وجود دارد. سپس یک بلوک از کد وجود دارد – یعنی یک یا چند خط به همان روش تورفتگی دارند. اگر شرایط بهدرست است، واقعی، خطوط کدی که بلوک را تشکیل می دهند اجرا می شوند. اگر شرایط بهنادرست، خطوط کد حذف می شوند و برنامه بعد از عبارت به دستور بعدی می روداگرساختار توجه کنید که وجود نداردendifاگر با سایر زبان های برنامه نویسی آشنا هستید، ممکن است انتظار داشته باشید. پس چگونه پایتون متوجه می شود که شما به انتهای آن رسیده ایداگرساختار؟ وقتی تورفتگی کد خود را متوقف می کنید – بنابراین، تورفتگی دقیق کلید کارکرد این نوع ساختار است.
چندین تنوع در مورد وجود دارداگرساختار با استفاده ازelifودیگربیانیه. در مثال زیر،elifدستور فقط در صورتی اجرا می شود که شرط موجود دراگربیانیه استنادرست. درelifعبارت را می توان هر چند بار که لازم است تکرار کرد و به شما این امکان را می دهد که برای هر ورودی ممکن یک عمل مشخص کنید. دردیگردستور فقط در صورتی اجرا می شود که تمام شرایط قبلی وجود داشته باشدنادرستو فقط یک بار در یک تک قابل استفاده استاگرساختار دردیگرعبارت (در صورت استفاده) بعد از همه می آیدelifعبارات و شرطی را شامل نمی شود – فقط زمانی اجرا می شود که هیچ یک از شرایط قبلی به ارزیابی نرسددرست است، واقعی، و هیچ شرط اضافی را آزمایش نمی کند. مثلا:
واردات تصادفی
x = random.randint(0,6)
چاپ (x)
اگر x == 6:
چاپ (“شما برنده می شوید!”)
elif x == 5:
چاپ (“دوباره امتحان کنید!”)
دیگر:
چاپ (“شما از دست می دهید!”)
دراگرساختار و انواع آن به عنوان ساختارهای کنترلی نامیده می شوند، زیرا ساختار ترتیب اجرای دستورات را در یک سری هدایت می کند. زیراگرساختار، تنها بخشهای خاصی از کد شما اجرا میشوند در حالی که بخشهای دیگر نادیده گرفته میشوند.
4.22عبارات مرکب و تورفتگی
استفاده از تورفتگی در قسمت قبل نیاز به توضیح بیشتری دارد. با تورفتگی یک خط، کد به یک بلوک تبدیل می شود. یک بلوک کد یک یا چند خط متوالی است که با همان مقدار فرورفتگی دارند. تورفتگی خطوط را از نظر بصری و همچنین منطقی جدا می کند.
بلوک ها معمولاً به عنوان بخشی از یک ساختار کنترلی استفاده می شونداگربیانیه. بلوکها عبارت یا گروهی از دستورات را تشکیل میدهند که در صورت وجود شرایط اجرا میشونددرست است، واقعی. تورفتگی در پایتون اختیاری نیست. این تنها راه برای تعریف یک بلوک است.
به طور کلی تر،اگردستور یکی از نمونه های دستور مرکب است. نمونه هایی از گزاره های مرکب دیگر هستندبرای،تلاش كردن،در حالی که، وبا. بخشهای بعدی این فصل و همچنین فصلهای دیگر این اظهارات را پوشش میدهند. دستورات مرکب در پایتون حاوی گروهی از عبارات یا یک بلوک هستند و این بلوک ها با استفاده از تورفتگی ایجاد می شوند.
ابتدای یک دستور مرکب با یک دونقطه در انتهای خط قبلی کد تعریف می شود. تمام خطوط بعد از این کولون باید تورفتگی داشته باشند. تورفتگی نادرست منجر به یک خطای نحوی می شود. به عنوان مثال، کد مثال قبلی را با استفاده از کد در نظر بگیریداگربیانیه، اما این بار بدون هیچ تورفتگی، همانطور که در شکل نشان داده شده است.
این خطا اهمیت تورفتگی را نشان می دهد.
می توانید با استفاده از زبانه ها یا فاصله ها تورفتگی ایجاد کنید. در جامعه پایتون بحث هایی وجود دارد که کدام یک بهتر است – و اگر از فضاها استفاده می کنید از چند فضا استفاده کنید – اما این انتخاب تا حد زیادی به ترجیح شخصی بستگی دارد. نکته کلیدی سازگاری است – یعنی اگر بلوک ها را با استفاده از چهار فاصله ایجاد می کنید، همیشه از چهار فاصله استفاده کنید. اختلاط زبانه ها و فضاها ممکن است از نظر بصری یکسان به نظر برسد، اما این ناهماهنگی باعث ایجاد مشکلاتی می شود. سبک های رایج استفاده از یک تب، دو فاصله یا چهار فاصله است. انتخاب با شماست – فقط ثابت قدم باشید. برخی از IDE ها دارای ابزارهای داخلی برای تبدیل خودکار بین استفاده از برگه ها و فضاها هستند که ایجاد یک سبک تورفتگی ثابت در کد شما را آسان تر می کند.
توجه داشته باشید:یک سبک از تورفتگی را انتخاب کنید، و آن را برای تمام کدهای خود دنبال کنید. رایج ترین سبک استفاده از یک برگه است.
ویرایشگرهای پایتون به نوشتن تورفتگی مناسب کمک می کنند. ابتدا، پس از نوشتن عبارتی که با دونقطه به پایان میرسد و Enter را فشار میدهید، خط بعدی به طور خودکار، معمولاً با یک زبانه، همانطور که در شکل نشان داده شده است، فرورفته میشود.
دوم، هنگامی که یک بلوک کد را شروع می کنید، هر بار که Enter را در انتهای یک خط کد فشار می دهید، خط بعدی مانند خط قبلی فرورفته می شود. با وجود این کمک، با این حال، هنگام شروع نوشتن کد پایتون، خطاهای تورفتگی رایج هستند.
تورفتگی تا حدودی مختص پایتون است. بسیاری از زبان های برنامه نویسی دیگر، از جمله جاوا و C++، از پرانتز برای نشان دادن گروهی از عبارات استفاده می کنند. یک مثال ساده در جاوا به شرح زیر است:
اگر (<شرط>) {
<statement1>
<statement2>
}
توجه داشته باشید که این کد پایتون معنیدار نیست – بریسها در پایتون برای دیکشنریها و مجموعهها استفاده میشوند.
به جای پرانتز، پایتون از تورفتگی استفاده میکند – این نحو کد را کوتاهتر و خواندن آسانتر میکند. با این حال، برنامه نویسانی که کد خود را به زبانی می نویسند که از بریس استفاده می کند، ممکن است مدتی طول بکشد تا به تورفتگی به عنوان بخش مهمی از کد پایتون عادت کنند.
4.23کنترل گردش کار با استفاده از ساختارهای حلقه
راه دیگر برای کنترل گردش کار استفاده از ساختارهای حلقه ای است که به آنها حلقه نیز می گویند. حلقهها به شما این امکان را میدهند که قسمت خاصی از کد خود را تا رسیدن به یک شرایط مشخص یا تا زمانی که همه ورودیهای ممکن استفاده شوند، تکرار کنید. دو شکل اساسی از ساختارهای حلقه در پایتون وجود دارد:در حالی کهحلقه ها وبرایحلقه ها
در اینجا یک مثال از یک ساده استدر حالی کهحلقه:
i = 0
در حالی که من <= 10:
چاپ (i)
i += 1
متغیر i روی مقدار ابتدایی صفر (0) تنظیم شده است. دردر حالی کهبیانیه مقدار متغیر را بررسی می کند. اگر این شرایط بهدرست است، واقعی، بلوک کد اجرا می شود. در این بلوک، مقدار متغیر شمارنده چاپ می شود و در خط بعدی، مقدار 1 افزایش می یابد. پس از یک بار تکرار حلقه، مقدار متغیر 1 است. بلوک کد تکرار می شود تا زمانی که شرایط ارزیابی می شودنادرست. نتیجه کد چاپی از اعداد 0 تا 10 است. راه های ساده تری برای رسیدن به این نتیجه وجود دارد، اما این مثال برای نشان دادن استفاده ازدر حالی کهبیانیه.
آدر حالی کهبیانیه به یک شرط خروج نیاز دارد. متغیر مورد استفاده در شرایط خروج (i، در مورد کد قبلی) متغیر نگهبان یا متغیر حلقه نامیده می شود. متغیر نگهبان با مقدار یا مقادیر دیگری مقایسه می شود. مهم است که مطمئن شوید که شرایط خروج شما قوی است – یعنی پس از تعداد معینی از تکرارها، باید به شرایط خروج رسید. در غیر این صورت، حلقه ادامه خواهد داشت. به عنوان مثال، اگر اسکریپت شما به صورت زیر خوانده شود چه می شود:
i = 0
در حالی که من <= 10:
چاپ (i)
در این حالت، متغیر sentry در متغیر تغییر نمی کنددر حالی کهحلقه، و شرایط خروج هرگز به دست نمی آید. این کد منجر به یک حلقه بی نهایت می شود. شما می خواهید از حلقه های بی نهایت در اسکریپت های خود اجتناب کنید زیرا اغلب به این معنی است که برای خروج باید برنامه را خراب کنید. بنابراین، مطمئن شوید که شرایط خروج در واقع در نقطهای به دست آمده است.
با این حال، چندین گزینه برای خروج از یک حلقه بی نهایت وجود دارد. به طور معمول، فشار دادن Ctrl+C اجرای اسکریپت را متوقف می کند. پیامی خواهید دیدصفحه کلید وقفهدر مترجم تعاملی Ctrl+C معمولاً در IDLE کار می کند. ویرایشگرهای پایتون مانند Spyder و PyCharm گزینههای اضافی از جمله دکمه Stop (مربع قرمز کوچک در Spyder و PyCharm) ارائه میدهند.
توجه داشته باشید:اگر خارج شدن از یک حلقه نامحدود با استفاده از پیشنهادات قبلی کار نمی کند، می توانید برنامه ای را که پایتون اجرا می کند خاتمه دهید. در پلتفرم ویندوز، Ctrl+Alt+Delete را فشار دهید. این دستور Task Manager را نمایش می دهد، که به شما امکان می دهد یک برنامه خاص را پایان دهید – به عنوان مثال، IDLE یا ArcGIS Pro اگر در حال اجرای کد از پنجره Python هستید. این یک روش زیبا برای خروج از کد شما نیست، اما گاهی اوقات لازم است، به خصوص در هنگام آزمایش.
از سوی دیگر، شما همچنین می خواهید مطمئن شوید که امکان ارزیابی شرایط خروج وجود دارددرست است، واقعیدر یک نقطه – در غیر این صورت، بلوک هرگز اجرا نمی شود. برای مثال کد زیر را در نظر بگیرید:
i = 12
در حالی که من <= 10:
چاپ (i)
i +=1
در این اسکریپت، بلوک کد هرگز اجرا نخواهد شد، زیرا مقدار تخصیص داده شده به متغیر sentry (12) از ایجاد شرایط دردر حالی کهحلقه از همیشه ارزیابی بهدرست است، واقعی. این ممکن است مانند منطق ساده به نظر برسد، اما با پیچیدهتر شدن اسکریپتهای شما، نادیده گرفتن چیزهای ساده آسانتر میشود.
دردر حالی کهحلقه بخشی از کد شما را بر اساس یک شرط تکرار می کند. دربرایاز سوی دیگر، حلقه نیز بخشی از کد شما را تکرار می کند، اما بر اساس یک شرط نیست. در عوض،برایحلقه معمولا بر اساس یک دنباله، مانند یک رشته یا یک لیست است. آبرایحلقه یک بلوک کد را برای هر عنصر در دنباله تکرار می کند. وقتی به انتهای دنباله رسید، حلقه به پایان می رسد.
در اینجا یک مثال از یک ساده استبرایحلقه، به شرح زیر است:
mylist = [“A”، “B”، “C”، “D”]
برای نامه در فهرست من:
چاپ (نامه)
در این مثال،حرفنام یک متغیر است و برای هر تکرار حلقه، مقدار متفاوتی از لیست به این متغیر اختصاص مییابد.
نتیجه چاپی از هر مقدار در دنباله است. آبرایحلقه روی هر مقدار در دنباله تکرار می شود تا زمانی که دنباله خالی شود. کد مثال قبلی از یک لیست استفاده می کند، اما aبرایحلقه همچنین می تواند برای تکرار روی رشته ها، تاپل ها و دیکشنری ها استفاده شود.
توجه به این نکته ضروری است که هنگام نوشتنبرایبرای تکرار روی یک لیست حلقه بزنید، معمولاً نمی دانید فهرست شامل چند عنصر است. مگر اینکه ابتدا طول لیست را بررسی کنید، هیچ راهی برای دانستن چند برابر بلوک کد داخل لیست وجود نداردبرایحلقه اجرا خواهد شد. آنچه شما می دانید این است کهبرایحلقه تکرار می شود تا زمانی که کد روی تمام عناصر لیست تکرار شود.
4.24کار با خطوط طولانی کد
اگرچه بیشتر خطوط کد در پایتون کوتاه هستند، گاهی اوقات ممکن است در نهایت خطوط طولانی کد بنویسید. مثال زیر را در نظر بگیرید که در آن می خواهید یک رشته طولانی چاپ کنید:
پیام = “Lorem ipsum dolor sit amet، consectetur adipiscing elit، sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.”
چاپ (پیام)
شما می توانید از خطوط طولانی کد در ویرایشگر پایتون استفاده کنید، اما خواندن آن دشوار خواهد بود. خطوط طولانی کد برای تناسب با پنجره پیچیده نشده اند، زیرا در یک برنامه پردازش کلمه معمولی هستند. درعوض، باید برای دیدن کل خط حرکت کنید یا پنجره را بازتر کنید. مثال در شکل نشان می دهد که چگونه تنها بخشی از خط کد در یک پنجره اسکریپت در IDLE قابل مشاهده است.
راه حل برای خوانایی بیشتر کد این است که به صورت دستی خط کد را به چندین خط بشکنید. می توانید مکان نما خود را در داخل خط کد قرار دهید، Enter را فشار دهید و برای ادامه خط یک اسلش به صورت زیر قرار دهید:
message = “Lorem ipsum dolor sit amet, consectetur \
ادیپیسینگ elit، sed do eiusmod tempor incididunt \
ut labore et dolore magna aliqua.”
چاپ (پیام)
بک اسلش نشان می دهد که خط کد ادامه دارد و در یک ویرایشگر پایتون، سه خط اول به عنوان یک خط کد خوانده می شود.
راهنمای سبک برای کد پایتون حداکثر 79 کاراکتر را برای یک خط توصیه میکند، اما این بیشتر یک ملاحظات عملی برای قابل مدیریت نگه داشتن اندازه پنجره اسکریپت است.
علاوه بر بک اسلش، پایتون از ادامه خط ضمنی استفاده می کند. این شامل استفاده از پرانتز ( )، براکت [ ] و پرانتز { } است. مثالی از یک لیست طولانی از عناصر را در نظر بگیرید، مانند تمام استان ها و قلمروهای کانادا:
استان ها = [“آلبرتا”، “بریتیش کلمبیا”، “مانیتوبا”، “نیوبرانزویک”، “نیوفاندلند و لابرادور”، “سرزمین های شمال غربی”، “نوا اسکوشیا”، “نوناوت”، “انتاریو”، “جزیره پرنس ادوارد” ، “کبک”، “ساسکاچوان”، “یوکان”]
با 222 کاراکتر، لیست بسیار طولانی است که در یک پنجره قابل مدیریت قرار نمی گیرد.
به جای استفاده از بک اسلش، خط کد را می توان با فشار دادن Enter، بدون استفاده از هیچ گونه اسلش به صورت زیر شکست.
استانها = [“آلبرتا”، “بریتیش کلمبیا”، “مانیتوبا”،
“نیوبرانزویک”، “نیوفاندلند و لابرادور”،
“سرزمین های شمال غربی”، “نوا اسکوشیا”،
“Nunavut”، “Ontario”، “Prince Edward Island”،
“کبک”، “ساسکاچوان”، “یوکان”]
یک لیست پایتون به یک جفت براکت نیاز دارد، اما خط اول با یک براکت بسته به پایان نمی رسد. در نتیجه، مفسر پایتون به خواندن خط(های) بعدی ادامه می دهد تا زمانی که با براکت بسته شدن مواجه شود. همه چیز تا و از جمله براکت بسته شدن بخشی از همان خط کد است. ادامه خط از طریق نحو – یعنی یک جفت پرانتز در این مورد – ضمنی است.
مثال کمی مشکل خوانایی را نشان می دهد، زیرا در یک نگاه سریع به راحتی می توان از براکت ها چشم پوشی کرد و همه خطوط کد از یک موقعیت شروع می شوند. در نتیجه، استفاده از شکل خاصی از تورفتگی معمول است که خطوط بعدی کد را با براکت آغازین تراز می کند، به شرح زیر:
استانها = [“آلبرتا”، “بریتیش کلمبیا”، “مانیتوبا”،
“نیوبرانزویک”، “نیوفاندلند و لابرادور”،
“سرزمین های شمال غربی”، “نوا اسکوشیا”،
“Nunavut”، “Ontario”، “Prince Edward Island”،
“کبک”، “ساسکاچوان”، “یوکان”]
در یک ویرایشگر معمولی پایتون، از جمله IDLE، اگر از براکت (یا پرانتز یا بریس) استفاده نمیکنید، این تورفتگی بهطور خودکار اعمال میشود زمانی که Enter را به دنبال براکت باز (یا پرانتز یا بریس) فشار دهید. تورفتگی با استفاده از فاصله ها ایجاد می شود، اما هنگام اجرای کد نادیده گرفته می شوند.
نام خاصی برای این نوع تورفتگی وجود ندارد، اما میتوان آن را بهعنوان تراز کردن تورفتگی با براکت باز (یا پرانتز یا مهاربند) توصیف کرد.
ادامه خط ضمنی برای هر چیزی که از پرانتز، براکت یا پرانتز استفاده می کند کار می کند. توابع از پرانتز استفاده می کنند و ادامه خط اغلب برای توابعی با آرگومان های زیاد استفاده می شود. ابزار Emerging Hot Spot Analysis را در ArcGIS Pro در نظر بگیرید. در زیر یکی از نمونههای مرجع ابزار در صفحات راهنمای ArcGIS Pro آمده است:
واردات کمان
arcpy.env.workspace = r”C:\STPM”
arcpy.EmergingHotSpotAnalysis_stpm(“Homicides.nc”، “COUNT”، “EHS_Homicides.shp”، “5 مایل”، 2، “#”، “FIXED_DISTANCE”، “3”)
توجه داشته باشید:نگران سینتکس این اسکریپت نباشید. فصل 5 به تفصیل ابزارهای پردازش جغرافیایی در پایتون را پوشش می دهد.
خط سوم 133 کاراکتر است. همانطور که در شکل نشان داده شده است، می توان خوانایی اسکریپت را با استفاده از ادامه خط ضمنی بهبود بخشید.
شرح
اسکریپت مثال در IDLE با پارامترهای تابع Emerging HotSpotAnalysis که با استفاده از ادامه خط ضمنی به چندین خط تقسیم شده است.
تورفتگی لازم نیست با پرانتز باز مطابقت داشته باشد و اساساً می تواند در هر جایی برای بهبود خوانایی باشد. به این سبک تورفتگی آویزان گفته می شود.
به طور کلی، ادامه خط ضمنی بر استفاده از بک اسلش ترجیح داده می شود. این اولویت برای مثال قبلی یک رشته طولانی مشکل ایجاد می کند زیرا هیچ پرانتز، براکت یا بریس برای کار با آن وجود ندارد. راه حل این است که یک جفت پرانتز فقط برای ادامه خط اضافه کنید. این نحو مشکل دیگری را ایجاد می کند زیرا هر شکست خط در داخل رشته منجر به یک خطا می شود:EOL هنگام اسکن رشته به معنای واقعی کلمه، جایی که EOL مخفف End Of Line است.
خطا به دلیل گم شدن نقل قول بسته شدن رشته در خط اول ایجاد می شود. علامت نقل قول گم شده ادامه خط ضمنی را نشان نمی دهد. راه حل این است که برای هر خط از یک جفت نقل قول استفاده کنید، همانطور که در شکل نشان داده شده است.
ادامه خط می تواند کمی دست و پا گیر باشد، به خصوص ایجاد یک تراز معنادار و ثابت، اما خوانایی کد شما را تا حد زیادی افزایش می دهد.
4.25دریافت ورودی کاربر
بسیاری از اسکریپت های پایتون به ورودی هایی از خارج از خود اسکریپت نیاز دارند. راه های مختلفی برای به دست آوردن این ورودی ها وجود دارد، از جمله استفاده ازورودی()عملکرد:
>>> x = ورودی (“”)
اجرای این خط کد در مفسر تعاملی پایتون به کاربر اجازه می دهد تا مقداری را وارد کند. نحوه دقیق انجام این کار با استفاده از IDE متفاوت است. به عنوان مثال، هنگامی که خط قبل در IDLE اجرا می شود، مکان نما به خط بعدی کد می پرد اما بدون خط فرمان.
بعد از اینکه یک مقدار را تایپ کردید و Enter را فشار دادید، خط فرمان دوباره در خط بعدی ظاهر می شود و می توانید از مقدار در کد خود استفاده کنید. مثال زیر از کاربر می خواهد که یک عدد صحیح وارد کند:
>>> x = ورودی (“یک عدد صحیح تایپ کنید و Enter را فشار دهید: “)
پیام در خط بعدی چاپ می شود و مکان نما در انتهای پیام متوقف می شود تا کاربر مقداری را وارد کند.
یک عدد صحیح تایپ کرده و Enter را فشار دهید:
هنگامی که کاربر مقداری را وارد کرده و Enter را فشار می دهد، این مقدار به متغیر اختصاص می یابد. درورودی()تابع همیشه یک رشته را برمی گرداند. بنابراین، اگر می خواهید از ورودی عددی به عنوان یک عدد استفاده کنید، مقدار باید به صورت یک عدد صحیح ارسال شود. به عنوان مثال، کد زیر مقادیر مربع ورودی کاربر را محاسبه می کند و نتیجه را در یک پیام چاپ می کند:
>>> x = ورودی (“یک عدد صحیح تایپ کنید و Enter را فشار دهید: “)
یک عدد صحیح تایپ کرده و Enter را فشار دهید: 12
>>> y = int(x)**2
>>> print(“مقدار مربع عدد صحیح شما این است: {0}”.format(y))
مقدار مربع عدد صحیح شما : 144 است
ویرایشگرهای مختلف پایتون از نظر نحوه دریافت ورودی کاربر با استفاده از آن کمی متفاوت هستندورودی()عملکرد. به عنوان مثال، همان کد در PyCharm در شکل نشان داده شده است.
کد واقعی پایتون یکسان است، اما>؟اعلان روشن می کند که از کاربر انتظار می رود مقداری را تایپ کند.
از طرف دیگر، پنجره Python در ArcGIS Pro برای دریافت ورودی کاربر به این روش تنظیم نشده است. هنگامی که همان کد را در پنجره پایتون اجرا می کنید، یک خطا دریافت خواهید کرد.
پنجره پایتون به عنوان یک مفسر تعاملی برای اکثر وظایف به خوبی کار می کند، اما تمام عملکردهای یک IDE پایتون معمولی را ندارد.
اگرچه ورودی کاربر گاهی اوقات مهم است، اما برای اسکریپتهای پردازش جغرافیایی، این ورودیها معمولاً شامل مقادیری نیستند که کاربر تایپ میکند. در عوض، ورودی های کاربر شامل مواردی مانند کلاس های ویژگی ورودی و پارامترهای ابزار است.
4.26مدیریت فایل
بسیاری از کارها نیاز به کار با پوشه ها و فایل ها دارند. چندین ماژول داخلی در پایتون برای تسهیل این کارها وجود دارد. مهمترین آنها این استسیستم عاملماژول که شامل چندین عملکرد مرتبط با سیستم عامل است.
یک تابع متداول استفاده شده استos.mkdir()تابع، که یک پوشه جدید ایجاد می کند که به آن دایرکتوری نیز می گویند. مثال زیر یک پوشه جدید در پوشه کاری فعلی ایجاد می کند:
واردات سیستم عامل
os.mkdir (“تست”)
همانطور که در بخش قبلی بحث شد، برای استفاده از یک ماژول، ابتدا باید آن را وارد کرد. سپس می توانید تابع را با استفاده از<module>.<function>نحو.
به طور پیش فرض، دایرکتوری کاری فعلی پوشه ای است که اسکریپت در آن ذخیره می شود. همچنین می توانید با مشخص کردن مسیر کامل، یک پوشه در مکان دیگری ایجاد کنید:
واردات سیستم عامل
os.mkdir(“C:/Data/testing”)
فرض ضمنی در اینجا این است که C:\Data از قبل وجود دارد.
به جای نوشتن مسیرهای کامل، ترکیب عناصر مختلف در یک مسیر معمول است. به عنوان مثال متغیری را در نظر بگیرید که حاوی دایرکتوری کاری است که با اسکریپت شما متفاوت است و میخواهید یک یا چند دایرکتوری در داخل این دایرکتوری کاری ایجاد کنید. شما می توانید مسیر کامل را با استفاده ازos.path.join()عملکرد:
واردات سیستم عامل
پوشه = “C:/Projects/Demo”
زیر پوشه = “test1”
newpath = os.path.join(پوشه، زیرپوشه)
os.mkdir (مسیر جدید)
توجه داشته باشید که در این مثال،مسیر osیک زیر ماژول از استسیستم عاملماژول، وپیوستن()تابعی ازمسیر osمدول. درos.path.join()تابع دو رشته را به یک رشته جدید متصل می کند و اطمینان حاصل می کند که بک اسلش صحیح بین دو رشته قرار داده شده است. شما می توانید این مسیر را با استفاده از الحاق رشته های منظم به صورت زیر ایجاد کنید:
newpath = پوشه + “/” + زیرپوشه
با این حال، بررسی اینکه کدام بک اسلش و چه تعداد باید شامل شود تا یک مسیر معتبر ایجاد شود، دشوار است، بنابراین استفاده ازos.path.join()هنگام ایجاد مسیرها توصیه می شود.
شما می توانید لیستی از فایل ها را در یک پوشه با استفاده ازos.listdir()عملکرد. این تابع لیستی از نام فایل ها را برمی گرداند. مثال زیر نام همه فایلها را در یک پوشه مشخص چاپ میکند:
واردات سیستم عامل
پوشه = “C:/Projects/Demo”
files = os.listdir (پوشه)
برای f در فایل ها:
چاپ()
یک سناریوی رایج این است که به دنبال فایل هایی با پسوند فایل خاص بگردید. می توانید از روش رشته استفاده کنیدبه پایان می رسد با()برای بررسی پسوند فایل نام هر فایل. این روش به حروف کوچک و بزرگ حساس است، به این معنی که ابتدا باید نام فایل ها را با استفاده از حروف کوچک به حروف کوچک تبدیل کنیدپایین تر ()روش. مثال زیر نام همه فایلها را در یک پوشه مشخص با پسوند فایل .gif یا .GIF چاپ میکند:
واردات سیستم عامل
پوشه = “C:/Demo”
files = os.listdir (پوشه)
برای f در فایل ها:
اگر f.lower().endswith(.gif”):
چاپ (f)
علاوه بر نشان دادن استفاده ازسیستم عاملماژول، این مثال همچنین استفاده از a را نشان می دهدبرایحلقه برای تکرار روی یک لیست و استفاده از anاگربیانیه برای بررسی یک شرط توجه داشته باشید که اگر هیچ فایل GIF در پوشه وجود نداشته باشد، اسکریپت چیزی را چاپ نمی کند.
چند مشاهدات دیگر در دستور کار است. اولین،os.listdir()لیستی از رشته ها را برمی گرداند، بنابراین متغیرفایل هایک لیست است آبرایحلقه برای تکرار روی لیست استفاده می شود. هر عنصر لیست یک رشته است، بنابراین متغیرfیک رشته است درپایین تر ()متد یک رشته با حروف کوچک برمی گرداند، بنابراینگل()همچنین یک رشته است. در نهایت،به پایان می رسد با()متد بسته به اینکه رشته به پسوند خاصی ختم شود، یک Boolean برمی گرداند. این نتیجه امکان استفاده مستقیم از آن را در شرایط فراهم می کند.
کاربردهای بسیار دیگری نیز از آن وجود داردسیستم عاملمدول؛ فصول بعدی برخی از آنها را پوشش می دهد. مثلا،os.path.exists()برای تعیین اینکه آیا یک پوشه فایل خاص از قبل وجود دارد یا خیر استفاده می شودos.walk()برای پیمایش در میان تمام پوشه ها، زیر پوشه ها و نام فایل های یک پوشه خاص استفاده می شود.
چندین ماژول دیگر برای کار با پوشه ها و فایل ها وجود دارد. آنها شاملکرهماژول (مخفف “جهانی”) برای جستجوی الگوهای نام فایل ها وshutilماژول (مخفف “sell utilities”) برای عملیات فایل مانند کپی، تغییر نام یا حذف.
4.27اسکریپت های نظر دادن
اسکریپت های توسعه یافته حاوی نظراتی هستند که به کاربران در درک آنها کمک می کند. اسکریپت generatepointsfromlines.py را در نظر بگیرید که توسط ابزار پردازش جغرافیایی Generate Points Along Lines استفاده می شود. بخش اول نام اسکریپت، نویسنده و توضیح مختصری را ارائه می دهد. در این مورد، ابزار توسط کارکنان Esri نوشته شده است. قبل از کامنت ها علامت عدد (#، همچنین به عنوان “علامت هش” نامیده می شود. هنگامی که اسکریپت اجرا می شود، هر خطی که با علامت شروع می شود#نماد اجرا نمی شود در IDLE، رنگ پیش فرض برای نظرات قرمز است.
شرح
محتویات اسکریپتgenepointsfromlines.py در IDLE با نظرات در بالای اسکریپت.
توجه داشته باشید:اسکریپتgenepointsfromlines.py برای اهداف نمایش کمی از فایل اصلی در ArcGIS Pro اصلاح شده است.
استفاده از علامت عدد تنها راه برای نشان دادن اینکه یک خط یک نظر است نیست. گاهی اوقات علائم دو عددی (##) به جای آن استفاده می شود، اگرچه این نماد اغلب برای اظهار نظر موقت کد رزرو شده است تا بعداً از آن استفاده شود. اثر یکسان است: خطوط کدی که با یک یا چند علامت عددی شروع می شوند به عنوان بخشی از اسکریپت اجرا نمی شوند.
نظرات همچنین می تواند در همان خط پس از قطعات کد قرار داده شود. به عنوان مثال، نمونه ای از همان اسکریپتgenepointsfromlines.py را در نظر بگیرید. در نمونه نشان داده شده، یک خط کد با یک نظر در همان خط دنبال می شود. قبل از کامنت علامت عدد وجود دارد و با رنگ قرمز نشان داده می شود.
باز هم متن زیر علامت عدد اجرا نمی شود، اما کد قبل از آن در همان خط اجرا می شود.
گاهی اوقات نظر شما به چندین خط نیاز دارد. برخلاف سایر زبان ها، پایتون راهی برای نوشتن نظرات چند خطی ندارد. به مثال زیر توجه کنید:
# این یک نظر است،
اما این نیست
خط اول نادیده گرفته می شود و به عنوان یک نظر خوانده می شود، اما خط دوم به عنوان کد خوانده می شود و منجر به خطا می شود. بنابراین شما باید هر خط نظر را با علامت # شروع کنید، به شرح زیر:
# این یک نظر است،
# و همینطور است.
یک جایگزین این است که از یک رشته چند خطی با قرار دادن نظرات در داخل یک جفت گیومه سه گانه استفاده کنید که به آن «نقل سه گانه» نیز گفته می شود:
“””
این یک رشته چند خطی است،
که از نظر فنی یک نظر نیست،
اما به طور گسترده استفاده می شود.
“””
نقل قول های سه گانه به این معنی است که مقدار داخل یک رشته است. چون به متغیری اختصاص داده نمی شود، در هیچ کجای اسکریپت استفاده نمی شود. در زمان اجرا هیچ کاری انجام نمی دهد و به طور موثر به عنوان یک نظر عمل می کند. با این حال، نقلقولهای سهگانه نیز برای رشتههای مستند استفاده میشوند، که مستنداتی را برای مواردی مانند توابع و کلاسها به طور مستقیم در اسکریپت ارائه میکنند. از آنجایی که از نقل قول های سه گانه برای رشته های مستند استفاده می شود، استفاده از آنها برای نظرات توصیه نمی شود.
نظرات برای ارائه توضیحات عمومی از نویسنده اسکریپت و نحوه عملکرد آن و همچنین هرگونه جزئیات مرتبط در مورد عناصر کد خاص استفاده می شود. نظر دادن به دیگران کمک می کند تا بفهمند اسکریپت چگونه کار می کند، و همچنین می تواند به کدنویس اصلی کمک کند تا به یاد بیاورد که کد چگونه و چرا ایجاد شده است.
برای اینکه یک اسکریپت به درستی کار کند نیازی به اظهار نظر نیست. با این حال، استفاده از نظرات تمرین کدنویسی خوبی است – هم به عنوان خدمتی برای دیگرانی که از اسکریپت استفاده می کنند و هم به عنوان یادآوری به خودتان از نحوه کارکرد کد. حداقل، هر اسکریپت باید شامل یک بخش عنوان باشد که توضیح دهد اسکریپت چه کاری انجام می دهد، چه کسی و چه زمانی آن را ایجاد کرده است، و چه الزاماتی برای اجرای اسکریپت وجود دارد.
علاوه بر نظرات، می توانید از خطوط خالی برای سازماندهی کد استفاده کنید. از نظر فنی، خطوط خالی در اسکریپت پایتون هنگام اجرا نادیده گرفته میشوند، اما خواندن کد را آسانتر میکنند. معمولاً از خطوط خالی برای نگه داشتن خطوط کد مرتبط و جدا کردن آنها از سایر بخش ها استفاده می شود. مانند کامنتها، خطوط خالی برای درست کار کردن یک اسکریپت لازم نیست، اما خواندن کد را آسانتر میکنند.
4.28پیروی از دستورالعمل های کدنویسی
پایتون استانداردهای برنامه نویسی خاصی را اعمال می کند و کدهایی که این استانداردها را برآورده نمی کنند باعث ایجاد خطا می شوند. علاوه بر این، دستورالعملهای کدنویسی میتوانند به شما کمک کنند تا مطمئن شوید کد شما نه تنها بدون خطا، بلکه کارآمد، قابل حمل و آسان است. این دستورالعملها در راهنمای سبک برای کد پایتون، که با نام PEP 8 نیز شناخته میشود، رسمیت یافته است.
در زیر چندین دستورالعمل کدنویسی برای موضوعاتی که تاکنون پوشش داده شده است، ارائه شده است. این دستورالعمل ها منعکس کننده PEP 8 و همچنین ملاحظات دیگر است. همانطور که در مورد Python بیشتر می آموزید و شروع به نوشتن اسکریپت های خود می کنید، ایده خوبی است که با راهنمای سبک کامل که در آدرسhttps://www.python.org/dev/peps/pep-0008. برخی از نکات دنبال می شود.
نام متغیرها
- با یک کاراکتر شروع کنید و از استفاده از کاراکترهای خاص مانند ستاره (*) خودداری کنید.
- از همه حروف کوچک مانند mycount استفاده کنید.
- زیرخط (_) را می توان در صورتی استفاده کرد که خوانایی را بهبود بخشد، مانند count_final.
- از نام متغیرهای توصیفی استفاده کنید و از استفاده از اصطلاحات یا اختصارات عامیانه خودداری کنید.
- نام متغیرها را کوتاه نگه دارید.
توجه داشته باشید:معمولاً نام متغیرهایی را می بینیم که از چند کلمه تشکیل شده اند، که در آنها حرف اول هر کلمه بزرگ می شود، به جز اولین کلمه – برای مثال،myIntegerVariable. این به عنوان “Camel Case” یا “CamelCase” نامیده می شود. اگرچه این سبک در حال استفاده گسترده است، اما از راهنمای سبک برای کد پایتون پیروی نمی کند و توصیه نمی شود.
نام های اسکریپت
- نامهای اسکریپت باید از دستورالعملهای نامگذاری متغیرهای قبلی پیروی کنند – یعنی از همه حروف کوچک استفاده کنند و از زیرخط برای بهبود خوانایی استفاده کنند.
توجه داشته باشید:اگرچه نام اسکریپت پایتون ممکن است حرف اول هر کلمه را با حروف بزرگ نوشته شود، اما از راهنمای سبک برای کد پایتون پیروی نمی کند و توصیه نمی شود.
تورفتگی
- استفاده از یک زبانه برای تعریف هر سطح تورفتگی توصیه می شود.
- هرگز زبانه ها و فاصله ها را برای تورفتگی با هم مخلوط نکنید.
نظرات
- اسکریپت ها باید حاوی نظرات کافی باشند. هر بخش منطقی باید توضیحی داشته باشد.
- هر اسکریپت باید یک هدر داشته باشد که حاوی نام اسکریپت، توضیحی در مورد نحوه عملکرد اسکریپت، الزامات آن، چه کسی آن را نوشته و چه زمانی نوشته شده باشد.
مهم است بدانید که پیروی از دستورالعملهای پایتون الزامی نیست – یعنی اگر از دستورالعملها خارج شوید، لزوماً منجر به خطا نمیشود. با این حال، پیروی از دستورالعمل ها، سازگاری و خوانایی کد شما را بهبود می بخشد.
نکاتی که باید به خاطر بسپارید
این فصل شما را با اصول زبان پایتون آشنا می کند. چیزهای بیشتری برای یادگیری در مورد پایتون وجود دارد، اما این اصول به شما امکان می دهد نوشتن اسکریپت های پردازش جغرافیایی را شروع کنید. چند نکته در مورد پایتون به خاطر داشته باشید:
- اصول پایتون شامل انواع داده ها و ساختارهای داده، متغیرها، کلمات کلیدی، عبارات و عبارات، روش ها، توابع و ماژول ها است. این عناصر سینتکس اولیه برای نوشتن کد در پایتون را تشکیل می دهند. پایتون یک زبان برنامه نویسی شی گرا است. هر شی دارای یک ارزش، یک هویت و یک نوع است.
- سینتکس پایتون در بیشتر موارد به حروف بزرگ و کوچک حساس است.
- انواع داده ها در پایتون شامل اعداد (اعداد صحیح و شناور)، رشته ها، لیست ها، تاپل ها، دیکشنری ها، مجموعه ها و بولی ها هستند.
- از متغیرها برای ذخیره مقادیر استفاده می شود. نام متغیرها باید همه با حروف کوچک باشد و فقط شامل کاراکترها، اعداد و زیرخط (_) باشد. با استفاده از دستور انتساب به متغیرها مقدار داده می شود.
- خطوط منفرد پایتون معمولاً از عباراتی تشکیل شدهاند که یک مقدار یا مقادیر یا عباراتی را نشان میدهند که کاری را انجام میدهند.
- پایتون حاوی چندین توابع داخلی است که می توان با استفاده از فراخوانی تابع از آنها استفاده کرد. برای استفاده از تابعی که یکی از توابع داخلی نیست، ابتدا باید ماژولی که بخشی از آن است را وارد کنید و سپس تابع را با استفاده از آن فراخوانی کنید.<module>.<function>.
- رشتهها را میتوان با استفاده از روشهای داخلی پایتون برای اشیاء رشته دستکاری کرد، از جمله یافتن زیررشتههای خاص، اتصال رشتهها به یکدیگر، تقسیم رشتهها توسط جداکننده، حذف کاراکترها از ابتدا و انتهای یک رشته، تبدیل حروف یک رشته و موارد دیگر.
- لیست ها یک نوع داده همه کاره پایتون هستند. عناصر خاصی از یک لیست را می توان با استفاده از شماره شاخص عنصر که با صفر (0) شروع می شود به دست آورد – برای مثال،فهرست من[0]. چندین توابع و روش های داخلی پایتون برای دستکاری لیست ها وجود دارد. اینها شامل راه هایی برای مرتب کردن یک لیست، برش یک لیست به لیست های کوچکتر، حذف عناصر، الحاق عناصر، درج عناصر و موارد دیگر است.
- تاپل ها و دیکشنری ها ساختارهای داده مهمی در پایتون هستند. یک تاپل دنباله ای از عناصر است، درست مانند یک لیست، اما عناصر یک تاپل را نمی توان تغییر داد. یک فرهنگ لغت از جفت کلید و مقادیر مربوط به آنها تشکیل شده است. دیکشنری ها مانند جداول جستجو کار می کنند.
- گردش کار در اسکریپت های پایتون را می توان با استفاده از ساختارهای کنترل و حلقه کنترل کرد. این ساختارها از تورفتگی برای شناسایی بلوک های کد استفاده می کنند. تورفتگی بخشی از سینتکس پایتون است و اختیاری نیست.
- کار با مسیرها در پایتون مستلزم بررسی دقیق استفاده از بک اسلش است. گزینه های جایگزین استفاده از اسلش های رو به جلو (/)، دو اسلش به عقب (\\)، یا حروف الفبای رشته ای (افزودن حرف r قبل از یک رشته) است.
- خوانایی خطوط طولانی کدها را می توان با شکستن یک خط کد به چندین خط بهبود بخشید. ادامه خط را می توان با استفاده از بک اسلش انجام داد، در حالی که ادامه خط ضمنی به استفاده از پرانتز، براکت و پرانتز متکی است.
- افزودن نظرات به یک اسکریپت برای توضیح نحوه عملکرد یک اسکریپت بسیار توصیه می شود. خطوطی در یک اسکریپت که با # یا ## شروع میشوند، به عنوان کامنت در نظر گرفته میشوند و هنگام اجرای اسکریپت اجرا نمیشوند.
- راهنمای سبک برای کد پایتون شامل دستورالعمل های بسیاری برای نوشتن کد پایتون است. اگرچه لازم نیست، اما پیروی از دستورالعمل های کدنویسی، سازگاری و خوانایی کد شما را بهبود می بخشد.
شرایط کلیدی
- بحث و جدل
- وظیفه
- بک اسلش
- بلوک (کد)
- بولی
- بیان بولی
- منطق بولی
- عملگر بولی
- شاخه
- عملکرد داخلی
- فراخوانی (یک تابع)
- مورد شتر
- ریخته گری
- اظهار نظر
- عملگر مقایسه
- عبارت مرکب
- شرایط. شرط
- ساختار کنترل
- ساختار داده ها
- نوع داده
- فرهنگ لغت
- فهرست راهنما
- رشته مستندسازی
- علامت نقطه
- تکلیف پویا
- سیستم رمزگذاری
- شخصیت فرار
- شرایط خروج
- توان
- اصطلاح
- شناور
- تقسیم طبقه
- رشته f
- عملکرد
- تورفتگی آویزان
- تغییرناپذیر
- ادامه خط ضمنی
- تورفتگی
- فهرست مطالب
- نمایه سازی
- سیستم موقعیت یابی شاخص
- عدد صحیح
- مورد (یک فرهنگ لغت)
- قابل تکرار
- کلید (یک فرهنگ لغت)
- کلمه کلیدی
- ادامه خط
- فهرست
- تحت اللفظی
- جدول جست و جو
- حلقه
- حلقه زدن
- متغیر حلقه
- روش
- مدول
- مدول
- قابل تغییر
- هدف – شی
- برنامه نویسی شی گرا
- عملوند
- اپراتور
- بسته بندی
- پارامتر
- فیلد جایگزینی
- متغیر نگهبانی
- توالی
- تنظیم
- برش دادن
- مورد مار
- بیانیه
- رشته
- قالب بندی رشته
- رشته به معنای واقعی کلمه
- تقسیم واقعی
- سه تایی
- یونیکد
- ارزش (یک فرهنگ لغت)
- متغیر
- مشاهده شی
- فضای سفید
- زبان مبتنی بر صفر
سوالات را مرور کنید
- انواع داده های اصلی در پایتون چیست؟ کدام نوع داده توالی هستند؟ کدام نوع داده ها قابل تغییر هستند و کدام یک تغییر ناپذیرند؟
- تفاوت بین تقسیم واقعی و تقسیم طبقه را توضیح دهید.
- منظور از تخصیص پویا متغیرها را توضیح دهید.
- مثال هایی از نام متغیرهای خوب بیاورید و دلیل خوب بودن آنها را توضیح دهید.
- تفاوت بین یک عبارت و یک دستور در پایتون چیست؟ مثال بزن.
- استفاده از علامت نقل قول در پایتون را توضیح دهید.
- رشته های یونیکد چیست؟
- پنج تابع داخلی در پایتون را نام ببرید و مثالی از کاربرد هر کدام ارائه دهید.
- نقطه گذاری چیست؟
- استفاده از نمایه سازی رو به جلو و معکوس دنباله ها را شرح دهید. نمونه هایی را با استفاده از برش رشته ها و لیست ها ارائه دهید.
- سه روش از اشیاء رشته ای در پایتون را نام ببرید و مثالی از کاربرد هر یک ارائه دهید.
- برخی از شباهت ها و تفاوت های کلیدی بین لیست ها و تاپل ها در پایتون چیست؟
- استفاده از عبارات بولی برای ارزیابی یک شرط را شرح دهید.
- مراحل ایجاد فرهنگ لغت و افزودن موارد جدید به فرهنگ لغت را شرح دهید.
- چرا باید هنگام نوشتن مسیرها در پایتون از بک اسلش اجتناب شود؟
- نحوه پیاده سازی انشعاب در کد پایتون را شرح دهید.
- دستور مرکب در پایتون چیست؟
- دو ساختار اصلی حلقه در پایتون را شرح دهید.
- از کدام رویکردها می توان برای شکستن یک خط طولانی کد به چندین خط برای بهبود خوانایی استفاده کرد؟
- چرا باید نظرات را به اسکریپت های خود اضافه کنید؟
بدون دیدگاه