ورقة مرجعية لـ Python: الصياغة والأوامر والدوال المدمجة في جداول
صياغة Python تعتمد على المسافات البادئة بدلاً من الأقواس المعقوفة: الكتلة التي تلي النقطتين تُزاح بأربع مسافات. الأساس هو المتغيرات بلا تصريح بالنوع، وجمل if/elif/else، والحلقات for وwhile، والدوال def، إضافة إلى الدوال المدمجة مثل print وlen وrange وinput وtype، وطرق النصوص والقوائم والقواميس.
تجمع هذه الورقة المرجعية لـ Python في صفحة واحدة كل ما تحتاج إلى حفظه في الأشهر الأولى: صياغة Python، والحلقات، والدوال المدمجة، وطرق النصوص والقوائم والقواميس، وأوامر الطرفية. كل جدول مرجع قصير فيه أمثلة عملية يمكنك لصقها مباشرة في REPL.
أساسيات صياغة Python
أهم ما يميز اللغة أن الكتل تُحدَّد بالمسافات البادئة لا بالأقواس. بعد السطر الذي ينتهي بنقطتين (if وfor وdef وclass) تُزاح الأسطر التالية بأربع مسافات. ولا يجوز خلط الجدولة (Tab) بالمسافات، وإلا ستحصل على IndentationError.
| البناء | مثال | التوضيح |
|---|---|---|
| تعليق | # نص | كل ما بعد # حتى نهاية السطر يُتجاهل |
| متغير | age = 25 | لا يُصرَّح بالنوع، بل تحدده القيمة |
| تعيين متعدد | a, b = 1, 2 | فك التغليف؛ وتبادل القيم: a, b = b, a |
| الإخراج | print("مرحباً", name) | المعاملات تُفصل بمسافة |
| الإدخال | s = input("الاسم: ") | يعيد دائماً نصاً |
| f-string | f"{name}: {price:.2f}" | إدراج التعابير مع التنسيق |
| تلميح النوع | count: int = 0 | تلميح للمحرر وأدوات الفحص، لا يُتحقق منه عند التشغيل |
| كتلة فارغة | pass | عنصر نائب حين تتطلب الصياغة جسماً |
| الاستيراد | from math import sqrt | ربط وحدة أو اسم منها |
أنواع البيانات
| النوع | القيمة الحرفية | قابل للتعديل |
|---|---|---|
int | 42، 1_000_000 | لا |
float | 3.14، 1e-3 | لا |
bool | True، False | لا |
str | "نص"، 'نص'، """عدة أسطر""" | لا |
list | [1, 2, 3] | نعم |
tuple | (1, 2)، (1,) | لا |
dict | {"a": 1} | نعم |
set | {1, 2}، والفارغة set() | نعم |
NoneType | None | — |
العوامل
| المجموعة | العوامل | مثال ← النتيجة |
|---|---|---|
| الحساب | + - * / // % ** | 7 // 2 ← 3، 7 % 2 ← 1، 2 ** 10 ← 1024 |
| المقارنة | == != < > <= >= | 1 < x < 10 — سلسلة مقارنات |
| المنطق | and or not | x or "افتراضي" |
| الانتماء | in، not in | "a" in "abc" ← True |
| الهوية | is، is not | x is None |
| التعيين | += -= *= /=، := | if (n := len(s)) > 10: ... |
الشروط والمطابقة
if score >= 90:
grade = "A"
elif score >= 70:
grade = "B"
else:
grade = "C"
status = "بالغ" if age >= 18 else "طفل" # العامل الشرطي الثلاثي
match command:
case "start":
print("تشغيل")
case "stop" | "exit":
print("إيقاف")
case _:
print("أمر غير معروف")
القيم الخاطئة (False) هي False وNone و0 والنص الفارغ والمجموعات الفارغة، لذلك بدلاً من if len(items) > 0 يُكتب ببساطة if items.
الحلقات في Python: صياغة for وwhile
حلقة for
صياغة حلقة for في Python: for متغير in تسلسل: ثم الجسم بالإزاحة. تمر الحلقة على أي كائن قابل للتكرار: نص أو قائمة أو قاموس أو ملف أو range.
for i in range(5): # 0 1 2 3 4
print(i)
for i in range(10, 0, -2): # 10 8 6 4 2
print(i)
for i, fruit in enumerate(["تفاحة", "كمثرى"], start=1):
print(i, fruit)
for name, score in zip(names, scores):
print(name, score)
for key, value in prices.items():
print(key, value)
حلقة while
attempts = 3
while attempts > 0:
password = input("كلمة المرور: ")
if password == "secret":
print("تم تسجيل الدخول")
break
attempts -= 1
else:
print("انتهت المحاولات") # تُنفَّذ إذا لم يحدث break
| الأمر | ماذا يفعل |
|---|---|
break | يخرج من الحلقة قبل الأوان |
continue | ينتقل إلى التكرار التالي |
else للحلقة | يُنفَّذ إذا انتهت الحلقة دون break |
range(stop)، range(start, stop, step) | متتالية أرقام، وstop لا تُحسب |
تعابير الإدراج (comprehensions)
squares = [x ** 2 for x in range(10)]
evens = [x for x in numbers if x % 2 == 0]
lengths = {word: len(word) for word in words}
unique = {c.lower() for c in text}
total = sum(x * x for x in range(100)) # تعبير مولّد
الدوال
def greet(name: str, greeting: str = "مرحباً") -> str:
"""تعيد عبارة الترحيب."""
return f"{greeting}، {name}!"
def total(*args, **kwargs):
return sum(args), kwargs
square = lambda x: x * x
print(greet("سارة")) # مرحباً، سارة!
print(greet("سارة", greeting="أهلاً")) # أهلاً، سارة!
| العنصر | المعنى |
|---|---|
def f(a, b=1) | معامل بقيمة افتراضية |
*args | أي عدد من المعاملات الموضعية (في صف) |
**kwargs | أي عدد من المعاملات المسماة (في قاموس) |
return | إعادة قيمة؛ بدونها تعيد الدالة None |
lambda x: ... | دالة مجهولة قصيرة في تعبير واحد |
global، nonlocal | تعديل متغير من نطاق خارجي |
لا تستخدم قيمة افتراضية قابلة للتعديل مثل def f(items=[]): فالقائمة تُنشأ مرة واحدة وتتراكم بين الاستدعاءات. الصواب هو items=None ثم داخل الدالة if items is None: items = [].
الدوال المدمجة في Python
الدوال المدمجة في Python متاحة دون استيراد. وهذه أهم الدوال التي تظهر في تقريباً كل سكربت.
| الدالة | ماذا تفعل | مثال ← النتيجة |
|---|---|---|
print() | تعرض القيم | print(1, 2, sep="-") ← 1-2 |
input() | تقرأ نصاً من لوحة المفاتيح | int(input()) |
len() | طول مجموعة أو نص | len("abc") ← 3 |
type() | نوع الكائن | type(3.0) ← <class 'float'> |
isinstance() | التحقق من النوع | isinstance(5, int) ← True |
int() float() str() bool() | تحويل الأنواع | int("42") ← 42 |
list() tuple() set() dict() | إنشاء المجموعات | list("ab") ← ['a', 'b'] |
range() | مجال من الأرقام | list(range(3)) ← [0, 1, 2] |
enumerate() | أزواج (الفهرس، العنصر) | list(enumerate("ab")) ← [(0, 'a'), (1, 'b')] |
zip() | يدمج التسلسلات زوجاً زوجاً | list(zip([1, 2], "ab")) ← [(1, 'a'), (2, 'b')] |
sum() min() max() | المجموع والأصغر والأكبر | max([3, 7, 1]) ← 7 |
abs() round() | القيمة المطلقة والتقريب | round(3.14159, 2) ← 3.14 |
sorted() | قائمة جديدة مرتبة | sorted(words, key=len, reverse=True) |
reversed() | مكرِّر بالترتيب العكسي | list(reversed([1, 2])) ← [2, 1] |
map() filter() | تطبيق دالة / تصفية | list(map(str, [1, 2])) ← ['1', '2'] |
any() all() | واحد على الأقل / كلها صحيحة | all(x > 0 for x in nums) |
open() | يفتح ملفاً | open("a.txt", encoding="utf-8") |
help() dir() | المساعدة وقائمة الخصائص | help(str.split)، dir(list) |
id() hash() | معرّف الكائن وقيمة التجزئة | hash("a") |
أفضل مرجع دائماً في متناولك هو الدالة help() في REPL: فـ help(dict) تعرض كل طرق القاموس مع وصف، وdir(obj) تعرض قائمة الأسماء المتاحة.
طرق النصوص
صياغة النصوص في Python: النص غير قابل للتعديل، وكل طريقة تعيد نصاً جديداً. والتقطيع يعمل كما في القوائم: s[1:4]، وs[::-1] لعكس النص.
| الطريقة | مثال ← النتيجة |
|---|---|
upper() lower() | "Py".upper() ← 'PY' |
capitalize() title() | "hello world".title() ← 'Hello World' |
strip() lstrip() rstrip() | " hi \n".strip() ← 'hi' |
split(sep) | "a,b,c".split(",") ← ['a', 'b', 'c'] |
join(iterable) | "-".join(["a", "b"]) ← 'a-b' |
replace(old, new) | "قلم".replace("ق", "ب") ← 'بلم' |
find() index() | "hello".find("l") ← 2؛ وإذا لم يوجد — -1 (أما index فيرفع خطأ) |
count() | "banana".count("a") ← 3 |
startswith() endswith() | "file.py".endswith(".py") ← True |
isdigit() isalpha() isspace() | "123".isdigit() ← True |
removeprefix() removesuffix() | "test_a".removeprefix("test_") ← 'a' |
zfill() center() ljust() | "7".zfill(3) ← '007' |
format() | "{} + {}".format(1, 2) ← '1 + 2' |
أوامر القائمة في Python
القائمة مجموعة مرتبة قابلة للتعديل. معظم طرقها تغيّر القائمة في مكانها وتعيد None، لذلك فـ a = a.sort() خطأ شائع.
| العملية | ماذا تفعل | مثال |
|---|---|---|
append(x) | تضيف في النهاية | a.append(4) |
extend(iter) | تضيف كل العناصر | a.extend([5, 6]) |
insert(i, x) | تدرج عند الفهرس | a.insert(0, "أولاً") |
remove(x) | تحذف أول ظهور للقيمة | a.remove(3) |
pop(i) | تحذف وتعيد العنصر (الافتراضي الأخير) | last = a.pop() |
clear() | تفرغ القائمة | a.clear() |
index(x) | فهرس أول ظهور | a.index("b") |
count(x) | عدد مرات الظهور | a.count(1) |
sort() | ترتيب في المكان | a.sort(key=str.lower) |
reverse() | عكس في المكان | a.reverse() |
copy() | نسخة سطحية | b = a.copy() |
del a[i] | حذف بالفهرس أو بالتقطيع | del a[1:3] |
| التقطيع | a[start:stop:step] | a[-1] — الأخير، وa[:3] — أول ثلاثة |
أوامر القاموس في Python
| العملية | ماذا تفعل | مثال |
|---|---|---|
d[key] | القيمة بالمفتاح، وإذا لم يوجد المفتاح — KeyError | d["name"] |
get(key, default) | القيمة أو البديل | d.get("age", 0) |
d[key] = value | إضافة أو تعديل | d["city"] = "الرياض" |
keys() values() items() | المفاتيح والقيم والأزواج | for k, v in d.items(): |
update() | دمج مع قاموس آخر | d.update({"a": 1}) |
d1 | d2 | قاموس جديد مدموج | merged = defaults | user |
pop(key, default) | حذف وإعادة القيمة | d.pop("tmp", None) |
popitem() | حذف آخر زوج أُضيف | d.popitem() |
setdefault(key, value) | إعادة القيمة، وإذا لم يوجد المفتاح تُنشأ | d.setdefault("tags", []).append("py") |
key in d | التحقق من وجود المفتاح | if "name" in d: |
dict.fromkeys() | قاموس من مفاتيح بقيمة واحدة | dict.fromkeys("abc", 0) |
len(d)، del d[key] | الحجم والحذف | del d["old"] |
الصفوف والمجموعات (sets)
| العملية | مثال ← النتيجة |
|---|---|
| فك تغليف الصف | x, y = (3, 4) |
| إضافة إلى مجموعة | s.add(5)، والحذف — s.discard(5) |
| الاتحاد / التقاطع | {1, 2} | {2, 3} ← {1, 2, 3}؛ {1, 2} & {2, 3} ← {2} |
| الفرق | {1, 2} - {2} ← {1} |
| إزالة التكرار من قائمة | list(dict.fromkeys(items)) — مع الحفاظ على الترتيب |
الاستثناءات والملفات
try:
number = int(input("رقم: "))
except ValueError as err:
print("هذا ليس رقماً:", err)
else:
print("نجاح")
finally:
print("يُنفَّذ دائماً")
with open("data.txt", "w", encoding="utf-8") as f:
f.write("سطر\n")
with open("data.txt", encoding="utf-8") as f:
for line in f:
print(line.rstrip())
| الاستثناء | متى يظهر |
|---|---|
SyntaxError، IndentationError | خطأ في الصياغة أو المسافات البادئة |
NameError | اسم غير معرّف (خطأ مطبعي) |
TypeError | عملية مع نوع غير مناسب: "1" + 1 |
ValueError | النوع صحيح لكن القيمة خاطئة: int("abc") |
IndexError، KeyError | لا يوجد هذا الفهرس أو المفتاح |
FileNotFoundError | الملف غير موجود |
ZeroDivisionError | القسمة على صفر |
الأصناف
from dataclasses import dataclass
class Dog:
def __init__(self, name: str):
self.name = name
def bark(self) -> str:
return f"{self.name}: هاو!"
@dataclass
class Point:
x: float
y: float
print(Dog("ريكس").bark()) # ريكس: هاو!
print(Point(1, 2)) # Point(x=1, y=2)
الوحدات المدمجة في Python
تأتي المكتبة القياسية مع المفسِّر، ويكفي import لاستخدامها.
| الوحدة | لماذا تُستخدم | مثال |
|---|---|---|
math | الرياضيات | math.sqrt(16) ← 4.0 |
random | الأعداد العشوائية | random.randint(1, 6)، random.choice(items) |
datetime | التاريخ والوقت | datetime.date.today() |
pathlib | المسارات والملفات | Path("data").glob("*.csv") |
os، sys | النظام، ومتغيرات البيئة، والوسائط | os.environ.get("HOME")، sys.argv |
json | قراءة وكتابة JSON | json.loads(text)، json.dumps(obj, ensure_ascii=False) |
csv | جداول CSV | csv.DictReader(f) |
collections | Counter وdefaultdict وdeque | Counter("banana").most_common(1) ← [('a', 3)] |
itertools | التوافيق وسلاسل المكررات | itertools.chain(a, b) |
re | التعابير النمطية | re.findall(r"\d+", s) |
time | التوقف وقياس الزمن | time.sleep(1)، time.perf_counter() |
asyncio | الكود غير المتزامن | asyncio.run(main()) |
ظهر في Python 3.15 الاستيراد الكسول (PEP 810): فالأمر lazy import pandas as pd يؤجل تحميل الوحدة حتى أول استخدام لها، فيبدأ السكربت الذي فيه مكتبات ثقيلة أسرع بوضوح.
أوامر Python في الطرفية
مجموعة من الأوامر تُطلب كثيراً بعبارة «أوامر python»: وهي أوامر تشغيل المفسِّر وتثبيت المكتبات. وعلى Windows يُكتب عادةً python أو py بدلاً من python3.
| الأمر | ماذا يفعل |
|---|---|
python3 --version | يعرض الإصدار |
python3 | يفتح وحدة REPL التفاعلية (للخروج — exit()) |
python3 script.py | يشغّل ملفاً |
python3 -c "print(2 + 2)" | يُنفّذ سطراً واحداً |
python3 -m venv .venv | ينشئ بيئة افتراضية |
source .venv/bin/activate / .venv\Scripts\activate | تفعيل البيئة (Linux وmacOS / Windows) |
python3 -m pip install requests | تثبيت حزمة |
pip list، pip freeze > requirements.txt | قائمة الحزم وحفظها |
pip install -r requirements.txt | تثبيت الاعتماديات من ملف |
python3 -m http.server 8000 | خادم ويب بسيط في المجلد الحالي |
uv init، uv add requests، uv run main.py | إنشاء مشروع، وإضافة اعتمادية، والتشغيل عبر مدير uv |
أخطاء شائعة للمبتدئين
- المقارنة بـ
=— في الشرط يلزم==؛ أما الرمز المفرد=فهو تعيين. - نسيان النقطتين بعد
ifوforوdefيسببSyntaxError. - جمع نص مع رقم:
"العمر: " + 25خطأ، اكتبf"العمر: {25}". - تعديل القائمة أثناء المرور عليها — مرّ على نسخة
for x in a[:]أو اجمع قائمة جديدة. input()يعيد نصاً — لإجراء حساب لفّه بـint()أوfloat().
الخلاصة
صياغة Python تقوم على المسافات البادئة والنقطتين ومجموعة صغيرة من البنى: الشروط، والحلقات for وwhile، والدوال، والأصناف. أضف إليها عشرين دالة مدمجة وطرق النصوص والقوائم والقواميس، فتغطي معظم المهام اليومية. احفظ الورقة، وحين تصبح الجداول مألوفة انتقل إلى الوحدات وغير المتزامن؛ وكل ذلك مشروح خطوة بخطوة عملياً في دورة «Python 3.15: من المبتدئ إلى المحترف».
الأسئلة الشائعة
كم مسافة يجب أن أترك للإزاحة في Python؟
حسب معيار PEP 8 تُستخدم أربع مسافات لكل مستوى. الأهم أن تكون متساوية داخل الكتلة نفسها وألا تخلط المسافات بالجدولة (Tab).
ما الفرق بين القائمة والصف (tuple)؟
القائمة قابلة للتعديل فيمكن إضافة عناصر إليها وترتيبها في مكانها؛ أما الصف فغير قابل للتعديل، لذلك يصلح مفتاحاً في القاموس ولمجموعات قيم ثابتة.
كيف أعرض كل طرق كائن مباشرة في Python؟
استدعِ dir(obj) لقائمة الأسماء وhelp(obj) للوصف؛ فمثلاً help(str) تعرض كل طرق النصوص.
ما الفرق بين sort() وsorted()؟
الطريقة list.sort() ترتّب القائمة نفسها وتعيد None، أما الدالة sorted() فتعيد قائمة جديدة وتعمل مع أي مجموعة قابلة للتكرار.
هل أحتاج إلى فاصلة منقوطة في نهاية السطر؟
لا. الفاصلة المنقوطة مسموحة للفصل بين عدة أوامر في سطر واحد، لكن في الكود العادي تُكتب كل تعليمة في سطر مستقل.
يُشرح هذا الموضوع بالتفصيل مع التطبيق العملي في دورة «Python 3.15: от новичка до профи».
- Python 3.15 с нуля и для опытных: что нового и как учить
- Python 3.15: установка, REPL и первый скрипт за десять минут
- Переменные, числа и строки в Python: f-строки и t-строки
- Условия, циклы и match/case в Python: управляем ходом программы
- Списки, кортежи, словари и множества: frozendict в Python 3.15