30-Days-Of-Python/Persain/12_modules.md

14 KiB
Raw Permalink Blame History

۳۰ روز پایتون: روز ۱۲ - ماژول‌ها

Twitter Follow

نویسنده: Asabeneh Yetayeh
ویرایش دوم: جولای، ۲۰۲۱

<< روز ۱۱ | روز ۱۳ >>

30DaysOfPython

📘 روز ۱۲

ماژول‌ها

ماژول چیست

ماژول فایلی است حاوی مجموعه‌ای از کدها یا مجموعه‌ای از توابع که می‌توان آن را به یک برنامه اضافه کرد. یک ماژول می‌تواند فایلی حاوی یک متغیر، یک تابع یا یک پایگاه کد بزرگ باشد.

ایجاد یک ماژول

برای ایجاد یک ماژول، کدهای خود را در یک اسکریپت پایتون می‌نویسیم و آن را با پسوند .py ذخیره می‌کنیم. فایلی به نام mymodule.py در پوشه پروژه خود ایجاد کنید. بیایید کدی را در این فایل بنویسیم.

# فایل mymodule.py
def generate_full_name(firstname, lastname):
    return firstname + ' ' + lastname

فایل main.py را در دایرکتوری پروژه خود ایجاد کرده و فایل mymodule.py را وارد (import) کنید.

وارد کردن (Import) یک ماژول

برای وارد کردن فایل، از کلمه کلیدی import و فقط نام فایل استفاده می‌کنیم.

# فایل main.py
import mymodule
print(mymodule.generate_full_name('Asabeneh', 'Yetayeh')) # Asabeneh Yetayeh

وارد کردن توابع از یک ماژول

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

# فایل main.py
from mymodule import generate_full_name, sum_two_nums, person, gravity
print(generate_full_name('Asabneh','Yetayeh'))
print(sum_two_nums(1,9))
mass = 100
weight = mass * gravity
print(weight)
print(person['firstname'])

وارد کردن توابع از یک ماژول و تغییر نام آن‌ها

هنگام وارد کردن، می‌توانیم نام ماژول را تغییر دهیم.

# فایل main.py
from mymodule import generate_full_name as fullname, sum_two_nums as total, person as p, gravity as g
print(fullname('Asabneh','Yetayeh'))
print(total(1, 9))
mass = 100
weight = mass * g
print(weight)
print(p)
print(p['firstname'])

وارد کردن ماژول‌های داخلی (Built-in)

مانند سایر زبان‌های برنامه‌نویسی، ما نیز می‌توانیم با استفاده از کلمه کلیدی import، ماژول‌ها را با وارد کردن فایل/تابع مربوطه وارد کنیم. بیایید ماژول‌های رایجی را که بیشتر اوقات استفاده خواهیم کرد، وارد کنیم. برخی از ماژول‌های داخلی رایج عبارتند از: math، datetime، os، sys، random، statistics، collections، json، re.

ماژول OS

با استفاده از ماژول os پایتون، امکان انجام خودکار بسیاری از وظایف سیستم‌عامل وجود دارد. ماژول OS در پایتون توابعی را برای ایجاد، تغییر دایرکتوری کاری فعلی و حذف یک دایرکتوری (پوشه)، دریافت محتویات آن، تغییر و شناسایی دایرکتوری فعلی فراهم می‌کند.

# وارد کردن ماژول
import os
# ایجاد یک دایرکتوری
os.mkdir('directory_name')
# تغییر دایرکتوری فعلی
os.chdir('path')
# دریافت دایرکتوری کاری فعلی
os.getcwd()
# حذف دایرکتوری
os.rmdir()

ماژول Sys

ماژول sys توابع و متغیرهایی را فراهم می‌کند که برای دستکاری بخش‌های مختلف محیط زمان اجرای پایتون استفاده می‌شوند. تابع sys.argv لیستی از آرگومان‌های خط فرمان را که به یک اسکریپت پایتون ارسال شده‌اند، برمی‌گرداند. آیتم با ایندکس 0 در این لیست همیشه نام اسکریپت است، در ایندکس 1 آرگومانی است که از خط فرمان ارسال شده است.

مثالی از فایل script.py:

import sys
#print(sys.argv[0], argv[1],sys.argv[2]) # این خط چاپ می‌کند: filename argument1 argument2
print('Welcome {}. Enjoy {} challenge!'.format(sys.argv[1], sys.argv[2]))

حالا برای بررسی نحوه عملکرد این اسکریپت، در خط فرمان نوشتم:

python script.py Asabeneh 30DaysOfPython```

نتیجه:

```sh
Welcome Asabeneh. Enjoy 30DayOfPython challenge!

برخی از دستورات مفید sys:

# برای خروج از sys
sys.exit()
# برای دانستن بزرگترین مقدار صحیحی که یک متغیر می‌تواند بگیرد
sys.maxsize
# برای دانستن مسیر محیطی (environment path)
sys.path
# برای دانستن نسخه پایتونی که استفاده می‌کنید
sys.version

ماژول Statistics

ماژول statistics توابعی برای آمار ریاضی داده‌های عددی فراهم می‌کند. توابع آماری محبوبی که در این ماژول تعریف شده‌اند عبارتند از: mean، median، mode، stdev و غیره.

from statistics import * # وارد کردن تمام ماژول‌های statistics
ages = [20, 20, 4, 24, 25, 22, 26, 20, 23, 22, 26]
print(mean(ages))       # ~22.9
print(median(ages))     # 23
print(mode(ages))       # 20
print(stdev(ages))      # ~2.3

ماژول Math

ماژولی حاوی بسیاری از عملیات‌ها و ثابت‌های ریاضی.

import math
print(math.pi)           # 3.141592653589793, ثابت پی
print(math.sqrt(2))      # 1.4142135623730951, ریشه دوم
print(math.pow(2, 3))    # 8.0, تابع توان
print(math.floor(9.81))  # 9, گرد کردن به سمت پایین
print(math.ceil(9.81))   # 10, گرد کردن به سمت بالا
print(math.log10(100))   # 2, لگاریتم در مبنای 10

اکنون، ما ماژول math را وارد کرده‌ایم که حاوی توابع زیادی است که می‌تواند به ما در انجام محاسبات ریاضی کمک کند. برای بررسی اینکه ماژول چه توابعی دارد، می‌توانیم از help(math) یا dir(math) استفاده کنیم. این کار توابع موجود در ماژول را نمایش می‌دهد. اگر بخواهیم فقط یک تابع خاص از ماژول را وارد کنیم، آن را به صورت زیر وارد می‌کنیم:

from math import pi
print(pi)```

همچنین امکان وارد کردن چندین تابع به صورت همزمان وجود دارد

```py
from math import pi, sqrt, pow, floor, ceil, log10
print(pi)                 # 3.141592653589793
print(sqrt(2))            # 1.4142135623730951
print(pow(2, 3))          # 8.0
print(floor(9.81))        # 9
print(ceil(9.81))         # 10
print(math.log10(100))    # 2

اما اگر بخواهیم تمام توابع موجود در ماژول math را وارد کنیم، می‌توانیم از * استفاده کنیم.

from math import *
print(pi)                  # 3.141592653589793, ثابت پی
print(sqrt(2))             # 1.4142135623730951, ریشه دوم
print(pow(2, 3))           # 8.0, تابع توان
print(floor(9.81))         # 9, گرد کردن به سمت پایین
print(ceil(9.81))          # 10, گرد کردن به سمت بالا
print(math.log10(100))     # 2

هنگام وارد کردن، می‌توانیم نام تابع را نیز تغییر دهیم.

from math import pi as PI
print(PI) # 3.141592653589793

ماژول String

ماژول string یک ماژول مفید برای اهداف بسیاری است. مثال زیر برخی از کاربردهای ماژول string را نشان می‌دهد.

import string
print(string.ascii_letters) # abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
print(string.digits)        # 0123456789
print(string.punctuation)   # !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~

ماژول Random

تا الان با وارد کردن ماژول‌ها آشنا شده‌اید. بیایید یک وارد کردن دیگر انجام دهیم تا با آن کاملاً آشنا شویم. بیایید ماژول random را وارد کنیم که به ما یک عدد تصادفی بین 0 و 0.9999.... می‌دهد. ماژول random توابع زیادی دارد اما در این بخش ما فقط از random و randint استفاده خواهیم کرد.

from random import random, randint
print(random())   # هیچ آرگومانی نمی‌گیرد؛ مقداری بین 0 و 0.9999 برمی‌گرداند
print(randint(5, 20)) # یک عدد صحیح تصادفی بین [5, 20] به صورت inclusive (شامل خود اعداد) برمی‌گرداند

🌕 شما دارید پیشرفت زیادی می‌کنید. ادامه دهید! شما به تازگی چالش‌های روز ۱۲ را به پایان رسانده‌اید و ۱۲ قدم در مسیر خود به سوی بزرگی جلوتر هستید. اکنون تمرین‌هایی برای مغز و عضلات خود انجام دهید.

💻 تمرین‌ها: روز ۱۲

تمرین‌ها: سطح ۱

  1. تابعی بنویسید که یک random_user_id شش رقمی/کاراکتری تولید کند.
      print(random_user_id())
      '1ee33d'
    
  2. وظیفه قبلی را اصلاح کنید. تابعی به نام user_id_gen_by_user تعریف کنید. این تابع هیچ پارامتری نمی‌گیرد اما دو ورودی را با استفاده از input() دریافت می‌کند. یکی از ورودی‌ها تعداد کاراکترها و ورودی دوم تعداد IDهایی است که قرار است تولید شوند.
print(user_id_gen_by_user()) # ورودی کاربر: 5 5
#خروجی:
#kcsy2
#SMFYb
#bWmeq
#ZXOYh
#2Rgxf
   
print(user_id_gen_by_user()) # 16 5
#1GCSgPLMaBAVQZ26
#YD7eFwNQKNs7qXaT
#ycArC5yrRupyG00S
#UbGxOFI7UXSWAyKN
#dIV0SSUTgAdKwStr
  1. تابعی به نام rgb_color_gen بنویسید. این تابع رنگ‌های rgb (3 مقدار که هر کدام در محدوده 0 تا 255 هستند) تولید خواهد کرد.
print(rgb_color_gen())
# rgb(125,244,255) - خروجی باید به این شکل باشد

تمرین‌ها: سطح ۲

  1. تابعی به نام list_of_hexa_colors بنویسید که هر تعداد رنگ هگزادسیمال را در یک آرایه برمی‌گرداند (شش عدد هگزادسیمال که بعد از # نوشته می‌شوند. سیستم اعداد هگزادسیمال از 16 نماد، 0-9 و شش حرف اول الفبا، a-f تشکیل شده است. برای نمونه‌های خروجی به تمرین ۶ مراجعه کنید).
  2. تابعی به نام list_of_rgb_colors بنویسید که هر تعداد رنگ RGB را در یک آرایه برمی‌گرداند.
  3. تابعی به نام generate_colors بنویسید که بتواند هر تعداد رنگ hexa یا rgb تولید کند.
   generate_colors('hexa', 3) # ['#a3e12f','#03ed55','#eb3d2b'] 
   generate_colors('hexa', 1) # ['#b334ef']
   generate_colors('rgb', 3)  # ['rgb(5, 55, 175','rgb(50, 105, 100','rgb(15, 26, 80'] 
   generate_colors('rgb', 1)  # ['rgb(33,79, 176)']

تمرین‌ها: سطح ۳

  1. تابع خود را shuffle_list بنامید، این تابع یک لیست به عنوان پارامتر می‌گیرد و یک لیست درهم‌ریخته (shuffled) برمی‌گرداند.
  2. تابعی بنویسید که آرایه‌ای از هفت عدد تصادفی در محدوده 0-9 را برگرداند. همه اعداد باید منحصر به فرد باشند.

🎉 تبریک می‌گویم! 🎉

<< روز ۱۱ | روز ۱۳ >>