Curso Python para GUTL (IX)

Hola comunidad, dicen que más vale tarde que nunca, así que estamos de vuelta con el cursillo, saludando el año nuevo. Primero que nada, a sacudirse el polvo, refrescar la memoria, y ponerte al dia leyendo todo lo anterior… No es fácil entrar en calor luego de tanto tiempo inactivo, pero seguiremos desde donde lo dejamos la última vez, con los módulos… y las diferentes formas de llamarlos y usarlos…veamos que tenemos

import random
x = random.randint(1, 10)

Pero importamos todo un módulo solo para usar una funcón?? Pensando en el módulo como un batallón, y en cada una de sus funciones como un soldado, para que llamar todo un batallón si solo necesitamos un soldado?? Tenemos varias formas de invocar solamente a quien querramos utilizar, y es más simple de lo que crees, a no ser que creas que es:
from random import randint
porque entonces estás en lo cierto.. :).. Nuevamente, puro inglés, vaya, (que debería ser Curso de Inglés para GUTL), esto significa:
desde random importar randint
y de ahi en adelante, tenemos el soldado listo para la acción sin tener que llamar a su batallón.. Usamos randint(a,b), y nos quitamos todo eso de random.randint(a,b).

Quizá más adelante, cuando estemos más avanzados, podríamos incluso ‘personalizar’ aún más nuestro código… Digamos que queremos poner esto de randint, pero no queramos escribir randint, porque no nos gusta la palabra o simplemente porque no se nos pega, que hacemos entonces?? No hay que preocuparse, estamos programando en un lenguage tan flexible, que incluso te permite, de cierta forma, reasignar los nombres de los módulos/funciones.

Imagina que pudieras escribir alea en lugar de randint…. Aquí tambien tenemos varias opciones, considéralas, y luego dime, cuál crees que sería la mejor?

#importamos el módulo
import random        
#le damos a "alea" el valor de la función dentro del módulo
alea = random.input 
#utilizamos "alea" como si fuese random.randint() 
numero = alea(0, 10)

En esta de arriba, llamamos a todo el batallón, lo tenemos ahi disponible, pero sacamos al soldado randint, y lo tenemos más a mano aún..

#importamos la función, solo el soldado!!
from random import randint
#le damos a "alea" el valor de la función dentro del módulo
alea = random.input 
#utilizamos "alea" como si fuese random.randint() 
numero = alea(0, 10)

En esta de arriba, llamamos solamente al soldado randint dentro del batallón random esto significa que no podremos utilizar ninguna otra función del módulo random, ya que no lo importamos, no está disponible.

Si lo que buscas es escribir menos líneas, te presento as en español como, que te va a ayudar a ahorrar código 🙂

#importamos la función con nuestro nuevo amigo
from random import randint as alea
#utilizamos "alea" como si fuese random.randint()
numero = alea(0, 10)

Solo una línea de código…minimalismo…Pero tampoco podremos utilizar ninguna otra función del módulo…. Asi que cuidado!
Como siempre, si conoces otra vía, o alguna sugerencia… ahi tienes los comentarios para compartir…

¿Te resultó interesante? Compártelo ...



danielqba

Publicado por danielqba

Forma parte de GUTL desde el 7 agosto, 2013. si Linux te da la espalda, tócale el kernel

Este artículo tiene 18 comentarios

  1. Hola disculpen el OT:

    Hace tiempo quiero saber como pasarle un fichero como parámetro a una app escrita en Python, me explico: Sabemos que si escribimos en una caja lanzadora de aplicaciones o desde el terminal algo así:
    gedit /home/user/texto.txt se ejecuta el «gedit» y en él se muestra el contenido del fichero.

    Eso en C/C++ se puede lograr a través de la función main que incluye dos parametros, el primero es la cantidad de parametros y el segundo es un arreglo con los parámetros solo es necesario utilizar dichas variables y el comportamiento antes descrito se implementa.
    Ejemplo:

    int main(int argc, char *argv[]){
    if (argc == 2)
    cout << argv[1] << endl;
    ...
    }

    ¿Cómo hacer esto con una aplicación escrita en Python?

    Saludos

    • Puede ser el caso de que quieras pasarle más de un parámetro a X comando? Pones el ejemplo de gedit, pero digamos que sea X o Y app? Es ese tu caso?
      Si es afirmativo, pues ensambla tu comando completo en una variable, más o menos así:
      my_cmd = ' '.join([
      my_program, #por ejemplo, aquí puede ir chromium, o gedit
      'param_1', # aki un parametro, ex: --incognito, o el path del fichero...
      'param_2', #otro parámetro, ex: --proxy-server=my_proxy:8080
      'param_N', #etc etc
      ])

      Y luego puedes hacer con my_cmd lo que desees, lo que sería algo como:
      subprocess.Popen(
      cmd,
      shell=True, #o False, en dependencia del comando a ejecutar
      stdin=subprocess.PIPE,
      stdout=subprocess.PIPE,
      stderr=subprocess.PIPE,
      close_fds=True,
      universal_newlines=True
      )

      Es este tu caso? Saludos.

    • El módulo sys brinda esa funcionalidad, devolviendo una lista con los argumentos, prueba así:

      import sys
      print sys.argv

      Python también tiene incluido el módulo argparse, con el cual es muy fácil trabajar con opciones y argumentos desde la linea de comandos y esta muy bien explicado en la documentación.

      Saludos.

  2. Gracias @Ozkar y @Cesar por la explicación, ya probé sus soluciones y las dos me sirven para lo que deseo hacer.

    Saludos

  3. Vaya… resucitando la seccion de programacion Python dentro de GUTL. Hace un tiempo me dio por retomar las pocas cosas de Python que habia aprendido autodidacticamente en la UCI y descubri un sitio en internet que te enseñan a «codear» su nombre es CodeAcademy pero lamentablemnte parece ser que mi ancho de banda es muy limitado como para poder trabajar comodamente en él. Ojalá a alguien se le ocurra poner dentro del dominio cubano un sitio de este tipo que no solo abarca Python sino otros tambien usados como CSS3, HTML5 etc etc

    • Eso tenia pensado hacer yo también, pero la bella Cubava lleva buen tiempo «abriendo» el registro… 🙁
      Las clases de Python volvieron, aunque no se contar mucho en números romanos 😀 😀

      • Hola me he interesado por las clases de Python que ofreces la última que he revisado es la que sacaste en enero (la numero IX) me gustaría saber si hay más ediciones y como las encuentro. Gracias por tu labor.

  4. Saludos amigos, me acabo de autenticar y me interesa este tema pero el problema es que me encanta la programación y me consiguieron un disco live de devian y trae python, pero yo no se ni papas de esto y estoy ancioso por aprender además de querer migrar completamente a software libre, que me sujieren es que todos me gustan. Saludos

    • Saludos Astralmaster, si quieres migrar, este es el mejor lugar para conocer del software libre, como eres principiante, te aconsejo Ubuntu, si te gusta la programación, pues aquí estamos, con el curso de Python…

  5. descubrí hace poco este curso, creo que algo atrasado pero bueno, siempre es tiempo de aprender algo nuevo… necesito saber donde puedo poner lo que voy haciendo para que me den ideas y me corrijan…. seria bueno algo de ayuda…. salu2

Los comentarios están cerrados.