Цифровой садик - приветственная

Цифровой садик - приветственная | Полный список всего, что тут есть | RSS | Подписаться через follow.it

11.04.2022

python

ob-python

Session mode is fully supported in python, including named sessions.

Language-Specific Header Arguments

  • :results {output, value}: Output results come from whatever the python code prints on stdout. Value results are the value of the last expression evaluated in the code block. Value mode is the default (as with other languages). In value mode you can use the following subtypes:
    • raw: value is inserted directly
    • pp: value is pretty-printed by python using pprint.pformat(%s), then inserted
    • file: value is interpreted as a filename to be interpolated when exporting; commonly used for graphics output.
  • :return - Appends a return statement to the end of the code block. Only when result-type is value, and not in session mode.
  • :python - Name of the command for executing Python code.

Common Header Arguments

  • :session [name]: default is no session.
  • :var data=data-table: Variables can be passed into python from org-mode tables as scalars or lists. See the org-mode manual for more details.
  • :exports {code, results, both, none}: Standard babel option for what to export.

    A limitation of session-mode return values is that the final statement must be a top-level expression, otherwise nothing is returned.

print("Hello, world!")
a 1
b 2
c 3
# Return row specified by val.
# In non-session mode, use return to return results.
return(data[val])
import matplotlib, numpy
matplotlib.use('Agg')
import matplotlib.pyplot as plt
fig=plt.figure(figsize=(4,2))
x=numpy.linspace(-15,15)
plt.plot(numpy.sin(x)/x)
fig.tight_layout()
plt.savefig('../files/python-matplot-fig.png')
return '../files/python-matplot-fig.png' # return filename to org-mode

Идентификаторы

Идентификаторы в Python это имена используемые для обозначения переменной, функции, класса, модуля или другого объекта. Идентификатор должен начинаться с буквы (от a до Z) или со знака подчеркивания (_), после которых может идти произвольное количество букв, знаков подчеркивания и чисел (от 0 до 9).

В Python недопустимо использование знаков препинания или специальных символов, таких как @, $ или % в качестве идентификаторов. Кроме того, Python чуствителен к регистру, то есть cat и Cat это два разных имени.

В Python существует следующая договоренность для названия идентификаторов:

  • Имена классов начинаются с большой буквы, все остальные идентификаторы - с маленькой.
  • Знак подчеркивания в качестве первого символа идентификатора означает, что идентификатор является частным (закрытым от использования вне класса).
  • Если идентификатор начинается и заканчивается двумя знаками подчеркивания (например, __init__ ) это означает, что он является специальным именем, определенным внутри языка.

Зарезервированные слова нельзя использовать в качестве имени переменной или любого другого идентификатора. Все ключевые слова Python состоят только из букв в нижнем регистре. Получить список ключевых слов возможно в интерпретаторе командой

print(help("keywords"))

Разделение кода на блоки

Для обозначения отдельных блоков кода в Python используются двоеточия и отступы.

Выражения в Python, как правило, заканчиваются новой строкой, но есть и специальный символ переноса строки (\), показывающий, что с окончанием строки не заканчивается код.

Выражения, которые находятся внутри скобок: квадратных ( [ ] ), фигурных ( { } ) или круглых ( ( ) ) не нуждаются в символе переноса строки.

Специальные символы

В Python можно использовать одинарные ( ' ), двойные (") и тройные (''' или """) кавычки чтобы обозначить строчный тип данных, при этом начинаться и заканчиваться строка должна одинаковыми кавычками. Строка занимающая несколько строк кода должна быть обрамлена тройными кавычками.

Символ решетки (#) в Python обозначает начало комментария. Любые символы после решетки и до конца строки считаются комментариями и игнорируются интерпретатором.

Точка с запятой ( ; ) позволяет вводить несколько инструкций на одной строке.

Типы данных

К стандартным типам данных в Python относятся: Числа (Numbers), Строка (String), Список (List), Кортеж (Tuple), Словарь (Dictionary), Tuples (кортежи), Sets (множества), Boolean

Эти типы данных можно, в свою очередь, классифицировать по нескольким признакам:

  • Изменяемые: Списки, Словари, Множества
  • Неизменяемые: Числа, Строки, Кортежи
  • Упорядоченные: Списки, Кортежи, Строки
  • Неупорядоченные: Словари, Множества

Числа - целое, длинное, с плавающей точкой и комплексное (напр. 3.14j). Можно выполнять основные математические операции, округлять, переводить в другие системы счисления, получать остаток от деления\ldots Если возможностей не хватает, то подключать модуль math.

Строка - набор символов между кавычками.

То, что строки являются упорядоченным типом данных, позволяет обращаться к символам в строке по номеру, начиная с нуля:

string1 = 'Any string'
print(string1[4])

Нумерация всех символов в строке идет с нуля. Но, если нужно обратиться к какому-то по счету символу, начиная с конца, то можно указывать отрицательные значения (на этот раз с единицы).

Из строк можно взять подстроку используя оператор нарезки ( [ ] и [ : ] ) с индексами (срез выполняется по второе число, не включая его):, можно использовать и обратную индексацию. Оператор плюс ( + ) для строк соединяет две строки в одну. Также строки можно умножать ( * ).

Список состоит из элементов, разделенных запятыми, находящихся между квадратными скобками ( [ ] ). Элементы одного списка могут иметь разные типы данных. Получить доступ к элементам, сохраненным в списке можно, точно так же, как и в строках, при помощи оператора нарезки ( [ ] и [:] ) и индексов, начиная с нуля и до конца. Знак плюс ( + ) объединяет два списка, а звездочка ( * ) - оператор повторения для списка. Список может быть элементом списка.

Кортеж это еще один составной тип данных, похожий на список. Кортеж состоит из ряда значений, разделенных запятыми, заключенными в круглые скобки ( ( ) ). Основным различием между списками и кортежами является то, что элементы кортежей не могут быть изменены. То есть, кортежи можно рассматривать как списки доступные только для чтения.

Словари в Python это неотсортированная колекция элементов, доступ к которым осуществляется по ключу (аналог хэшей Perl). Каждому ключу словаря соответствует определенное значение. Ключом может быть любой неизменяемый тип данных (число, строка, кортеж), значением - любой тип данных. Пары ключ, значение словаря заключаются в фигурные скобки ( { } ).

my_dict = { } # Создаем пустой словарь
my_dict["country"] = "USSR" # Присваиваем ключу country значение Mexico
print(my_dict["country"]) # Выведет Mexico
# Заполнение словаря при инициализации
another_dict = {"number":23, 2: True, "my_list":[1,2,3]}
print(another_dict.keys()) # Напечатает список всех ключей
print(another_dict.values()) # Напечатает список всех значений

Читать файлы

f = open('r1.txt')
for line in f:
   print(line)

Установка пакетов

python setup.py install --user

Ставится в ~/.local. Консольные команды поселяются в тамошнем bin. Добавила в PATH (это в ~/.bashrc, проверять - env).

Аналогично, если ставить при помощи pip –user и не в virtual environment.

virtual environment

Папка и её содержимое в целости, а вот всякое установленное ликвидируется.

Для создания.

virtualenv <DIR>

Для использования.

source <DIR>/bin/activate

Для выхода: deactivate

virtualenv –system-site-packages ENV - использовать уже установленные в системе пакеты. Изоляции не будет, но она мне и не нужна обычно.

https://virtualenv.pypa.io/en/stable/

http://virtualenvwrapper.readthedocs.io/en/latest/install.html

http://docs.python-guide.org/en/latest/dev/virtualenvs/

export WORKON_HOME=~/venv

"If you directly run a script or the python interpreter from the virtualenv’s bin/ directory (e.g. path/to/ENV/bin/pip or /path/to/ENV/bin/python-script.py) then sys.path will automatically be set to use the Python libraries associated with the virtualenv" https://stackoverflow.com/questions/53992886/org-babel-python-environment-setup

youtube-dl

https://github.com/rg3/youtube-dl/. Вопреки названию, позволяет скачивать видео не только с ютюба, но и c уймы других, полный и актуальный список лучше смотреть там у них (http://rg3.github.io/youtube-dl/supportedsites.html). Я пока скачивала только с ютюба и вконтакта.

В репозитории дебиана есть, но, увы, редко обновляется, поэтому отстаёт от жизни. И поэтому же ставить надо не оттуда. Из предложенных вариантов у меня наибольшую симпатию вызвал вариант с использованием pip - вероятно, потому, что у меня есть nikola, установленный этим же способом. Поэтому python-pip, python-setuptools, python-wheel у меня уже есть.

Так что "pip install –user youtube-dl". Потом, если что, можно будет повторять с добавлением ключика –upgrade. И добавить ~/.local/bin в PATH, чтоб не вспоминать, откуда запускать надо.

У youtube-dl есть уйма разных опций и возможных настроек, но мне пока хватает самого простого варианта "youtube-dl ссылка-на-видео".

-a, –batch-file FILE
File containing URLs to download ('-' for stdin), one URL per line. Lines starting with '\verb|#|, ';' or ']' are considered as comments and ignored.
-w, –no-overwrites
Do not overwrite files
-c, –continue
Force resume of partially downloaded files. By default, youtube-dl will resume downloads if possible.
–cookies FILE
File to read cookies from and dump cookie jar in
-u, –username USERNAME
Login with this account ID
-p, –password PASSWORD
Account password. If this option is left out, youtube-dl will ask interactively.

Множества

Множество в python - "контейнер", содержащий не повторяющиеся элементы в случайном порядке.

print('Разделяйте элементы последовательностей пробелами!')
a = input('Первая последовательность:\n-> ')
b = input('Вторая последовательность:\n-> ')
print()
 
a = a.split() # получение списка
b = b.split()
 
print('Получено:')
a = set(a) # получение множества
print('множество A ->',a)
b = set(b)
print('множество B ->',b)
print()
 
Операции | (объединение), &amp; (пересечение), - (разность), ^ (исключающее ИЛИ) 
print('Объединение множеств (A | B):',a|b)
print('Пересечение множеств (A &amp; B):',a&amp;b)
print('Разность множеств (A - B):',a-b)
print('Исключающее ИЛИ, симметрическая разность (A ^ B):',a^b)

С множествами можно выполнять множество операций: находить объединение, пересечение\ldots

len(s)
число элементов в множестве (размер множества).
x in s
принадлежит ли x множеству s.
set.isdisjoint(other)
истина, если set и other не имеют общих элементов.
set == other
все элементы set принадлежат other, все элементы other принадлежат set.
set.issubset(other) или set <= other
все элементы set принадлежат other.
set.issuperset(other) или set >= other
аналогично.
set.union(other, …) или set | other | …
объединение нескольких множеств.
set.intersection(other, …) или set & other & …
пересечение.
set.difference(other, …) или set - other - …
множество из всех элементов set, не принадлежащие ни одному из other.
set.symmetric\_difference(other); set \^ other
множество из элементов, встречающихся в одном множестве, но не встречающиеся в обоих.
set.copy()
копия множества.

И операции, непосредственно изменяющие множество:

set.update(other, …); set |= other | …
объединение.
set.intersection_update(other, …); set &= other & …
пересечение.
set.difference_update(other, …); set -= other | …
вычитание.
set.symmetric_difference_update(other); set ^= other
множество из элементов, встречающихся в одном множестве, но не встречающиеся в обоих.
set.add(elem)
добавляет элемент в множество.
set.remove(elem)
удаляет элемент из множества. KeyError, если такого элемента не существует.
set.discard(elem)
удаляет элемент, если он находится в множестве.
set.pop()
удаляет первый элемент из множества. Так как множества не упорядочены, нельзя точно сказать, какой элемент будет первым.
set.clear()
очистка множества.

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

О применениях Python

Python имеет 5 кросc-платформенных инструментов, которые позволяют писать «полноценные» приложения под Windows/Linux/Mac: Tkinter, PyQt, PyGTK, WxPython. Ни один из инструментов не делает 100% кросс-платформенное приложение, которое бы нативно выглядело на каждой из платформ.

Машинное обучение и Data science. Python в качестве инструмента апробации. Python имеет ряд удобных библиотек машинного обучения и научных расчетов: Pandas, NumPy, SciPy, Scikit-Learn, которые позволяют достаточно быстро построить рабочие модели. И они на самом деле неплохо работают - в качестве инструмента апробации, либо на небольших задачах. Если проект большой, то обычно модель пишут на Java/Scala/C++, а специалист по обучению уже выступает в качестве консультанта/аналитика. Сложность этого направления заключается в том, что у вас должны быть высокие знания в области математики и статистики, практически всегда будет спрашиваться высшее технические, математическое образование.

Веб-скрапинг. Питон имеет три вещи, которые делают его весьма эффективными в области веб-скраппинга, бибиотеку Requests, beautifulsoup и АПИ для Selenium. Если сюда подключить библиотеки для компьютерного зрения и машинное обучение, то получаются весьма эффективные инструменты.

Движок Ren’Py, который внезапно стал лучшим движков для написания визуальных романов, которые неплохо окупаются даже в рамках РФ. (Эээ? Хде это окупаются?)

Мелкое

не всё проверенное.

  • Определение языка текста при помощи python - совет со stackoverflow - langdetect и cld2-cffi, оба ставятся через pip.
  • python -m SimpleHTTPServer запускает http сервер в текущем каталоге.
  • python -m CGIHTTPServer - плюс cgi. Исполняемые скрипты должны лежать в папке cgi-bin

Ссылки


Если у вас есть мысли, комментарии, предложения или отклики по поводу этой страницы или этого цифрового сада в целом, напишите мне сообщение через Яндекс.Форму или на agnessa@agnessa.pp.ru. Мне ооочень интересно!

Задонатить.


An IndieWeb Webring 🕸💍