Python FAQ |
![]() |
Добавил(а) microsin |
Небольшой сборник ответов на часто задаваемые вопросы по программированию на Python. import sys См. также How do I terminate a script? site:stackoverflow.com. На примере переменной окружения PATH: import os Здесь os.environ['PATH'] это содержимое переменной окружения, где пути отделены друг от друга символом точки с запятой ';'. Метод split() генерирует список l по этому разделителю. Цикл for выведет содержимое списка. Этот код на Windows 10 выведет что-нибудь наподобие: C:\Users\John\.pyenv\pyenv-win\versions\3.13.1 См. также How can I access environment variables in Python? site:stackoverflow.com. Для этого используйте объект filedialog из модуля tkinter. Например: import tkinter as tk Это так называемые f-строки, предназначенные форматирования вывода при печати с помощью функции print(). Значения выводимых переменных и вычисленных выражений подставляются в строку с помощью фигурных скобок. Это быстрый и удобочитаемый метод динамического форматирования печатаемых сообщений. name = "Алиса" age = 30 sentence = f"Меня зовут {name}, и мне {age} лет." Этот код выведет: Меня зовут Алиса, и мне 30 лет. С помощью f-строк легко реализовать вывод нужного количества значащих цифр после запятой при печати значений float. Например: num = 3.14159 formatted = f"{num:.2f}" Пример функции get_file_size, которая возвратит размер файла без его открытия: from pathlib import Path Это можно сделать с помощью вот такого пользовательского класса WindowOutput: class WindowOutput: def __init__(self, window): self.window = window self.window.scrollok(True) # разрешает прокрутку окна self.line = 0 self._text = "" Предположим, что у вас есть два окна curses без бордюра. Первое окно сверху, в переменной w1, высотой в одну строку, второе окно ниже, занимающее все остальное пространство экрана, в переменной w2. И нам надо, чтобы функция print выводила сообщения в нижнее окно w2. Вспомогательные функции: # Функция определяет общий размер экрана консоли в символах: Пример функции, которая создает окна w1, w2 и настраивает вывод функции print в окно w2: def init_interface(): height, width = get_screen_size() Эта функция возвращает вывод функции print в оригинальное состояние: def revert_interface(): sys.stdout = original_stdout cleanup_curses(s1) cleanup_curses(s2) Как это работает: if __name__ == "__main__": # Здесь print печатает как обычно: print("Обычная печать") Пример функции, которая возвратит текст содержимого окна: def get_window_content(window): try: height, width = window.getmaxyx() content = [] for y in range(height): # Извлечение содержимого строки, перекодирование из байт в строку: line = window.instr(y, 0, width).decode('utf-8') # Удаление null-символов и завершающих пробелов: line = line.replace('\x00', '').rstrip() if line: # Добавление только непустых строк: content.append(line) return '\n'.join(content) В перехвате нажатий без блокировки поможет модуль msvcrt. import msvcrt Ниже показан пример использования функции check_keyboard. Этот блок кода может быть вставлен в основной цикл программы: while True: # Тут какие-то действия ... key = check_keyboard() # проверка нажатия без блокировки if key == 'q': # выход, если 'q' print("\nComparison cancelled by user") return elif key == 'p': # пауза, если 'p' print("\nPaused. Press any key to continue...") msvcrt.getch() # ождание клавиши с блокировкой print("\nContinuing comparison...") else: pbar.update(1) ... Ошибка произошла из-за того, что вместо библиотеки pyserial была установлена библиотека serial. Чтобы устранить ошибку, нужно удалить библиотеку serial и установить библиотеку pyserial: $ pip uninstall serial $ pip install pyserial import logging Этот код выведет в файл log.txt: 250319 13:05:02.282 info import traceback ... Специальная переменная __name__ позволяет получить имя текущего модуля, но это не совсем то, что нужно: def some_function(): print(__name__) # печать имени модуля (не функции) А как получить имя текущей функции в целях отладки, по аналогии как на C мы используем gcc-макрос __FUNCTION__? На Python для этого есть 2 метода: Метод 1. С помощью модуля inspect: import inspect Метод 2. С помощью sys._getframe(): import sys Чаще всего используется и рекомендуется первый метод, на основе inspect.currentframe().f_code.co_name. "Pickling" это процесс, посредством которого иерархия объектов Python преобразуется в поток байт, а "unpickling" это обратный процесс, где байтовый поток (из двоичного файла или байтового объекта) преобразуется обратно в иерархию объектов. Pickling (и unpickling) альтернативно известен как "сериализация", "маршаллинг" [1] или "выравнивание" (flattening); однако для во избежание путаницы в контексте Python используются термины "pickling" и "unpickling". [Ссылки] 1. Python: руководство по функции print. |