Resumen de las especificaciones de programación de Python para el trabajo de codificación: versión de Google

especificación de código python (Google)

especificación de formato

  1. no agregue punto y coma
  2. No más de 80 caracteres por línea
  3. No unir líneas con barras invertidas
  4. Código de sangría con 4 espacios
  5. Dos líneas en blanco entre las definiciones de nivel superior y una línea en blanco entre las definiciones de métodos.
  6. espacio
  • Sin espacios entre paréntesis
  • No ponga espacios antes de comas, puntos y comas, dos puntos, pero debe ponerlos después (excepto al final de la línea)
  1. Las listas de argumentos, los índices o las porciones no deben tener un espacio antes del paréntesis de apertura.
  2. Pon un espacio a ambos lados del operador binario
  3. Cuando '=' se usa para indicar un argumento de palabra clave o un valor de argumento predeterminado, no use espacios alrededor, por ejemplo, def complex(a=1)es correcto.
  4. No use espacios para alinear verticalmente el marcado en varias líneas.
  5. formato de importación

Cada importación debe estar en su propia línea.
Las importaciones deben estar en la parte superior del archivo. El orden de importación debe ser de común a no común, la biblioteca estándar es mayor que la biblioteca de terceros que la biblioteca del programa

  1. Cada declaración debe estar en su propia línea.
    Si el resultado de la prueba y la declaración de la prueba no tienen más de 80 caracteres en una línea, también se pueden colocar en la misma línea. Si es una declaración if, solo se puede hacer si no hay otra cosa; try/except no se puede organizar de esta manera. Por ejemplo:
Yes:

  if foo: bar(foo)
No:

  if foo: bar(foo)
  else:   baz(foo)

  try:               bar(foo)
  except ValueError: baz(foo)

  try:
      bar(foo)
  except ValueError: baz(foo)

archivos y enchufes

Cuando los archivos y sockets finalicen, ciérrelos explícitamente.
Además de las presiones de archivos, los sockets u otros objetos similares a archivos que no es necesario abrir pueden tener muchos efectos secundarios, como:

  1. Puede consumir recursos limitados del sistema, como descriptores de archivos. Si estos recursos no se devuelven al sistema inmediatamente después de su uso, el código utilizado para procesar estos objetos consumirá recursos
  2. Sostener un archivo evitará otras operaciones en el archivo, como moverlo, eliminarlo, etc.
  3. Solo cierre lógicamente los archivos y los sockets, y aún así los programas que comparten pueden leerlos o escribirlos inadvertidamente.
  • Se recomienda usar 'with' para administrar archivos:
with open('q.txt') as f:
    for line in f:
        print(line)
f.closed()
  • Para objetos similares a archivos que no admiten el uso de declaraciones "with", use contextlib.closing():
import contextlib

with contextlib.closing(urllib.urlopen("http://www.python.org/")) as front_page:
    for line in front_page:
        print line

Convenciones de nombres

  1. Nombres que deben evitarse.
  • nombre de un solo carácter
  • Los guiones no pueden aparecer en los nombres de los módulos
  • No se pueden escribir nombres que comiencen y terminen con guiones bajos dobles
  1. convenio de denominación
  • Comience con un solo guión bajo (_) para indicar que la variable o función del módulo está protegida
  • Comience con un doble guión bajo (_) para indicar que la variable o función del módulo es privada
  • Coloque clases relacionadas y funciones de nivel superior en el mismo módulo
  • Utilice mayúsculas y minúsculas para nombres de clases y métodos de denominación en minúsculas y subrayados para nombres de módulos.

Las declaraciones constantes usan caracteres en mayúsculas y están separadas por guiones bajos, como NAMES_LIKE_THIS

nota

  1. Comentarios de archivo
    Los comentarios de apertura de nivel superior se utilizan para informar a los lectores que no están familiarizados con el código qué contiene este archivo y deben proporcionar el contenido general del archivo, su autor, dependencias e información de compatibilidad. como sigue:

/**
* 文件描述,他的使用和必要信息
* 存在的依赖
* 作者
  1. Anotaciones de clase
    Las anotaciones de clase describen la funcionalidad y el uso de la clase, y también necesitan explicar los parámetros del constructor.
    Si una clase no hereda de otras clases, hereda explícitamente de objeto. Lo mismo ocurre con las clases anidadas. Los ejemplos son los siguientes:
class SampleClass(object):
    """Summary of class here.

    Longer class information....
    Longer class information....
    
    Attributes:
        likes_spam: A boolean indicating if we like SPAM or not.
        eggs: An integer count of the eggs we have laid.
    """

    def __init__(self, likes_spam=False):
        """Inits SampleClass with blah."""
        self.likes_spam = likes_spam
        self.eggs = 0

    def public_method(self):
        """Performs operation blah."""
  1. Comentarios sobre métodos y funciones
    Proporcione descripciones de parámetros, usando oraciones completas y escribiendo descripciones en tercera persona.
def fetch_bigtable_rows(big_table, keys, other_silly_variable=None):
    """方法内容

    Retrieves rows pertaining to the given keys from the Table instance
    represented by big_table.  Silly things may happen if
    other_silly_variable is not None.

    参数:
        big_table: An open Bigtable Table instance.
        keys: A sequence of strings representing the key of each table row
            to fetch.
        other_silly_variable: Another optional variable, that has a much
            longer name than the other args, and which does nothing.

    Returns:
        A dict mapping keys to the corresponding table row data
        fetched. Each row is represented as a tuple of strings. For
        example:

        {'Serak': ('Rigel VII', 'Preparer'),
         'Zim': ('Irk', 'Invader'),
         'Lrrr': ('Omicron Persei 8', 'Emperor')}

        If a key from the keys argument is missing from the dictionary,
        then that row was not found in the table.

    Raises:
        IOError: An error occurred accessing the bigtable.Table object.
    """
    pass
  1. Comentarios de atributos
    Proporcione una descripción del parámetro, use oraciones completas y escriba la descripción en tercera persona
/**
* 参数描述
* @type {string} 值描述
  1. Anotaciones de conversión de tipos
    Agregue anotaciones de etiquetas de tipos para aclarar que los paréntesis se deben envolver alrededor de expresiones y anotaciones de tipos.
/**  */ (x)
  1. Poner URLs largas en una línea
Yes:  # See details at
      # http://www.example.com/us/developer/documentation/api/content/v2.0/csv_file_name_extension_full_specification.html
No:  # See details at
     # http://www.example.com/us/developer/documentation/api/content/\
     # v2.0/csv_file_name_extension_full_specification.html
  1. comentarios de bloque y línea

Los lugares más importantes para escribir comentarios son aquellas partes complicadas del código. Si tiene que explicarlo durante la próxima revisión del código, debe escribir comentarios ahora. Para operaciones complejas, debe escribir varios comentarios de línea. Para el código que es no se explica por sí mismo, se deben agregar comentarios al final de sus líneas.

# We use a weighted dictionary search to find out where i is in
# the array.  We extrapolate position based on the largest num
# in the array and the array size and then do binary search to
# get the exact number.

if i & (i-1) == 0:        # True if i is 0 or a power of 2.
  1. Comentarios TODO
    Use comentarios TODO para código temporal, es una solución a corto plazo.
    Los comentarios TODO deben contener la cadena "TODO" al comienzo de todos los comentarios, luego entre corchetes su propia dirección de correo electrónico o nombre, y describa el contenido del carácter. Los ejemplos específicos son los siguientes:
# TODO([email protected]): Use a "*" here for string repetition.
# TODO(Zeke) Change this to use relations.

Supongo que te gusta

Origin blog.csdn.net/weixin_44077556/article/details/128975137
Recomendado
Clasificación