Написание кода на Python: руководство для новичков

Раздел: -> Основные понятия

Основные понятия исходного кода Python

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

Наиболее эффективное решение для начала работы - создание простого скрипта с чёткой структурой:


# simple_hello.py

def greet(name):
    """Возвращает приветствие для указанного имени."""
    return f"Привет, {name}!"

if __name__ == "__main__":
    user = input("Введите ваше имя: ")
    print(greet(user))
  

Python исходный код программы (исходный код программы на python)

  1. Первая строка - комментарий (начинается с #), поясняющий назначение файла.
  2. Функция greet определена с docstring.
  3. Блок if __name__ == "__main__" позволяет использовать файл и как модуль, и как самостоятельный скрипт.

Запуск: python simple_hello.py. Вывод будет зависеть от ввода пользователя.

Как создать скрипт с функциями и избежать дублирования кода?

Определите функции в отдельных строках, а затем вызывайте их. Это улучшает читаемость и переиспользуемость.


def calculate(a, b):
    return a ** b

result = calculate(2, 5)
print(result)  # 32
  

Python числа (числа в python)

Как организовать код в классы для больших проектов?

Классы группируют данные и методы. Пример класса Calculator:


class Calculator:
    def __init__(self, initial=0):
        self.value = initial

    def add(self, x):
        self.value += x
        return self.value

calc = Calculator(10)
print(calc.add(5))  # 15
  

Такой подход удобен при работе с состоянием объекта.

Как обрабатывать ошибки, чтобы программа не падала?

Используйте конструкцию try-except:


try:
    num = int(input("Введите число: "))
    print(10 / num)
except ValueError:
    print("Нужно ввести целое число")
except ZeroDivisionError:
    print("Деление на ноль невозможно")
  
Как сделать модуль переиспользуемым?

Поместите код в файл, а затем импортируйте. Например, файл utils.py:


# utils.py
def factorial(n):
    if n == 0:
        return 1
    return n * factorial(n-1)
  

В другом файле: from utils import factorial.

Типичные проблемы и их решения:

  • IndentationError: нарушение отступов. Решение - использовать 4 пробела последовательно.
  • SyntaxError: пропущен двоеточие или скобка. Проверьте синтаксис.
  • ImportError: модуль не найден. Убедитесь, что файл находится в той же директории или в PYTHONPATH.
  • NameError: имя не определено. Проверьте, что переменная или функция объявлены до вызова.
  • Кодировка UTF-8: при использовании не-ASCII символов добавьте в начало файла # -*- coding: utf-8 -*- (но Python 3 по умолчанию использует UTF-8).

Расширенные примеры использования исходного кода

Рассмотрим более сложные конструкции, которые встречаются в реальных проектах.

Декоратор для логирования вызовов функций

Пример

import functools

def log_call(func):
    @functools.wraps(func)
    def wrapper(*args, **kwargs):
        print(f"Вызов {func.__name__} с аргументами {args}, {kwargs}")
        result = func(*args, **kwargs)
        print(f"Результат: {result}")
        return result
    return wrapper

@log_call
def multiply(a, b):
    return a * b

multiply(3, 4)
Вызов multiply с аргументами (3, 4), {}
Результат: 12

Декоратор добавляет поведение без изменения исходной функции.

Генератор последовательности Фибоначчи

Пример

def fibonacci(limit):
    a, b = 0, 1
    while a < limit:
        yield a
        a, b = b, a + b

for num in fibonacci(100):
    print(num, end=' ')
0 1 1 2 3 5 8 13 21 34 55 89

Генераторы экономят память при работе с большими последовательностями.

Менеджер контекста для работы с файлами (собственный класс)

Пример

class ManagedFile:
    def __init__(self, filename, mode='r'):
        self.filename = filename
        self.mode = mode

    def __enter__(self):
        self.file = open(self.filename, self.mode, encoding='utf-8')
        return self.file

    def __exit__(self, exc_type, exc_val, exc_tb):
        self.file.close()

with ManagedFile('test.txt', 'w') as f:
    f.write('Пример использования контекстного менеджера')

Такой подход гарантирует закрытие файла даже при ошибке.

Аннотации типов и проверка статическим анализатором

Пример

from typing import List, Optional

def find_user(users: List[str], target: str) -> Optional[int]:
    """Возвращает индекс пользователя или None."""
    for i, user in enumerate(users):
        if user == target:
            return i
    return None

print(find_user(['Alice', 'Bob', 'Charlie'], 'Bob'))
1

Аннотации улучшают документирование и помогают инструментам вроде mypy находить ошибки.

Относительные импорты в пакетах

Пример

# Структура:
# mypackage/
#   __init__.py
#   module_a.py
#   subpackage/
#     __init__.py
#     module_b.py

# В module_b.py:
from ..module_a import some_function

Относительные импорты (..) используются внутри пакетов для ссылок на родительские модули.

Исходный код программы на Python - comments

En
Python исходный код программы (python)