🐍 Укус питона 🐍
2.88K subscribers
778 photos
4 videos
279 links
🐍 Канал о программировании на языке Python. Тематические уроки и лайфхаки.

👽 Админ - @it_dashka
🔊 Купить рекламу: https://telega.in/c/byteofpython

👉 Чат: @abyteofpython
👉 Поделиться с друзьями: @byteofpython
Download Telegram
Что выведет этот код?
Anonymous Quiz
4%
100 500
23%
10 50
73%
None
Имя модуля.

Модуль main.py является главным и использует модуль message.py. При запуске модуля main.py программа выполнит всю необходимую работу. Однако, если мы запустим отдельно модуль message.py сам по себе, то ничего на консоли не увидим. Модуль message просто определяет функцию и переменную и не выполняет никаких действий. Мы можем сделать так, чтобы модуль message.py мог использоваться как сам по себе, так и подключаться в другие модули.

При выполнении модуля среда определяет его имя и присваивает его глобальной переменной name (с обеих сторон по два подчеркивания). Если модуль является запускаемым, то его имя равно main (также по два подчеркивания с каждой стороны). Если модуль используется в другом модуле, то в момент выполнения его имя аналогично названию файла без расширения py. И мы можем это использовать. Так, изменим содержимое файла message.py, смотрим код:

🐍 Укус питона // 💬 Чат // #теория #модули
Что выведет этот код?
Anonymous Quiz
2%
66 0
30%
36 0
4%
66 3
65%
36 3
Имя модуля. Продолжение.

Следует обратить внимание на вызов функции main, первая часть кода:

Переменная name указывает на имя модуля. Для главного модуля, который непосредственно запускается, эта переменная всегда будет иметь значение main вне зависимости от имени файла.

Поэтому, если мы будем запускать скрипт message.py отдельно, сам по себе, то Python присвоит переменной name значение main, далее в выражении if вызовет функцию main из этого же файла. Однако если мы будем запускать другой скрипт, а этот - message.py - будем подключать в качестве вспомогательного, для message.py переменная name будет иметь значение message. И соответственно метод main в файле message.py не будет работать.

Данный подход с проверкой имени модуля является более рекомендуемым подходом, чем просто вызов метода main. В файле main.py также можно сделать проверку на то, является ли модуль главным (хотя в прицнипе это необязательно), вторая часть кода:

🐍 Укус питона // 💬 Чат // #теория #модули
Генерация байт-кода модулей.

При выполнении скрипта на языке Python все выполнение в общем случае разбивается на две стадии:
1) Файл с кодом (файл с расширением .py) компилируется в промежуточный байткод.
2) Далее скомпилированный байт-кодом интерпретируется, то есть происходит собственно выполнение программы.

Допустим, в папке проекта у нас размещен файл user.py со простейшей функцией, которая принимает два параметра и выводит их значения:

Подключим этот файл в главном модуле программы, который пусть называется app.py, вторая часть примера:

При выполнении этого скрипта в папке проекте (где располагается модуль "user.py") будет создан каталог pycache. А в нем будет сгенерирован файл байткода, который будет наподобие следующего user.cpython-версия.pyc, где в качестве версии будет применяться версия используемого интерпретатора, например, 311. Сгенерированный pyc-файл является бинарным, поэтому текстовом редакторе нет смысла его открывать.

🐍 Укус питона // 💬 Чат // #теория #модули #байткод
Ручная компиляция байткода

Хотя файл байткода создается автоматически, мы вручную можем его сгенерировать. Для этого есть несколько способов: компиляция с помощью скрипта py_compile и компиляция с помощью модуля compileall.

Скрипт py_compile применяется для компиляции отдельных файлов. Для компиляции произвольного скрипта user.py в файл с байткодом мы могли бы использовать следующую программу:

Для компиляции в функцию compile() передаем путь к скрипту. После выполнения программы в текущей папке также будет сгенерирован каталог pycache, а в нем файл user.cpython-311.pyc

🐍 Укус питона // 💬 Чат // #теория #модули #байткод
Что выведет этот код?
Anonymous Quiz
35%
Error
49%
76
8%
1
8%
None
Ручная компиляция байткода. Продолжение.

Для компиляции в функцию compile() передаем путь к скрипту. После выполнения программы в текущей папке также будет сгенерирован каталог pycache, а в нем файл user.cpython-311.pyc

Модуль compileall применяется для компиляции всех файлов Python по определенным путям. Например, скомпилируем все файлы в каталоге C:/python/files, смотрим пример.

По умолчанию компилируются даже те файлы, которые содержатся в подкаталогах. Если надо скомпилировать только те файлы, которые располагаются непосредственно в указанно папке, то применяется опция -l

🐍 Укус питона // 💬 Чат // #теория #модули #байткод
Что выведет этот код?
Anonymous Quiz
33%
50
50%
NameError
14%
None
3%
0
Модуль random

Модуль random управляет генерацией случайных чисел. Его основные функции:

• random(): генерирует случайное число от 0.0 до 1.0
• randint(): возвращает случайное число из определенного диапазона
• randrange(): возвращает случайное число из определенного набора чисел
• shuffle(): перемешивает список
• choice(): возвращает случайный элемент списка

Функция random() возвращает случайное число с плавающей точкой в промежутке от 0.0 до 1.0. Если же нам необходимо число из большего диапазона, скажем от 0 до 100, то мы можем соответственно умножить результат функции random на 100.

Функция randint(min, max) возвращает случайное целое число в промежутке между двумя значениями min и max.

🐍 Укус питона // 💬 Чат // #теория #модули #random
Модуль random

Функция randrange() возвращает случайное целое число из определенного набора чисел. Она имеет три формы:

• randrange(stop): в качестве набора чисел, из которых происходит извлечение случайного значения, будет использоваться диапазон от 0 до числа stop
• randrange(start, stop): набор чисел представляет диапазон от числа start до числа stop
• randrange(start, stop, step): набор чисел представляет диапазон от числа start до числа stop, при этом каждое число в диапазоне отличается от предыдущего на шаг step

🐍 Укус питона // 💬 Чат // #теория #модули #random #randrange