pitón efectiva (V): Módulo incorporado

1, y consideremos contextlib con la declaración reescribir intento reutilizable / finally Código

  1. with lock:print('lock is held')Equivalente try:print('lock is held'), finally:lock.releaseutilizando la sentencia with para evitar la tediosa
  1. Los desarrolladores pueden utilizar el incorporado en ContextManager decorador contextlib módulo para manejar escribir sus propios objetos y funciones de apoyo con la declaración, haciendo así que es más conveniente que el texto estándar, si se utiliza la forma estándar de escritura, es necesario definir una nueva clase y proporcionado __enter__ y _ método _exit__
    from contextlib import contextmanager
    
    #上下文管理器
    @contextmanager
    def test():
      print("初始化")
      #可以在这里开启资源,如log等级上升
      try:
        print("with开始")
        #如果有错误会通过yield弹出
        yield
      finally:
        print("离开时释放资源")
    
    with test():
      print("go")
    
  1. Un objeto puede estallar en rendimiento a especificado como una variable local por como, puede interactuar con en

2, el uso de salmuera funcionamiento fiable copyreg

  1. Módulo incorporado puede conservar en vinagre pitón pitón objeto en un flujo de bytes, puede también pitón deserializar objetos de bytes, pero los datos es en realidad un programa de procesamiento de salmuera, puede ser información maliciosa mixta, el programa causando daños, datos JSON generados por una información segura, la forma de describir los objetos que componen solamente y no causa riesgo adicional, por lo que el procesamiento de salmuera flujo de bytes no debe ser transmitida de un programa que no se confía
  1. Por ejemplo, definir una GameStateclase, una instancia de un objeto state=GameState()que contiene el estado actual del jugador del juego de la vida, el oro y así sucesivamente, los jugadores fuera del juego cuando el estado escrito directamente a un archivo, leer el juego se está
    with open(path,'wb') as f:
      pickle.dump(state,f)
    
    with open(path,'rb') as f:
      state_after=pickle.load(f)
    print(state_after.__dict__)
    
  1. Si la clase añade algunas nuevas propiedades, pero salvó el objeto sigue siendo de edad, tiene que usar copyreg, el primero a añadir una clase __init__constructora, a modo de pase de parámetros propiedades de inicialización, y luego usar la siguiente función de registro del código, secuencia y deserialización todavía se puede usar de acuerdo a la forma original,
    def unpickle_game_state(kwargs):
      return GameState(**kwargs)#返回State实例化
    
    def pickle_game_state(game_state):#参数为State对象
      kwargs=game_state.__dict__#获取其属性
    
      #序列化封装需要返回反序列化的函数和参数
      return unpickle_game_state,(kwargs,) 
    
    copyreg.pickle(GameState,pickle_game_state)#注册pickle函数
    
  1. número de versión de gestión, la modificación de la función de registro salmuera copyreg, un número de versión de añadir parámetros en el interior kwargs['version]=2, y luego manipular la función deserializar de acuerdo con el número de versión, la versión puede ser compatible
  1. La introducción de una trayectoria fija, si la reconstrucción, borrar o modificar el nombre de la clase, a continuación, deserializar cuando se produce un error, regístrese para uso copyreg.pickle, apuntará función unpickle de forma automática, por lo que no se preocupe acerca de la cuestión de la modificación del nombre de la clase, pero si no se copyreg uso registrado, a continuación, modificar el nombre de la clase después de deserialización será error

4, el módulo de procesamiento utiliza la hora local de fecha y hora en lugar de módulo de tiempo

  1. Módulo de tiempo, incorporado en el módulo de tiempo tiene una función llamada hora local, se puede poner marca de tiempo UNIX (marca de tiempo, es decir, el tiempo desde el origen UTC UNIX cronometrar el número de segundos) se convierta en su zona horaria local del equipo anfitrión, este módulo no es lo suficientemente estable, sólo se tiempo del anfitrión tiempo de conversión zona, otras áreas para estar equivocado, usted debe tratar de hacer, pero el uso del módulo de fecha y hora
    from time import localtime,strftime,strptime,mktime
    time_format='%Y-%m-%d %H:%M:%S'
    time_str=strftime(time_format,localtime(1407694710))
    #将时间戳转换为当地时间
    print(time_str)
    
    #将本地时间转化为UTC时间
    #strptime解析时间字符串,mktime将本地时间转换为UNIX时间戳
    print(mktime(strptime(strptime(time_str,time_format))))
    
  1. módulo de fecha y hora
    from datetime import datetime,timezone
    from time import mktime
    
    #UTC时间转本地时间
    now=datetime(2014,8,10,18,18,30)
    now_utc=now.replace(tzinfo=timezone.utc)
    #注意此处若想可靠的转换时区,还需要搭配pytz模块
    now_local=now_utc.astimezone()#此处只包含UTC时区
    print(now_local)
    
    #本地时间转UTC格式时间戳
    time_str='2014-08-10 11:18:30'
    time_format='%Y-%m-%d %H:%M:%S'
    now=datetime.strptime(time_str,time_format)
    time_tuple=now.timetuple()
    utc_now=mktime(time_tuple)
    print(time_tuple)
    
  1. Para no realizar simultáneamente una operación de conmutación fiable entre las regiones, sino también con el módulo de pytz

5, una función de las estructuras de datos y algoritmos (el desarrollador no debe ser re-implementar por sí mismos, ya que son difíciles de escribir)

  1. Deque, módulo de clase Colecciones deque, insertado desde la cabeza de la cola y la cola de un elemento desmontable o únicamente la complejidad de O (1) tiempo
    d=deque()
    d.append(1)
    x=d.popleft()
    
  1. diccionario ordenado, módulo de clase OrderedDict Colecciones, es posible unir el orden de inserción, con el fin de retener el diccionario clave-valor. diccionarios estándar no están ordenados, es decir, pueden ser diferentes iteraciones de la secuencia iterativa en la misma clave para los dos diccionarios
    a=OrderedDict()
    a['x']=1
    
  1. Por defecto diccionario módulo de clase defaultdict Colecciones, con la presente realización Int crear una función de diccionario, el valor por defecto es 0
    stats=defaultdict()
    stats['my_counter']+=1
    
  1. Pila cola (cola de prioridad), heapq módulo heappush, heappop nsmallest y otras funciones, la estructura de pila se pueden crear en una lista estándar, el tiempo de complejidad de O (log n), una lista de O común (n)
    a=[]
    heappush(a,5)
    heappush(a,3)
    heappush(a,7)
    heappush(a,4)
    #总是能弹出优先级较高的元素,
    #默认是越小元素优先级越高
    print(heappop(a)) 
    #即使调用sort后依然能保持堆结构
    a.sort()
    
  1. La búsqueda binaria, bisect módulo bisect_left función, utilice el índice para encontrar la complejidad es O (n), O dicotómica (log n), Nota: Antes de utilizar la lista para ser resuelto, un listado bisect buscar un millón de elementos, con el índice lista de búsqueda contiene 14 elementos, el tiempo pasó casi
    i_index = bisect_left(alist,number)
    
  1. herramientas iterador-relacionados, itertools módulo se pueden dividir en tres categorías

♦ poder conectar la función de repetidor:

  • cadena: una pluralidad de secuencialmente conectado a iteradores un iterador
  • ciclo: los diversos elementos de un iterador repetición infinita
  • tee: para dividir en una pluralidad de iterador iterador paralelo
  • zip_longest: la incorporada en funciones similares a una cremallera, puede hacer frente a diferentes longitudes iterador

♦ función al elemento de filtro desde el iterador:

  • iSlice: sin copiar, cortar de acuerdo con el valor del índice iterador adquirieron iterador parte
  • takeWhile: determinar cuando la función es cierto, el proceso vuelve por un elemento del iterador
  • dropwhile: en primer lugar para comenzar es falso de función de decisión, elemento por elemento, iterador devuelto
  • filterfalse: hacer la determinación por uno retorno de la función False de todos los elementos desde el iterador, con la función de filtro efecto opuesto

♦ iterador capaz de combinar los elementos como una función:

  • producto: El cálculo del producto cartesiano de los elementos en el iterador (es x * y), y vuelve. El producto puede ser utilizada para obtener una lista de las operaciones de reescritura profundamente anidado
  • un permutaciones: en el iterador construido usando elementos de longitud N ordenado, por ejemplo:permutations('ABCD',2) # AB AC AD BA BC BD CA CB CD DA DB DC
  • Combinación: Construcción de combinaciones aleatorias de longitud N, con los elementos de realización de iterador:combinations('ABCD', 2) # AB AC AD BC BD CD

NOTA: Si ves que necesitas para escribir un procedimiento iterativo muy molesto, debe tomar el tiempo para mirar a los documentos para ver si hay itertools herramientas existentes se pueden utilizar

6, en el caso de énfasis en la precisión, utilizando el módulo decimal clase decimal, que proporciona 28 cifras decimales, operaciones matemáticas de punto fijo a defecto, hay una necesidad de proporcionar una mayor precisión

  1. dec=Decimal('1.45')cálculos decimales realizadas entre resultados precisos, el tipo de cálculos es todavía tipo decimal,print(dec)
  1. Proporcionar cuantización de las funciones integradas, se puede ajustar con precisión el valor de acuerdo con el tipo de precisión decimal y modo de redondeo result=dec.quantize(Decimal('0.01'),rounding=ROUND_UP),print(result)
  1. Para utilizar la precisión no se limita de manera racional expresa, se puede considerar el uso de la clase fracción que contiene un módulo incorporado en las fracciones

7, aprender a utilizar PyPI, Python almacén central: https://pypi.python.org

  1. Si se encuentra con un problema de programación no familiar, hay que ir dentro y ver el código de otras personas PyPI
  1. Python3 versión del paquete de instalación del paquete de PIP3, pipa de instalar la versión python2

Supongo que te gusta

Origin www.cnblogs.com/shitianfang/p/12589230.html
Recomendado
Clasificación