shirin بدون دیدگاه

توابع پایتونی

توابع در واقع بخش مهمی در برنامه نویسی هستند که به شما کمک میکنند بسیار بهتر و راحت تر کدنویسی را انجام دهید.

توابع شامل قطعه کدهایی هستند که برای انجام کار خاصی نوشته شدند و قرار نیست شما برای استفاده از همین توابع بارها و بارها آنها را دوباره نویسی کنید، بلکه کافی است تا در برنامه خود آنها را اضافه نمایید و در بدنه برنامه صدایشان بزنید.

زبان پایتون مقدار زیادی توابع از پیش تعریف شده دارد که میشود در دل برنامه ها از آنها استفاده کرد.

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

خب جدول بالا لیست توابع از پیش ساخته شده را نشان میدهد، خیلی از این توابع را حتما میشناسیم، کاراییه بقیه را هم با یک سرچ ساده در اینترنت میشود پیدا کرد؛ و اما بحث مورد نظر ما در این بخش، اول از همه بهتر است که اجزای یک تابع را بشناسیم:

همانطور که میبینید توابع در پایتون با کلمه def  شروع میشوند و بعد از آن نام تابع قرار میگیرد و در نهایت داخل پرانتز کنار نام تابع، آرگومان ها و یا پارامتر ها قرار میگریند که با توجه به نیاز تابع میتوانند هرچندتایی باشند.

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

برای مثال تابع max()  را پیاده‌سازی میکنیم:

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

: (def maximum_numbers(my_list

max_num = 10    

: (for i in (my_list   

: (if (i>max_nu       

max_num = i           

return max_num      

 

ما در این تابع یک مقدار را بصورت پیش فرض برای متغییرمان در نظر گرفتیم و از یک حلقه for  برای پیمایش لیستمان و یک شرط if  برای مقایسه اعداد لیست با متغییرمان استفاده کردیم. روش کار به این شکل است که ابتدا حلقه for  به پیمایش لیست میپردازد و در هر خانه شرط if به بررسی مقادیر متغییر های i و max_num میپردازد و عدد بزرگتر درون متغییر max_num قرار میگیرد و در نهایت تابع مقدار نهایی همین متغییر را برمی گرداند. لطفا توجه کنید برای فراخوانی تابع در برنه اصلی برنامه در قسمت پارامتر ها لیست مورد نظرمان را جایگزین my_list میکنیم.

تابع pow()

این تابع دو پارامتر ورودی دارد و اولی را به توان دومی میرساند. برای پیاده‌سازی این تابع میتوان از روش زیر استفاده کرد:

 : (def power(x, y

: (if (x>=0 and y>=0    

(print (x**y        

return   

(power(2, 3

برای پیاده سازی این تابع از یک شرط if  استفاده کردیم تا مثبت بودن اعداد را بررسی کنیم و در نهایت با صدا زدن تابع در انتهای کد با پارامتر های دلخواه، تابع را اجرا میکنیم. دقت کنید که تابع را حتماً در بدنه اصلی برنامه صدا بزنید و اینکه نیازی نیست که کلمه def  را ابتدای نام تابع بنویسیم، فقط نام تابع و پارامترها کافی هستند اما دقت کنید که به تعدادی که پارامتر تعریف کرده اید، در فراخوانی هم به همان تعداد مشخص بکنید تا به جواب برسید.

 

لطفا به شکل دقت کنید، همانطور که میبینید فراخوانی تابع در حالت دو پارامتری به شکل زیر :

(power(2, 3

جواب 8 را برمیگرداند، اما اگر یک پارامتر دیگر اضافه کنیم با error  موجود در عکس مواجه میشویم که توضیح کاملا مشخصی دارد.

 

تابع sqrt() :

کار این تابع برگرداندن جذر عددی است که به عنوان پارامتر دریافت میکند. بهتر است بدانیم که خود تابع برای این کار از کتابخانه match  استفاده میکند، به این صورت:

import math

(math.sqrt(x

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

استفاده از کتابخانه ها

با import  کتابخانه مورد نظر را انتخاب میکنیم، تابعی که لازم داریم را فراخوانی میکنیم و پارامترها را مشخص میکنیم. در استفاده از import  وقتی کتابخانه یا ماژولی را import  میکنیم میتوانیم هرجای برنامه که لازم باشد از آن کتابخانه و یا ماژول استفاده کنیم به این طریق که نامشان را  تایپ کنیم و یک نقطه و در نهایت پارامترها را میگذاریم تا به جواب برسیم.

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

اما چطور امکان به کار گیری تابعی که پیاده سازی کرده ایم در برنامه های دیگر وجود دارد؟

باید تابع را با نام module  ذخیره کنیم و در برنامه هایمان آن ماژول را import  کنیم.

خب برای استفاده از ماژول ها یک روش این هست که تابعی که نوشتیم را به نام ماژولی که نیاز داریم ذخیره میکنیم با پسوند .py

بعد از آن در برنامه ای که نیاز داریم به آن تابع از این روش ها استفاده میکنیم:

روش اول

Import نام ماژول

Def name()

روش دوم

from module-name import def-name or *

Def-name()

شما میتونید در این روش از  نماد (*) استفاده کنید که با استفاده از این روش همه جاهایی که نام ماژول هست را import  میکنید

روش سوم

import module name

module name.defname()

یعنی میتوانید ماژول را صدا بزنید، سپس دوباره نام ماژول و بعد از آن یک () و بعد نام تابع و آرگومانی که مدنظر دارید.

فکر میکنم برای این شماره تا همین جا کافی باشد، همین مباحث را در  شماره های بعدی کامل‌تر میکنیم.

ممنون که با ما همراه بودید.

 

 

حسین شفیعیان بدون دیدگاه

آموزش پایتون [گام 4] ورودی و خروجی داده ها

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

بیشتر بدانید

حسین شفیعیان 2 دیدگاه

آموزش پایتون [گام 3] عملگر ها و دستورات شرطی

در سومین جلسه از دوره آموزشی پایتون بحث عملگر ها و دستورات شرطی رو برسی میکنیم.

از طریق عملگر ها در برنامه نویسی برای پردازش استفاده میشه ، مواردی مثل جمع ، ضرب ، تقسیم و … رو در ریاضی دبستان ( اگه یادتون باشه 🙂 ) خوندین

بیشتر بدانید

حسین شفیعیان بدون دیدگاه

آموزش پایتون [گام 2] متغییر چیست ؟

با قسمت دوم آموزش پایتون در خدمتتون هستم. تو این بحث در مورد متغییر ها در پایتون آشنا میشیم.

همچنین بعضی از دوستان پیشنهاد داده بودند پایتون 3 آموزش داده بشه و دیدم که حق دارن ! منابع آموزشی زیادی برای پایتون 2 هست و هر چند خیلی از برنامه های فعلی با پایتون 2 نوشته شده و داره استفاده میشه ولی مشخصا آینده از آن پایتون 3 هست. بنابراین پایه این دوره به پایتون ورژن 3 میره

بیشتر بدانید

حسین شفیعیان 2 دیدگاه

آموزش پایتون [گام ۱] مقدمات

سلام

من حسین شفیعیان هستم. در اولین فعالیتم (در قبیله گیک ها) دوره آموزشی مقدماتی پایتون رو تقدیمتون میکنم. احتمالا تا حالا در مورد پایتون زیاد شنیدید ، بهتره با هم شروعش کنیم 🙂

بیشتر بدانید

shirin بدون دیدگاه

ماجراهای من و پایتون قسمت ۲

در شماره قبل به نحوه آشناییِ من با برنامه نویسی و زبان پایتون اشاره شد، در این شماره تصمیم بر این شد تا راجع به زبان پایتون و  ویژگی های این زبان بنویسم امیدوارم مفید واقع شود.

بیشتر بدانید

منصور ابراهیمی بدون دیدگاه

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

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

 

همیشه یکی از مشکل های اساسی یه ادمین اتوماتیک کردن  task های سرور بوده فرض کنید من دوست دارم یه اسکریپت بنویسم که مدام چک کنه ببینه اگه سربار زیادی روی سرور هست یا CPU  سیستم fail شده به من email  بزنه و یا نه شروع کنه یه سری از سرویس هایی که پروسس زیادی و اشغال کردن تا زمان خاصی disable کنه تا من برسم شرکت برای این کار ابزارهای زیادی هست که رفته رفته باهم اون ها رو مطالعه میکنیم

معرفی کتابخانه Fabric

Fabric یک کتابخانه ساده برای ساده سازی وظایف مدیریت سیستم است،در حالی که chef و Puppet روی مدیریت سرورها و کتابخانه های سیستم تمرکزدارن،فابریک بیشتر در سطح برنامه کار میکند.و بهتره بگم رایج ترین روش استفاده از Fabric استفاده از Command-line هست،با این کتابخانه شما میتونید دستورات خودتون رو به صورت اتوماتیک درSSH هم نیز اجرا کنید.

برای نصب کردن این کتابخانه میتونید با دستور زیر اون رو نصب کنید. نکته پکیچ کنیجر Pip رو باید نصب کرده باشین

اگر به قطعه کد پایین دقت کنید این کد دو task می بینید ، ما میتونیم از memory_usage و deploy استفاده کنیم (شما هر اسم دیگه ای رو میتونید استفاده کنید) که اولی میزان استفاده از مموری هر ماشین رو نشون میده و دومی به سروری که معرفی کنید SSH میزنه و با CD وارد پوشه پروژه شده و VEN رو فعال میکنه و کد های جدید یا کدهایی که درآن ها تغیری ایجاد شده را به گیتاهاب میفرسته،و application server رو ریستارت میکنه

اگر فایل رو به اسم fabfile.py ذخیره کنید با دستور زیر میتونید میزان مصرف مموری تون رو ببینید.

به یه مثال دیگه دقت کنید :

برای اجرا کردن این فایل میتونید با دستورات ترکیبی بخش های مختلف اسکریپت رو run کنید

. نکته مهمی که هست هر دوی این دستورات به ترتیب روی هر دو سرور اجرا میشود.

  • taskAexecuted on host1
  • taskAexecuted on host2
  • taskBexecuted on host1
  • taskBexecuted on host2

منتظر آموزش های بعدی باشید ولی زیاد قول نمیدم 🙂

Drcain بدون دیدگاه

پایتونی بنویسیم!

Pythonic یعنی استفاده از ویژگی های خوب این زبان، کد استایل پایتونی و هر چه که کد مورد نظر را ساده تر و زیبا تر کند.
احتمالا با استاندارد pep 8 نیز آشنا باشید که اگر از pycharm استفاده کنید خیلی راحت امکان مرتب کردن فراهم است و کار با آن واضح است ولی در صورت نیاز میتوانید مانند تصویر زیر

1

نصب کنید و با استفاده از دستور pep8 test.py دیباگ کنید. راه دیگر نیز نصب autopep8 است که به صورت خودکار کد شما را عوض میکند.
Zen of python نوشته Tim Peters نیز اصولی از پایتونی نوشتن را مشخص می نماید!

2

مشخص است که هر چه زیباتر، خوانا تر، ساده تر و کاراتر باشد کد بهتری خواهیم داشت!
مثال واضح تر این است که شما مثلا با جاوا، سی و زبان های مختلفی آشنا باشید و معمولا یک اصولی را همه دنبال می کنند و در پایتون هم همین است به فرض میخواهید یک تابع حلقه کلاس و … بسازید کاملا مسیر مشخصی دارد کد شما هم اجرا میشود مشکل گرامری هم ندارد ولی میتوان پایتونی تر نوشت! تمیز تر کوتاه تر و …
قطعا تجربه کسی که سال ها کد مینویسد با برنامه نویسی مشخص می شود بنابراین راهکار مناسب برای حرفه ای شدن مطالعه متن کد های مختلف و تمرین است که قطعا موثر خواهد بود.
حال به سراغ مثال های کاربردی میرویم!

جفت این ۲ کد به دنبال حل یک مسئله می باشند! ولی خواندن کد دومی برا توسعه دهنده با یک نگاه روشن است!
(اگر با کد اولی خیلی ناآشنا هستید، *args ابتدا بیان می کند که ورودی به تعداد لازم بگیر و در نهایت هم یک دیکشنری از namespace ها میسازد و مابقی کد هم که واضح است)

در بعضی شرایط کد را فقط طولانی تر می کنیم در صورتی که ضرورتی ندارد.
جالب توجه است که خروجی تابع بالا با ورودی ۲ تقریبا ۰٫۰۰۵۷۵۵۰۵ ثانیه طول می کشد و با استفاده از لامبدا ۰٫۰۰۲۵۴۲۵ !
(میتوانید شما هم با استفاده از import time و تابع time.clock() آزمایش خودتان را طراحی کنید!)

کد اولی واقعا نامطلوب است چرا که سعی کرده پیچیده تر به نظر آید. شاید کوتاه تر شده است ولی یک قانون کلی در آن رعایت نشده است و آن این است که هرجمله در یک سطر نوشته شود اگر سعی بر کوتاه تر کردن داریم باید از ویژگی های برنامه با الگوریتم کارا تر استفاده شود.

نکته ی دیگر، زبان را خوب بشناسیم به مثال زیر دقت کنید:

در نگاه اول برای یک برنامه نویس کلاسیک که شروع به یادگیری پایتون کرده، شاید خیلی عجیب باشد در صورتی که کد نوشتن با این زبان خیلی شیرین تر و جذاب تر از آنچه فکر مینمایید است! 

@DrCain
[email protected]

Drcain بدون دیدگاه

پایتون با تفکر امنیتی_(۲)

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

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

یا مثلا فرض کنید شما ۴ هسته دارید و میخواهید به صورت موازی پردازش کنید در بعضی مواقع این کار سخت است ولی در این جا میتوان ۴*۲۵۶ تا پورت ها را تقسیم کرد و به ۴ هسته سپرد. به کد زیر دقت کنید:

خروجی کد اول روی localhost، ۱۰۲۲,۹۳۹  ثانیه طول می کشد و کد دوم نیز ۲۵۷٫۳۸۰۷۰۹۵۳۲ یعنی تقریبا ¼ برابر شده کاملا منطقی است.
نکته ی قابل توجه که ماژول multiprocessing در python idle با مشکل کار میکند و به کامنت بالا نیز توجه کنید که منظور از زامبی یک پردازش این است که منبع (پردازشگر) میگیرد که بلااستفاده خواهد بود و در این صورت فقط به شکل دستی به اصلاح kill می شود (از بین می رود).