Выполнение многострочных команд Python в одну строку

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Чтобы выполнить многострочный код Python в командной строке, вы можете использовать точку с запятой ; для разделения инструкций:

Python
Скопировать код
for i in range(3): print(f'Число: {i}, Квадрат: {i**2}');  # Точка с запятой — наш надёжный помощник 😉

Для запуска более длинных скриптов используйте функцию exec() с многострочным строковым литералом:

Python
Скопировать код
python -c "exec(\"\"\"for i in range(3):\n    print(f'Число: {i}, Квадрат: {i**2}')\"\"\")"

Таким образом, для коротких команд подходит точка с запятой, в то время как exec() с многострочными литералами эффективно справится с более сложными задачами.

Кинга Идем в IT: пошаговый план для смены профессии

Стратегии усложнения однострочных команд

1. Улучшение возможностей с bash

Примените ANSI C-строки в кавычках ($'...') для удобного включения переводов строк и разделения инструкций Python:

Bash
Скопировать код
python -c $'for i in range(3):\n    print(f"Число: {i}, Квадрат: {i**2}")'  # На сей раз точка с запятой может отдохнуть 🙌

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

Bash
Скопировать код
python <<'EOF'
import sys
for i in range(int(sys.argv[1])):
    print(f'Счет: {i}')  # EOF — это не конец света!
EOF

Не забывайте обертывать 'EOF' в кавычки, чтобы bash не разворачивал переменные внутри блока heredoc.

2. Интерактивность

Используйте input() для интерактивности или sys.argv для чтения параметров из командной строки:

Python
Скопировать код
python -c "import sys; print(f'Привет, {sys.argv[1]}!')" ВашеИмя  # Мы догадались с вашим именем? 🤔

3. Соблюдение POSIX

Если требуется совместимость с POSIX, printf для подстановки или передача данных в stdin Python станут вашим выбором:

Bash
Скопировать код
printf "print('Занимательное путешествие в POSIX')" | python  # 🚀 Все идет по плану...

4. Избыточная сложность — противник ясности

Не злоупотребляйте сложностью. Порой целесообразнее создать небольшой скрипт .py:

Python
Скопировать код
python -c "print(*(f'Счетчик: {i}' for i in range(5)), sep='\n')"  # Гибкость числового потока

Для оптимизации вывода можно использовать sys.stdout.write вместо print, а для компактных вычислений заходят map() и lambda:

Python
Скопировать код
python -c "import sys; map(lambda x: sys.stdout.write(f'{x}\n'), range(5))"

Но имейте в виду, что в мире однострочных команд главным приоритетом остаётся читаемость. Не жертвуйте ею в угоду краткости!

Визуализация

Считайте командную строку лифтом (🛗), который перевозит инструкции этаж за этажом до момента их выполнения:

Markdown
Скопировать код
Этаж 1: `import this`
Этаж 2: `for i in range(10):`
Этаж 3: `print(i, end=" ")`
Этаж 4: `# Завершаем`
Весь маршрут выполняется за одну поездку
python -c "import this; for i in range(10): print(i, end=' '); print('# Завершаем')"
markdown Процедура: 🚪🛗🚶‍♂️➔ Этаж 1 🆙➔ Этаж 2 🆙➔ Этаж 3 🆙➔ Этаж 4 🆙➔ 🚶‍♂️и возврат в лифт🔄🚪. # Непрерывное движение от выхода до возвращения.

```

Подводные камни и хитрости

Однострочники тоже могут быть губительными — вот несколько распространенных проблем, которые следует учитывать:

1. Проблемы с отступами и символами табуляции

В Python каждая ошибка в отступах может вызвать IndentationError. Постарайтесь избегать символов табуляции в командной строке.

2. Ловушки heredoc

Убедитесь, что выбранный вами маркер heredoc не встречается в тексте вашего кода, и правильно экранируйте кавычки внутри него. Для полноценной работы с heredoc изучите подробное руководство по bash.

Полезные материалы

  1. Использование интерпретатора Python
  2. Командная строка и окружение
  3. Управление потоками данных
  4. Python-однострочники: советы и рекомендации
  5. Запуск скриптов на Python