Инструменты пользователя

Инструменты сайта


develop:pyton:variable

Переменные, операторы, циклы

Общее

Консольные скрипты хранятся с расширением .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

Переменные

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

Именование

Не начинать с цифр, с подчеркиваний
Не пересекаться со встроенными функциями т.к. :!: их можно переопределить
Чувствительны к регистру

Типы данных

  • bool - логический
  • NoneType - объект со значением None т.е. отсутствие значения
  • int,float - целочисленные ограничены только объемом ОЗУ
  • complex - комплексные числа
  • str - Unicode-строки
  • bytes - неизменяемая последовательность байт
  • bytearray - изменяемая последовательность байт
  • list - списки. Аналогичен массивам type([1,2,3])
  • tuple - кортежи type( (1,2,3) )
  • range - диапазон type(range(1,10))
  • dict - словари. Аналогичен ассоциативным массивам type({«five»:5, «ten»: 10})
  • set - множество (уникальных объектов) type({«a», «b», «c»})
  • frozenset - неизменяемое множество type([«a», «b», «c»])
  • ellipsis - используется в расширенном синтаксисе получения среза.. хз
  • function, module, type - ф-ции, модули, классы
  • изменяемые - bytearray, т.е. можно обратится к элементу и заменить его
  • не изменяемые - int, str, tuplr, range, bytes, тут уже только сложени/конкатенация и т.д.

Так же, последовательности и отображения, к последним относится словарь.
Они поддерживают итераторы, с помощью метода 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):
  # Строка

Преобразование

  • bool(), float()
  • int(<объект>, <система счисления>= 10)
  • str(), str(<>,<кодировка>,<обработчик ошибок>)
  • bytes(), bytes(<>,<кодировка>,<обработчик ошибок>)
  • bytearray(), bytearray(<кодировка>,<обработчик ошибок>)
  • list(), tuple()
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

Цикл for

По сути это 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() и enumerate()

range(<Начало>=0,<Конец>,<Шаг>=1)- создается особый объект- диапазон, поддерживающий итераторы
Содержит два метода:

  • index(<значение>)- возвращает индекс элемента по значению
  • count(<значение>)- кол-во элементов с указанным значением
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

Цикл while(), continue/break

Все так же, в цикле тоже есть ветка else

print("Input digit")
summ=0
while True:
    x= input("Input: ")
    if x== "stop":
        break
    summ += int(x)
print("Summ== ", summ)
develop/pyton/variable.txt · Последнее изменение: 2022/01/22 16:32 — admin