ویرگول
ورودثبت نام
Ahmadreza Sezavar
Ahmadreza SezavarPhD in AI https://github.com/SezavarH
Ahmadreza Sezavar
Ahmadreza Sezavar
خواندن ۳ دقیقه·۲۳ روز پیش

پایتون برای حرفه‌ای‌ها - بخش اول

مقدمه

پایتون زبانی هست که هم ساده‌ست و هم عمیق.
تو این پست می‌خواهیم یه سری مفاهیم پایه‌ای و نسبتاً پیشرفته‌تر رو با مثال مرور کنیم:
بررسی مفاهیم کتابخانه، ماژول و پکیج
داک استرینگ، راهنمای نگارش PEP8
ماژول های array و تابع lambda
توابع map, filter, reduce
اگه می‌خوای کدهای تمیزتر و حرفه‌ای‌تری بنویسی، این پست برات مفیده.

ماژول، پکیج و کتابخانه (Module, Package, and Library)

ماژول یعنی یک فایل پایتون که داخلش کدهای آماده‌ای مثل توابع و کلاس‌ها نوشته شده‌اند و می‌توانی آن را در برنامه‌ات وارد (import) کنی.

پکیج یعنی وقتی چند ماژول مرتبط را در یک پوشه (directory) کنار هم می‌گذاری و در آن پوشه یک فایل مخصوص به نام (__init__) قراربدی، آن مجموعه می‌شود یک پکیج.
فایل پایتونی (__init__) باعث می‌شه پایتون تشخیص دهد که یک پوشه، یک پکیج است، نه فقط یک فولدر معمولی.

کتابخانه مجموعه‌ای از پکیج‌ها و ماژول‌ها است که برای یک هدف خاص ساخته شده‌اند.

مثال خیلی ساده برای اینکه همیشه یادت بماند:

فرض کن یک شهر داری:

  • کتابخانه (Library) = خود شهر

  • پکیج (Package) = محله‌های شهر

  • ماژول (Module) = خانه‌های داخل محله

  • توابع و کلاس‌ها = وسایل داخل خانه

مثال: NumPy یک کتابخانه است (مجموعه بزرگی از پکیج‌ها و ماژول‌ها برای کار با آرایه‌ها و محاسبات عددی)

ساختار داخلی NumPy چیزی شبیه این است:

numpy/ __init__.py core/ __init__.py numeric.py multiarray.py shape_base.py linalg/ __init__.py linalg.py fft/ __init__.py fftpack.py random/ __init__.py generator.py mt19937.py ...

همانطور که از ساختار بالا مشخص است، numpy یک کتابخانه است که مجموعه ای از پکیج های مختلفی مانند core, linalg, fft, random و غیره است (مانند یک شهر و محله هایش)
هر پکیج مانند random شامل ماژول های مختلفی مانند random می باشد (محله و خانه های آن)
هر ماژول مانند random نیز توابع مختلفی دارد که می توانیم از آنها استفاده کنیم مانند rand() (مانند خانه و وسایل داخلی آن)

numpy.random.rand از کجا می‌آید؟

  • شهر → numpy

  • محله → numpy.random

  • خانه → random یا generator

  • وسیله → تابع rand()

import numpy as np np.random.rand(3,3)

راهنمای نگارش - PEP8

PEP 8 یه راهنمای نگارش کد در پایتون هست.
رعایت کردنش باعث می‌شه کدت برای خودت و بقیه خواناتر و قابل فهم‌تر باشه.
مثال: استفاده از فاصله بعد از کاما، حداکثر ۷۹ کاراکتر در هر خط، نام‌گذاری متغیرها با حروف کوچک

داک‌استرینگ (Docstring)

برای مستندسازی تابع‌ها، کلاس‌ها و ماژول‌ها از داک‌استرینگ استفاده می‌کنیم. این یه رشته چندخطی با """ است.

def factorial(n): """محاسبه فاکتوریل یک عدد صحیح نامنفی""" if n == 0: return 1 return n * factorial(n - 1)

ماژول Array

اگر بخواهیم مفهومی به اسم آرایه که همه عنصر های آن از یک جنس هستند (مثلاً همه integer) را در پایتون پیاده سازی کنیم از این ماژول استفاده می کنیم.

import array a = array.array('i', [1, 2, 3]) # 'i' یعنی اعداد صحیح print(a[0]) # خروجی: 1

تابع لامبدا

لامبدا توابع کوچک و بی‌نام هستن. فقط یه عبارت دارن و از return استفاده نمی‌کنن.

square = lambda x: x ** 2 print(square(5)) # خروجی: 25

توابع map, filter, reduce

این سه تابع روی iterableها (لیست، تاپل، دیکشنری و ...) کار می‌کنن.

  • map: همه عناصر رو نگه می‌داره، ولی تابع روی هر کدوم اجرا می‌شه.

  • filter: فقط عناصری که شرط تابع رو برگردونن نگه می‌داره.

  • reduce: همه عناصر رو به یه مقدار واحد تبدیل می‌کنه (نیازمند functools.reduce).

from functools import reduce my_list = [1, 2, 3, 4] square = lambda x: x ** 2 even = lambda x: x % 2 == 0 add = lambda x, y: x + y print(list(map(square, my_list))) # [1, 4, 9, 16] print(list(filter(even, my_list))) # [2, 4] print(reduce(add, my_list)) # 10

توضیح قطعه کد بالا:
تابع map یک تابع را روی تمام اعضای یک لیست اعمال می‌کند و نتیجه‌ها را در یک آبجکت جدید برمی‌گرداند.

یعنی به هر عنصر از my_list می‌گوید: «تو را به تابع square می‌فرستم تا مربع‌ات را حساب کند.»

تابع filter برعکس map چیزی را تغییر نمی‌دهد؛ فقط مواردی که شرط خاصی را دارند، نگه می‌دارد.

در اینجا تابع even بررسی می‌کند که عدد زوج است یا نه. پس همه مقادیر فرد حذف می‌شوند.

تابع reduce کمی متفاوت است:

به جای برگرداندن لیستی از نتایج، کل لیست را به یک مقدار واحد تبدیل می‌کند.

تابع add دو به دو اعضای لیست را جمع می‌کند تا به یک نتیجه نهایی برسد:

(((1 + 2) + 3) + 4) = 10

یعنی reduce برای تجمیع (aggregate) داده‌هاست.

پایتون
۶
۰
Ahmadreza Sezavar
Ahmadreza Sezavar
PhD in AI https://github.com/SezavarH
شاید از این پست‌ها خوشتان بیاید