Эта статья изначально была опубликована в моем личном блоге.

Недавно я решил, что начну изучать Python. Я уже знаком с языком, что с ним можно сделать, а также с некоторыми синтаксисами. Тем не менее, я никогда не тратил время на то, чтобы как следует изучить его и создавать проекты с его помощью.

Но почему я об этом пишу? С тех пор, как я создал свой блог и начал писать, я заметил, как много книг помогло мне узнать больше. Когда я пишу о чем-то, я обязуюсь полностью понять это и глубже погрузиться в это.

В этой статье и (надеюсь) в следующих я поделюсь тем, что узнал о Python за неделю. Это не только поможет мне учиться лучше, но я также могу учиться у читателей, если они укажут на что-то неправильное в том, что я узнал. Это может помочь другим, кто заинтересован в изучении Python, пройти этот путь вместе со мной.

Краткое примечание

Учебный прогресс у каждого человека разный. То, что я узнаю за неделю, может быть больше или меньше того, что вы узнали бы за неделю. Это хорошо для нас обоих.

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

Где я начал

Я хотел найти хорошее место, чтобы начать изучение Python с основ. Я не хотел просто найти туториал и начать программировать. Я хотел найти время, чтобы узнать больше об этом.

Просмотрев различные веб-сайты и онлайн-курсы, которые могли бы помочь, я решил учиться на learpython.org. Кажется, что темы довольно хорошо разделены, и в конце каждой главы есть примеры и упражнения.

Пока я пишу это, я закончил до Генераторов.

Что я выучил

Отступ

Во всех языках программирования, которые я использовал, блоки кода обычно заключаются в фигурные скобки { и }. Например, это в JavaScript:

if (x > 1) {
    console.log("x is not 0");
}

Однако в Python все блоки кода представлены только отступом. Итак, если бы я написал тот же блок кода на Python, это было бы:

if x > 1:
	print("x is not 0")

Одновременное назначение

Название для этого может быть неправильным, но это то, что я сейчас называю.

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

a,b = 1,2

Эта строка кода установит a в 1 и b в 2.

Операторы

Есть много операторов, которые являются общими для Python и других языков. Однако были некоторые, которые я не видел на других языках, которые я знаю.

Вы можете использовать ** для создания отношения власти:

a = 2 ** 3 //8

Вы можете использовать оператор умножения * для строк, чтобы повторить их n раз:

a = "hello" * 3 //hellohellohello

Вы также можете использовать оператор умножения * для списков (которые в основном представляют собой массивы в Python), чтобы повторить их:

a = [1,2,3] * 3 // [1,2,3,1,2,3,1,2,3]

Форматирование строк

Чтобы отформатировать строки и добавить переменные внутри строк, вы можете использовать оператор % в строке, за которой следует буква в зависимости от типа переменной, которую вы вставляете в строку.

Например:

print("I am %d years old" % age)

%d используется для целых чисел, %s для строк, %f для чисел с плавающей запятой, а %.nf — это число с плавающей запятой с n разрядами после запятой.

Нарезка строк

Скобки [] обычно используются с массивами для ссылки на элемент по определенному индексу. Он также используется в некоторых языках для доступа к символу с определенным индексом в строке.

Однако в Python вы также можете использовать скобки [] со строками, чтобы брать из них подстроки. Если вы используете обозначение [n:m], он займет часть строки, начиная с индекса n до индекса m.

Например:

x = "My name is Shahed"
print(x[3:10]) //name is

Вы также можете использовать нотацию [n:m:x], где x — это количество шагов, которое нужно сделать при переходе от индекса n к индексу m. Когда вы используете нотацию [n:m], она по умолчанию устанавливает x в 1. x также может быть отрицательным значением, если вы хотите разрезать строку в обратном порядке.

Логические операторы

В большинстве языков используется && для указания условия "и" и || для указания условия "или".

В Python вы используете and для «и» и or для «или». Это часть того, что делает Python удобочитаемым для человека.

Например:

if x == 2 and y == 3:
	print("x is 2 and y is 3")

Другими операторами являются in для проверки того, находится ли элемент в итерируемом объекте, таком как список, is для проверки совпадения двух переменных как по значению, так и по ссылке, и not для отрицания логического выражения.

Остальное в циклах

else обычно используется с условиями if, когда вы выполняете действие, если условие не выполняется.

В Python else можно использовать с циклами для выполнения действия, когда условие цикла не выполняется.

Например:

for i in range(1,5):
	print("i is less than 5")
else:
	print("i is greater than 5")

Если вы используете break внутри цикла, то блок else не будет выполняться. Если вы используете continue внутри цикла, будет выполнен блок else.

Функция init в классах

В Python функция __init__ в классе — это функция, которая вызывается первой при создании класса. Это эквивалент функции constructor в других языках.

Модули

Каждый созданный вами файл Python можно использовать в качестве модуля в других файлах Python. Это позволяет вам использовать функции или переменные, которые находятся в этом модуле.

Чтобы импортировать модуль:

import user

Где user — это файл в той же директории с именем user.py

Затем вы можете получить доступ к функциям в этом модуле, используя нотацию .:

user.create()

Кроме того, вы можете импортировать функцию напрямую:

from user import create

Вы также можете импортировать все объекты в модуль:

from user import *

Затем вы можете использовать объекты напрямую:

create()

Кроме того, вы можете импортировать модули с псевдонимами:

import user as my_user

Пакеты

Пакеты — это каталоги, содержащие другие пакеты и модули. Каждый пакет должен включать файл __init__.py, даже если он пустой. Он используется для указания того, что текущий каталог является пакетом.

Модули можно импортировать из этого пакета. Например, если вы создаете каталог blog и внутри него находится модуль user, вы можете импортировать его следующим образом:

import blog.user

Или альтернативно:

from blog import user

По умолчанию все модули внутри пакета могут быть импортированы. Вы можете указать, к каким модулям можно получить доступ в пакете, назначив переменную __all__ в __init__:

__all__ = ["user"]

пустые массивы

Массивы Numpy похожи на списки, но они более быстрые и эффективные. Используя массивы Numpy, вы можете легко выполнять множество утомительных задач.

Например, вы можете выполнять операции со всеми элементами массива Numpy:

np_array = np.array([1,2,3])

np_array = np_array * 2 //[2,4,6]

Вы также можете использовать [], чтобы взять подмножество элементов в массиве Numpy. Например:

np_array = np.array([1,2,3])

np_array[np_array > 1] //[2,3]

Где np_array > 1 вернет новый массив Numpy, но вместо исходных значений будет либо True, либо False в зависимости от того, удовлетворяет ли каждый элемент условию или нет. Если вы затем передадите его как индекс np_array, он вернет массив Numpy только с элементами, которые проверяют истинность этого условия.

Панды DataFrame

DataFrames в Pandas позволяют хранить данные в табличной структуре, в которой есть столбцы и строки.

DataFrames можно создавать из словарей. Их также можно создать из файлов CSV.

Вы можете получить доступ к данным, используя имя столбца в качестве индекса:

dataframe["name"]

Это вернет данные в виде серии Pandas. Вы можете использовать двойные скобки, чтобы вернуть его как DataFrame:

dataframe[["name"]]

Вы также можете вернуть несколько столбцов или индексов:

dataframe[["name", "age"]]

Другой способ получить набор данных из DataFrame — использовать loc и iloc, где loc обращается к данным с помощью индекса метки, а iloc обращается к данным с помощью числового индекса. Полезно, если у вас есть доступ к определенной строке и столбцу.

Генераторы

Генераторы используются для реализации итераторов. Это функции, которые используют ключевое слово yield для возврата итерируемого набора элементов.

Когда вы запускаете итерацию над функцией генератора, генератор запускается. Каждый раз, когда достигается ключевое слово yield, значение возвращается как значение для текущей итерации.

Например:

def age():
	for i in range(5):
    	yield "I am %d years old" % i

for str in age():
	print(str)

Это напечатает:

I am 0 years old
I am 1 years old
I am 2 years old
I am 3 years old
I am 4 years old

Куда дальше?

В Learnpython.org есть еще главы, которые нужно пройти, однако я думаю, что хочу попрактиковаться в решении некоторых задач.

Платформа, о которой я нашел хорошие отзывы среди изучающих Python и разработчиков, называется CheckiO. Итак, я, вероятно, начну учиться на этой платформе, а также продолжу некоторые другие главы.

Если у вас есть какие-либо идеи о том, как я должен продолжать свое путешествие по изучению Python, или вы найдете что-то не так в этой статье, пожалуйста, дайте мне знать!