تستطيع عند استخدام الدالة format ترقيم المدخلات حسب ترتيبها واستخدامها في تنسيق النص أكثر من مرة:
"{0} be nimble, {0} be quick, {0} jump over the {1}".format("Jack", "candle stick")
# => "Jack be nimble, Jack be quick, Jack jump over the candle stick"
أو باستخدام طريقة تسمية المدخلات:
"{name} wants to eat {food}".format(name="Bob", food="lasagna") # => "Bob wants to eat lasagna"
تستطيع في البايثون 3 استخدام الطريقة القديمة في بايثون 2 لعمل تنسيق للنصوص:
"%s can be %s the %s way" % ("Strings", "interpolated", "old") # => "Strings can be interpolated the old way"
None عبارة عن كائن:
None # => None
لا تستخدم فحص المساواة باستخدام رمز == للمقارنة مع None واستخدم عملية الفحص is بدلا منها:
"etc" is None # => False
None is None # => True
None والرقم 0 والمتغيرات الفارغة من الأنواع strings، lists، dict، وtuples جميعها تُرادف القيمة المنطقية False، أما باقي القيم فهي True:
# All other values are True
bool(0) # => False
bool("") # => False
bool([]) # => False
bool({}) # => False
bool(()) # => False
المتغيرات والتراكيب:
تتوفّردالة خاصة للطباعة (الإخراج على الطرفية) وتسمى print:
print("I'm Python. Nice to meet you!") # => I'm Python. Nice to meet you!
يُطبَع سطر جديد تلقائيا عند استخدام الدالة print. تستطيع استخدام المعطى end لتغيير هذا الأمر وتحديد النص الذي تريده بدلا من السطر الجديد:
print("Hello, World", end="!") # => Hello, World!
للحصول على مدخلات من الطرفية نستخدم الدالة input:
input_string_var = input("Enter some data: ") # Returns the data as a string
ملاحظة/ في النسخ القديمة من البايثون، كانت الدالة input باسم raw_input.
لا يوجد في البايثون تعريفات، ولكن يوجد إعطاء قيم مباشرة. الطريقة المتعارف عليها في تسمية المتغيرات هي الأحرف الصغيرة مع التسطير السفلي:
some_var = 5
some_var # => 5
محاولة استخدام متغير لم يأخذ قيمة مسبقاً ينتج عنه خطأ، راجع كيفية معالجة الأخطاء تحت عنوان جمل التحكم.
some_unknown_var # ينتُج خطأ من الصنف NameError
تشبه القوائم المصفوفات في اللغات الأخرى:
li = []
other_li = [4, 5, 6]
نستخدم append لإضافة عناصر في نهاية القائمة:
li.append(1) # li is now [1]
li.append(2) # li is now [1, 2]
li.append(4) # li is now [1, 2, 4]
li.append(3) # li is now [1, 2, 4, 3]
نستخدم الدالةpop لحذف العناصر من آخر القائمة. ترجع التعليمة أدناه القيمة 3 وتصبح مكونات القائمة [1, 2, 4]:
li.pop() # => 3 and li is now [1, 2, 4]
تعود القائمة إلى حالتها السابقة لتنفيذ الدالة pop بعد تنفيذ الدالة append على النحو التالي:
li.append(3) # li is now [1, 2, 4, 3] again.
تستطيع التعامل مع القائمة مثل المصفوفة من حيث الوصول لعناصرها:
li[0] # => 1
li[-1] # => 3
في حال استخدام فهرس خارج حدود القائمة سينتج خطأ من نوع IndexError:
li[4] # Raises an IndexError
تستطيع استخدام مجال للحصول على جزء أكبر من القائمة بحيث نحدد فهرس البداية وفهرس النهاية.
li[1:3] # => [2, 4]
ملاحظة: فهرس النهاية غير مشمول في القيمة المرجعة، حيث يعدّ النمط المستخدم هو نمط نطاق مغلق-مفتوح.
في حال عدم استخدام فهرس النهاية:
li[2:] # => [4, 3]
في حال عدم استخدام فهرس البداية:
li[:3] # => [1, 2, 4]
اختيار عنصر كل خطوتين ابتداء من العنصر الأول في القائمة:
li[::2] # =>[1, 4]
إرجاع كامل المصفوفة بطريقة عكسية:
li[::-1] # => [3, 4, 2, 1]
القاعدة العامة للاستعلامات السابقة في القوائم هي كالتالي(البداية start، النهاية end والخطوة step):
# li[start:end:step]
نسخ عميق (Deep Copy):
li2 = li[:] # => li2 = [1, 2, 4, 3]
عندما نفحص المساواة باستخدام عملية is كالتالي: (li2 is li) ستكون النتيجة False.
لحذف عنصر من القائمة:
del li[2] # li is now [1, 2, 3]
لحذف أول عنصر في القائمة يساوي القيمة المدخلة في الدالة remove:
li.remove(2) # li is now [1, 3]
li.remove(2) # ValueError لأن القيمة غير موجودة
إضافة عنصر في مكان معين في القائمة:
li.insert(1, 2) # li is now [1, 2, 3] again
الحصول على فهرس أول عنصر في القائمة يساوي القيمة المعطاة:
li.index(2) # => 1
li.index(4) # ValueError لأن القيمة غير موجودة
لإضافة قائمة لقائمة وإرجاع النتيجة كقائمة جديدة:
li + other_li # => [1, 2, 3, 4, 5, 6]
لتمديد قائمة وإضافة قائمة إليها:
li.extend(other_li) # Now li is [1, 2, 3, 4, 5, 6]
لفحص وجود قيمة في القائمة:
1 in li # => True
للحصول على حجم القائمة (عدد العناصر التي بها):
len(li) # => 6
نوع البيانات Tuple تشبه القائمة ولكنها غير قابلة للتعديل (ثابتة-immutable):
tup = (1, 2, 3)
tup[0] # => 1
tup[0] = 3 # Raises a TypeError
لاحظ أنه في حالة وجود عنصر واحد في tuple لابد من وضع فاصلة عادية بعد العنصر، أما في حالة وجود أكثر من عنصر فتصبح الفاصلة إضافية:
type((1)) # => <class 'int'>
type((1,)) # => <class 'tuple'>
type(()) # => <class 'tuple'>
تستطيع تنفيذ أغلب عمليات القوائم على النوع Tuple:
len(tup) # => 3
tup + (4, 5, 6) # => (1, 2, 3, 4, 5, 6)
tup[:2] # => (1, 2)
2 in tup # => True
تستطيع تفريغ (unpacking) محتويات Tuples وكذلك القوائم في متغيرات كما في الأمثلة التالية:
a, b, c = (1, 2, 3) # a = 1, b = 2, c = 3
a, *b, c = (1, 2, 3, 4) # a = 1, b = [2, 3], c = 4
عند عدم استخدام الأقواس فإن نوع البيانات التلقائي الذي سيتم استخدامه هو Tuple:
d, e, f = 4, 5, 6
تبديل قيم المتغيرات بطريقة سهلة:
e, d = d, e # d = 5, e = 4
"{0} be nimble, {0} be quick, {0} jump over the {1}".format("Jack", "candle stick")
# => "Jack be nimble, Jack be quick, Jack jump over the candle stick"
أو باستخدام طريقة تسمية المدخلات:
"{name} wants to eat {food}".format(name="Bob", food="lasagna") # => "Bob wants to eat lasagna"
تستطيع في البايثون 3 استخدام الطريقة القديمة في بايثون 2 لعمل تنسيق للنصوص:
"%s can be %s the %s way" % ("Strings", "interpolated", "old") # => "Strings can be interpolated the old way"
None عبارة عن كائن:
None # => None
لا تستخدم فحص المساواة باستخدام رمز == للمقارنة مع None واستخدم عملية الفحص is بدلا منها:
"etc" is None # => False
None is None # => True
None والرقم 0 والمتغيرات الفارغة من الأنواع strings، lists، dict، وtuples جميعها تُرادف القيمة المنطقية False، أما باقي القيم فهي True:
# All other values are True
bool(0) # => False
bool("") # => False
bool([]) # => False
bool({}) # => False
bool(()) # => False
المتغيرات والتراكيب:
تتوفّردالة خاصة للطباعة (الإخراج على الطرفية) وتسمى print:
print("I'm Python. Nice to meet you!") # => I'm Python. Nice to meet you!
يُطبَع سطر جديد تلقائيا عند استخدام الدالة print. تستطيع استخدام المعطى end لتغيير هذا الأمر وتحديد النص الذي تريده بدلا من السطر الجديد:
print("Hello, World", end="!") # => Hello, World!
للحصول على مدخلات من الطرفية نستخدم الدالة input:
input_string_var = input("Enter some data: ") # Returns the data as a string
ملاحظة/ في النسخ القديمة من البايثون، كانت الدالة input باسم raw_input.
لا يوجد في البايثون تعريفات، ولكن يوجد إعطاء قيم مباشرة. الطريقة المتعارف عليها في تسمية المتغيرات هي الأحرف الصغيرة مع التسطير السفلي:
some_var = 5
some_var # => 5
محاولة استخدام متغير لم يأخذ قيمة مسبقاً ينتج عنه خطأ، راجع كيفية معالجة الأخطاء تحت عنوان جمل التحكم.
some_unknown_var # ينتُج خطأ من الصنف NameError
تشبه القوائم المصفوفات في اللغات الأخرى:
li = []
other_li = [4, 5, 6]
نستخدم append لإضافة عناصر في نهاية القائمة:
li.append(1) # li is now [1]
li.append(2) # li is now [1, 2]
li.append(4) # li is now [1, 2, 4]
li.append(3) # li is now [1, 2, 4, 3]
نستخدم الدالةpop لحذف العناصر من آخر القائمة. ترجع التعليمة أدناه القيمة 3 وتصبح مكونات القائمة [1, 2, 4]:
li.pop() # => 3 and li is now [1, 2, 4]
تعود القائمة إلى حالتها السابقة لتنفيذ الدالة pop بعد تنفيذ الدالة append على النحو التالي:
li.append(3) # li is now [1, 2, 4, 3] again.
تستطيع التعامل مع القائمة مثل المصفوفة من حيث الوصول لعناصرها:
li[0] # => 1
li[-1] # => 3
في حال استخدام فهرس خارج حدود القائمة سينتج خطأ من نوع IndexError:
li[4] # Raises an IndexError
تستطيع استخدام مجال للحصول على جزء أكبر من القائمة بحيث نحدد فهرس البداية وفهرس النهاية.
li[1:3] # => [2, 4]
ملاحظة: فهرس النهاية غير مشمول في القيمة المرجعة، حيث يعدّ النمط المستخدم هو نمط نطاق مغلق-مفتوح.
في حال عدم استخدام فهرس النهاية:
li[2:] # => [4, 3]
في حال عدم استخدام فهرس البداية:
li[:3] # => [1, 2, 4]
اختيار عنصر كل خطوتين ابتداء من العنصر الأول في القائمة:
li[::2] # =>[1, 4]
إرجاع كامل المصفوفة بطريقة عكسية:
li[::-1] # => [3, 4, 2, 1]
القاعدة العامة للاستعلامات السابقة في القوائم هي كالتالي(البداية start، النهاية end والخطوة step):
# li[start:end:step]
نسخ عميق (Deep Copy):
li2 = li[:] # => li2 = [1, 2, 4, 3]
عندما نفحص المساواة باستخدام عملية is كالتالي: (li2 is li) ستكون النتيجة False.
لحذف عنصر من القائمة:
del li[2] # li is now [1, 2, 3]
لحذف أول عنصر في القائمة يساوي القيمة المدخلة في الدالة remove:
li.remove(2) # li is now [1, 3]
li.remove(2) # ValueError لأن القيمة غير موجودة
إضافة عنصر في مكان معين في القائمة:
li.insert(1, 2) # li is now [1, 2, 3] again
الحصول على فهرس أول عنصر في القائمة يساوي القيمة المعطاة:
li.index(2) # => 1
li.index(4) # ValueError لأن القيمة غير موجودة
لإضافة قائمة لقائمة وإرجاع النتيجة كقائمة جديدة:
li + other_li # => [1, 2, 3, 4, 5, 6]
لتمديد قائمة وإضافة قائمة إليها:
li.extend(other_li) # Now li is [1, 2, 3, 4, 5, 6]
لفحص وجود قيمة في القائمة:
1 in li # => True
للحصول على حجم القائمة (عدد العناصر التي بها):
len(li) # => 6
نوع البيانات Tuple تشبه القائمة ولكنها غير قابلة للتعديل (ثابتة-immutable):
tup = (1, 2, 3)
tup[0] # => 1
tup[0] = 3 # Raises a TypeError
لاحظ أنه في حالة وجود عنصر واحد في tuple لابد من وضع فاصلة عادية بعد العنصر، أما في حالة وجود أكثر من عنصر فتصبح الفاصلة إضافية:
type((1)) # => <class 'int'>
type((1,)) # => <class 'tuple'>
type(()) # => <class 'tuple'>
تستطيع تنفيذ أغلب عمليات القوائم على النوع Tuple:
len(tup) # => 3
tup + (4, 5, 6) # => (1, 2, 3, 4, 5, 6)
tup[:2] # => (1, 2)
2 in tup # => True
تستطيع تفريغ (unpacking) محتويات Tuples وكذلك القوائم في متغيرات كما في الأمثلة التالية:
a, b, c = (1, 2, 3) # a = 1, b = 2, c = 3
a, *b, c = (1, 2, 3, 4) # a = 1, b = [2, 3], c = 4
عند عدم استخدام الأقواس فإن نوع البيانات التلقائي الذي سيتم استخدامه هو Tuple:
d, e, f = 4, 5, 6
تبديل قيم المتغيرات بطريقة سهلة:
e, d = d, e # d = 5, e = 4