Python

Python


Оглавление


Декоратор внутри класса

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__.

наверх



Report Page