Помимо маркировки каталога как пакета Python и определения __all__
, __init__.py
позволяет вам определять любую переменную на уровне пакета. Это часто бывает удобно, если пакет определяет что-то, что будет импортироваться часто, в стиле API.
Вот пример из одного из моих проектов, в котором я часто импортирую файл sessionmaker
Session
, чтобы взаимодействовать с моей базой данных. Я написал пакет «database» с несколькими модулями:
database/
__init__.py
schema.py
insertions.py
queries.py
Мой __init__.py
содержит следующий код:
import os
from sqlalchemy.orm import sessionmaker
from sqlalchemy import create_engine
engine = create_engine(os.environ['DATABASE_URL'])
Session = sessionmaker(bind=engine)
Так как я определяю Session
здесь, я может начать новый сеанс, используя синтаксис ниже. Этот код был бы таким же выполненным изнутри или вне каталога пакета базы данных.
from database import Session
session = Session()
Конечно, это небольшое удобство - альтернативой было бы определить Session
в новый файл типа «create_session.py» в моем пакете базы данных и начать новые сеансы, используя:
from database.create_session import Session
session = Session()
Существует довольно интересная красноватая нить, охватывающая соответствующие применения __init__.py
здесь:
http://www.reddit.com/r/Python/comments/1bbbwk/whats_your_opinion_on_what_to_include_in_init_py/
Мнение большинства кажется что файлы __init__.py
должны быть очень тонкими, чтобы не нарушать философию «явный, а не скрытый».
Не вопрос о программировании, действительно:
Что-то как следующее.
right( "0000000000" & number, 10 )
Помещенный 10 обнуляет слева, займите самые правые 10 позиций, независимо от того, что они оказываются.
кроме того, Вы имеете
text( number, "0000000000" )
Формат> Ячейки...> Число> Пользовательский> Тип> 0000000000