Python提出了包(Package)的概念。包就是文件夹,在该文件夹下有个“__init__.py” 文件, __init__.py 的模块可以是一个空模块,可以写一些初始化代码,其作用就是告诉 Python 要将该目录当成包来处理。Python 标准库中的每个库都有好多个包,而每个包中都有若干个模块。
现在以中国日历"chinese_calendar"库为例:
__init__.py文件的内容是:
# -*- coding: utf-8 -*-
from __future__ import absolute_import, unicode_literals
from .constants import Holiday, holidays, in_lieu_days, workdays
from .utils import (
find_workday,
get_dates,
get_holiday_detail,
get_holidays,
get_solar_terms,
get_workdays,
is_holiday,
is_in_lieu,
is_workday,
)
__version__ = "1.8.0"
__all__ = [
"Holiday",
"holidays",
"in_lieu_days",
"workdays",
"is_holiday",
"is_in_lieu",
"is_workday",
"get_holiday_detail",
"get_solar_terms",
"get_dates",
"get_holidays",
"get_workdays",
"find_workday",
]
从constants.py导入类Holiday、变量holidays/workdays/in_lieu_days。
从utils.py导入find_workday等9个函数。备注:多个导入的内容可以加括号也可以不加括号。
__all__变量,用来指定哪些变量和函数会被导入到包中,这里的内容的数量小于或等于全部可使用内容的数量。
再看看utils.py的结构:
# -*- coding: utf-8 -*-
from __future__ import absolute_import, unicode_literals
import datetime
from chinese_calendar.constants import holidays, in_lieu_days, workdays
from chinese_calendar.solar_terms import SOLAR_TERMS_C_NUMS, SOLAR_TERMS_DELTA, SOLAR_TERMS_MONTH, SolarTerms
def _wrap_date(date):
……
def _validate_date(*dates):
……
def is_holiday(date):
……
def is_workday(date):
……
def get_holidays(start, end, include_weekends=True):
……
……
在utils.py里,也可用这样的方式导入其它文件的变量或函数:
from chinese_calendar.constants import holidays, in_lieu_days, workdays