Консольные скрипты хранятся с расширением .py, графические .pyw.
Стандартная кодировка для файлов UTF-8 без BOM, если файл в другой кодировке, то ее следует указать в первой (или второй) строке так:
#-*- coding: cp1251 -*-
В Unix системах, внутри скрипта следует указывать путь к интерпретатору (аналогично bash), #!/usr/bin/python
Несколько команд в одной строке можно разделять точкой с запятой, а в целом, ее использование не рекомендуется.
Комментарии однострочные, символом решетки, многострочный можно выделить тремя символами двойной кавычки (форматирование сохраняется)
по факту это будет строковая переменная, которая так же используется для документирования
print([<Объекты>] [, sep=' '] [, end='\n'] [, file=sys.stdout] [, flush=False])
В аргументе end можно указать пробел (end=« »), тогда после команды print() не будет перевода строки
print("""Str1 Str2 Str3""")
Так же, есть функция sys.stdout.write(), она не вставляет символ перевода строки в конце
Для ввода есть функция input(), она возвращает введенное значение в виде строки
MyVar= input("Input String: ")
Входные аргументы
Array= sys.argv[:] for n in Array: ...
Блок try: .. except
try: commands.. except EOFError: ActionsIsError
Все данные в языке представлены объектами. У каждого есть тип и значение.
Для доступа к объекту и есть переменные. При инициализации, в переменную сохраняется ссылка на объект (его адрес в памяти).
Не начинать с цифр, с подчеркиваний
Не пересекаться со встроенными функциями т.к. их можно переопределить
Чувствительны к регистру
Так же, последовательности и отображения, к последним относится словарь.
Они поддерживают итераторы, с помощью метода next() или функции next()
arr=[1,2] i= iter(arr) i.__next__() || next(i)
Но лучше всего делать перебор в цикле for
for i in arr: print(i+ " -", end=" ") # или dict d= {"one":1, "two":2, "three":3} for i in d: print(d[i])
После присваивания, в переменной сохраняется ссылка на объект а не сам объект
Несколько переменных могут ссылаться на один и тот же объект в памяти. Например при множественном присваивании изменяемых объектов (list/dict/bytearray) это происходит автоматически
на счет изменяемых объектов под вопросом
x,y,z= 1,2,3 # Разные объект (но интерпретатор для оптимизации может автоматом сделать один) x,y,z= [1,2,3] # Тут присвоили list и объект в памяти один, три ссылки на него x is y # Ссылается ли x на y sys.getrefcount([1,2,3]) # Кол-во ссылок на объект в памяти (удаляется при 0)
Так же работает позиционное присваивание. Если кол-во не совпадает будет ошибка, но если указать звездочку, то одна из переменных, автоматом станет списком
x,y= y,x # Так можно поменять местами значение переменных a,b,*c= 1,2,3,4,5
type(a) # Сообщение с указанием типа if(type(x)== int): # Целое число if isinstance(s, str): # Строка
int(7.5); int("0o71",8); int("A",16) # 7, 57, 10 float("Infinity"); float("-inf") # inf, -inf
del x del x,y
Стоит отменить:
/ - деление, **результатом всегда будет вещественный тип** // - деление с округлением вниз (слеши вместе) % - остаток от деления ** - возведение в степень
Работа с десятичными числами может быть неочевидной, для операций с фиксированной точностью стоит использовать модель Decimal
Decimal(«3.0») + Decimal(«4.0»)
# Инверсия(~), И(&), ИЛИ(|), Исключающее ИЛИ(^), сдвиг влево/вправо(<</>>)
Конкатенация(+), повторение(*), проверка на вхождение(in), проверка на не вхождение(not in)
Комбинируется со всеми мат операторами.
Любой объект может интерпретироваться как логическое выражение, в т.ч. списки, словари и т.д.
False будет только пустое или нулевое значение
В сравнении все обычно, присутствуют and, or, not, is, !=, == и т.д.
Условие можно помещать в круглые скобки, но не обязательно, даже не желательно видимо
Блок можно размещать в одно строке, даже несколько д-й разделенных ;
if x % 2== 0: # chet else: # ne chet if var== "abc": #act1; act2 elif not var: #<empty value> else: #act1; act2
По сути это foreach, работает только с последовательностями
В конце можно добавить блок else, который выполнится (если не было break) после цикла
# Перебор словаря arr= {"one":1, "two":2, "three":3} for key in arr.keys(): # метод keys() возвращает перечень ключей print(key, arr[key]) else print("complete") # Конкретно для цикла можно обойтись и без keys() for key in arr: print(key, arr[key]) # Тут элементы списка кортежей arr= [(1,2), (3,4)] for a,b in arr: print(a,b)
range(<Начало>=0,<Конец>,<Шаг>=1)- создается особый объект- диапазон, поддерживающий итераторы
Содержит два метода:
for i in range(1, 100): print(i) # 1-100 for i in range(100, 0, -1): print(i) # 100-1
enumerate(<объект>, <start>=0)- возвращает кортеж из индекса и значения текущего элемента, можно задать начало
Функция не создает список, а возвращает итератор
arr= [1,2,3,4,5,6,7] for i, elem in enumerate(arr): arr[i] *= 2
Все так же, в цикле тоже есть ветка else
print("Input digit") summ=0 while True: x= input("Input: ") if x== "stop": break summ += int(x) print("Summ== ", summ)