Python
Оглавление
- Декоратор внутри класса
- Ввод с клавиатуры
- Getter/Setter
- JSON
- Thread
- Форматирование строк
- Протокол менеджера контекста
Декоратор внутри класса
class Demo(): def __init__(self): pass def dec(param): def dec_func(func,*args): print(param) def helper(self,*args): print('helper') func(self,*args) return helper return dec_func @dec('param') def ff(self,a): print('body =',a) f=Demo() f.ff('head')
Ввод с клавиатуры
import time import msvcrt while "more work to do": ch = msvcrt.getch() if ch in b'\x00\xe0': ch = msvcrt.getch() print('Spec key: %s' % ch) else: print('key: %s' % ch) # just to show the result if ch == b'\x1b': print("Pre-termination...") time.sleep(1) raise SystemExit("exit")
Getter/Setter
Getter
@property def Value(self): return self.value
Setter
@Value.setter def Value(self, a): self.value = a
JSON
Чтение
Для чтения в модуле json есть два метода:
- json.load() - метод считывает файл в формате JSON и возвращает объекты Python
- json.loads() - метод считывает строку в формате JSON и возвращает объекты Python
json.load()
Чтение файла в формате JSON в объект Python:
import json with open('file.json',encode='utf-8') as f: templates = json.load(f)
json.loads()
Считывание строки в формате JSON в объект Python:
import json with open('file.json') as f: file_content = f.read() templates = json.loads(file_content)
Запись
Запись файла в формате JSON также осуществляется достаточно легко.
Для записи информации в формате JSON в модуле json также два метода:
- json.dump() - метод записывает объект Python в файл в формате JSON
- json.dumps() - метод возвращает строку в формате JSON
json.dumps()
Преобразование объекта в строку в формате JSON:
import json to_json = {'first': 'John', 'second': 'Doe'} with open('sw_templates.json', 'w') as f: f.write(json.dumps(to_json))
json.dump()
Запись объекта Python в файл в формате JSON:
import json to_json = {'first': 'John', 'second': 'Doe'} with open('file.json', 'w') as f: json.dump(to_json, f, sort_keys=True, indent=2)
Thread
Поток - функция
import threading def func(arg): print(arg) if __name__ == '__main__': for i in range(10): my_thread = threading.Thread(target=func, args=(1,)) my_thread.start()
Поток-класс
import threading class MyThread(threading.Thread): def __init__(self, number): threading.Thread.__init__(self) self.number = number def run(self): print(self.number) if __name__ == '__main__': thread_names = ['Mike', 'George', 'Wanda', 'Dingbat', 'Nina'] for i in range(5): thread = MyThread(i) thread.setName(thread_names[i]) thread.start()
Форматирование строк
Базовое форматирование с format()
Метод format()
позволяет использовать простые заполнители для форматирования.
# аргументы по умолчанию print("Hello {}, your balance is {}.".format("Adam", 230.2346)) # позиционные аргументы print("Hello {0}, your balance is {1}.".format("Adam", 230.2346)) # аргументы ключевые слова print("Hello {name}, your balance is {blc}.".format(name="Adam", blc=230.2346)) # смешанные аргументы print("Hello {0}, your balance is {blc}.".format("Adam", blc=230.2346))
Форматирование чисел с format()
Типы форматирования чисел:
- d - Десятичное число
- c - Соответствующий символ Unicode
- b - Двоичный формат
- x - Шестнадцатеричный формат (в нижнем регистре)
- X - Шестнадцатеричный формат (в верхнем регистре)
- e - Экспоненциальная запись (e в нижнем регистре)
- E - Экспоненциальная запись (E в верхнем регистре)
- f - Отображать фиксированное количество знаков (по умолчанию 6)
- g - Общий формат. Округляет число до p значащих цифр (Точность по умолчанию: 6)
- % - Проценты. Делит на 100 и добавляет % в конце
# целочисленные аргументы print("The number is:{:d}".format(123)) # аргументы с плавающей точкой print("The float number is:{:f}".format(123.4567898)) # восьмеричный, двоичный и шестнадцатеричный формат print("bin: {0:b}, oct: {0:o}, hex: {0:x}".format(12)) # При запуске: The number is: 123 The number is:123.456790 bin: 1100, oct: 14, hex: c
Форматирование чисел с выравниванием
Операторы <
, ^
, >
и =
используются для выравнивания в том случае, если указана конкретная ширина.
- < - Выравнивается по левому краю
- ^ - Выравнивается по центру
- > - Выравнивается по правому краю
- = - Сдвигает знаки (+ или -) к левой позиции
# отступ строки с выравниванием по левому краю print("{:5}".format("cat")) # отступ строки с выравниванием по правому краю print("{:>5}".format("cat")) # заполнение строк с выравниванием по центру print("{:^5}".format("cat")) # заполнение строк с выравниванием по центру # и '*' - символ заполнения print("{:*^5}".format("cat")) # обрезание строк до 3 букв print("{:.3}.".format("caterpillar")) # cat.
Протокол менеджера контекста
Создавать менеджеры контекста можно, чтобы самостоятельно управлять некоторыми ресурсами. Одним из способов создания является реализация методов для протокола менеджера контекста. Можете представить это себе как утиную типизацию — мы просто определим магические методы __enter__
и __exit__
без формального согласования протокола или реализации интерфейса, как это можно сделать и в других языках программирования. Следующий код демонстрирует эту концепцию:
class ContextManagerExample: def __init__(self): print("Context Manager Created") def __enter__(self): print("Begin Context Management") def __exit__(self, exc_type, exc_val, exc_tb): print("End Context Management") with ContextManagerExample(): print("Run operations in the with statement") Context Manager Created Begin Context Management Run operations in the with statement End Context Management
Как показано выше, мы просто определили класс, в котором реализованы методы __enter__
и __exit__
, способные управлять контекстом за нас. С синтаксической точки зрения, мы можем использовать этот класс в операторе with
, как в строке 12. Выведенный текст показывает нам порядок, в котором эти операции хорошо координируются. В частности, созданный экземпляр (строка 15) вызовет метод __enter__
(строка 16) для запуска контекста, затем мы сами выполняем операции (строка 17), и, наконец, менеджер контекста выйдет из управления, вызвав метод __exit__
.