نکات مهم#
در این بخش، ما برخی از ابزارهای ضروری را بررسی خواهیم کرد که به طور گسترده در توسعه نرمافزار و علوم داده مورد استفاده قرار میگیرند. این ابزارها شامل موارد زیر هستند:
- Bash: یک (Shell) یونیکس و زبان دستوری که قابلیتهای قدرتمند پردازش متن و اسکریپتنویسی را ارائه میدهد Bash برای خودکارسازی وظایف تکراری، مدیریت عملیات سیستم و پردازش کارآمد متن ضروری است.
- Git: یک سیستم کنترل نسخه توزیعشده که به شما کمک میکند تغییرات کد خود را پیگیری کرده و با دیگران همکاری کنید. Git برای حفظ تاریخچه پروژه، همکاری بین اعضای تیم و مدیریت نسخههای مختلف کد بسیار حیاتی است.
- Python: یک زبان برنامهنویسی همهمنظوره که به دلیل سادگی و خوانایی بالا محبوب است و به طور گسترده در تحلیل داده، یادگیری ماشین و توسعه وب استفاده میشود. کتابخانهها و فریمورکهای گستردهی Python آن را به گزینهای ایدهآل برای کاربردهای مختلف، از اسکریپتنویسی تا ساخت برنامههای پیچیده، تبدیل کردهاند.
با تسلط بر این ابزارها، شما قادر خواهید بود جریان کاری خود را بهینه کنید، پروژههای خود را به طور مؤثرتری مدیریت کرده و بهرهوری خود را افزایش دهید. این بخش فرض میکند که شما درک اولیهای از مفاهیم برنامهنویسی داشته و با استفاده از خط فرمان آشنا هستید.
بَش#
دستورات پایه
ls : محتوای پوشه را فهرست میکند.
مثال:
ls -lفایلها را در قالب طولانی نمایش میدهد.مثال:
ls -aتمام فایلها، از جمله فایلهای مخفی را نمایش میدهد.
ls -l
ls -a
cd: تغییر پوشه جاری.
مثال: cd /path/to/directory به پوشه مشخصشده تغییر میکند.
cd /path/to/directory
pw: آدرس پوشه جاری را نمایش میدهد
pw
cp: کپی کردن فایلها و پوشهها.
مثال: cp source.txt destination.txt فایل مبدا را به فایل مقصد کپی میکند.
cp source.txt destination.txt
mv: جابجا کردن یا تغییر نام فایلها و دایرکتوریها.
مثال: mv oldname.txt newname.txt فایل را تغییر نام میدهد.
mv oldname.txt newname.txt
rm: پاک کردن فایل یا پوشه مشخص شده
مثال: rm file.txt فایل مشخص شده را پاک میکند.
مثال: rm -r directory پوشه مشخص شده را پاک میکند.
rm file.txt
rm -r direcrory
echo: نمایش یک خط متن.
مثال: echo “Hello, World!” متن را در ترمینال چاپ میکند.
echo "Hello, World!"
cat: برای ترکیب و نمایش محتوای فایل.
مثال: `cat file.txt محتوای فایل را نمایش میدهد.
cat file.txt
mkdir new_directory: برای ترکیب و نمایش محتوای فایل.
مثال: mkdir mydir پوشهای جدید با نام mydir ایجاد میکند.
mkdir mydir
mkdir -p /path/to/new_directory: برای ایجاد یک پوشه جدید و هر پوشه والد مورد نیاز.
مثال: mkdir -p /path/to/new_directory` پوشه مشخصشده را به همراه هر پوشه والد گمشده ایجاد میکند.
mkdir -p /path/to/new_directory
touch newfile.txt: برای ایجاد یک فایل خالی جدید یا بهروزرسانی زماننگاری یک فایل موجود.
مثال: touch newfile.txt یک فایل خالی با نام مشخص شده ایجاد میکند.
touch newfile.txt
touch file1.txt file2.txt file3.txt: شما میتوانید از دستور touch همراه با سایر دستورات برای ایجاد چندین فایل بهطور همزمان یا ایجاد فایلها در دایرکتوریهای خاص استفاده کنید.
مثال: touch file1.txt file2.txt file3.txt چندین فایل جدید ایجاد میکند.
touch file1.txt file2.txt file3.txt
مثال: touch /path/to/directory/newfile.txt: ایجاد یک فایل در یک دایرکتوری خاص.
touch /path/to/directory/newfile.txt
کد نویسی در بَش#
یک اسکریپت Bash فقط یک فایل متنی است که شامل مجموعهای از دستورات است و به شما این امکان را میدهد که کارهای تکراری را با نوشتن اسکریپتها خودکار کنید.
مثال:
#!/bin/bash
echo "Hello, World!
برای اجرای اسکریپت، آن را در یک فایل ذخیره کنید (مثلاً hello.sh)، آن را اجرایی کنید (chmod +x hello.sh) و سپس آن را اجرا کنید (./hello.sh).
مثال:
chmod +x hello.sh
./hello.sh
پردازش متن#
بش از دستورات قدرتمندی برای پردازش متن مانند grep، awk و sed برخوردار است. این ابزارها به شما این امکان را میدهند که دادههای متنی را بهطور کارآمد جستجو، فیلتر و تغییر دهید. در اینجا چند مثال آورده شده است:
grep: جستجو برای الگوها در فایلها.
مثال: grep ‘pattern’ file.txt برای جستجوی واژه ‘pattern’ در فایل استفاده میشود.
grep 'pattern' file.txt
awk: یک زبان برنامهنویسی برای پردازش متن.
مثال: awk ‘{print $1}’ file.txt ستون اول هر خط را از فایل چاپ میکند.
awk '{print $1}' file.tx
sed: ویرایشگر جریانی برای فیلتر کردن و تبدیل متن.
مثال: sed ‘s/old/new/g’ file.txt کلمه “old” را با “new” در فایل جایگزین میکند.
sed 's/old/new/g' file.txt
Wildcards استفاده از#
*: برای تطبیق با هر تعداد کاراکتر (شامل هیچ کاراکتری).
مثال: *.txt تمامی فایلهای با پسوند “.txt” را پیدا میکند.
ls *.txt
?: برای تطبیق با یک کاراکتر تنها.
مثال: ls file?.txt فایلهایی مانند file1.txt، file2.txt و غیره را پیدا میکند.
ls file?.txt
[]: برای تطبیق با هر یک از کاراکترهای داخل براکتها.
مثال: ls file[12].txt فایلهایی مانند file1.txt و file2.txt را پیدا میکند.
ls file[12].txt
نکات و ترفندها برای استفاده پایه از ترمینال
در اینجا چند نکته و ترفند برای بهبود استفاده شما از ترمینال آورده شده است:
- استفاده از Tab برای تکمیل خودکار دستورات و نام فایلها.
- استفاده از Ctrl + R برای جستجو در تاریخچه دستورات.
- استفاده از Ctrl + C برای لغو دستور جاری.
- استفاده از Ctrl + L برای پاک کردن صفحه ترمینال.
- استفاده از !! برای تکرار دستور آخر.
- استفاده از !<command> برای تکرار آخرین وقوع یک دستور خاص.
مثال:
!lsآخرین دستورlsرا تکرار میکند.
پردازش فایل و تنظیمات مالکیت#
chmod: تغییر مجوزهای فایل.
مثال: chmod 755 file.txt مجوزهای فایل را به صورت خواندن، نوشتن و اجرا برای مالک و خواندن و اجرا برای سایرین تنظیم میکند.
chmod 755 file.txt
chown: تغییر مالکیت فایل.
مثال: chown user:group file.txt مالک و گروه فایل را تغییر میدهد.
chown user:group file.txt
مشاهده و اجرای پردازشها#
ps: نمایش اطلاعات مربوط به فرآیندهای در حال اجرا.
مثال: ps aux اطلاعات دقیق در مورد تمامی فرآیندهای در حال اجرا را نمایش میدهد.
ps aux
top: نمایش اطلاعات بلادرنگ درباره فرآیندهای در حال اجرا.
مثال: top و htop یک نمای دینامیک از فرآیندهای سیستم را نمایش میدهند.
top
یا
htop
ساختن دستورات مستعار#
alias: به شما این امکان را میدهد که برای دستورات پرکاربرد خود میانبر ایجاد کنید.
مثال: ایجاد یک میانبر برای دستور ls -la:
alias ll='ls -la'
این دستور میانبری با نام ll
برای نمایش محتوای پوشه با جزئیات، ایجاد میکند
alias: برای دائمی کردن میانبر، باید آن را به فایل .bashrc یا .bash_profile خود اضافه کنید:
مثال:
echo "alias ll='ls -la'" >> ~/.bashrc
echo "alias ll='ls -la'" >> ~/.bashrc
این دستور میانبر را به فایل .bashrc اضافه میکند.
سپس برای بارگذاری فایل جدید:
source ~/.bashrc
این دستور فایل .bashrc را دوباره بارگذاری میکند تا تغییرات اعمال شوند.
مستندات بیشتر
برای اطلاعات بیشتر و استفاده پیشرفته، میتوانید به منابع و مستندات رسمی Bash مراجعه کنید:
man: صفحات راهنمای دستورات را نمایش میدهد.
مثال:
man ls
با تسلط بر Bash، میتوانید بهطور قابلتوجهی بهرهوری خود را افزایش داده و جریان کاری خود را سادهسازی کنید.
گیت#
Git: یک سیستم کنترل نسخه توزیعشده است که به شما کمک میکند تغییرات کد خود را پیگیری کرده و با دیگران همکاری کنید.
این ابزار برای حفظ تاریخچه پروژه، امکان همکاری بین اعضای تیم و مدیریت نسخههای مختلف کد بسیار مهم است
دستورات پایهای Git که باید بدانید:
git init: مخزن جدید Git را مقداردهی اولیه میکند.git clone: یک مخزن موجود را کلون میکند. git clone https://github.com/user/repo.git
git status: وضعیت دایرکتوری کاری را نمایش میدهد. git status
git add: فایلها را به مرحله استیجینگ اضافه میکند. git add filename
git commit: تغییرات را در مخزن ذخیره میکند. git commit -m "Commit massage "
git push: تغییرات را به مخزن راه دور ارسال میکند. git push origin branchname
git pull: تغییرات را از مخزن راه دور دریافت میکند. git pull origin branchname
شاخه بندی و یکی کردن (Branching and Merging)#
گیت به شما این امکان را میدهد که شاخههایی ایجاد کنید تا به طور مستقل روی ویژگیها یا اصلاحات مختلف کار کنید. در اینجا برخی از دستورات مربوط به شاخه بندی و ادغام آورده شده است:
git branchنمایش، ایجاد و پاک کردن شاخه ها
git branch
git branch new-branch
git branch -d old-branch
git checkout: با این دستور میتوان شاخه مورد نظر را انتخاب کرد
git checkout branchname
git merge: تغیرات یک شاخه را به شاخه دیگر اعمال میکند
git checkout main
git merge branchname
برطرف کردن تعارض ها در هنگام ادغام کردن شاخه ها#
تعارضهای ادغام زمانی رخ میدهند که تغییرات از شاخههای مختلف با یکدیگر تداخل داشته باشند. برای حل تعارضهای ادغام:
git status: تعارضهای بین شاخه ها را شناسایی میکند
git status
فایلهای دارای تعارض را باز کرده و بهصورت دستی تعارضها را برطرف کنید.
پس از حل تعارضها، فایلهای اصلاحشده را به staging area اضافه کنید تا بهعنوان حلشده علامتگذاری شوند.
git add resolved_file.txt
تغیرات انجام شده را کامیت کنید
git commit -m "Resolved merge conflicts"
استفاده از .gitignore#
فایل .gitignore مشخص میکند که کدام فایلها و پوشهها باید در یک مخزن Git نادیده گرفته شوند. در اینجا یک مثال از فایل .gitignore آمده است:
# Ignore all .log files
*.log
# Ignore the node_modules directory
node_modules/
# Ignore all files in the temp directory
temp/
کار با مخزن راه دور#
مخزن راه دور را میتوانیم با استفاده از دستورات زیر مدیریت کنیم
git remote: مدیریت مخازن از راه دور. مثال: git remote add origin https://github.com/user/repo.git یک مخزن از راه دور اضافه میکند.
git remote add origin https://github.com/user/repo.git
git fetch: دریافت تغییرات از یک مخزن از راه دور بدون ادغام آنها.
git fetch origin
git pull: دریافت و ادغام تغییرات از یک مخزن از راه دور.
git pull origin branchname
git push: ارسال تغییرات به یک مخزن از راه دور.
git push origin branchname
امکانات پیشرفته#
در اینجا برخی از ویژگیهای پیشرفته Git آورده شده است که میتوانند به شما کمک کنند تا کدبیس خود را به طور مؤثرتر مدیریت کنید:
git rebase: بازپخش کامیتها روی یک نقطه پایه دیگر. مثال: git rebase main شاخه جاری را روی شاخه اصلی بازپخش میکند.
git rebase main
git stash: ذخیره تغییرات در یک دایرکتوری کاری نامرتب. مثال:git stashتغییرات جاری را ذخیره میکند.
git stash
git stash pop: اعمال تغییرات ذخیرهشده و حذف آنها از لیست ذخیرهها.
git stash pop
مستندات بیشتر#
برای اطلاعات بیشتر و استفاده پیشرفته، میتوانید به مستندات رسمی Git و منابع زیر مراجعه کنید:
مستندات رسمی Git
کتاب Pro Git
ورق تقلب Git
با تسلط بر Git، میتوانید کدبیس خود را به طور مؤثر مدیریت کنید، با دیگران همکاری کنید و تاریخچه پروژه خود را نگهداری کنید.
پایتون#
پایتون یک زبان برنامهنویسی چندمنظوره است که به دلیل سادگی و خواناییاش محبوب است. این زبان به طور گستردهای برای تحلیل دادهها، یادگیری ماشین، توسعه وب، اسکریپتنویسی و موارد دیگر استفاده میشود.
محیطهای مجازی#
محیطهای مجازی وابستگیهای پروژه را ایزوله میکنند، از بروز تضاد بین پروژههای مختلف جلوگیری میکنند و یک محیط ثابت را تضمین میکنند. در اینجا مقایسهای کوتاه از venv و conda آورده شده است:
venv:
به همراه پایتون ارائه میشود (نیاز به نصب جداگانه ندارد). سبک و ساده. یک محیط مجازی را در شل فعلی فعال میکند.
نصب و استفاده:
# Create a virtual environment
python -m venv myenv
# Activate it (Linux/macOS)
source myenv/bin/activate
# Activate it (Windows)
myenv\Scripts\activate
conda:
نیاز به نصب Anaconda یا Miniconda دارد.
نسخههای پایتون و بستهها را به طور مؤثر مدیریت میکند.
کتابخانههای گسترده علم داده و مدیریت محیط را ارائه میدهد.
نصب و استفاده:
# Create a conda environment
conda create --name myenv python=3.12
# Activate the environment
conda activate myenv
# Deactivate the environment
conda deactivate
شما میتوانید نسخههای مختلف conda را از طریق Anaconda و Miniconda پیدا کنید.
نصب کتابخوانه های پایتون در محیط مجازی#
هنگام استفاده از یک محیط مجازی، میتوانید بستهها را با استفاده از pip نصب کنید (اگر از venv یا داخل یک محیط conda استفاده میکنید):
pip install requests
برای محیط conda
conda install numpy
استفاده از محیط مجازی اطمینان میدهد که بستهها در داخل محیط شما مستقل باشند.
نصب بستهها از فایل requirements.txt#
اگر فایل requirements.txt شما وابستگیها را فهرست کرده باشد،:
requests==2.28.1
numpy==1.24.0
میتوانید با استفاده از دستور زیر آنها را نصب کنید
pip install -r requirements.txt
برای conda (اگر میتوانید وابستگیها را به فرمت conda تبدیل کنید، یا بستههای مبتنی بر pip را در یک محیط conda نصب کنید):
conda install --file requirements.txt
این کار به مدیریت وابستگیهای پروژه در یک فایل واحد کمک میکند.
ایجاد بستهها با استفاده از pyproject.toml:#
فایل pyproject.toml یک روش مدرن برای مدیریت بستهها در پایتون است و جایگزینی برای فایلهای قدیمی مانند setup.py و requirements.txt میباشد. این فایل تنظیمات مربوط به پروژه را مشخص میکند، از جمله وابستگیها، اطلاعات بسته و پیکربندی ابزارهای مختلف.
یک مثال ساده:
[project]
name = "my_package"
version = "0.1.0"
description = "A sample Python package"
authors = [
{ name="Your Name", email="your_email@example.com" }
]
dependencies = [
"requests~=2.28.0",
"numpy~=1.24.0"
]
readme = "README.md"
license = { text = "MIT" }
requires-python = ">=3.7"
[build-system]
requires = ["setuptools", "wheel"]
build-backend = "setuptools.build_meta"
استانداردهای پیشنهادی PEP شامل موارد زیر است:
PEP 8 برای سبک کدنویسی.
PEP 484 برای نشانهگذاری نوع (type hints).
PEP 517 برای ساخت بستهها.
PEP 621 برای متاداده پروژه در فایل pyproject.toml.
برای راهنمایی دقیقتر در مورد نوشتن فایل pyproject.toml و بستهبندی پایتون، به مستندات رسمی بستهبندی پایتون مراجعه کنید.
نصبهای ویرایشی#
اگر یک فایل pyproject.toml برای پروژه خود دارید، میتوانید آن را در حالت ویرایشی نصب کنید که به شما این امکان را میدهد که تغییرات محلی بلافاصله در بسته شما منعکس شوند.
برای نصب در حالت ویرایشی، از دستور زیر استفاده کنید:
pip install -e .
ساختار پوشه پیشنهادی برای پروژه:#
یک ساختار استاندارد برای پروژههای پایتون به این صورت است:
my_project/
│
├── my_project/ # پوشه اصلی کد پروژه
│ ├── __init__.py # فایل برای تبدیل به یک پکیج پایتون
│ ├── module1.py # ماژول 1
│ ├── module2.py # ماژول 2
│ └── ... # سایر فایلها و ماژولها
│
├── tests/ # پوشه تستها
│ ├── __init__.py
│ ├── test_module1.py # تستهای ماژول 1
│ ├── test_module2.py # تستهای ماژول 2
│ └── ... # سایر تستها
│
├── pyproject.toml # تنظیمات بسته و پروژه
├── setup.py # نصبکننده و پیکربندی بسته (اگر از آن استفاده میکنید)
├── requirements.txt # وابستگیهای پایتون (اگر از pip استفاده میکنید)
├── README.md # توضیحات پروژه
└── LICENSE # مجوز پروژه
این ساختار با جداسازی واضح بین کد، تستها و فایلهای پیکربند به شما کمک میکند تا پروژهتان سازماندهی شده و قابل مقیاس باشد.
نوشتن و اجرای تستها#
تستنویسی برای اطمینان از درستی و پایداری کد شما ضروری است. یکی از فریمورکهای محبوب برای تستنویسی، pytest است. یک تنظیم معمولی برای استفاده از pytest به شرح زیر است:
نصب pytest: برای نصب pytest میتوانید از دستور زیر استفاده کنید:
pip install pytest
نوشتن تستها: پس از نصب pytest، میتوانید تستها را در پوشهای مانند tests/ بنویسید. تستها معمولاً با پیشوند test_ نامگذاری میشوند و میتوانند مانند این باشند:
# test_example.py
def test_addition():
assert 1 + 1 == 2
def test_subtraction():
assert 2 - 1 == 1
اجرای تستها: برای اجرای تستها کافی است دستور زیر را اجرا کنید:
pytest
این دستور به طور خودکار تمام تستها را پیدا کرده و اجرا میکند.
با استفاده از pytest میتوانید تستهای ساده یا پیچیدهای بنویسید و آنها را به راحتی اجرا و گزارشگیری کنید. استفاده از ابزارهای یکپارچهسازی مداوم (CI) همراه با تستنویسی، به حفظ یک کدبیس قابل اعتماد کمک میکند. با تسلط بر محیطهای مجازی، بستهبندی با pyproject.toml، رعایت استانداردهای PEP، و نوشتن تستهای دقیق، میتوانید پروژههای پایتون پایدار و قابل نگهداری بسازید.
کلاس ها در پایتون#
در پایتون، کلاسها برای ایجاد ساختارهای داده تعریفشده توسط کاربر استفاده میشوند. آنها به شما این امکان را میدهند که دادهها و عملکردها را به هم متصل کنید. ایجاد یک کلاس جدید یک نوع جدید از شیء ایجاد میکند و امکان ایجاد نمونههای جدید از آن نوع را فراهم میکند. هر نمونه کلاس میتواند ویژگیهایی داشته باشد که وضعیت آن را حفظ کند. نمونههای کلاس همچنین میتوانند متدهایی (که توسط کلاس آنها تعریف میشود) برای تغییر وضعیت خود داشته باشند.
تعریف یک کلاس#
در اینجا یک مثال از تعریف یک کلاس ساده آورده شده است:
class Shape:
def __init__(self, color):
self.color = color
def describe(self):
return f"This shape is {self.color}."
متد init یک متد ویژه است که زمانی که یک نمونه از کلاس ایجاد میشود، فراخوانی میشود. این متد نمونه را با آرگومانهای داده شده مقداردهی اولیه میکند. پارامتر self به نمونهای که در حال ایجاد است اشاره دارد.
پارامتر self یک مرجع به نمونه فعلی کلاس است. از آن برای دسترسی به متغیرها و متدهای مربوط به نمونه استفاده میشود.
ایجاد یک نمونه (Instance)#
برای ایجاد یک نمونه از کلاس، میتوانید با فراخوانی نام کلاس و ارسال آرگومانهای مورد نیاز، یک شیء جدید ایجاد کنید. مثال:
my_shape = Shape("red")
print(my_shape.describe()) # Output: This shape is red.
وراثت (Inheritance)#
کلاسها میتوانند از کلاسهای دیگر ارثبری کنند. این امکان را به شما میدهد که یک سلسلهمراتب از کلاسها بسازید که مجموعهای از ویژگیها و متدها را به اشتراک بگذارند.
class Rectangle(Shape):
def __init__(self, color, width, height):
super().__init__(color)
self.width = width
self.height = height
def area(self):
return self.width * self.height
def describe(self):
return f"This rectangle is {self.color}, with an area of {self.area()} square units."
استفاده از زیرکلاس (Subclass)#
شما میتوانید یک نمونه از زیرکلاس ایجاد کنید و از متدهای آن استفاده کنید. زیرکلاسها میتوانند از ویژگیها و متدهای کلاس والد خود ارثبری کنند و آنها را گسترش دهند.
my_rectangle = Rectangle("blue", 3, 4)
print(my_rectangle.describe()) # Output: This rectangle is blue, with an area of 12 square units.
متد call#
متد call به شما این امکان را میدهد که یک نمونه از کلاس را مانند یک تابع فراخوانی کنید. این ویژگی برای مواقعی مفید است که بخواهید از یک شیء مانند یک تابع استفاده کنید.
class Circle(Shape):
def __init__(self, color, radius):
super().__init__(color)
self.radius = radius
def area(self):
return 3.14 * self.radius * self.radius
def __call__(self):
return f"This circle is {self.color}, with an area of {self.area()} square units."
استفاده از متد call#
شما میتوانید یک نمونه از کلاس را ایجاد کرده و آن را مانند یک تابع فراخوانی کنید. به این ترتیب، شیء خود را میتوانید مانند یک تابع عملگر فراخوانی کنید که باعث میشود کد شما انعطافپذیرتر و سادهتر باشد.
my_circle = Circle("green", 5)
print(my_circle()) # Output: This circle is green, with an area of 78.5 square units.
مستندات بیشتر#
برای کسب اطلاعات بیشتر در مورد کلاسها و برنامهنویسی شیگرا (OOP) در پایتون، میتوانید به منابع زیر مراجعه کنید:
مستندات رسمی پایتون در مورد کلاسها
راهنمای Real Python در مورد کلاسها و OOP
آموزش OOP در پایتون
این منابع به شما کمک میکنند که درک عمیقتری از برنامهنویسی شیگرا در پایتون پیدا کنید و به شما در نوشتن کدهای موثرتر و مقیاسپذیرتر کمک خواهند کرد.