21 марта 2025
Python — это универсальный и широко используемый язык программирования, известный своим понятным синтаксисом и читаемостью. Это делает его идеальным выбором для начинающих, поскольку он используется во всем: от веб-разработки до науки о данных, открывая множество карьерных путей. В этой статье вы познакомитесь с фундаментальными концепциями Python с помощью простых и понятных примеров кода.
Начнем с традиционной программы "Hello, World!". В Python это исключительно просто:
print("Hello, Beginner!")
Эта единственная строка выполняет следующее:
print()
: Это встроенная функция. Функции — это многократно используемые блоки кода, которые выполняют определенные задачи. print()
отображает вывод для пользователя.("Hello, Beginner!")
: Внутри круглых скобок находится строковый литерал. Строка — это последовательность символов, заключенная в одинарные ('...'
) или двойные ("..."
) кавычки.Когда вы запускаете эту программу, интерпретатор Python выполняет функцию print()
, отображая “Hello, Beginner!” на вашем экране.
Переменные имеют решающее значение для хранения данных. Думайте о них как о помеченных контейнерах. Рекомендуется использовать описательные имена, начинать с букв нижнего регистра и использовать знаки подчеркивания для разделения слов (например, my_variable
, user_age
). Вот пример:
# Присваивание значений переменным
message = "Welcome to Python!"
number = 10
pi = 3.14159
# Вывод значений переменных
print(message)
print(number)
print(pi)
Пояснение:
message = "Welcome to Python!"
: Создается переменная с именем message
, в которой хранится строка "Welcome to Python!".number = 10
: Переменная с именем number
хранит целое число 10
.pi = 3.14159
: Переменная с именем pi
хранит число с плавающей точкой 3.14159
.Затем print()
отображает эти значения. Python — динамически типизированный язык: вам не нужно явно указывать тип переменной (строка, целое число, число с плавающей точкой). Python определяет его из присвоенного значения.
Интерактивные программы часто нуждаются в пользовательском вводе. Вот как его получить:
# Получение пользовательского ввода
name = input("Please enter your name: ")
# Вывод персонализированного приветствия
print("Hello, " + name + "!") # Конкатенация строк
Пояснение:
name = input("Please enter your name: ")
: input()
приостанавливает программу, ожидает, пока пользователь что-нибудь напечатает и нажмет Enter, и сохраняет введенные данные в виде строки в переменной name
.print("Hello, " + name + "!")
: Выводит приветствие. Оператор +
со строками выполняет конкатенацию строк, объединяя их. Рекомендуется добавлять пробелы вокруг +
при конкатенации для лучшей читаемости.if
, else
и elif
Условные операторы позволяют вашей программе принимать решения, определяя, какие блоки кода выполняются в зависимости от истинности или ложности условий.
age = int(input("Enter your age: "))
if age >= 18:
print("You are eligible to vote.")
elif age < 0:
print("That is an incorrect age.")
else:
print("You are not eligible to vote yet.")
Описание:
age = int(input("Enter your age: "))
: Принимает ввод пользователя для возраста. int()
преобразует ввод (по умолчанию строку) в целое число.if age >= 18:
: Проверяет, больше ли age
или равно 18. Если это правда, выполняется оператор print
с отступом.elif age < 0:
: Если предыдущее условие if
ложно, проверяется это условие. Если оно истинно, то будет выполнен соответствующий блок. elif
означает “else if” и позволяет последовательно проверять несколько условий.else:
: Если ни одно из условий if
или elif
не истинно, выполняется код с отступом под else
. Отступы имеют жизненно важное значение в Python; они определяют блоки кода, связанные с if
, elif
и else
. Правильные отступы (обычно 4 пробела) имеют решающее значение для корректной работы кода Python.for
Циклы повторяют блоки кода. Цикл for
выполняет итерацию по последовательности (например, списку или диапазону чисел).
# Вывод чисел от 0 до 4
for i in range(5):
print(i)
# Вывод элементов списка
fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
print(fruit)
Пояснение:
for i in range(5):
: range(5)
генерирует числа от 0 до (но не включая) 5. Цикл выполняет итерацию по этой последовательности; в каждой итерации текущее число присваивается переменной i
.for fruit in fruits:
: Этот цикл выполняет итерацию по списку fruits
. В каждой итерации текущий элемент списка присваивается переменной fruit
.while
Цикл while
продолжается до тех пор, пока условие истинно.
count = 0
while count < 5:
print(count)
count += 1 # Увеличение count
Пояснение:
count = 0
: Инициализирует count
значением 0.while count < 5:
: Цикл продолжается до тех пор, пока count
меньше 5.count += 1
: Внутри цикла count
увеличивается на 1 в каждой итерации. Это предотвращает бесконечный цикл (когда условие всегда остается истинным).Функции необходимы для повторного использования кода, организации и удобочитаемости. Вместо того, чтобы повторять один и тот же код несколько раз, вы можете определить функцию один раз и вызывать ее всякий раз, когда вам нужна эта конкретная функциональность. Определите свои собственные функции, используя def
.
# Определение функции
def greet(name):
print("Hello, " + name + "!")
# Вызов функции
greet("Alice")
greet("Bob")
Ключевые моменты:
def greet(name):
: Определяет функцию с именем greet
, которая принимает один параметр с именем name
.print("Hello, " + name + "!")
: Тело функции — код, выполняемый при вызове функции.greet("Alice")
: Вызывает функцию greet
, передавая “Alice” в качестве аргумента.Давайте объединим концепции в немного более сложную программу:
def calculate_area(length, width):
"""Вычисляет площадь прямоугольника.""" # Docstring
area = length * width
return area
# Получение размеров
length = float(input("Enter length: "))
width = float(input("Enter width: "))
# Вычисление площади
rectangle_area = calculate_area(length, width)
# Вывод результата
print("Area:", rectangle_area)
Пояснение:
def calculate_area(length, width):
: Определяет функцию для вычисления площади прямоугольника, принимая length
и width
в качестве параметров. """..."""
— это строка документации, описывающая функцию. Строки документации используются для документирования и могут быть доступны с помощью функции help().return area
: Функция возвращает вычисленную площадь. Оператор return
завершает выполнение функции и отправляет значение обратно туда, где функция была вызвана.float()
. Использование float()
позволяет использовать десятичные значения, делая калькулятор более универсальным.calculate_area
, передавая размеры, и сохраняя возвращаемое значение в rectangle_area
.Python предоставляет и другие инструменты для управления потоком выполнения программы.
break
, continue
и else
в циклахbreak
: Выходит из самого внутреннего охватывающего цикла for
или while
.continue
: Переходит к следующей итерации цикла.else
для циклов: В for
выполняется после завершения цикла (если не произошел break
). В while
выполняется после того, как условие становится ложным (если не произошел break
).#Пример для break
numbers = [1, 2, 3, 4, 5]
for number in numbers:
if number == 3:
break # Выход из цикла, когда number равно 3
print(number) # Вывод: 1 2
#Пример для continue
numbers = [1, 2, 3, 4, 5]
for number in numbers:
if number == 3:
continue # Переход к следующей итерации, когда number равно 3
print(number) # Вывод: 1 2 4 5
#Пример для else
for i in range(5):
print(i)
else:
print("Loop finished") #Будет выполнено
for i in range(5):
if i==3:
break
print(i)
else:
print("Loop finished") #Не будет выполнено
match
match
сравнивает значение с шаблонами. Он похож на операторы switch в других языках, но с более мощным сопоставлением с образцом. Доступен начиная с Python 3.10.
def http_error(status):
match status:
case 400:
return "Bad request"
case 401 | 403 | 404: # Несколько case
return "Not allowed"
case 418:
return "I'm a teapot"
case _: # По умолчанию
return "Something's wrong"
print(http_error(404))
print(http_error(500))
_
— это подстановочный знак, соответствующий любому значению, если не соответствует ни один другой случай.
В Python есть встроенные структуры данных для организации данных.
my_list = [1, 2, 3, "apple"]
my_list.append("cherry") # Добавление элемента в конец
print(my_list[0]) # Доступ к элементу по индексу (начиная с 0)
my_list.remove(2) # Удаление элемента по значению
print(my_list)
my_tuple = (1, 2, 3, "apple")
# my_tuple[0] = 5 # Ошибка (неизменяемый) - Кортежи нельзя изменять после создания
print(my_tuple[1])
my_set = {1, 2, 3, 3, 4, 5} # Дубликаты автоматически удаляются
print(my_set) # Вывод: {1, 2, 3, 4, 5}
my_dict = {"name": "Alice", "age": 30}
print(my_dict["name"]) # Доступ к значению по ключу
my_dict["age"] = 31 # Изменение значения
print(my_dict)
squares = [x**2 for x in range(10)] # Список квадратов
even = [x for x in range(20) if x % 2 == 0] # Четные числа
print(squares)
print(even)
Модули организуют код в многократно используемые файлы. Используйте import
для доступа к функциональности из других модулей.
import math
print(math.sqrt(16)) # Доступ к функции sqrt из модуля math
print(math.pi) # Доступ к константе pi
from math import sqrt # Импорт конкретной функции
print(sqrt(25))
from math import * # Импорт всего (обычно избегайте)
print(pi)
Это демонстрирует использование модуля math
(который предоставляет математические функции). Импорт определенных функций или констант может улучшить читаемость кода и избежать конфликтов имен. Импорт всего с помощью *
обычно не рекомендуется в больших проектах.
Функции могут иметь значения по умолчанию для аргументов.
def greet(name, greeting="Hello"):
print(greeting + ", " + name + "!")
greet("Bob") # Использует приветствие по умолчанию
greet("Alice", "Hi") # Переопределяет значение по умолчанию
Вызывайте функции, используя синтаксис keyword=value
.
def describe_pet(animal_type, pet_name):
print("I have a " + animal_type + " named " + pet_name + ".")
describe_pet(pet_name="Harry", animal_type="hamster") # Порядок не имеет значения
Функции могут принимать произвольное количество позиционных аргументов, используя *args
.
def make_pizza(*toppings):
print("Making a pizza with:")
for topping in toppings:
print("- " + topping)
make_pizza("pepperoni")
make_pizza("mushrooms", "cheese", "peppers")
*toppings
собирает все позиционные аргументы в кортеж с именем toppings
.
Функции могут принимать произвольное количество именованных аргументов, используя **kwargs
.
def build_profile(first, last, **kwargs):
# Объединяет фиксированные и произвольные именованные аргументы для создания профиля пользователя.
profile = {'first_name': first, 'last_name': last}
profile.update(kwargs) # Обновляет профиль парами ключ-значение из kwargs.
return profile
user = build_profile("Albert", "Einstein", location="Princeton", field="physics")
print(user) # Output: {'first_name': 'Albert', 'last_name': 'Einstein', 'location': 'Princeton', 'field': 'physics'}
**kwargs
означает “keyword arguments” (именованные аргументы) и является общепринятым соглашением об именах для сбора дополнительных именованных аргументов в словарь. Это позволяет функциям обрабатывать гибкие входные данные.
Небольшие анонимные функции, созданные с помощью lambda
.
add = lambda x, y: x + y
print(add(5, 3)) # Вывод: 8
pairs = [(1, 'one'), (2, 'two'), (3, 'three')]
pairs.sort(key=lambda pair: pair[1]) #сортировка по второму элементу кортежа
print(pairs)
Лямбда-функции часто используются в качестве аргументов для функций высшего порядка (функций, которые принимают другие функции в качестве аргументов), как sort
в этом примере.
Классы предоставляют способ объединения данных (атрибутов) и функциональности (методов), которые работают с этими данными. Это одна из основных особенностей объектно-ориентированного программирования, позволяющая создавать чертежи для объектов.
class Dog:
def __init__(self, name, age): #конструктор
self.name = name
self.age = age
def bark(self):
print("Woof!")
my_dog = Dog("Buddy", 3) #экземпляр класса
print(my_dog.name)
my_dog.bark()
Пояснение:
class Dog:
: Определяет класс с именем Dog
.def __init__(self, name, age):
: Это конструктор (или инициализатор). Он вызывается автоматически при создании нового объекта Dog
.
self
: Ссылается на экземпляр класса (конкретный объект Dog
, с которым вы работаете). Это первый параметр во всех методах внутри класса.def bark(self):
: Это метод — функция, принадлежащая классу Dog
. Он может получить доступ к данным собаки (например, self.name
, хотя в этом простом примере он этого не делает).my_dog = Dog("Buddy", 3)
: Создает экземпляр класса Dog с именем my_dog
.Итератор — это объект, который позволяет перебирать все элементы коллекции, независимо от ее конкретной реализации.
class MyNumbers:
def __iter__(self):
self.a = 1
return self
def __next__(self):
x = self.a
self.a += 1
return x
myclass = MyNumbers()
myiter = iter(myclass)
print(next(myiter))
print(next(myiter))
print(next(myiter))
Генераторы — это разновидность итерируемых объектов, таких как списки или кортежи. В отличие от списков, они не хранят свое содержимое в памяти, генерируя значения на лету, используя ключевое слово yield
. Это делает их эффективными по памяти для больших последовательностей. Это также отличает их от генераторов списков, которые создают весь список в памяти.
def my_generator():
yield 1
yield 2
yield 3
for value in my_generator():
print(value)
#генераторное выражение
squares = (x*x for x in range(10))
print(list(squares))
Эти основы обеспечивают прочную базу для вашего путешествия в Python. Экспериментируя с этими концепциями и комбинируя их, вы можете создавать все более сложные программы. Помните, что практика и исследования — ключ к овладению любым языком программирования.