Имя модуля.
Модуль main.py является главным и использует модуль message.py. При запуске модуля main.py программа выполнит всю необходимую работу. Однако, если мы запустим отдельно модуль message.py сам по себе, то ничего на консоли не увидим. Модуль message просто определяет функцию и переменную и не выполняет никаких действий. Мы можем сделать так, чтобы модуль message.py мог использоваться как сам по себе, так и подключаться в другие модули.
При выполнении модуля среда определяет его имя и присваивает его глобальной переменной name (с обеих сторон по два подчеркивания). Если модуль является запускаемым, то его имя равно main (также по два подчеркивания с каждой стороны). Если модуль используется в другом модуле, то в момент выполнения его имя аналогично названию файла без расширения py. И мы можем это использовать. Так, изменим содержимое файла message.py, смотрим код:
🐍 Укус питона // 💬 Чат // #теория #модули
Модуль main.py является главным и использует модуль message.py. При запуске модуля main.py программа выполнит всю необходимую работу. Однако, если мы запустим отдельно модуль message.py сам по себе, то ничего на консоли не увидим. Модуль message просто определяет функцию и переменную и не выполняет никаких действий. Мы можем сделать так, чтобы модуль message.py мог использоваться как сам по себе, так и подключаться в другие модули.
При выполнении модуля среда определяет его имя и присваивает его глобальной переменной name (с обеих сторон по два подчеркивания). Если модуль является запускаемым, то его имя равно main (также по два подчеркивания с каждой стороны). Если модуль используется в другом модуле, то в момент выполнения его имя аналогично названию файла без расширения py. И мы можем это использовать. Так, изменим содержимое файла message.py, смотрим код:
🐍 Укус питона // 💬 Чат // #теория #модули
Имя модуля. Продолжение.
Следует обратить внимание на вызов функции main, первая часть кода:
Переменная name указывает на имя модуля. Для главного модуля, который непосредственно запускается, эта переменная всегда будет иметь значение main вне зависимости от имени файла.
Поэтому, если мы будем запускать скрипт message.py отдельно, сам по себе, то Python присвоит переменной name значение main, далее в выражении if вызовет функцию main из этого же файла. Однако если мы будем запускать другой скрипт, а этот - message.py - будем подключать в качестве вспомогательного, для message.py переменная name будет иметь значение message. И соответственно метод main в файле message.py не будет работать.
Данный подход с проверкой имени модуля является более рекомендуемым подходом, чем просто вызов метода main. В файле main.py также можно сделать проверку на то, является ли модуль главным (хотя в прицнипе это необязательно), вторая часть кода:
🐍 Укус питона // 💬 Чат // #теория #модули
Следует обратить внимание на вызов функции main, первая часть кода:
Переменная name указывает на имя модуля. Для главного модуля, который непосредственно запускается, эта переменная всегда будет иметь значение main вне зависимости от имени файла.
Поэтому, если мы будем запускать скрипт message.py отдельно, сам по себе, то Python присвоит переменной name значение main, далее в выражении if вызовет функцию main из этого же файла. Однако если мы будем запускать другой скрипт, а этот - message.py - будем подключать в качестве вспомогательного, для message.py переменная name будет иметь значение message. И соответственно метод main в файле message.py не будет работать.
Данный подход с проверкой имени модуля является более рекомендуемым подходом, чем просто вызов метода main. В файле main.py также можно сделать проверку на то, является ли модуль главным (хотя в прицнипе это необязательно), вторая часть кода:
🐍 Укус питона // 💬 Чат // #теория #модули
Что выведет этот код?
Anonymous Quiz
30%
Welcome PYnative
22%
WelcomPYnative
42%
Welcom PYnative
6%
WelcomePYnative
Генерация байт-кода модулей.
При выполнении скрипта на языке Python все выполнение в общем случае разбивается на две стадии:
1) Файл с кодом (файл с расширением .py) компилируется в промежуточный байткод.
2) Далее скомпилированный байт-кодом интерпретируется, то есть происходит собственно выполнение программы.
Допустим, в папке проекта у нас размещен файл user.py со простейшей функцией, которая принимает два параметра и выводит их значения:
Подключим этот файл в главном модуле программы, который пусть называется app.py, вторая часть примера:
При выполнении этого скрипта в папке проекте (где располагается модуль "user.py") будет создан каталог pycache. А в нем будет сгенерирован файл байткода, который будет наподобие следующего user.cpython-версия.pyc, где в качестве версии будет применяться версия используемого интерпретатора, например, 311. Сгенерированный pyc-файл является бинарным, поэтому текстовом редакторе нет смысла его открывать.
🐍 Укус питона // 💬 Чат // #теория #модули #байткод
При выполнении скрипта на языке Python все выполнение в общем случае разбивается на две стадии:
1) Файл с кодом (файл с расширением .py) компилируется в промежуточный байткод.
2) Далее скомпилированный байт-кодом интерпретируется, то есть происходит собственно выполнение программы.
Допустим, в папке проекта у нас размещен файл user.py со простейшей функцией, которая принимает два параметра и выводит их значения:
Подключим этот файл в главном модуле программы, который пусть называется app.py, вторая часть примера:
При выполнении этого скрипта в папке проекте (где располагается модуль "user.py") будет создан каталог pycache. А в нем будет сгенерирован файл байткода, который будет наподобие следующего user.cpython-версия.pyc, где в качестве версии будет применяться версия используемого интерпретатора, например, 311. Сгенерированный pyc-файл является бинарным, поэтому текстовом редакторе нет смысла его открывать.
🐍 Укус питона // 💬 Чат // #теория #модули #байткод
Что выведет этот код?
Anonymous Quiz
13%
PYn PYnat ive PYnativ vitanYP
41%
Yna PYnat tive PYnativ vitanYP
46%
Yna PYnat tive PYnativ PYnativ
Ручная компиляция байткода
Хотя файл байткода создается автоматически, мы вручную можем его сгенерировать. Для этого есть несколько способов: компиляция с помощью скрипта py_compile и компиляция с помощью модуля compileall.
Скрипт py_compile применяется для компиляции отдельных файлов. Для компиляции произвольного скрипта user.py в файл с байткодом мы могли бы использовать следующую программу:
Для компиляции в функцию compile() передаем путь к скрипту. После выполнения программы в текущей папке также будет сгенерирован каталог pycache, а в нем файл user.cpython-311.pyc
🐍 Укус питона // 💬 Чат // #теория #модули #байткод
Хотя файл байткода создается автоматически, мы вручную можем его сгенерировать. Для этого есть несколько способов: компиляция с помощью скрипта py_compile и компиляция с помощью модуля compileall.
Скрипт py_compile применяется для компиляции отдельных файлов. Для компиляции произвольного скрипта user.py в файл с байткодом мы могли бы использовать следующую программу:
Для компиляции в функцию compile() передаем путь к скрипту. После выполнения программы в текущей папке также будет сгенерирован каталог pycache, а в нем файл user.cpython-311.pyc
🐍 Укус питона // 💬 Чат // #теория #модули #байткод
Ручная компиляция байткода. Продолжение.
Для компиляции в функцию compile() передаем путь к скрипту. После выполнения программы в текущей папке также будет сгенерирован каталог pycache, а в нем файл user.cpython-311.pyc
Модуль compileall применяется для компиляции всех файлов Python по определенным путям. Например, скомпилируем все файлы в каталоге C:/python/files, смотрим пример.
По умолчанию компилируются даже те файлы, которые содержатся в подкаталогах. Если надо скомпилировать только те файлы, которые располагаются непосредственно в указанно папке, то применяется опция -l
🐍 Укус питона // 💬 Чат // #теория #модули #байткод
Для компиляции в функцию compile() передаем путь к скрипту. После выполнения программы в текущей папке также будет сгенерирован каталог pycache, а в нем файл user.cpython-311.pyc
Модуль compileall применяется для компиляции всех файлов Python по определенным путям. Например, скомпилируем все файлы в каталоге C:/python/files, смотрим пример.
По умолчанию компилируются даже те файлы, которые содержатся в подкаталогах. Если надо скомпилировать только те файлы, которые располагаются непосредственно в указанно папке, то применяется опция -l
🐍 Укус питона // 💬 Чат // #теория #модули #байткод
Модуль 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 управляет генерацией случайных чисел. Его основные функции:
• random(): генерирует случайное число от 0.0 до 1.0
• randint(): возвращает случайное число из определенного диапазона
• randrange(): возвращает случайное число из определенного набора чисел
• shuffle(): перемешивает список
• choice(): возвращает случайный элемент списка
Функция random() возвращает случайное число с плавающей точкой в промежутке от 0.0 до 1.0. Если же нам необходимо число из большего диапазона, скажем от 0 до 100, то мы можем соответственно умножить результат функции random на 100.
Функция randint(min, max) возвращает случайное целое число в промежутке между двумя значениями min и max.
🐍 Укус питона // 💬 Чат // #теория #модули #random
Что выведет этот код?
Anonymous Quiz
14%
True False True True
27%
True True True True
20%
True False True False
39%
True True True False
Модуль random
Функция randrange() возвращает случайное целое число из определенного набора чисел. Она имеет три формы:
• randrange(stop): в качестве набора чисел, из которых происходит извлечение случайного значения, будет использоваться диапазон от 0 до числа stop
• randrange(start, stop): набор чисел представляет диапазон от числа start до числа stop
• randrange(start, stop, step): набор чисел представляет диапазон от числа start до числа stop, при этом каждое число в диапазоне отличается от предыдущего на шаг step
🐍 Укус питона // 💬 Чат // #теория #модули #random #randrange
Функция randrange() возвращает случайное целое число из определенного набора чисел. Она имеет три формы:
• randrange(stop): в качестве набора чисел, из которых происходит извлечение случайного значения, будет использоваться диапазон от 0 до числа stop
• randrange(start, stop): набор чисел представляет диапазон от числа start до числа stop
• randrange(start, stop, step): набор чисел представляет диапазон от числа start до числа stop, при этом каждое число в диапазоне отличается от предыдущего на шаг step
🐍 Укус питона // 💬 Чат // #теория #модули #random #randrange