Python للمبتدئين: دليلك الشامل لتعلم Python وأفضل الممارسات
تم التحديث: ٢٧ مارس ٢٠٢٦
ملخص
ابدأ تعلم Python باستخدام إصدار Python 3.12+، واستخدم البيئات الافتراضية (uv أو venv) من اليوم الأول، واتبع الأدوات الحديثة (ruff للتنسيق، و pyright لفحص الأنواع)، واكتب الكود مع تلميحات الأنواع (type hints) من أجل الوضوح. هذه الممارسات تمنع العادات السيئة وتتوسع بسلاسة من المشاريع الهواية إلى الكود الاحترافي.
تعلم Python شيء، وتعلمها بشكل صحيح شيء آخر. الكثير من الدروس التعليمية تعلم عادات سريعة وغير منظمة: لا تلميحات للأنواع، لا تنسيق تلقائي، ولا هيكلة. ثم ينتقل المتعلمون إلى مشاريع حقيقية ويعانون من أخطاء غامضة، وكود يصعب تصحيحه، وممارسات قديمة تعلموها منذ سنوات. هذا الدليل يعلم أساسيات Python مع دمج أفضل الممارسات من اليوم الأول — ليكون كودك نظيفاً، وقابلاً للقراءة، واحترافياً منذ أول سكربت تكتبه.
الخطوة 1: تثبيت Python 3.12+ (ليس 2، ولا إصدارات 3.x القديمة)
يأتي Python 3.12 برسائل خطأ أفضل، وتحسينات في الأداء، و bytecode محسن. تم تقديم عبارات المطابقة (structural pattern matching) في Python 3.10. لا تستخدم Python 2 (انتهى دعمه في 2020) أو إصدارات Python 3.x القديمة (عفا عليها الزمن). اختر دائماً أحدث إصدار مستقر.
على Windows
- قم بزيارة python.org/downloads
- قم بتحميل Python 3.12 (أو أحدث إصدار 3.x)
- فعل خيار "Add Python to PATH" قبل التثبيت
- التحقق: افتح موجه الأوامر (Command Prompt)، وشغل
python --version
على macOS
# Using Homebrew (install brew first from brew.sh)
brew install python@3.12
على Linux (Ubuntu/Debian)
sudo apt update
sudo apt install python3.12 python3.12-venv
الخطوة 2: إعداد بيئة افتراضية (أمر بالغ الأهمية!)
لا تكتب الكود أبداً مباشرة في نسخة Python الخاصة بالنظام. تقوم البيئات الافتراضية بعزل مكتبات المشروع بحيث لا تؤدي مكتبات مشروع ما إلى تعطل مشروع آخر. استخدم uv (أسرع وأبسط) أو venv (المكتبة القياسية).
استخدام uv (حديث، وموصى به)
# Install uv
curl -LsSf https://astral.sh/uv/install.sh | sh
# Create a project directory
mkdir my_python_project
cd my_python_project
# Initialize a virtual environment
uv venv
source .venv/bin/activate # On Windows: .venv\Scripts\activate
استخدام venv (قياسي، مدمج)
mkdir my_python_project
cd my_python_project
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
سيظهر لك الآن في سطر الأوامر (.venv) $ مما يشير إلى أن البيئة نشطة.
الخطوة 3: مجموعة الأدوات الحديثة (معيار 2026)
منسق الكود: Ruff
يفرض Ruff أسلوب كود متسقاً تلقائياً. قم بتثبيته:
uv pip install ruff
# or with pip: pip install ruff
أنشئ ملف pyproject.toml في مجلد المشروع الرئيسي:
[tool.ruff]
line-length = 100
target-version = "py312"
[tool.ruff.lint]
select = ["E", "F", "W"] # Errors, undefined names, whitespace
نسق الكود الخاص بك:
ruff format .
يقوم Ruff تلقائياً بإصلاح المسافات، وترتيب الاستيرادات، ومخالفات الأسلوب.
فاحص الأنواع: Pyright
يكتشف Pyright أخطاء الأنواع قبل وقت التشغيل. التثبيت:
uv pip install pyright
الآن اكتب الكود مع تلميحات الأنواع:
def calculate_total(price: float, quantity: int) -> float:
"""Calculate order total"""
return price * quantity
result = calculate_total(19.99, 5) # OK
bad = calculate_total("19.99", 5) # Error: string ≠ float
شغل pyright:
pyright
سيكتشف خطأ النوع فوراً دون الحاجة لتشغيل الكود.
بيئة التطوير: VS Code مع إضافة Python
قم بتحميل VS Code مجاناً. ثبت إضافة Python (افتح VS Code، اذهب إلى Extensions، ابحث عن "Python"، وثبت إضافة Microsoft).
قم بتهيئة VS Code لمجموعة أدواتنا عن طريق إنشاء ملف .vscode/settings.json:
{
"python.linting.enabled": true,
"python.linting.ruffEnabled": true,
"[python]": {
"editor.defaultFormatter": "charliermarsh.ruff",
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"source.organizeImports": "explicit"
}
},
"python.analysis.typeCheckingMode": "strict"
}
الآن سيقوم VS Code بتنسيق الكود تلقائياً عند الحفظ وإظهار أخطاء الأنواع في الوقت الفعلي.
قواعد Python الأساسية مع تلميحات الأنواع
المتغيرات والأنواع
# Type hints make intent clear
name: str = "Alice"
age: int = 30
height: float = 5.9
is_student: bool = False
# Collections with specific types
scores: list[int] = [95, 87, 92]
person: dict[str, int] = {"age": 30, "year": 2026}
تلميحات الأنواع لا تكلف شيئاً عند التشغيل وتحسن قابلية القراءة بشكل هائل. إنها ليست اختيارية — بل هي من أفضل الممارسات.
الدوال مع تلميحات الأنواع
def greet(name: str, age: int) -> str:
"""Return a personalized greeting
Args:
name: Person's name
age: Person's age
Returns:
Formatted greeting string
"""
return f"{name} is {age} years old"
greeting = greet("Bob", 25)
يجب على كل دالة التصريح عن أنواع المدخلات ونوع المخرجات. هذا يمنع الأخطاء ويجعل الكود يوثق نفسه بنفسه.
مطابقة الأنماط الحديثة (Python 3.10+)
قدم Python 3.10 عبارات المطابقة (تشبه switch في اللغات الأخرى):
def describe_number(n: int) -> str:
match n:
case 0:
return "Zero"
case 1 | 2: # 1 or 2
return "Small"
case n if n < 0:
return "Negative"
case _: # Default
return "Large"
أكثر نظافة بكثير من سلاسل if/elif/else.
تضمين القوائم (الطريقة النيردية/Pythonic)
# Long way (avoid)
squared = []
for num in range(10):
squared.append(num ** 2)
# Pythonic way
squared = [num ** 2 for num in range(10)]
# With conditions
evens = [x for x in range(20) if x % 2 == 0]
التضمينات أسرع وأكثر قابلية للقراءة.
هيكل المشروع: التخطيط الاحترافي
نظم مشروعك مثل الكود الحقيقي:
my_project/
├── .venv/ # Virtual environment
├── pyproject.toml # Project config (ruff, dependencies)
├── src/
│ └── my_project/
│ ├── __init__.py
│ ├── main.py
│ └── utils.py
├── tests/
│ ├── __init__.py
│ └── test_utils.py
├── .gitignore
└── README.md
هذا الهيكل يتوسع من مشروع هواية إلى قاعدة كود احترافية. ملفات __init__.py (حتى لو كانت فارغة) تخبر Python أن هذه حزم (packages).
إدارة التبعيات بشكل صحيح
استخدام uv
# Add a dependency
uv pip install requests
# Create a requirements file automatically
uv pip freeze > requirements.txt
أو صرح بها في pyproject.toml:
[project]
dependencies = [
"requests>=2.31.0",
"pandas>=2.0.0"
]
ثم ثبتها:
uv pip install -e .
الاختبار: اكتب الاختبارات من اليوم الأول
الاختبار يمنع الأخطاء ويجعل إعادة هيكلة الكود (refactoring) آمنة:
# src/my_project/math_utils.py
def add(a: int, b: int) -> int:
return a + b
# tests/test_math_utils.py
from my_project.math_utils import add
def test_add():
assert add(2, 3) == 5
assert add(-1, 1) == 0
assert add(0, 0) == 0
شغل الاختبارات:
uv pip install pytest
pytest
عادات الاختبار الصغيرة الآن تمنع كوارث كبيرة لاحقاً.
الأخطاء الشائعة (وكيفية تجنبها)
1. استخدام المتغيرات العالمية (Global Variables)
# WRONG: Global counter
counter = 0
def increment():
global counter # Ugly and buggy
counter += 1
# RIGHT: Return values
def increment(counter: int) -> int:
return counter + 1
يجب أن تكون الدوال مستقلة، ولا تعتمد على حالة عالمية.
2. الأرقام السحرية بدون تفسير
# WRONG: What does 0.08 mean?
tax = price * 0.08
# RIGHT: Named constant
TAX_RATE = 0.08
tax = price * TAX_RATE
الثوابت ذات الأسماء الوصفية تجعل القصد واضحاً.
3. تجاهل الحالات الاستثنائية (Edge Cases)
# WRONG: No error handling
def divide(a: float, b: float) -> float:
return a / b
# RIGHT: Handle division by zero
def divide(a: float, b: float) -> float | None:
if b == 0:
return None
return a / b
الكود الاحترافي يتوقع ما يمكن أن يحدث بشكل خاطئ.
4. عدم استخدام Docstrings
# WRONG: Unclear
def calc(x, y):
return x * y + x / y
# RIGHT: Clear intent
def calculate_avg_rate(price: float, quantity: int) -> float:
"""Calculate average price per unit.
Args:
price: Total price in dollars
quantity: Number of units
Returns:
Average price per unit
"""
return price / quantity
نفسك في المستقبل ستشكر نفسك الحالية على توثيق القصد من الكود.
مشروع عملي: تطبيق قائمة مهام (Todo List) بأفضل الممارسات
لنقم ببناء مشروع حقيقي باستخدام كل ما تعلمناه:
# src/todoapp/main.py
from typing import Optional
from pathlib import Path
import json
class TodoList:
"""Simple todo list manager"""
def __init__(self, file_path: Path = Path("todos.json")):
self.file_path = file_path
self.todos: list[dict[str, str]] = self._load()
def _load(self) -> list[dict[str, str]]:
"""Load todos from file"""
if self.file_path.exists():
with open(self.file_path) as f:
return json.load(f)
return []
def add(self, task: str) -> None:
"""Add a new todo"""
self.todos.append({
"task": task,
"done": False
})
self._save()
def mark_done(self, index: int) -> bool:
"""Mark todo as complete"""
if 0 <= index < len(self.todos):
self.todos[index]["done"] = True
self._save()
return True
return False
def _save(self) -> None:
"""Save todos to file"""
with open(self.file_path, 'w') as f:
json.dump(self.todos, f, indent=2)
def list_all(self) -> None:
"""Display all todos"""
for i, todo in enumerate(self.todos, 1):
status = "✓" if todo["done"] else "○"
print(f"{i}. {status} {todo['task']}")
if __name__ == "__main__":
app = TodoList()
app.add("Learn Python")
app.add("Build a project")
app.list_all()
هذا الكود يحتوي على:
- تلميحات الأنواع في كل مكان
- Docstrings لكل طريقة (method)
- معالجة الأخطاء
- إدخال وإخراج الملفات (File I/O)
- اتفاقيات تسمية صحيحة
- هيكل قابل للاختبار
مسارات التعلم حسب الهدف
الهدف: مهنة في الذكاء الاصطناعي/تعلم الآلة
- أتقن أساسيات Python (هذا الدليل)
- تعلم NumPy، Pandas، Scikit-learn
- ادرس الجبر الخطي والإحصاء
- ابنِ 3–5 مشاريع تعلم آلة لمعرض أعمالك
الهدف: تطوير الويب
- أساسيات Python
- إطار عمل FastAPI أو Django
- SQL وقواعد البيانات
- النشر على السحابة (AWS، GCP، Heroku)
الهدف: الأتمتة/السكربتات
- أساسيات Python
- إدخال وإخراج الملفات والتعابير النمطية (regex)
- واجهات البرمجة (APIs) وكشط الويب (مع مراعاة الأخلاقيات)
- جدولة المهام (cron، APScheduler)
المصادر
- وثائق Python الرسمية: docs.python.org/3
- Real Python: دروس تعليمية شاملة ومكتوبة بشكل جيد
- دليل تلميحات النوع (Type Hints Guide): mypy.readthedocs.io
- دليل تنسيق PEP 8: أسلوب كتابة الكود الرسمي للغة Python (PEP = Python Enhancement Proposal)
الخلاصة
تعلم Python بشكل صحيح يعني البدء بأفضل الممارسات، وليس تعلمها لاحقاً. البيئات الافتراضية تعزل المشاريع، وتلميحات النوع تمنع الأخطاء البرمجية، وعمليات الـ linting تضمن الاتساق، والهيكلة السليمة تسمح بالتوسع من مجرد سكربتات بسيطة إلى تطبيقات كاملة. قد يستغرق الإعداد الصحيح 10 دقائق إضافية، لكنه يوفر ساعات من تصحيح الأخطاء لاحقاً. استثمر في العادات الصحيحة الآن، وسيبقى الكود الخاص بك نظيفاً واحترافياً بينما تتطور من مبتدئ إلى مطور محترف.