قواعد زبان پایتون

از ویکی‌پدیا، دانشنامهٔ آزاد
پرش به: ناوبری، جستجو

مجموعه ی قوانین زبان [برنامه نویسی پایتون] مجموعهٔ قوانین هستند که می توان برنامه هایی قابل فهم برای ماشین به این زبان نوشت. در طراحی این زبان به شدت سعی شده است که به سادگی قابل فهم باشد؛ این به این مفهوم است که سعی شده است که مجموعه ی دستورات آن به نگارش دستورات در زبان انسان نزدیک باشد.

واژه های کلیدی[ویرایش]

واژه های کلیدی واژه هایی هستند که ساختار قواعد این زبان را مشخص می کنند. لذا نمی توان از آنها به عنوان نام متغیرها استفاده کرد. [۱][۲]

  • and
  • as
  • assert
  • break
  • class
  • continue
  • def
  • del
  • elif
  • else
  • except
  • exec (changed to a built-in function in 3.x)
  • False (added in 3.x)
  • finally
  • for
  • from
  • global
  • if
  • import
  • in
  • is
  • lambda
  • None (added in 3.x)
  • nonlocal (added in 3.x)
  • not
  • or
  • pass
  • print (changed to a built-in function in 3.x)
  • raise
  • return
  • True (added in 3.x)
  • try
  • while
  • with
  • yield

دندانه دار نوشتن الگو:به انگلیسی:Indentation[ویرایش]

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

void foo(int x)
{
    if (x == 0) {
        bar();
        baz();
    } else {
        qux(x);
        foo(x - 1);
    }
}

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

def foo(x):
    if x == 0:
        bar()
        baz()
    else:
        qux(x)
        foo(x - 1)

مشاهده می کنید که چگونه فاصله ی اضافی (معمولا یک tab) مشخص کننده ی بلوک های برنامه است. اگرچه استفاده از هردو فاصله و tab در نسخه های کنونی پایتون معمول است، استفاده همزمان از هردو آنها موجب سردرگومی و ایجاد اشتباهات ناآگاهانه می شود. لذا معمولا تنها از tab یا تنها از فاصله استفاده می شود.

نوع داده ها[ویرایش]

در پایتون، نوع داده ها به صورت دینامیک از روی مقداری که به متغیرها نسبت داده می شود تعیین می شود. در واقع هیج نوعی برای مغیری که مقداردهی نشده است، تعریف نمی شود. بلکه نوع متغیر مورد نظر توسط مقدار نسبت داده شده تعیین می شود. نوع داده ها در پایتون دارای اطلاعات ارجاع به نوع شیئی هستند که از آن ساخته شده اند. این ویژگی ها در جایگاه های مختلف در رفتار پایتون تاثیر می گذارد. به خاطر ویژگی دینامیک بود نوع داده ها در پایتون، تبدیل نوع متغیرها احتیاج به در قالب ریختن متغیرها (به انگلیسی: Casting) ندارد. به عنوان یک عدد موهومی در یک عدد صحیح بلند را ضرب کنید و پایتون به صورت خودکار نوع حاصل را تعیین می کند. اگرچه همیشه این امکان پذیر نیست! به عنوان مثال ضرب یک رشته در یک عدد معنی ندارد!

نوع های پایه[ویرایش]

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

= نوع های مجموعه ای[ویرایش]

نوع داده های مجموعه ای دارای دو دسته ی دارای ترتیب (به انگلیسی: sequences) و بدون ترتیب (نگاشت یا (به انگلیسی: mapping)) هستند. نوع داده های دارای ترتیب در بردارنده ی مقادیر هستند که به صورتی مرتب پشت سر هم قرار گرفته اند. نمونه ی این نوع داده ها لیست ها(آرایه های دینامیک)، توپل ها (به انگلیسی: tuples) و رشته ها هستند. اندیس گذاری در پایتون از 0 شروع می شود. این نوع داده ها می توانند (بجز رشته ها) می توانند نوع داده های مختلف غیریکسان را در بر گیرند. رشته ها و توپل ها تغییر ناپذیر هستند. در صورتی که لیست ها تغییر ناپذیر هستند. یعنی می توان آنها را "در جا" ویرایش(حذف عنصر، اضافه کردن عنصر، عوض کردن مقدار، مرتب سازی ...) کرد. نوع داده های بدون ترتیب معمولا به صورتی دیکشینری هستند. یعنی مجموعه ای تغییرناپذیر را به مجموعه ی از اشیا می نگارند. لذا در کل ترتیبی برای داده ها در نظر گرفته نمی شود. اشیایی که نگاشته می شوند (کلید ها یا (به انگلیسی: keys)) باید انوعی تغییرناپذیر باشند، مانند اعداد صحیح یا یک رشته. این مساله به خاطر آن است که در پشت صحنه، نگارش توسط یک تابع درهم سازی انجام می شود. تغییر ناپذیر باعث می شود عملیات در بازدهی زمانی/حافطه ای بهتری انجام شوند؛ اگرچه لازم است که مقدایر آنها ثابت بمانند. لذا چنین ساختاری "دیکشینری" نام دارد. نوع داده ی مشابه دیگر "مجموعه" (به انگلیسی: set) نام دارد که شامل تعداد شی بدون ترتتیب است که بدون تکرار هستند، درست مانند تعریف ریاضی مجموعه ها. لذا به راحتی می توان از آنها برای انجام عملیات مجموعه ای ماند اجتماع، اشتراک، تفاضل، تفاضل متقارن، زیر مجموعه گیری و غیره استفاده کرد.

ساختار شیئ گرایی[ویرایش]

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

قواعد اولیه نگارش[ویرایش]

رشته ها[ویرایش]

در پایتون ویرایش 3 به بعد می توان رشته ای را به صورت زیر چاپ کرد:

print("I just printed {0} pages to the printer {1}".format(num, printer))

در صورتی که در پایتون ویرایش 3 به قبل استفاده از پارانتز ها اجباری نبوده است.

چاپ رشته ای چند سطر[ویرایش]

نمونه ی زیر چگونگی این کار را نشان می دهد:

print("""Dear %(recipient)s,
 
I wish you to leave Sunnydale and never return.
 
Not Quite Love,
%(sender)s
""" % {'sender': 'Buffy the Vampire Slayer', 'recipient': 'Spike'})
# A Windows path, even raw strings cannot end in a backslash
r"C:\Foo\Bar\Baz\ ".rstrip()
 
# A regular expression matching a quoted string with possible backslash quoting
r'"([^"\\]|\\.)*"'
 
# Reverse the arguments in a two-arg function call, e.g. foo(2, bar) -> foo(bar, 2);
# will fail if either argument has parens or commas in it
re.sub(r'\(([^,]*?),([^,]*?)\)', r'(\2, \1)', code)

ادغام دو رشته[ویرایش]

می توان دو رشته را به صورت زیر ادغام کرد:

title = "One Good Turn: " \
        'A Natural History of the Screwdriver and the Screw'

که معادل است با عبارت زیر :

title = "One Good Turn: A Natural History of the Screwdriver and the Screw"

اعداد[ویرایش]

اعداد به فرمی عادی مشاله سایز زبان ها تعریف می شوند، همچون 0, -1, 3.4, 3.5e-8. پایتون دارای نوع داده صحیح با محدودهٔ یکسان هستند. تا قبل از نسخه ی 3 پایتون، تنها دو نوع عدد صحیح موجود بود، یکی اعداد صحیح عادی با طول ثابت، و اعداد صحیح با طول بلند ثابت. اینکه از کدام نوع عدد صحیح استفاده شود، به صورتی خوکار توسط پایتون انجام می شد. در ویرایش های جدید، این دو نوع متفاوت کاملا حذف شده اند. اعداد حقیقی (به انگلیسی: float) به صورت عادی تعریف می شوند. استفاده از این نوع زمانی انجام می شود که از علامت نفطه به عنوان ممیز اعشار استفاده شود، مانند 1.1 .

لیست ها، تاپل ها، مجموعه ها، دیکشینری ها[ویرایش]

همانطور که گفته شد، لیست ها دارای ساختار تغییر پذیر هستند. لیست ها در کلاس list تعریف می شوند. نمونه ای از تعریف یک لیست به صورت زیر است:

a_list = [1, 2, 3, "a dog"]

می توان لیست ها را همچون ایجاد یک شیئ از یک کلاس تعریف کرد:

a_second_list = list()
a_second_list.append(4)
a_second_list.append(5)

همانطور که گفته شد توپل ها tuple اعضایی تغییرناپذیر از پایتون هستند که در کلاس tuple تعریف می شوند.

a_tuple = 1, 2, 3, "four"

اگرچه در تعریف فوق توپل توسط کاما بین اعضای آن تعریف می شود، می توان با قرار دادن پرانتز بین اعضای آن تعریف آن را قابل فهم تر می کند. یک توپل تهی بصورت () معرفی می شود. مجموعه های نوع داده هایی قابل تغییر هستند که در کلاس set تعریف می شوند.

some_set = {0, (), False}

دیکشینری ها نوع داده هایی تغییرپذیر هستند که در کلاس dict تعریف می شوند. در پایتون اعضای یک دیکشینری به صورت زوج {key: value} تعریف می شود.

a_dictionary = {"key 1":"value 1", 2:3, 4:[]}

عملگرها[ویرایش]

عملگرهای محاسباتی[ویرایش]

عملگرهای محاسباتی شامل +, -, *, /, % (باقیمانده), **(توان) است. در استفاده از / برای تقسیم باید دقت کرد. به مثال زیر دقت کنید:

def mean(seq):
    return sum(seq) / len(seq)

فراخوانی mean([3.0, 4.0]) بر می گرداند. ممکن است mean([3, 4]) را فراخوانی کنید و خروجی 3 بگیرید که نتیجه ای عجیب است. دلیل این مساله این است که تقسیم اعداد بصورت صحیح انجام شده و لذا نتیجه عددی صحیح است. راه چاره این است که تیکه برنامه ی فوق را به صورات زیر تغییر دهیم:

def mean(seq):
    return float(sum(seq)) / len(seq)

در نسخه های بعدی پایتون عملگری به صورت // تعریف شده است که تنها تقسیم صحیح است.

عملگر های مقایسه ای[ویرایش]

عملگرهای مقایسه ای شامل ==, <, >= و غیره هستند. اعداد، رشته ها، لیست ها، دیکشینری های قابل مقایسه اند.

برنامه نویسی تابعی (به انگلیسی: Functional Programming)[ویرایش]

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

powers_of_two = [2**n for n in range(1, 6)]

به هنوان مثالی دیگر، برنامه ی زیر Quick-Sort را به کوتاه (اگرچه غیر بهینه) انجام می دهد:

def qsort(L):
    if L == []:
        return []
    pivot = L[0]
    return (qsort([x for x in L[1:] if x < pivot]) +
            [pivot] +
            qsort([x for x in L[1:] if x >= pivot]))

منابع[ویرایش]