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

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

👉 Чат: @abyteofpython
👉 Поделиться с друзьями: @byteofpython
Download Telegram
Что выведет этот код?
Anonymous Quiz
2%
66 0
30%
36 0
4%
66 3
64%
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
13%
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
Работа со списком

Для работы со списками в модуле random определены две функции: функция shuffle() перемешивает список случайным образом, а функция choice() возвращает один случайный элемент из списка:

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