ورقة مرجعية

ورقة مرجعية لـ Python: الصياغة والأوامر والدوال المدمجة في جداول

آخر تحديث: · Skillaria.Top

صياغة 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-stringf"{name}: {price:.2f}"إدراج التعابير مع التنسيق
تلميح النوعcount: int = 0تلميح للمحرر وأدوات الفحص، لا يُتحقق منه عند التشغيل
كتلة فارغةpassعنصر نائب حين تتطلب الصياغة جسماً
الاستيرادfrom math import sqrtربط وحدة أو اسم منها

أنواع البيانات

النوعالقيمة الحرفيةقابل للتعديل
int42، 1_000_000لا
float3.14، 1e-3لا
boolTrue، Falseلا
str"نص"، 'نص'، """عدة أسطر"""لا
list[1, 2, 3]نعم
tuple(1, 2)، (1,)لا
dict{"a": 1}نعم
set{1, 2}، والفارغة set()نعم
NoneTypeNone—

العوامل

المجموعةالعواملمثال ← النتيجة
الحساب+ - * / // % **7 // 2 ← 3، 7 % 2 ← 1، 2 ** 10 ← 1024
المقارنة== != < > <= >=1 < x < 10 — سلسلة مقارنات
المنطقand or notx or "افتراضي"
الانتماءin، not in"a" in "abc" ← True
الهويةis، is notx 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]القيمة بالمفتاح، وإذا لم يوجد المفتاح — KeyErrord["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قراءة وكتابة JSONjson.loads(text)، json.dumps(obj, ensure_ascii=False)
csvجداول CSVcsv.DictReader(f)
collectionsCounter وdefaultdict وdequeCounter("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() فتعيد قائمة جديدة وتعمل مع أي مجموعة قابلة للتكرار.

هل أحتاج إلى فاصلة منقوطة في نهاية السطر؟

لا. الفاصلة المنقوطة مسموحة للفصل بين عدة أوامر في سطر واحد، لكن في الكود العادي تُكتب كل تعليمة في سطر مستقل.