مقدمه ای بر پایتون
از آنجایی که پایتون به یکی از محبوبترین زبانهای پردازش داده دنیا تبدیل شده است و پیش بینی می شود تا چند صباحی دیگر جای R را به عنوان رایجترین زبان مورد استفاده در علم داده بگیرد، بر آن شدیم تا به صورت خلاصه این زبان بسیار ساده و کاربردی را برای علاقه مندان آموزش دهیم. مبنای اصلی این مجموعه مقالات هم آموزش رسمی گوگل خواهد بود که به دلیل خلاصه بودن آموزش و سادگی آن ، انتخاب شده است . البته کتاب آزاد آموزش پایتون هم برای شروع کار مناسب است.
برای اجرای کدهای پایتون ، توصیه می کنیم روال زیر را طی کنید :
- بارگیری و نصب توزیع معروف آناکوندا – که هم پایتون و هم تمام کتابخانه های لازم را درون خود دارد . البته می توانید از توزیع رایج Canopy هم استفاده کنید که همراه با نصب پایتون و کتابخانه های اصلی پردازش داده، محیط تعاملی و گرافیکی نوشتن برنامه های پایتون را هم به شما ارائه می دهد. اگر هم حجم این دو توزیع برایتان زیاد است و می خواهید با پایتون خالص کار کنید، از این آدرس استفاده کنید.
- بارگیری و نصب محیط برنامه نویسی رایگان PyCharm – شرکت Jetbrains که پیشرو در زمینه تولید محیط های برنامه نویسی حرفه ایست و برای تمام زبانهای اصلی برنامه نویسی محیط اختصاصی ارائه کرده است ، نرم افزاری دارد با نام Pycharm که نسخه رایگان آن برای شروع کار با پایتون، مناسب و برطرف کننده تمامی نیازهای شما خواهد بود.
- انجام تنظیمات لازم در پای چارم – یک پروژه جدید در پای چارم ایجاد کنید. درون پروژه در قسمت Project Explorer کلیک راست کرده و یک فایل پایتون ایجاد کنید. روی فایل پایتون کلیک کرده تا باز شود . حال می توانید تمام دستورات پایتون ارائه شده در این مقالات را در آن نوشته و اجرا کنید. البته قبل از اجرای برنامه، نواری زرد رنگ در بالای فایل نمایش داده خواهد شد که از شما می خواهد برای پروژه جاری یک مفسر پایتون انتخاب کنید . بر روی لینک داده شده در همان نوار کلیک کنید تا خود سیستم نسخه پایتونی که شما نصب کرده اید را شناسایی و انتخاب کند. در صورت عدم شناسایی نسخه پایتون، آدرس پایتون نصب شده را خودتان وارد کنید. حال کافیست برای اجرای فایل، بر روی آن کلیک راست کرده و گزینه Run را بزنید. می توانید این دستورات را در خط فرمان پایتون هم وارد کنید بدون اینکه نیاز به ایجاد پروژه و فایل داشته باشید . از منوی ابزار گزینه Python Console این امکان را در اختیار شما می گذارد .
آموزش منوها و امکانات پای چارم را ازین آدرس می توانید مرور کنید.
شروع کار
پایتون یک زبان مفسری و پویاست یعنی در آن نوع متغیرها و پارامترها و توابع یا ماژول ها در کد برنامه تعیین نمی شود و هر موقع که مقداری به متغیر ویا پارامتری نسبت داده شود نوع آن بطور خودکار تعیین میشود (پویایی زبان). این باعث می شود کد،کوتاه و انعطاف پذیرباشد. از طرفی برنامه های پایتون خط به خط اجرا می شوند و فرآیند کامپایل و پیش پردازش یک برنامه را نداریم . (زبانهای مفسری)
برای آشنا شدن با پایتون در اول کار، بهتر است مستقیم با خود کنسول پایتون کار کنیم . وارد خط فرمان سیستم خود شوید و تایپ کنید Python ( و یا در پای چارم از منوی ابزار گزینه کنسول پایتون را انتخاب کنید). با این کار، محیط تعاملی مفسر پایتون در اختیار شماست . در مثال زیر علامت <<< نشانگر خط فرمان پایتون است که دستورات جلوی آنرا دقیقا نوشته و کلید Enter را برای اجرای آن خط بزنید. نتیجه اجرای آن هم در خط زیر آن به شما نمایش داده می شود. برای خروج هم از ctrl+D در لینوکس و Ctrl+Z در ویندوز استفاده کنید.
همانطور که مشاهده می کنید کار با متغیرها و عملگرها در پایتون بسیار ساده است .کافیست متغیری را مقدار دهی کنید و کار با آنرا شروع کنید. اگر متغیری را تعریف نکرده باشید و قصد استفاده از آنرا داشته باشید با یک خطا و استثنا مواجه می شوید و کد شما اجرا نخواهد شد . پایتون مشابه بسیاری از زبانهای دیگر به کوچکی و بزرگی حروف حساس است بنابراین، A و a دو متغیر مختلفند.
انتهای هر دستور هم با انتهای خط مشخص می شود و مانند زبان سی و جاوا نیاز به گذاشتن سمی کالن نیست . توضیحات یک خطی با # شروع و در انتهای خط به پایان می رسند و توضیحات چند خطی هم مابین دو علامت “”” قرار می گیرند.
برنامه های پایتون
فایل های پایتون دارای پسوند “py.” هستند و ماژول نامیده می شوند.. در اینجا یک برنامه پایتون hello.py بسیار ساده را با هم می بینیم. برای اجرای این فایل در خط فرمان دستور python hello.py Alice را می نویسیم . در این دستور کلمه اول یعنی python مفسر پایتون را صدا می زند و دومین بخش هم نام فایلی است که باید مفسر آنرا اجرا کند که اگر در همان پوشه حاوی فایل نباشیم باید آدرس کامل فایل hello.py را جلوی python بنویسیم . بخش سوم این دستور هم ورودی ما به فایل hello.py است برای روشن شدن مساله فرض کنید برنامه ای نوشته اید که یک فایل را گرفته و آنرا حذف می کند. در این صورت، جلوی فایل پایتونی که برای حذف فایلها نوشته اید باید نام فایل مورد نظر برای حذف را وارد کنید. به این ورودی ها، پارامترها یا آرگومانهای خط فرمان می گوییم. برنامه های با ورودی خط فرمان به ندرت توسط شما استفاده خواهند شد و نگران این موضوع و کاربرد آن نباشید.
$ python ## Run the Python interpreter Python 2.7.9 (default, Dec 30 2014, 03:41:42) [GCC 4.1.2 20080704 (Red Hat 4.1.2-55)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> a = 6 ## set a variable in this interpreter session >>> a ## entering an expression prints its value ۶ >>> a + 2 ۸ >>> a = 'hi' ## 'a' can hold a string just as well >>> a 'hi' >>> len(a) ## call the len() function on a string ۲ >>> a + len(a) ## try something that doesn't work Traceback (most recent call last): File "", line 1, in TypeError: cannot concatenate 'str' and 'int' objects >>> a + str(len(a)) ## probably what you really wanted 'hi2' >>> foo ## try something else that doesn't work Traceback (most recent call last): File "", line 1, in NameError: name 'foo' is not defined >>> ^D ## type CTRL-d to exit (CTRL-z in Windows/DOS terminal)برای اجرای آن در پای چارم هم بعد از ایجاد آن در پروژه و نوشتن کدها، با کلیک راست روی فایل و انتخاب گزینه Run آنرا بدون پارامتر خط فرمان اجرا کنید. با این کار یک تنظیم اولیه برای اجرای این فایل ساخته می شود حالا کافیست از منوی Run گزینه Run Configuration را انتخاب کنید و در پنجره ظاهر شده، تنظیمات اجرای فایل hello.py را باز کرده و Alice را به عنوان ورودی خط فرمان این فایل وارد کنید و مجددا با روش فوق، فایل زیر را اجرا نمایید.
[cc_python] #!/usr/bin/env python # import modules used here -- sys is a very standard one import sys # Gather our code in a main() function def main(): print 'Hello there', sys.argv[1] # Command line args are in sys.argv[1], sys.argv[2] ... # sys.argv[0] is the script name itself and can be ignored # Standard boilerplate to call the main() function to begin # the program. if __name__ == '__main__': main() [/cc_python]ماژول های پایتون
به هر فایل پایتون یک ماژول نیز گفته می شود چون می توان از متغیر ها و توابع هر فایل با یک دستور import ساده در سایر فایل ها هم استفاده کرد(مشابه یک ماژول و کتابخانه) البته فایل ها و یا ماژول های پایتون را میتوان بصورت مستقل هم مشابه مثال بالایی اجرا کرد. در کد فوق، دستوراتی که در بالاترین سطح نوشته میشوند، یعنی دستوراتی که کم ترین تورفتگی را دارند و در این مثال از ابتدای یک خط شروع شده اند، با اجرای یک فایل پایتون و یا با import شدن آن در یک فایل دیگر، از بالا به پایین شروع به اجرا می کنند. اگر بعضی کدها را فقط برای حالتی که این فایل به صورت مستقل اجرا می شود و به عنوان کتابخانه به کار نمی رود نیاز دارید باید از دستور if استفاده کنید که در انتهای همین مثال از آن استفاده شده است.
توضیح اینکه اگر یک فایل بصورت مستقل اجرا شود ( مثلا با دستور python hello.py )، مفسر پایتون که وظیفه اجرای فایل را برعهده دارد یک متغیر سیستمی با نام “__name__” را به “__main__” بطور خودکار تنظیم می کند و سپس به اجرای فایل یا ماژول می پردازد. بنابراین کافیست با یک دستور شرطی بررسی کنیم که این متغیر مقدار __main__ را به خود گرفته است یا نه و کد لازم برای حالتی که فایل به صورت مستقیم اجرا می شود را درون این شرط می نویسیم . دقت کنید که کدهای سطح یک یا همان کدهای بدون تورفتگی، را با دقت به کار ببرید چون با هر ایمپورت این فایل، تمام آنها شروع به اجرا خواهند کرد!!
در پایتون لیست آرگون های ورودی که به فایل فرستاده میشه در لیست sys.argv نگهداری میشود و ما در برنامه میتوانیم از طریق این لیست به آرگومان های ورودی خط فرمان دسترسی داشته باشم.مثلا [sys.argv[1 اولین ورودی خط فرمان ما خواهد بود. sys.argv[0] هم خود نام برنامه و فایل اجرا شده است . اگر بخواهیم ببینیم که کاربر پارامتری به برنامه ارسال کرده است یا نه می توانیم از تابع معروف len(sys.argv) استفاده کنیم که اگر مقدار یک را برگرداند یعنی پارامتری ارسال نشده است و مقدار بیشتر از یک، نشانگر پارامتر های خط فرمان است . تابع len برای یافتن طول یک لیست، رشته ، مجموعه ، تاپل و مانند آن به کار می رود.
توابع
توابع در پایتون مانند این تعریف می شود:
# Defines a "repeat" function that takes 2 arguments. def repeat(s, exclaim): """ Returns the string 's' repeated 3 times. If exclaim is true, add exclamation marks. """ result = s + s + s # can also use "s * 3" which is faster (Why?) if exclaim: result = result + '!!!' return resultتابع در پایتون با کلمه “def” تعریف می شود و بعد از آن نام تابع نوشته می شود. سپس داخل پرانتز نام آرگومانهایی که قرار است بعنوان ورودی دریافت کند نوشته و تعیین می شود. دستورات داخل تابع یا همان بدنه تابع با تورفتگی نسبت به دستور def و همراستا با هم نوشته می شوند و انتهای تابع هم نتیجه بوسیله دستور return به برنامه و جایی که فرآخونی شده برگشت داده می شود.
تابع فوق یک رشته را گرفته و آنرا سه بار تکرار می کند؛ در حقیقت رشته خروجی را با چسباندن سه باره رشته ورودی بهم ایجاد می کند. اگر مقدار ورودی دوم تابع True (با حرف اول بزرگ ) باشد، سه علامت تعجب هم به انتهای رشته خروجی اضافه می کند.
توضیح اینکه عملگر + روی رشته ها عمل الصاق و چسباندن را انجام میدهد و عمل ضرب روی رشته، عمل تکرار . s*3 هم همان کار s+s+s را در کد بالا انجام می دهد و اجرای آن نسبت به عملگر جمع هم سریعتر است چون ابتدا طول کل رشته نهایی را محاسبه و بعد به جایگذاری رشته ها می پردازد اما عمل جمع مرحله به مرحله رشته نهایی را تولید می کند.
حوزه شناسایی متغیرها در تابع هم محلی است یعنی متغیر result فقط در داخل تابع برای مفسر شناخته شده است و در خارج از تابع، نمی توانیم از آن استفاده کنیم.نکته آخر هم در کد فوق استفاده از “”” در ابتدای تابع است که نقش مستند سازی تابع و بیان کارکرد و ماهیت ورودی های تابع را برعهده دارد و همانطور که قبلاً گفتیم معادل با توضیحات چندخطی است . در زیر فراخوانی تابع تکرار(repeat) در تابع اصلی برنامه نمایش داده شده است :
def main(): print repeat('Yay', False) ## YayYayYay print repeat('Woo Hoo', True) ## Woo HooWoo HooWoo Hoo!!!تورفتگی ها
یکی از ویژگی های پایتون این است که فضاهای خالی دستورات یا همان تورفتگی های اول دستورات برای مفسر و اجرا کننده پایتون بسیار مهم است و در روند اجرای دستورات تاثیر فراوان دارد.مثلا دستورات یک حلقه باید کمی جلوتر از خط for نوشته شوند و همه دستورات داخل حلقه در یک راستا باشند که همین در یک راستا بودن نشاندهنده این است که این دستورات متعلق به این حلقه است. به عنوان یک قاعده کلی تمام کدهای درون یک تابع باید در یک راستا باشند، تمام دستورات ذیل یک شرط باید در یک راستا باشند، تمام دستورات یک حلقه باید در یک راستا باشند و … . یعنی مفسر پایتون از روی تورفتگی ها متوجه میشود که یک دستور تمام شده است یا نه . البته میزان تورفتگی اهمیتی ندارد و می تواند یک فضای خالی باشد و یا ده فضای خالی . آنچه مهم است، همراستا بودن دستوراتی است که متعلق به یک دستور فوقانی هستند.
بررسی کد در زمان اجرا
همانطور که در بالا گفتیم پایتون فقط هنگام اجرای هر خط نوع متغیرها و نام آنها را چک میکند. مثال پایین در حالتی که name=’Guido’ باشد بدون هیچ خطایی اجرا می شود اما اگر مقداری متفاوت داشته باشد، خطای ان زمان اجرا اتفاق می افتد یعنی در لحظه اجرا میفهمد تابعی با نام repeeeet در برنامه وجود ندارد و یک اشتباه املایی پیش آمده است . البته این امر جزء ضعف های پایتون است چون در پروژه های بزرگ ریسک وجود خطا در برنامه به دلیل کامپایل نشدن کدها بسیار بالاست.
def main(): if name == 'Guido': print repeeeet(name) + '!!!' else: print repeat(name)نام گذاری متغیرها
همانطور که گفتیم نوع متغیرها و توابع و پارامتر ها را در پایتون تعیین نمی کنیم و خود مفسر پایتون از روی مقدار آنها بهترین نوع را برایشان در نظر می گیرد بنابراین توصیه می کنیم که نام متغیر ها را طوری انتخاب کنید که مشخصه نوع آن هم باشد مثلا تمام متغیرهای صحیح را با i شروع کنید و تمام رشته را با s و مانند آن که خطایابی و بررسی کدها برای شما راحت تر شود. دقت کنید که شما نمی توانید از کلمات کلیدی خود پایتون برای نام گذاری متغیرهای خودتان استفاده بکنید.
در حالت کلی برای نوشتن استاندارد برنامه به زبان پایتون قواعدی تهیه شده است که کدها را بسیار خواناتر و حرفه ای تر می سازد برای مشاهده جزییات این استاندارد که به PEP8 معروف است به این آدرس مراجعه کنید.
ماژول ها و ایمپورت آنها
زمانی که شما یک ماژول را در ابتدای برنامه import می کنید مثلاً import sys می توانید از توابع توابع درون آن، فقط با ذکر نام تابع استفاده کنید و مفسر پایتون کد آن تابع را برای اجرا خواهد یافت. مثلا با نوشتن ایمپورت فوق، هر جای برنامه که بنویسیم ()exit پایتون می داند که باید ()sys.exit را اجرا کند. اگر از ایمپورت در ابتدای برنامه های خود استفاده نکنید، باید هنگام صدا زدن یک تابع، آدرس کامل آنرا بنویسید مثلاً ()sys.exit. در اینصورت مفسر پایتون می داند که تابع exit در کتابخانه یا ماژول sys که جزء کتابخانه های استاندارد پایتون است قرار گرفته است و به راحتی آنرا اجرا می کند.
نکته آخر هم اینکه اگر از یک ماژول فقط یک تابع را نیاز داشته باشید می توانید فقط همان تابع یا کلاس یا متغیر را ایمپورت کنید مثلا می توانید برای استفاده از تابع exit در ابتدای برنامه این قطعه کد را بنویسید from sys import exit . اگر بیش از یک تابع را با این روش می خواهید از یک ماژول استفاده کنید کافیست آنها را با ویرگول در انتهای این دستور از هم جدا کنید.
راهنمای فوری و دستور dir
در صورتی که عمکرد تابعی را فرآموش کرده باشید یا برایتان سوال پیش آمده باشد داخل فلان کتابخانه، چه چیزهایی وجود دارد و به عبارت دیگر هر جا که نیاز به راهنمایی داشته باشید، میتوانید از تابع help استفاده کنید. به عنوان مثال :
- (help(len : مطالبی در مورد تابع len به ما میدهد.
- (help(sys : توضیحاتی کلی در مورد ماژول sys به ما میدهد. البته اول باید sys را ایمپورت کنید.
- dir(sys) : dir هم شبیه help است اما با این تفاوت که یک لیست سریع از نمادهای به کار رفته در ماژول مانند نام توابع و کلاسها را به ما می دهد.
- (help(sys.exit: مطالبی در مورد تابع exit از ماژول sys به ما می دهد. در این حالت نیاز به ایمپورت ماژول sys نداریم.
- (help(list : مطالبی در مورد متغیر list به ما ارائه می دهد.
- dir(list) : مطالبی را راجع به متغیر list به همراه توابعی که می توانیم روی آن صدا بزنیم و استفاده کنیم، نمایش داده می شود.
- (help(list.append : مطالبی در مورد تابع() append روی متغیر list به ما ارائه می دهد.
امیدواریم بخش اول این آموزش، برایتان مفید بوده باشد .
پی نوشت :
این ارائه پاورپوینت که نگاهی کلی بر پایتون و قابلیت های آن دارد، برای علاقه مندان مفید خواهد بود.
ممنون، خیلی خوب و کاربردیه 🙂
عاشق سایت و راهنمایی هاتون شدم
چون خیلی سردرگم بودم ولی اینجا راهنمایی های خوبی دادید.
بسیار ممنونم 🙂