Показаны различия между двумя версиями страницы.
Следующая версия | Предыдущая версия | ||
develop:pyton:variable [2021/07/27 17:35] admin создано |
develop:pyton:variable [2022/01/22 16:32] (текущий) admin |
||
---|---|---|---|
Строка 2: | Строка 2: | ||
===== Общее ===== | ===== Общее ===== | ||
- | |||
Консольные скрипты хранятся с расширением **.py**, графические **.pyw**.\\ | Консольные скрипты хранятся с расширением **.py**, графические **.pyw**.\\ | ||
Стандартная кодировка для файлов **UTF-8 без BOM**, если файл в другой кодировке, | Стандартная кодировка для файлов **UTF-8 без BOM**, если файл в другой кодировке, | ||
Строка 13: | Строка 12: | ||
Комментарии однострочные, | Комментарии однострочные, | ||
:!: по факту это будет строковая переменная, | :!: по факту это будет строковая переменная, | ||
+ | |||
==== Вывод ==== | ==== Вывод ==== | ||
Строка 23: | Строка 23: | ||
Так же, есть функция **sys.stdout.write()**, | Так же, есть функция **sys.stdout.write()**, | ||
+ | |||
==== Ввод ==== | ==== Ввод ==== | ||
- | Для ввода есть функция **input()**, | + | Для ввода есть функция **input()**, |
<code python> | <code python> | ||
+ | |||
+ | **Входные аргументы**\\ | ||
+ | <code python> | ||
+ | for n in Array: ...</ | ||
+ | |||
==== Обработка исключений ==== | ==== Обработка исключений ==== | ||
Строка 39: | Строка 45: | ||
===== Переменные ===== | ===== Переменные ===== | ||
+ | Все данные в языке представлены объектами. У каждого есть тип и значение.\\ | ||
+ | Для доступа к объекту и есть **переменные**. При инициализации, | ||
+ | |||
+ | |||
+ | ==== Именование ==== | ||
+ | Не начинать с цифр, с подчеркиваний\\ | ||
+ | Не пересекаться со встроенными функциями т.к. :!: их можно переопределить\\ | ||
+ | Чувствительны к регистру\\ | ||
+ | |||
+ | |||
+ | ==== Типы данных ==== | ||
+ | * **bool** - логический | ||
+ | * **NoneType** - объект со значением None т.е. отсутствие значения | ||
+ | * **int, | ||
+ | * **complex** - комплексные числа | ||
+ | * **str** - Unicode-строки | ||
+ | * **bytes** - неизменяемая последовательность байт | ||
+ | * **bytearray** - изменяемая последовательность байт | ||
+ | * **list** - списки. Аналогичен массивам **type([1, | ||
+ | * **tuple** - кортежи **type( (1,2,3) )** | ||
+ | * **range** - диапазон **type(range(1, | ||
+ | * **dict** - словари. Аналогичен ассоциативным массивам **type({" | ||
+ | * **set** - множество (уникальных объектов) **type({" | ||
+ | * **frozenset** - неизменяемое множество | ||
+ | * **ellipsis** - используется в расширенном синтаксисе получения среза.. хз | ||
+ | * **function, module, type** - ф-ции, модули, | ||
+ | |||
+ | * **изменяемые** - bytearray, т.е. можно обратится к элементу и заменить его | ||
+ | * **не изменяемые** - int, str, tuplr, range, bytes, тут уже только сложени/ | ||
+ | | ||
+ | Так же, **последовательности** и **отображения**, | ||
+ | Они поддерживают итераторы, | ||
+ | <code python> | ||
+ | arr=[1,2] | ||
+ | i= iter(arr) | ||
+ | i.__next__() || next(i) | ||
+ | </ | ||
+ | |||
+ | Но лучше всего делать **перебор в цикле for** | ||
+ | <code python> | ||
+ | for i in arr: | ||
+ | print(i+ " -", end=" ") | ||
+ | |||
+ | # или dict | ||
+ | d= {" | ||
+ | for i in d: | ||
+ | print(d[i]) | ||
+ | </ | ||
+ | |||
+ | |||
+ | ==== Присваивание значения ==== | ||
+ | После присваивания, | ||
+ | Несколько переменных могут ссылаться на один и тот же объект в памяти. Например при множественном присваивании изменяемых объектов (list/ | ||
+ | :?: на счет изменяемых объектов под вопросом\\ | ||
+ | |||
+ | <code python> | ||
+ | x,y,z= 1,2,3 # Разные объект (но интерпретатор для оптимизации может автоматом сделать один) | ||
+ | x,y,z= [1,2,3] # Тут присвоили list и объект в памяти один, три ссылки на него | ||
+ | |||
+ | x is y # Ссылается ли x на y | ||
+ | sys.getrefcount([1, | ||
+ | </ | ||
+ | |||
+ | Так же работает позиционное присваивание. Если кол-во не совпадает будет ошибка, | ||
+ | <code python> | ||
+ | x,y= y,x # Так можно поменять местами значение переменных | ||
+ | a,b,*c= 1,2,3,4,5 | ||
+ | </ | ||
+ | |||
+ | |||
+ | ==== Проверка типа ==== | ||
+ | <code python> | ||
+ | type(a) # Сообщение с указанием типа | ||
+ | |||
+ | if(type(x)== int): | ||
+ | # Целое число | ||
+ | | ||
+ | if isinstance(s, | ||
+ | # Строка | ||
+ | </ | ||
+ | |||
+ | |||
+ | ==== Преобразование ==== | ||
+ | * bool(), float() | ||
+ | * int(< | ||
+ | * str(), str(<>,< | ||
+ | * bytes(), bytes(<>,< | ||
+ | * bytearray(), | ||
+ | * list(), tuple() | ||
+ | |||
+ | <code python> | ||
+ | int(7.5); int(" | ||
+ | float(" | ||
+ | </ | ||
+ | |||
+ | |||
+ | ==== Удаление ==== | ||
+ | <code python> | ||
+ | del x | ||
+ | del x,y | ||
+ | </ | ||
- | ==== ==== | ||
- | ==== ==== | ||
===== Операторы ===== | ===== Операторы ===== | ||
- | ==== ==== | + | ==== Математические операторы ==== |
- | ==== ==== | + | Стоит отменить: |
+ | / - деление, | ||
+ | // - деление с округлением вниз (слеши вместе) | ||
+ | % - остаток от деления | ||
+ | ** - возведение в степень | ||
+ | Работа с десятичными числами может быть неочевидной, | ||
+ | Decimal(" | ||
+ | |||
+ | |||
+ | ==== Двоичные операторы | ||
+ | <code python> | ||
+ | # Инверсия(~), | ||
+ | </ | ||
+ | |||
+ | |||
+ | ==== Для работы с последовательностями | ||
+ | Конкатенация(+), | ||
+ | |||
+ | |||
+ | ==== Операторы присваивания ==== | ||
+ | Комбинируется со всеми мат операторами.\\ | ||
===== Условные операторы и циклы ===== | ===== Условные операторы и циклы ===== | ||
+ | **Любой объект** может интерпретироваться как логическое выражение, | ||
+ | False будет только **пустое или нулевое** значение\\ | ||
+ | В сравнении все обычно, | ||
- | ==== ==== | + | ==== Ветвление |
- | ==== ==== | + | Условие можно помещать в круглые скобки, |
+ | Блок можно размещать в одно строке, | ||
+ | <code python> | ||
+ | if x % 2== 0: | ||
+ | # chet | ||
+ | else: | ||
+ | # ne chet | ||
+ | | ||
+ | if var== " | ||
+ | elif not var: #<empty value> | ||
+ | else: #act1; act2 | ||
+ | </ | ||
+ | |||
+ | ==== Цикл for ==== | ||
+ | По сути это **foreach**, | ||
+ | В конце можно добавить блок **else**, который выполнится (если не было **break**) после цикла\\ | ||
+ | |||
+ | <code python> | ||
+ | # Перебор словаря | ||
+ | arr= {" | ||
+ | for key in arr.keys(): # метод keys() возвращает перечень ключей | ||
+ | print(key, arr[key]) | ||
+ | else | ||
+ | print(" | ||
+ | |||
+ | # Конкретно для цикла можно обойтись и без 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(< | ||
+ | Содержит два метода: | ||
+ | * **index(< | ||
+ | * **count(< | ||
+ | |||
+ | <code python> | ||
+ | for i in range(1, 100): print(i) # 1-100 | ||
+ | for i in range(100, 0, -1): print(i) # 100-1 | ||
+ | </ | ||
+ | |||
+ | **enumerate(< | ||
+ | Функция **не создает список, | ||
+ | |||
+ | <code python> | ||
+ | arr= [1, | ||
+ | for i, elem in enumerate(arr): | ||
+ | arr[i] *= 2 | ||
+ | </ | ||
+ | |||
+ | |||
+ | ==== Цикл while(), continue/ | ||
+ | Все так же, в цикле тоже есть ветка **else**\\ | ||
+ | |||
+ | <code python> | ||
+ | print(" | ||
+ | summ=0 | ||
+ | while True: | ||
+ | x= input(" | ||
+ | if x== " | ||
+ | break | ||
+ | summ += int(x) | ||
+ | print(" | ||
+ | </ |