2011-07-21 15 views
7

Estoy trabajando en mi primer proyecto utilizando Python 2.7. Venimos de un entorno Java y nuestro primer instinto fue escribir código python de forma Java. Pero ahora estamos tratando de adaptarnos tanto como sea posible. Hasta ahora estamos usando pylint para adaptar nuestro código.estilo de pitón ** pregunta

Ahora sigo encontrando una situación con pylint. Cada vez que utilizo algo como **data para pasar valores a un método recibo una advertencia pylint sobre el uso de * o **. Ahora mi pregunta es: ¿está usando ** un mal estilo para escribir código python? ¿Hay algún tipo de reemplazo estándar para usar esto?

Saludos, Bogdan

+1

¿Podría pegar algún ejemplo del código? –

Respuesta

4

** puede introducir un error más complicado porque aceptará cualquier cosa. Por lo general, desea un código que se rompa cuando se lo llame incorrecto. He aquí un ejemplo:

def dostuff(**kwargs): 
force = 3 
if kwargs.get('reallyhard', False): 
    force += 5 
# and so on 

# Now you need luck to find this bug ... 
dostuff(fancy=True, funky=False, realyhard=True) 

Usted no debe usar ** sólo porque usted es demasiado perezoso para escribir los nombres de los argumentos. Sin embargo, eso no siempre es posible, por lo que también hay usos legítimos.

+0

Gracias por todas las entradas. Sería muy difícil hacer lo que necesitamos de otra manera. Por ejemplo, tenemos un método lauch que recibe una instancia de adaptador creada dinámicamente por introspección cada una con una interfaz diferente. Entonces los datos de entrada requeridos difieren de adaptador a adaptador. – Bogdan

2

Es casi imposible utilizar el análisis estático para verificar que los argumentos generados por ** son todas válidas, pero si es el único mecanismo apropiado por todos los medios no lo utilizan.

2

** excelente para lo que está diseñado: para reenviar argumentos a otras funciones. Definitivamente puede hacer cosas malas que disminuirán la legibilidad de su código con él, pero no se considera una mala práctica per se.