Python Основы

Contents
Введение
Hello World! - первый скрипт на Python
Как запускать скрипты
Отступы (indentation)
Арифметика
if __name__ == '__main__'
!#: Shebang
Scopes: области видимости
Полезные ссылки
Похожие статьи

Введение

Python, произностися как Пайтон, в русском языке распространено название Питон — высокоуровневый язык программирования общего назначения, ориентированный на повышение производительности разработчика и читаемости кода.

Синтаксис ядра Python минималистичен. В то же время стандартная библиотека включает большой объём полезных функций.

Python поддерживает структурное, объектно-ориентированное, функциональное, императивное и аспектно-ориентированное программирование.

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

Поддерживается разбиение программ на модули, которые, в свою очередь, могут объединяться в пакеты.

Эталонной реализацией Python является интерпретатор CPython, поддерживающий большинство активно используемых платформ.

Он распространяется под свободной лицензией Python Software Foundation License, позволяющей использовать его без ограничений в любых приложениях, включая проприетарные.

Есть реализация интерпретатора для JVM с возможностью компиляции, CLR, LLVM, другие независимые реализации. Проект PyPy использует JIT-компиляцию, которая значительно увеличивает скорость выполнения Python-программ.

Python — активно развивающийся язык программирования, новые версии с добавлением/изменением языковых свойств выходят примерно раз в два с половиной года.

Язык не подвергался официальной стандартизации, роль стандарта де-факто выполняет CPython, разрабатываемый под контролем автора языка.

В настоящий момент (апрель 2021) Python занимает третье место в рейтинге TIOBE с показателем 11,03%.

Аналитики отмечают, что это самый высокий балл Python за все время его присутствия в рейтинге.

Посмотреть текущий рейтинг можно здесь

Hello World!

Инструкция по запуску первой программы в Python

Убедитесь, что Python установлен и команда

python -V

Показывает версию Python, например

Python 3.9.1

Если вы работаете в Linux, UNIX или Bash в Windows перейдите в свою домашнюю директорию

В Linux

cd ~

В Windows

cd /mnt/c/Users/username

Создайте директорию python

mkdir python

Перейдите в неё, создайте файл hello_world.py и откройте его любым тестовым редактором

cd python
touch hello_world.py
vi hello_world.py

Вставьте туда следующий код

print("Hello World!")

Выполните

python hello_world.py

В терминале должно появиться сообщение

Hello World!

Больше деталей о запуске скриптов вы можете найти в следующем параграфе - «Запуск Python скрипта» и затем в if __name__ == "__main__":

Запуск скрипта

Чтобы запустить .py скрипт введите

python имя_файла.py

Результат такого запуска зависит от того, что указано после if __name__ == "__main__": если это условие вообще есть

print("Hello!")

python sample.py

Hello!

Теперь то же самое но в функции

def say_hello(): print("Hello!")

python sample.py

Ничего не произошло потому что функцию никто не вызвал

Можно добавить вызов функции следующим образом

def say_hello(): print("Hello!") say_hello()

python sample.py

Hello!

В этом случае функция будет вызываться всегда - как при запуске скрипта из терминала так и при импорте в другой модуль настроить это поведение можно с помощью переменной __name__ а точнее - с помощью условия if __name__ == "__main__":

Отступы (indentation)

Python не является языком поддерживающим свободный формат. Блоки кода не разделяются с помощью { }

Вместо этого блоки разделяются отступами по так называемому правилу оффсайда (Off-side rule)

Демонстрация

Рассмотрим файл for_loop.py

for i in range(1,4):print(i)

python for_loop.py

1
2
3

Всё работает прекрасно. Обратите внимание, что выведены были только i от 1 до 3. 4 python не вывел.

Если написать код не в одну строку, а следующим образом

for i in range(1,4): print(i)

то работать код не будет. Получится ошибка

File "/home/andrei/python/for_loop.py", line 2 print(i) ^ IndentationError: expected an indented block

Поэтому нужно поставить перед print пробел

for i in range(1,3): print(i)

python for_loop.py

1
2
3

Вместо одного пробела можно поставить табуляцию, но лучше поставить два или четыре пробела подряд.

PEP8 - документ, в котором собраны рекомендации по написанию Python кода говорит:

Use 4 spaces per indentation level

САМОЕ ВАЖНОЕ: Нельзя смешивать в одном файле отступы в виде табуляций и в виде пробелов. Выберите один стиль и придерживайтесь его.

Про то как правильно переносить слишком длинные строки можете прочитать здесь

Арифметика

/ - деление. Результат - число с плавающей точкой

>>> 5 / 2

2.5

// - целочисленное деление. Результат - округлённое до целого числа частное.

>>> 5 // 2

2

% - остаток от деления. Результат - остаток от //

>>> 5 % 2

1

Больше или равно >=

Печать спецсимволов HTML

Скрипт, с помощью которого можно распечатать определённое число спецсимволов HTML

for i in range(100001,125000): print "<tr><td>&#",i,";</td><td>&#",i,";</td></tr>"

Ссылки

Psyco
Shedskin
PyPy
Cython
Jython
IronPython
IDLE

Синтаксис

Set в фигурных скобках. Элемент добавляется с помощью .add()

if __name__ == '__main__'

Чтобы разобраться в смысле этой строки создадим два файла. first_module.py и second_module.py

В первом напишем

print(f"Имя первого модуля: {__name__}") # Если не любите f-string напишите: print("Имя первого модуля: {}".format(__name__))

Запустим его

python3 first_module.py

Имя первого модуля: __main__

Во втором запишем

import first_module

Запустим его

python3 second_module.py

Имя первого модуля: __first_module__

Вывод: когда модуль запущен непосредственно, его __name__ это __main__

Когда модуль импортирован в другой модуль, его __name__ это __название_py_файла__

Теперь когда все ясно, можно добавить в наш код условие if __name__ == "__main__"

def say_hello(): print("Hello!") def display_name(): print(f"Имя первого модуля: {__name__}") if __name__ == "__main__": say_hello()

Hello!

Или

def say_hello(): print("Hello!") def display_name(): print(f"Имя первого модуля: {__name__}") if __name__ == "__main__": display_name()

Имя первого модуля: __main__

Суть в том, что теперь мы определяем что будет выполняться при вызове этого скрипта а что нет.

Пакеты Python в Linux

Узнать сколько всего python3 пакетов в репозитории Ubuntu

apt-cache search python3 | wc -l

3472

Изучить их названия можно с помощью less

apt-cache search python3 | less

alembic - lightweight database migration tool for SQLAlchemy
brltty - Access software for a blind person using a braille display
debian-goodies - Small toolbox-style utilities for Debian systems
devscripts - scripts to make the life of a Debian Package maintainer easier
libcrack2-dev - pro-active password checker library - development files

Проверить, существует ли файл hosts

#!/usr/bin/python3 import os.path if os.path.exists("/etc/hosts"): print("hosts file exists") else: print("no hosts file")

или

#!/usr/bin/python3 try: f = open('/etc/hosts') print("hosts file exists") except FileNotFoundError: print("no hosts file")

python3 check_hosts.py

hosts file exists

Shebang

Указывает на нужный интерпретатор. Примеры:

#!/usr/bin/env python

#!/home/andrei/.pyenv/shims/python

После написаний шебанга нужно сделать скрипт выполняемым файлом

chmod + x имя_скрипта.py

И теперь его можно запускать прямо из терминала

./имя_скрипта.py

Или

.\имя_скрипта.py

Если вы пользуетесь PowerShell

В Windows запускать Python скрипты помогает Pylauncher (см. PEP 397 )

Scopes

Local - внутри функции

Enclosing - внутри фукнции, которая вызвала функцию

Global - во всем модуле

Built-in - встроено в Python

LEGB

Ссылки на Local уничтожаются после выполнения функции

Рассмотрим функцию fetch_words() из статьи про docstring

url, story, story_words, line, line_words, word - это локальные переменные

def fetch_words(url): """Fetch a list of words from a URL. Args: url: The URL of a UTF-8 text document. Returns: A list of strings containing the words from the document """ # PEP 257 # story = urlopen("http://sixty-north.com/c/t.txt") story = urlopen(url) story_words = [] for line in story: line_words = line.decode("utf8").split() for word in line_words: story_words.append(word) story.close() return story_words def print_items(story_words): """Print items one per line. Args: An iterable series of printable items. """ for word in story_words: print(word) def main(url): words = fetch_words(url) print_items(words) if __name__ == "__main__": main(sys.argv[1])

Разберем поведение глобальных переменных

count = 0 def show_count(): print(count) def set_count(c): count = c show_count() # 0 set_count(5) show_count() # 0

0 0

Изменить поведение функции можно с помощью global

count = 0 def show_count(): print(count) def set_count(c): global count count = c show_count() # 0 set_count(5) # Now affects global variable show_count() # 5

0 5

Полезные ссылки

codingbat.com

projecteuler.net

codeabbey

reddit

pythonchallenge

Указание кодировки

uuid

Пример создания строки из uuid

import uuid def str_uuid(): return str(uuid.uuid4()) print("name" + str_uuid()) print("name" + str_uuid()) print("name" + str_uuid()) print("name" + str_uuid()) print("name" + str_uuid())

name8873e1d2-b3c2-497a-952d-89bd3a658edc name4168f752-c676-4740-a12a-b7f7cd07fd2d namebf2e4954-644d-4c6e-be41-de9c3c2809b8 named53dbef3-b798-4af4-a3be-61ad349eac30 name79765d36-cb5c-4514-b6c7-3f9c5779e44a

Про uuidgen можете прочитать здесь

Related Articles
Основы Python
Python
Установка Python
ООП в Python
Функции
docstring
#!: Shebang
Объекты
os
pathlib
Сложности при работе с Python

Search on this site

Subscribe to @aofeed channel for updates

Visit Channel

@aofeed

Feedbak and Questions in Telegram

@aofeedchat