Операторы сравнения, запуск модуля с аругментами и др.тонкости python
Теги:
Приоритет сравнения в python
Числовые операторы: ==
, <=
, >=
, <
, >
, !=
.
Операторы сравнения in
и not in
проверяют, встречается ли значение (не встречается) в последовательности. Операторы сравнивают is
и is not
сравнивают, действительно ли два объекта являются одним и тем же объектом. Все операторы сравнения имеют одинаковый приоритет, который ниже, чем у всех числовых операторов.
Сравнения можно объединить в цепочку. Например, a < b == c
проверяет, меньше ли a, чем b, и, кроме того, b равно c.
Сравнения могут быть объединены с использованием логических операторов and
и or
, а результат сравнения (или любого другого логического выражения) может быть инвертирован с помощью not
. У них более низкий приоритет, чем у операторов сравнения. При этом у логических операторов not
имеет наивысший приоритет and
/or
самый низкий.
Например A and not B or C
эквивалентно (A and (not B)) or C
.
Круглые скобки могут использоваться для обозначения желаемой композиции и желательно использовать скобки для упрощения понимания конструкции сравнения.
Логические операторы и операторы and
/or
являются операторами короткого замыкания: их аргументы оцениваются слева направо, и оценка прекращается, как только определен результат, соответствующий условий.
При использовании в качестве результата расчета, а не для выяснения истинности утверждения, оператор короткого замыкания вернет последний участвовавший в вычислениях аргумент.
Результат сравнения или другое логическое выражение можно присвоить переменной.
>>> string1, string2, string3 = '', 'Trondheim', 'Hammer Dance'
>>> non_null = string1 or string2 or string3
>>> non_null
'Trondheim'
Присвоение внутри выражений должно выполняться явно с помощью оператора моржа :=
для python3.10 и выше.
Запуск модуля с аргументами
def my(h):
return n + 1
if __name__ == "__main__":
import sys
my(int(sys.argv[1]))
$ python mymodule.py 50
51
Получить список ключей словаря
>>> d = {1: 123, 3: 456, 17: 879, 14: 111}
>>> print(list(d))
[1, 3, 17, 14]
отсортированный
>>> print(sorted(d))
[1, 3, 14, 17]
Порядок импорта модулей и пакетов
Поиск путей осуществляется в следующем порядке:
- в списке встроенных модулей
- в списке каталогов, заданном в
sys.path
.
При этом sys.path
инициализируется из следующих мест:
- каталог, содержащий входящий скрипт (или текущий каталог, если файл не указан).
- PYTHONPATH (список имен каталогов с тем же синтаксисом, что и переменная оболочки PATH).
- зависимости, определенные по дефолту установкой python (по соглашению включая каталог
site-packages
, управляемый модулем site).
В файловых системах, поддерживающих символические ссылки, каталог, содержащий входящий скрипт, вычисляется после перехода по символической ссылке. Другими словами, каталог, содержащий символическую ссылку, не добавляется в путь поиска модуля.
После инициализации программы Python может изменять sys.path
. Каталог, содержащий запускаемый скрипт, помещается в начало пути поиска, перед стандартным путем к библиотеке. Это означает, что скрипты в этом каталоге будут загружены вместо модулей, если их имена совпадают. Это может вести к ошибкам, если такое поведение не проектируется.
Для импорта пакетов доступно две конструкции
import this.that.then
from this.that.then import All
При использовании from
элемент может быть либо подмодулем (или подпакетом) пакета, либо каким-либо другим именем, определенным в пакете, например функцией, классом или переменной. Оператор импорта сначала проверяет, определен ли элемент в пакете; в противном случае он предполагает, что это модуль, и пытается его загрузить. Если его не удается найти, возникает исключение ImportError
. Напротив, при использовании синтаксиса типа import item.subitem.subsubsubitem
каждый элемент, кроме последнего, должен быть пакетом; последний элемент может быть модулем или пакетом, но не может быть классом, функцией или переменной, определенной в предыдущем элементе.
Можно использовать относительный импорт, но он основан на имени текущего модуля. Поскольку имя основного модуля всегда __main__
, модули, предназначенные для использования в качестве основного модуля приложения Python, всегда должны использовать абсолютный импорт.
dir()
Без аргументов dir()
возвращает имена, определенные в текущем пространстве имен. Если передать название модуля - возвращает пространство имен модуля. dir()
не возвращает имена встроенных функций - чятобы получить их используй:
>>> import builtins
>>> dir(builtins)