Содержание
Преобразование числовых типов
В Python существует два числовых типа данных: целые числа и числа с плавающей точкой. Для преобразования целых чисел в числа с плавающей точкой и наоборот Python предоставляет специальные встроенные методы.
Преобразование целых чисел в числа с плавающей точкой
Метод float() преобразовывает целые числа в числа с плавающей точкой. Число указывается в круглых скобках:
Это преобразует число 57 в 57.0.
Также можно использовать переменные. Объявите переменную f = 57, а затем выведите число с плавающей точкой:
Преобразование чисел с плавающей точкой в целые числа
Встроенная функция int() предназначена для преобразования чисел с плавающей точкой в целые числа.
Функция int() работает так же, как и float(). Чтобы преобразовать число, добавьте его в круглые скобки:
Число 390.8 преобразуется в 390.
Эта функция также может работать с переменными. Объявите переменные:
Затем преобразуйте и отобразите их:
Чтобы получить целое число, функция int() отбрасывает знаки после запятой, не округляя их (потому 390.8 не преобразовывается в 391).
Преобразование чисел с помощью деления
При делении Python 3 может преобразовать целое число в число с плавающей точкой (в Python 2 такой функции нет). К примеру, разделив 5 на 2, вы получите 2.5.
Python не преобразовывает тип данных во время деления; следовательно, деля целое число на целое число, в результате вы получили бы целое число, 2.
Что такое генератор в Python?
Генератор это подвид итерируемых объектов, как список или кортеж. Он генерирует для нас последовательность значений, которую мы можем перебрать. Эту последовательность можно использовать для итерации в цикле for, но нельзя проиндексировать (т. е., перебрать ее можно только один раз). Давайте посмотрим, как создается такая последовательность значений при помощи генератора.
а. Синтаксис генератора в Python 3
Для создания генератора в Python внутри функции вместо ключевого слова return используется ключевое слово yield
Обратите внимание на пример:
def counter(): i=1 while(i<=10): yield i i+=1
В этом примере мы определили генератор с именем counter() и назначили значение 1 локальной переменной i. Цикл while будет выполняться, пока i меньше или равно 10. Внутри цикла мы возвращаем (yield) значение i и увеличиваем его на единицу.
Затем мы используем этот генератор в цикле for.
for i in counter(): print(i)
Вывод:
1 2 3 4 5 6 7 8 9 10
b. Как работает генератор в Python
Чтобы разобраться в том, как работает этот код, давайте начнем с цикла for. Этот цикл выводит каждый элемент генератора (т. е., каждый элемент, возвращаемый генератором).
Мы начинаем с i=1. Таким образом, первый элемент, возвращаемый генератором, это 1. Цикл for выводит этот элемент на экран благодаря ключевому слову print. Затем i инкрементируется до 2. Весь процесс повторяется, пока i не инкрементируется до 11 (т. е., пока условие в цикле while не даст false).
Но если вы забудете добавить инкремент i, вы получите бесконечный генератор. Дело в том, что генератору в каждый момент времени нужно удерживать в памяти только одно значение. Таким образом, нет никаких ограничений памяти.
def even(x): while x%2==0: yield 'Even' for i in even(2): print(i)
Вывод:
Even Even Even Even Even Even Even Even Even Even Even Even Even
EvenTraceback (самый недавний вызов идет последним):
File “”, line 2, in print(i) KeyboardInterrupt
Поскольку 2 это четное число, 2%2 это всегда 0. Поэтому условие в цикле while всегда будет соблюдаться (всегда true). В результате генератор even() продолжает возвращать значение Even, пока мы не прервем выполнение цикла вручную (сочетанием клавиш Ctrl+C).
Обратите внимание, что генератор может содержать больше одного ключевого слова yield. Примерно так же, как функция может иметь больше одного ключевого слова return
def my_gen(x): while( x> 0): if x%2==0: yield 'Even' else: yield 'Odd' x-=1 for i in my_gen(7): print(i)
Вывод:
Odd Even Odd Even Odd Even Odd
2. Возврат значений в список
Здесь все просто. Если вы примените функцию list() к вызову генератора, она вернет список возвращенных генератором значений, в том порядке, в котором они возвращались. В следующем примере генератор возвращает квадраты чисел, если эти квадраты четные.
def even_squares(x): for i in range(x): if i**2%2==0: yield i**2
Чтобы создать список из возвращаемых генератором значений, мы просто применяем функцию list() к вызову генератора. Мы не перебираем эти значения при помощи цикла for.
print(list(even_squares(10)))
Вывод:
Как видите, для чисел в диапазоне 0-9 (не 10, потому что диапазон (10) это числа 0-9), четные квадраты это 0, 4, 16, 36 и 64. Остальные — 1, 9, 25, 49, 81 — нечетные. Поэтому они не возвращаются генератором.
Используем расширенный синтаксис слайсинга
# Python code to reverse a string # using extended slice syntax # Function to reverse a string def reverse(string): string = string return string s = "Pythonist" print ("The original string is : ",end="") print (s) print ("The reversed string(using extended slice syntax) is : ",end="") print (reverse(s))
The original string is : Pythonist The reversed string(using extended slice syntax) is : tsinohtyP
Объяснение: Расширенный срез предлагает поместить поле «шаг» в срез , а пустое поле в качестве начала и конца указывает по умолчанию на 0, а с шагом в -1 срез соберет как раз перевернутую исходную строку.
Разделение строки с использованием разделителя
Python может разбивать строки по любому разделителю, указанному в качестве параметра метода . Таким разделителем может быть, например, запятая, точка или любой другой символ (или даже несколько символов).
Давайте рассмотрим пример, где в качестве разделителя выступает запятая и точка с запятой (это можно использовать для работы с CSV-файлами).
print("Python2, Python3, Python, Numpy".split(',')) print("Python2; Python3; Python; Numpy".split(';'))
Результат:
Как видите, в результирующих списках отсутствуют сами разделители.
Если вам нужно получить список, в который войдут и разделители (в качестве отдельных элементов), можно разбить строку по шаблону, с использованием регулярных выражений (см. ). Когда вы берете шаблон в захватывающие круглые скобки, группа в шаблоне также возвращается как часть результирующего списка.
import re sep = re.split(',', 'Python2, Python3, Python, Numpy') print(sep) sep = re.split('(,)', 'Python2, Python3, Python, Numpy') print(sep)
Результат:
Если вы хотите, чтобы разделитель был частью каждой подстроки в списке, можно обойтись без регулярных выражений и использовать list comprehensions:
text = 'Python2, Python3, Python, Numpy' sep = ',' result = print(result)
Результат:
Конкатенация строк
Конкатенация – это важный момент, это означает соединение или добавление двух объектов вместе. В нашем случае, нам нужно узнать, как добавить две строки вместе. Как вы можете догадаться, в Python эта операция очень простая:
Python
# -*- coding: utf-8 -*-
string_one = «Собака съела » string_two = «мою книгу!» string_three = string_one + string_two
print(string_three) # Собака съела мою книгу!
1 2 3 4 5 6 7 |
# -*- coding: utf-8 -*- string_one=»Собака съела « string_two=»мою книгу!» string_three=string_one+string_two print(string_three)# Собака съела мою книгу! |
Оператор + конкатенирует две строки в одну
Методы строк
Строка является объектом в Python. Фактически, все, что есть в Python – является объектом. Если вы хотите узнать больше об Объектно-ориентированном программирование, мы рассмотрим это в другой статье «Классы в Python«. В данный момент достаточно знать, что строки содержат собственные встроенные методы. Например, допустим, у вас есть следующая строка:
Python
my_string = «This is a string!»
1 | my_string=»This is a string!» |
Теперь вам нужно сделать так, чтобы вся эта строка была в верхнем регистре. Чтобы сделать это, все, что вам нужно, это вызвать метод upper(), вот так:
Python
my_string.upper()
1 | my_string.upper() |
Если вы открыли ваш интерпретатор, вы также можете сделать то же самое:
Python
«This is a string!».upper()
1 | «This is a string!».upper() |
Существует великое множество других методов строк. Например, если вам нужно, что бы все было в нижнем регистре, вам нужно использовать метод lower(). Если вы хотите удалить все начальные и конечные пробелы, вам понадобится метод strip(). Для получения списка всех методов строк, впишите следующую команду в ваш интерпретатор:
Python
dir(my_string)
1 | dir(my_string) |
Вы увидите что-то на подобие этого:
Python
1 2 3 4 5 6 7 8 9 10 |
‘__add__’,‘__class__’,‘__contains__’,‘__delattr__’,‘__doc__’,‘__eq__’,‘__format__’, ‘__ge__’,‘__getattribute__’,‘__getitem__’,‘__getnewargs__’,‘__getslice__’,‘__gt__’, ‘__hash__’,‘__init__’,‘__le__’,‘__len__’,‘__lt__’,‘__mod__’,‘__mul__’,‘__ne__’, ‘__new__’,‘__reduce__’,‘__reduce_ex__’,‘__repr__’,‘__rmod__’,‘__rmul__’,‘__- setattr__’,‘__sizeof__’,‘__str__’,‘__subclasshook__’,‘_formatter_field_name_split’, ‘_formatter_parser’,‘capitalize’,‘center’,‘count’,‘decode’,‘encode’,‘endswith’,‘expandtabs’, ‘find’,‘format’,‘index’,‘isalnum’,‘isalpha’,‘isdigit’,‘islower’,‘isspace’, ‘istitle’,‘isupper’,‘join’,‘ljust’,‘lower’,‘lstrip’,‘partition’,‘replace’,‘rfind’,‘rindex’, ‘rjust’,‘rpartition’,‘rsplit’,‘rstrip’,‘split’,‘splitlines’,‘startswith’,‘strip’,‘swapcase’, ‘title’,‘translate’,‘upper’,‘zfill’ |
Вы можете спокойно игнорировать методы, которые начинаются и заканчиваются двойным подчеркиванием, например __add__. Они не используются в ежедневном программировании в Python
Лучше обратите внимание на другие. Если вы хотите узнать, что делает тот или иной метод, просто обратитесь к справке
Например, если вы хотите узнать, зачем вам capitalize, впишите следующее, чтобы узнать:
Python
help(my_string.capitalize)
1 | help(my_string.capitalize) |
Вы получите следующую информацию:
Python
Help on built-in function capitalize:
capitalize(…) S.capitalize() -> string
Выдача копии строки S только с заглавной буквой.
1 2 3 4 5 6 |
Help on built-in function capitalize: capitalize(…) S.capitalize() -> string Выдача копии строки S только с заглавной буквой. |
Вы только что узнали кое-что о разделе, под названием интроспекция. Python может исследовать все свои объекты, что делает его очень легким в использовании. В основном, интроспекция позволяет вам спрашивать Python о нём. Вам моет быть интересно, как сказать о том, какой тип переменной был использован (другими словами int или string). Вы можете спросить об этом у Python!
Python
type(my_string) # <type ‘str’>
1 | type(my_string)# <type ‘str’> |
Как вы видите, тип переменной my_string является str!
Базовое использование
Как создать список
Пустой список создается при помощи пары квадратных скобок:
empty_list = [] print(type(empty_list)) # <class 'list'> print(len(empty_list)) # 0
Можно создать список, сразу содержащий какие-то элементы. В этом случае они перечисляются через запятую и помещаются в квадратные скобки. Элементы в списках могут быть гетерогенными (т. е., разных типов), хотя обычно бывают гомогенными (одного типа):
homogeneous_list = print(homogeneous_list) # print(len(homogeneous_list)) # 6 heterogeneous_list = print(heterogeneous_list) # print(len(heterogeneous_list)) # 2
Для создания списков также может использоваться конструктор list:
empty_list = list() # Создаем пустой список print(empty_list) # [] new_list = list("Hello, Pythonist!") # Новый список создается путем перебора заданного итерируемого объекта. print(new_list) #
Также при создании списков используется List Comprehension, к которому мы еще вернемся.
Обращение к элементам списка
Вывод всего списка:
my_list = print(my_list) #
Вывести отдельные элементы списка можно, обратившись к ним по индексу (не забываем, что отсчет начинается с нуля).
print(my_list) # 1 print(my_list) # 2 print(my_list) # 9
В Python для обращения к элементам можно использовать и отрицательные индексы. При этом последний элемент в списке будет иметь индекс -1, предпоследний — -2 и так далее.
print(my_list) # 25 print(my_list) # 16 print(my_list) # 9
Распаковка списков (для python-3). Если поставить перед именем списка звездочку, все элементы этого списка будут переданы функции в качестве отдельных аргументов.
my_list = print(my_list) # print(*my_list) # 1 2 9 16 25 words = print(words) # print(*words) # I love Python I love
Списки мутабельны
Списки — это изменяемые контейнеры. То есть, вы можете изменять содержимое списка, добавляя и удаляя элементы.
Элементы списка можно перегруппировать, используя для индексирования другой список.
Создадим новый список из элементов списка , а индексы нужных элементов возьмем из списка :
my_list = my_index = my_new_list = for i in my_index] print(my_new_list) #
С этим читают