Module ها و زمان در پایتون

01 آبان 1398
Module ها و زمان در پایتون

ماژول ها در زبان پایتون

Module فایلی است که حاوی مجموعه ای از توابع می باشد و شما برای استفاده از آن باید آن را در پروژه ی خود وارد کنید. به زبان ساده تر ماژول در زبان پایتون معادل همان کتابخانه ها (library) در زبان های دیگر است. برای ساخت ماژول تنها باید کدهای خود را در فایلی با پسوند py. ذخیره کنید. به طور مثال کد ساده ی زیر را در فایل mymodule.py قرار داده و ذخیره می کنیم:

def greeting(name):
  print("Hello, " + name)

حالا می توانیم با استفاده از دستور import از ماژول خودمان استفاده کنیم:

import mymodule

mymodule.greeting("Jonathan")

خروجی:

Hello, Jonathan

همانطور که می بینید برای استفاده از توابع درون ماژول باید از قالب module_name.function_name (نام ماژول + علامت نقطه + نام تابع) استفاده کنید. البته ماژول ها علاوه بر توابع می توانند حاوی متغیر ها نیز باشند، به طور مثال کد زیر را در فایل mymodule.py کپی کرده و آن را ذخیره می کنیم:

person1 = {
  "name": "John",
  "age": 36,
  "country": "Norway"
}

حالا می توانیم آن را در یک فایل دیگر import کرده و از آن استفاده کنیم:

import mymodule

a = mymodule.person1["age"]
print(a)

خروجی عدد 36 (سن فرد) خواهد بود.

برخی اوقات ماژول های مورد استفاده مان را خودمان ننوشته ایم و نویسنده اصلی نام طولانی برای ماژول انتخاب کرده است (یک مثال اغراق آمیز می تواند به شل HandlingExceptionsWhileWorkingWithPythonObjects باشد). به نظر شما راهی وجود دارد که بدون تغییر نام ماژول از آن با نام دیگری استفاده کنیم؟ حدستان درست است. کلیدواژه ی as به ما اجازه میدهد که در هنگام import نام ماژول را تغییر دهیم:

import mymodule as mx

a = mx.person1["age"]
print(a)

در مثال بالا نام ماژول در اسکریپت به mx تغییر می کند بنابراین می توانید به جای mymodule.person1 بگویید mx.person1 و هیچ خطایی نیز رخ نمیدهد.

ماژول های پیش فرض پایتون

در زبان پایتون ماژول های از قبل تعریف شده ای وجود دارند که شما بر حسب نیاز خود می توانید از آن ها استفاده کنید. یکی از این ماژول ها platform نام دارد:

import platform

x = platform.system()
print(x)

یکی از توابع درون این ماژول ()dir نام دارد که نام تمامی متغیر ها و توابع موجود در یک ماژول را (چه خودتان ماژول را ساخته باشید چه ماژول های دیگران) برایتان لیست می کند. به طور مثال  ما از این تابع روی خود ماژول platform استفاده می کنیم:

import platform

x = dir(platform)
print(x)

خروجی:

['DEV_NULL', '_UNIXCONFDIR', 'WIN32_CLIENT_RELEASES', 'WIN32_SERVER_RELEASES', '__builtins__', '__cached__', '__copyright__', '__doc__', '__file__', '__loader__', '__name__', '__package __', '__spec__', '__version__', '_default_architecture', '_dist_try_harder', '_follow_symlinks', '_ironpython26_sys_version_parser', '_ironpython_sys_version_parser', '_java_getprop', '_libc_search', '_linux_distribution', '_lsb_release_version', '_mac_ver_xml', '_node', '_norm_version', '_perse_release_file', '_platform', '_platform_cache', '_pypy_sys_version_parser', '_release_filename', '_release_version', '_supported_dists', '_sys_version', '_sys_version_cache', '_sys_version_parser', '_syscmd_file', '_syscmd_uname', '_syscmd_ver', '_uname_cache', '_ver_output', 'architecture', 'collections', 'dist', 'java_ver', 'libc_ver', 'linux_distribution', 'mac_ver', 'machine', 'node', 'os', 'platform', 'popen', 'processor', 'python_branch', 'python_build', 'python_compiler', 'python_implementation', 'python_revision', 'python_version', 'python_version_tuple', 're', 'release', 'subprocess', 'sys', 'system', 'system_aliases', 'uname', 'uname_result', 'version', 'warnings', 'win32_ver']

شما می توانید با جست و جو در مورد هر کدام از این توابع و متغیرها اطلاعات کاملی از آن ها به دست بیاورید.

همچنین به یاد داشته باشید که اگر به تمام این توابع نیازی ندارید، می توانید با استفاده از کلیدواژه ی  from فقط قسمت هایی از ماژول را وارد پروژه ی خود کنید. به طور مثال ماژول ما (mymodule) تا این لحظه یک تابع و یک dictionary دارد:

def greeting(name):
  print("Hello, " + name)

person1 = {
  "name": "John",
  "age": 36,
  "country": "Norway"
}

اگر بخواهیم فقط person1 را از آن وارد یک پروژه ی دیگر کنیم می توانیم بگوییم:

from mymodule import person1

print(person1["age"])

حالا فقط person1 وارد کد ها می شود (تابع وارد نخواهد شد). خروجی عدد 36 خواهد بود.

هشدار: هنگام استفاده از کلیدواژه ی from و وارد کردن قسمت هایی خاص از ماژولی خاص، نباید از نام ماژول استفاده کنید. بنابراین کد بالا به صورت ["mymodule.person1["age کاملا غلط است و به جای آن باید از ["person1["age استفاده کنید.

تاریخ و زمان در پایتون

برخلاف بسیاری از زبان های برنامه نویسی دیگر، تاریخ و زمان در پایتون data type مخصوص خودش را ندارد و برای کار با تاریخ و زمان باید از ماژولی به نام datetime استفاده کنیم تا بتوانیم با تاریخ های پایتون به صورت اشیاء Date کار کنیم. مثال:

import datetime

x = datetime.datetime.now()

print(x)

خروجی این کد زمان فعلی خواهد بود (هر زمانی که کد اجرا شود). در واقع date شامل سال، ماه، روز، ساعت، دقیقه، ثانیه و میکرو ثانیه است. ماژول datetime متدهای بسیار زیادی برای کار با تاریخ و زمان دارد که بررسی همه ی آن ها در یک مقاله ممکن نیست اما من سعی کرده ام مهم ترین موارد آن را برایتان بیاورم. مثال زیر سال و روز هفته را به ما برمی گرداند:

import datetime

x = datetime.datetime.now()

print(x.year)
print(x.strftime("%A"))

خروجی (در هنگام نوشتن این مقاله):

2019
Tuesday

ساخت شیء date

برای ساخت شیء date باید از تابعی به نام ()datetime در ماژول datetime استفاده کنیم. این تابع برای ساخت یک تاریخ به سه پارامتر احتیاج دارد: سال، ماه و روز. مثالی از ساخته شدن شیء Date را در کد زیر برایتان آورده ام:

import datetime

x = datetime.datetime(2020, 5, 17)

print(x)

خروجی:

2020-05-17 00:00:00

البته این تابع پارامترهای دیگری نیز می گیرد. لیست کامل این پارامترها بدین شکل است:

hour, minute, second, microsecond, tzone

یعنی ساعت، دقیقه، ثانیه، میکروثانیه و منطفه ی زمانی (time zone) اما دو مورد آخر به ترتیب مقادیر پیش فرض 0 و None را دارند و اجباری نیستند.

متد ()strftime

شیء datetime متدی برای تبدیل زمان به رشته های قابل خواندن (برای انسان ها) دارد. نام این متد ()strftime است که یک پارامتر می گیرد و این پارامتر مشخص کننده ی قالب رشته ی زمان خواهد بود. به طور مثال:

import datetime

x = datetime.datetime(2018, 6, 1)

print(x.strftime("%B"))

خروجی ماه June است. مقادیر ممکن این پارامتر را در لیست زیر می بینید:

دستور توضیحات مثال
%a روز هفته - حالت خلاصه Wed (چهار شنبه)
%A روز هفته - حالت کامل Wednesday
%w روز هفته - به صورت عدد 3
%d روز ماه - عددی بین 01 تا 31 31
%b نام ماه - به صورت خلاصه Dec (ماه دسامبر)
%B نام ماه - به صورت کامل December
%m نام ماه - به صورت یک عدد 12
%y سال - به صورت خلاصه، بدون قرن 18
%Y سال به صورت کامل 2018
%H ساعت - عددی بین 00 و 23 17
%I ساعت - عددی بین 00 و 12 05
%p مشخص کردن AM/PM PM
%M دقیقه - عددی بین 00 و 59 41
%S ثانیه - عددی بین 00 و 59 08
%f میکرو ثانیه - عددی بین 000000 و 999999 548513
%z offset برای UTC +0100
%Z منطقه ی زمانی CST
%j روز سال به صورت عددی بین 001 و 366 365
%U هفته ی سال (شروع با یکشنبه) - عددی بین 00 و 53 52
%W هفته ی سال (شروع با دوشنبه) - عددی بین 00 و 53 52
%c نسخه ی محلی زمان و تاریخ Mon Dec 31 17:41:00 2018
%x نسخه ی محلی تاریخ 12/31/18
%X نسخه ی محلی زمان 17:41:00
%% کاراکتر % %

لیست کامل این دستورات به زبان انگلیسی

در قسمت بعد با JSON کار خواهیم کرد.

تمام فصل‌های سری ترتیبی که روکسو برای مطالعه‌ی دروس سری از مقدماتی تا پیشرفته با پایتون توصیه می‌کند:
نویسنده شوید

دیدگاه‌های شما

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.