Herramientas de usuario

Herramientas del sitio


script:python:new:language

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anterior Revisión previa
Próxima revisión
Revisión previa
script:python:new:language [2013/07/06 11:38]
alfred [Notas]
script:python:new:language [2020/05/09 09:25] (actual)
Línea 12: Línea 12:
 e = True # Crea una variable booleana e e = True # Crea una variable booleana e
 del a # Elimina de memoria la variable a  del a # Elimina de memoria la variable a 
 +a, b = 3, 4 # a = 3, b = 4
 </​code>​ </​code>​
 Pequeños tips en la asignación de variables: Pequeños tips en la asignación de variables:
Línea 26: Línea 27:
 else: else:
   print "i no es 3"   print "i no es 3"
 +</​code>​
 +
 +<code python>
 +show () if a == 1 else noshow()
 </​code>​ </​code>​
  
Línea 96: Línea 101:
 </​code>​ </​code>​
   * ''​var1 is var2''​ devuelve ''​True''​ si la referencia de ''​var1''​ es la misma que la de ''​var2''​.   * ''​var1 is var2''​ devuelve ''​True''​ si la referencia de ''​var1''​ es la misma que la de ''​var2''​.
- 
- 
 ==== Funciones ==== ==== Funciones ====
 === Función básica === === Función básica ===
Línea 120: Línea 123:
 def testArgDir(**kwargs):​ #​ A esta la llamaríamos con un diccionario:​ "​testArgDir(arg1='​ccc',​ arg2='​ddd'​)"​.... def testArgDir(**kwargs):​ #​ A esta la llamaríamos con un diccionario:​ "​testArgDir(arg1='​ccc',​ arg2='​ddd'​)"​....
   print '​kwargs:',​ args # Mostraría "​kwargs:​ {'​arg1':​ '​ccc',​ '​arg2':​ '​ddd'​}   print '​kwargs:',​ args # Mostraría "​kwargs:​ {'​arg1':​ '​ccc',​ '​arg2':​ '​ddd'​}
 +# también podríamos llamarla: testArgDir(**{'​arg1':​ '​ccc',​ '​arg2':​ '​ddd'​})
 </​code>​ </​code>​
 === Combinación de diccionario y lista === === Combinación de diccionario y lista ===
Línea 221: Línea 225:
 for elem in myList: for elem in myList:
   print elem   print elem
 +</​code>​
 +Iterar en los elementos de un diccionario:​
 +<code python>
 +for key, value in d.iteritems():​
 </​code>​ </​code>​
 Recoger un rango intermedio (del elemento 5 al 10): Recoger un rango intermedio (del elemento 5 al 10):
Línea 263: Línea 271:
   * Para agregar un nuevo elemento: ''​lista["​nuevoNombre"​] = valor''​   * Para agregar un nuevo elemento: ''​lista["​nuevoNombre"​] = valor''​
   * Para saber si la clave existe mediante el método ''​has_key()''​ o con el ''​in''​.   * Para saber si la clave existe mediante el método ''​has_key()''​ o con el ''​in''​.
 +  * Puedes pasar un diccionario como argumentos ''<​nowiki>​**kwargs</​nowiki>''​ precediendole ''<​nowiki>​**</​nowiki>''​.
 <code python> <code python>
 if lista.has_key(2):​ if lista.has_key(2):​
Línea 278: Línea 287:
 <code python> <code python>
 del d['​name'​] del d['​name'​]
 +</​code>​
 +
 +Para crear un diccionario a partir de la función dict:
 +<code python>
 +dict(akey='​avalue',​ bkey=3)
 +</​code>​
 +
 +Para recorrer clave\valor en los diccionarios:​
 +<code python>
 +for (k, v) in mydict.items():​
 +    print k, v
 </​code>​ </​code>​
  
Línea 298: Línea 318:
   * Podemos desordenar una lista haciendo ''​random.shuffle(l)''​.   * Podemos desordenar una lista haciendo ''​random.shuffle(l)''​.
   * Podemos convertir otros tipos a tupla o lista haciendo ''​list()''​ o ''​tuple()''​. Como por ejemplo una lista a partir de una secuencia (p.ej. una tupla): ''​list(getAllLines())''​.   * Podemos convertir otros tipos a tupla o lista haciendo ''​list()''​ o ''​tuple()''​. Como por ejemplo una lista a partir de una secuencia (p.ej. una tupla): ''​list(getAllLines())''​.
- 
- 
  
 ==== Características del lenguaje ==== ==== Características del lenguaje ====
Línea 405: Línea 423:
   * ''​del(o)''​ elimina de la memoria el objeto.   * ''​del(o)''​ elimina de la memoria el objeto.
   * ''​reload(mod)''​ vuelve a cargar en memoria el módulo '​mod'​.   * ''​reload(mod)''​ vuelve a cargar en memoria el módulo '​mod'​.
 +  * ''​repr(o)''​ devuelve la representación en string (la que se usa por consola) de o.
 === Propiedades === === Propiedades ===
 <code python> <code python>
Línea 445: Línea 464:
   * ''​@classmethod''​ es un método que se le pasa la clase con la que fue llamado (o la de la instancia) como pruimer argumento. Es útil para realizar un método factoría de la clase, puede ser utilizado para iterar sobre las subclases.   * ''​@classmethod''​ es un método que se le pasa la clase con la que fue llamado (o la de la instancia) como pruimer argumento. Es útil para realizar un método factoría de la clase, puede ser utilizado para iterar sobre las subclases.
  
 +==== Clases New & Old Style ==== 
 +A partir de la versión 2.1 el intérprete se comporta de forma diferente cuando se hace herencia de ''​object''​. \\  
 +Las clases que no hereden de ''​object''​ son denominadas old-style mientras que las que sí lo hacen new-style. \\  
 +Cuando hacemos ''​x.<​nowiki>​__class__</​nowiki>'',​ siendo x una instancia de una clase old-style, se devolverá la clase, pero si hacemos ''​type(x)''​ se devolverá que es del tipo instancia. Si esta fuese una new-style devolvería lo mismo, la clase. \\  
 +Las new-style añaden nuevos decoradores,​ permiten usar descriptores,​ metaclases...
 ===== Uso del lenguaje ===== ===== Uso del lenguaje =====
 ==== Documentación ==== ==== Documentación ====
Línea 569: Línea 592:
 ===== Notas ===== ===== Notas =====
 ==== Cómo ==== ==== Cómo ====
-=== Comprobar ​el tipo de una variable ​===+ 
 + 
 +=== Saber el directorio del módulo actual ​===
 <code python> <code python>
-type(o) is str +import os 
-isinstance(o, str)+path = os.path.dirname(__file__) 
 +</​code>​ 
 +O de un módulo concreto: 
 +<code python>​ 
 +import a_module 
 +print a_module.__file__
 </​code>​ </​code>​
  
-Saber si es una subclase:+=== Escribir por la consola de error ===
 <code python> <code python>
-issubclass(type(o), str)+import sys 
 +sys.stderr.write('​Writing error!'​)
 </​code>​ </​code>​
  
-Para comprobar si es un string ​(del que seaestas dos son válidas:+=== Detectar cuando sale el programa === 
 +Registraremos una función ​(''​savecouter''​con atexit:
 <code python> <code python>
-isinstance(o,​ basestring) +import atexit 
-isinstance(o, ​(str, unicode))+atexit.register(savecounter)
 </​code>​ </​code>​
 +También lo podemos hacer con un decorador en ''​savecounter'':​ ''​@atexit.register''​. \\ 
 +''​atexit''​ no llamará cuando...
 +  * El programa se acaba debido a un ''​signal''​.
 +  * ''​os._exit()''​ se invoca directamente.
 +  * Se lanza un error fatal en el intérprete.
  
 +=== Testear la sintaxis de un script ===
 +<​code>​
 +$ python -m py_compile script.py
 +</​code>​
  
 +=== Checkear el estilo de un script ===
 +  * Mediante el script [[https://​pypi.python.org/​pypi/​pep8|pep8.py]]
 +  * Online, en: [[http://​pep8online.com/​]]
 +==== Errores ====
 +=== Confundir variables de clase con variables de objeto ===
 +<code python>
 +class A:
 + value = []
 +a = A()
 +a.value.append(1)
 +b = A()
 +b.value.append(2)
 +print b.value ​ # [1, 2]
 +</​code>​
  
 +=== Utilizar un mutable (lista, diccionario) como valor por defecto ===
 +<code python>
 +def test (a=[]):
 + a.append(1)
 + print a
 +
 +test() # [1]
 +test() # [1, 1]
 +test() # [1, 1, 1]
 +</​code>​
 ==== Notas ==== ==== Notas ====
 === Utilizar una codificación específica dentro del script === === Utilizar una codificación específica dentro del script ===
script/python/new/language.1373110738.txt.gz · Última modificación: 2020/05/09 09:24 (editor externo)