سفارش تبلیغ
صبا ویژن

آموزش سینتکس پایه پایتون

?

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

 

ساختار نگارشی پایه پایتون (basic syntax)

زبان پایتون شباهت های زیادی به زبان های Perl، C و Java دارد. با این حال، تفاوت های اساسی هم بین این زبان ها وجود دارد.

 

اولین برنامه ی پایتون

برنامه نویسی خود را از روش های زیر انجام می دهیم.

 

برنامه نویسی با فراخوانی مفسر

آموزش پایتون : اگر مفسر را بدون ارسال یک فایل اسکریپت به آن به عنوان پارامتر، صدا بزنید با prompt (کادری حاوی دستورات) زیر مواجه خواهید شد:

$ python

Python 2.4.3 (#1, Nov 11 2010, 13:34:43)

[GCC 4.1.2 20080704 (Red Hat 4.1.2-48)] on linux2

Type "help", "copyright", "credits" or "license" for more information.

>>>

دستور زیر را وارد کنید و کلید Enter را فشار دهید:

print "Hello, Python!"

در صورت استفاده از نسخه ی جدید پایتون، می بایست همراه با دستور Print از () استفاده کنید، بدین صورت: print ("Hello, Python!");. در ویرایش این زبان، نتیجه ی زیر حاصل می شود:

"Hello, Python!"                                                                                          

 

شناسه ها در پایتون

شناسه یا identifier یک اسم است که به منظور شناسایی متغیر، تابع، کلاس، ماژول یا دیگر اشیا به آن ها تخصیص داده می شود. شناسه با یک حرف از A تا Z (یا a تا z) یا زیرخط (_) آغاز شده و به دنبال آن یک یا چند صفر، حرف، زیرخط و عدد قرار می گیرد. استفاده از علائم نگارشی همچون @، $ و % در شناسه مجاز نمی باشد. پایتون یک زبان حساس به کوچک و بزرگی حروف است. از این رو، دو واژه ی Manpower و manpower دو شناسه ی کاملا متفاوت از یکدیگر هستند. قوانین نام گذاری توابع، متغیرها و اشیا در زیر فهرست شده:

  1. اسم کلاس ها با حرف بزرگ آغاز می شود. دیگر شناسه ها با حرف کوچک شروع می شود.

  2. آغاز کردن یک شناسه با زیرخط (_)، بیانگر این است که آن شناسه private می باشد.

  3. آغاز کردن یک شناسه با دو زیرخط نشانگر strongly private بودن آن شناسه است.

  4. اگر شناسه ای با دو زیرخط پشت سرهم پایان یابد، در آن صورت شناسه ی مورد نظر اسم خاص language defined می باشد.

 

کلمات رزرو شده

لیست زیر کلمات رزرو شده ی زبان پایتون را نمایش می دهد. این کلمات را نمی توان به عنوان اسم متغیر، ثابت (constant) یا هر چیز دیگر استفاده کرد. لازم به ذکر است که تمامی کلیدواژه های پایتون تماما با حروف کوچک نوشته می شوند.

?

 

 

خطوط فاصله و تورفتگی

آموزش پایتون از {} برای مشخص کردن قطعه کدهای تعریف کلاس، تابع یا جریان کنترل داده (flow control در ارتباطات داده‌ای، کنترل جریان یک فرایند مدیریت نرخ انتقال بین دو گره برای جلوگیری از ارسال از طرف فرستنده سریع به دریافت کننده کند است. کنترل جریان مکانیزمی را برای دریافت کننده جهت کنترل سرعت انتقال فراهم می‌کند.) استفاده نمی کند. قطعه کدها با استفاده از تورفتگی مشخص می شوند. از این رو در استفاده از آن بایستی بسیار دقیق بود. مقدار فضای خالی در تورفتگی ها متغیر است، اما تمامی دستورات درون قطعه کد بایستی به یک اندازه توگذاشته شوند. مثال:

if True:

print "True"

else:

print "False"

اما قطعه کد زیر خطا می دهد:

if True:

print "Answer"

print "True"

else:

print "Answer"

print "False"

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

#!/usr/bin/python

import sys

try:

# open file stream

file = open(file_name, "w")

except IOError:

print "There was an error writing to", file_name

sys.exit()

print "Enter "", file_finish,

print "" When finished"

while file_text != file_finish:

file_text = raw_input("Enter text: ")

if file_text == file_finish:

# close the file

file.close

break

file.write(file_text)

file.write("\n")

file.close()

file_name = raw_input("Enter filename: ")

if len(file_name) == 0:

print "Next time please enter something"

sys.exit()

try:

file = open(file_name, "r")

except IOError:

print "There was an error reading file"

sys.exit()

file_text = file.read()

file.close()

print file_text

 

دستورهای چندخطی

آموزش پایتون : دستورات پایتون معمولا به خط جدید ختم می شوند (یک خط تمام شده و خط دیگری شروع می شود). کاراکتر (\) در انتهای خط نشانگر ادامه ی دستور مورد نظر در خط دیگر است. مثال:

total = item_one + \

item_two + \

item_three

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

days = ["Monday", "Tuesday", "Wednesday",

"Thursday", "Friday"]

 

علامت نقل قول یا کوتیشن در پایتون

می توان در پایتون از تک کوتیشن (")، دابل کوتیشن (") و سه کوتیشن با هم (""" یا " " ") استفاده کرد. مقداری که درون این علامت ها قرار می گیرد، یک رشته ی نوشتاری (string literal) را تشکیل می دهد. بایستی دقت داشت که یک رشته با یک نوع کوتیشن آغاز شده و با همان نوع نیز پایان می یابد. از """ یا " " " برای محصور کردن یک رشته که در چندین خط ادامه دارد استفاده می شود. تمامی نمونه های زیر مجاز و صحیح هستند:

word = "word"

sentence = "This is a sentence."

paragraph = """This is a paragraph. It is

made up of multiple lines and sentences."""

 

(توضیحات) Comment در پایتون

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

#!/usr/bin/python

# First comment

print "Hello, Python!" # second comment

 

خروجی کد بالا:

Hello, Python!

می توانید یک comment را درست بعد از یک دستور یا عبارت شروع کرد، بدین نحو:

name = "Madisetti" # This is again comment

می توانید چند خط را به صورت comment دربیاورید، بدین شکل:

# This is a comment.

# This is a comment, too.

# This is a comment, too.

# I said that already.

 

استفاده از خطوط تهی

خطی که چیزی به جز فضای خالی در آن بکار نرفته و احیانا دارای یک comment می باشد، درواقع یک خط تهی (blank space) محسوب می شود و مفسر پایتون آن را کاملا نادیده می گیرد. در یک session که برنامه نویس مستقیما با مفسر تعامل دارد، می بایست بین این دستور و دستور بعدی یک خط خالی فاصله بیاندازید.

 

منتظر کاربر بودن

خط زیر یک پنجره ی prompt حاوی دستور “Press the enter key to exit” نمایش می دهد و منتظر کاربر می ماند تا اقدامات لازم را انجام دهد:

#!/usr/bin/python

raw_input("\n\nPress the enter key to exit.")

در اینجا، دستور "\n\n" دو خط جدید ایجاد کرده، سپس خود خط را نمایش می دهد. پس از اینکه کاربر کلید Enter را فشار می دهد، برنامه پایان می یابد. با این روش می توان پنجره ی console را تا زمانی که کاربر کارش با برنامه تمام نشده، باز نگه داشت.

 

چندین دستور در یک خط

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

import sys; x = "foo"; sys.stdout.write(x + "\n")

 

مجموعه دستورات در پایتون

یک گروه از دستورات منفرد، که در مجموع یک قطعه کد مجزا را تشکیل می دهند در زبان پایتون به اصطلاح suite اطلاق می گردند. دستورات مرکب نظیر if، while، def و class نیازمند یک خط سرآیند (header line) و یک suiteهستند. خطوط سرآیند (header) با یک دستور (یک کلیدواژه) آغاز می شود و با یک دونقطه (:) به پایان می رسد، همچنین به دنبال آن یک یا چندین خط قرار می گیرد که suite (مجموعه دستور) را تشکیل می دهد. نمونه:

if expression :

suite

elif expression :

suite

else :

suite

 

آرگومان های خط فرمان (command-line arguments)

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

$ python -h

usage: python [option] ... [-c cmd | -m mod | file | -] [arg] ...

Options and arguments (and corresponding environment variables):

-c cmd : program passed in as string (terminates option list)

-d : debug output from parser (also PYTHONDEBUG=x)

-E : ignore environment variables (such as PYTHONPATH)

-h : print this help message and exit

[ etc. ]

آموزش پایتون ادامه دارد

?


آموزش افزونه نویسی برای پایتون با زبان C

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

به منظور نوشتن افزونه های اختصاصی جهت استفاده در اسکریپت های پایتون و اپلیکیشن های خود، لازم است به فایل های header پایتون دسترسی داشته باشید.در دستگاه هایی که سیستم عامل Unix بر روی آن نصب است، می بایست یک پکیج مختص توسعه دهنده (developer-specific) نظیر python2.5-dev را نصب نمایید.

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

آموزش Python : اولین نمونه از افزونه اختصاصی Python

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

  • فایل header با اسم و پسوند Python.h.
  • توابع C که می خواهید به عنوان interface و الگوی پیاده سازی ماژول اختصاصی خود در اختیار توسعه دهنده قرار دهید.
  • یک جدول که اسم توابع اختصاصی شما را به توابع C داخل افزونه (کتابخانه یا ماژول) نگاشت می کند (method mapping table).
  • یک تابع سازنده جهت مقداردهی اولیه و نمونه سازی از کلاس (initialization function).

فایل Python.h

لازم است فایل Python.h را داخل فایلی که کدهای C شما را دربرمی گیرد (source file) قید نمایید. بدین وسیله شما به توابع کتابخانه ای درون ساخته ی پایتون (internal Python API) که برای ادغام و معرفی ماژول مورد نظر در interpreter (hook کردن کد ماژول شما در مفسر) بکار می رود، دسترسی خواهید داشت. لازم است Python.h را قبل از هر فایل header مورد نیاز دیگری لحاظ نمایید. 

توابع C

اسم متد، نوع و تعداد پارامترهای ورودی (Signature) توابع اختصاصی شما و پیاده سازی آن، بایستی بر اساس یکی از الگوهای زیر انجام شود:

static PyObject *MyFunction( PyObject *self, PyObject *args );
static PyObject *MyFunctionWithKeywords(PyObject *self,
                                 PyObject *args,
                                 PyObject *kw);
static PyObject *MyFunctionWithNoArgs( PyObject *self );

هر یک از متدهای اعلان شده ی فوق، در خروجی خود یک آبجکت Python برمی گرداند. در پایتون مفهومی به نام تابع void (تابعی که خروجی ندارد یا مقداری را برنمی گرداند) وجود ندارد. اگر شما نمی خواهید که توابع مقدار خروجی داشته باشند، لازم است مقدار None را بازگردانی نمایید. header های پایتون یک macro (خط دستور) به نام Py_RETURN_NONE در خود به صورت از پیش تعریف شده دارند که این کار را انجام می دهند.

از آنجایی که اسم توابع C هیچگاه خارج از ماژول/افزونه قابل مشاهده و دسترسی نیستند، شما می توانید هر اسمی برای متدهای اختصاصی خود انتخاب کنید. لازم به ذکر است که این توابع با کلیدواژه ی static تعریف می شوند. اسم توابع C معمولا از ترکیبی از اسم ماژول و متد مورد نظر تشکیل می شود. در زیر نمونه ای را مشاهده می کنید:

static PyObject *module_func(PyObject *self, PyObject *args) {
   /* Do your stuff here. */
   Py_RETURN_NONE;
}

کد حاضر یک تابع Python به نام func را تعریف می کند که داخل افزونه ی module کپسوله سازی شده است. حال شما به این توابع C داخل جدول نگاشت متد (method table) Pointer و اشاره گر تعریف می کنید که در بخش بعدی کد برنامه ی شما انجام می شود. 

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

این جدول نگاشت متد (method table) یک آرایه ی ساده از structure های PyMethodDef است (PyMethodDef یک مدل برای تعریف متد است). این structure ساختاری مشابه زیر دارد:

struct PyMethodDef {
   char *ml_name;
   PyCFunction ml_meth;
   int ml_flags;
   char *ml_doc;
};

در زیر هر یک از اعضای این ساختار شرح داده اند:

  • فیلد ml_name : اسم تابع پایتون.
  • فیلد ml_meth : آدرس تابعی که هر یک از signature های نام برده در بخش قبلی را دارا می باشد.
  • فیلد ml_flags : این فیلد به مفسر پایتون اعلان می کند که فیلد دوم (ml_meth) کدام یک از signature های نام برده را اتخاذ می کند :
  1. این flag معمولا مقداری از METH_VARARGS دارد.
  2. اگر می خواهید آرگومان های کلیدواژه ای را در تابع تزریق نمایید، این flag می تواند OR بیتی با METH_KEYWORDS را شامل شود.
  3. این flag همچنین می تواند مقدار METH_NOARGS را داشته باشد، بدین معنی که هیچ پارامتری به تابع فرستاده نمی شود.
  • فیلد ml_doc : این docstring (رشته یا comment ای که توضیحی درباره ی کارایی تابع می دهد) تابع است. اگر برنامه نویس comment ای برای تابع تنظیم نکند، در آن صورت مقدار آن NULL خواهد بود.

این جدول بایستی با یک sentinel که از NULL و 0 برای اعضای مرتبط تشکیل شده، خاتمه یابد.

مثال :

برای متد اعلان شده در بالا، از جدول نگاشت تابع (method mapping table) زیر استفاده می کنیم:

static PyMethodDef module_methods[ ] = {
   { "func", (PyCFunction)module_func, METH_NOARGS, NULL },
   { NULL, NULL, 0, NULL }
};

آموزش زبان پایتون : تابع مقداردهی اولیه (initModule)

آخرین بخش ماژول یا افزونه ی اختصاصی شما بایستی تابع مقداردهنده ی اولیه (initialization function) را شامل شود. این تابع را مفسر پایتون زمانی که ماژول در حافظه بارگذاری می شود، فرامی خواند. لازم است اسم این تابع initModule انتخاب شود (Module اسم ماژول و init اسم خود تابع می باشد).

تابع مقداردهنده ی اولیه بایستی از کتابخانه که می نویسید export و خروجی گرفته شده باشد. header های Python با اعلان دستور PyMODINIT_FUNC امکان انجام این کار را در محیطی که اسکریپت ها در آن کامپایل می شوند را فراهم می آورد. کافی است به هنگام تعریف تابع مورد نظر از آن استفاده نمایید.

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

PyMODINIT_FUNC initModule() {
   Py_InitModule3(func, module_methods, "docstring...");
}

در زیر شرح هر یک از پارامترهای تابع Py_InitModule3 را به تفصیل مشاهده می کنید:

  • پارامتر func : تابعی است که قرار است export و به اصطلاح خروجی گرفته شود.
  • پارامتر module_methods : اسم جدول نگاشت تابع (mapping table) که در بالا به آن اشاره شد.
  • پارامتر docstring : این پارامتر همان رشته ی متنی و comment ای است که جهت ارائه ی توضیح درباره ی قابلیت تابع در افزونه ی اختصاصی درج می شود.

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

#include < python.h>
static PyObject *module_func(PyObject *self, PyObject *args) {
   /* Do your stuff here. */
   Py_RETURN_NONE;
}
static PyMethodDef module_methods[ ] = {
   { "func", (PyCFunction)module_func, METH_NOARGS, NULL },
   { NULL, NULL, 0, NULL }
};
PyMODINIT_FUNC initModule() {
   Py_InitModule3(func, module_methods, "docstring...");
}
< /python.h>

مثال :

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

#include < python.h>
static PyObject* helloworld(PyObject* self)
{
    return Py_BuildValue("s", "Hello, Python extensions!!");
}
static char helloworld_docs[ ] =
    "helloworld( ): Any message you want to put here!!\n"
static PyMethodDef helloworld_funcs[ ] = {
    {"helloworld", (PyCFunction)helloworld, 
     METH_NOARGS, helloworld_docs},
    {NULL}
};
void inithelloworld(void)
{
    Py_InitModule3("helloworld", helloworld_funcs,
                   "Extension module example!");
}
< /python.h>

دستور Py_BuildValue در مثال بالا، یک مقدار Python را build یا کامپایل می کند. کد مورد نظر را داخل فایل hello.c ذخیره نمایید. در زیر با نحوه ی کامپایل و نصب ماژول که از اسکریپت پایتون فراخوانی می شود، را خواهید آموخت.

کامپایل و نصب افزونه ها (build)

پکیج distutils توزیع و نصب ماژول های پایتون، خواه ماژول های اصلی و خالص خود پایوتن باشد خواه ماژول های اختصاصی و تنظیم شده توسط توسعه دهنده، را با روشی استاندارد بسیار آسان می سازد. ماژول ها در همان قالب اولیه (source form) توزیع شده و در اختیار برنامه نویس قرار می گیرد. برنامه نویس سپس ماژول مورد نظر را با فراخوانی اسکریپت نصب (setup script) به نام setup.py ، نصب می نماید.

جهت نصب ماژول ذکر شده در بالا، بایستی اسکریپت setup.py را آماده نموده و به روش زیر اجرا نمایید:

from distutils.core import setup, Extension
setup(name="helloworld", version="1.0",  \
      ext_modules=[Extension("helloworld", ["hello.c"])])

اکنون با فراخوانی دستور زیر، تمامی مراحل لازم نظیر کامپایل و آماده سازی (linking & compilation) کد را انجام دهید. کد زیر کلیه ی مراحل مورد نیاز کامپایل و لینک ماژول با کامپایلر، دستورات linker و flag های مناسب را انجام داده، متعاقبا خروجی (.dll) را در پوشه ی مربوطه جایگذاری (کپی) می کند.

$ python setup.py install

در سیستم های مبتنی بر Unix، لازم است این دستور را با حساب کاربری root اجرا نمایید تا امکان یا مجوز درج داده در پوشه ی site-packages را داشته باشید. در سیستم عامل ویندوز لازم به انجام این کار نیست.

 

با دیگر آموزش های ما در زمینه آموزش پایتون و دیگر زبان های برنامه نویسی همراه ما باشید...