No encontré un mejor título XD, pero aquí voy...
En esta oportunidad pretendo seguir fomentando la reducción de código, aunque sea por unos cuantos caracteres, las formas que explicaré quizás no sean tan útiles para reducir mucho el source, pero si podrían usarlo para ofuscar códigos .
Bien, al grano ! . Como bien sabemos, hay varias funciones internas en nuestro amado Python, tales
como : int(), str(), raw_input(), input(), etc...
Entre esa lista podemos incluir nuestras funciones creadas vía "def". Bien, pero eso que tiene de
especial ? , ahora vamos a eso ...
Pondré un caso bien sencillo con el uso de def():
Código
Veremos que la salida es:
def funcion(parametro): print parametro func = funcion print func
Código:
<function funcion at 0xb74a2454>
el nombre de la variable... No se entiende ? , un ejemplo:
Código
Salida:
def funcion_sumar(primero, segundo): return primero+segundo sumando = funcion_sumar print "Resultado:",sumando(1,2)
Código:
Resultado: 3
nuestro código, cuando llamamos muchas veces a la función.
Bien, otra forma singular de llamar funciones podría ser insertar nuestras funciones en un diccionario, para quienes no saben a que me refiero con un diccionario:
Código
Un sencillo ejemplo para que vean a que me refiero:
diccionario = {"variable":valor}
Código
Bien, es una manera diferente, pero no es la mejor para optimizar nuestros códigos...
funciones = {"alfa":raw_input,"nums":input} print funciones['alfa']("Texto ::>") print funciones['nums']("Numero ::>")
Una forma similar, pero más corta sería:
Código
Eso quiere decir que alfa = raw_input() y nums = input()
alfa, nums = (raw_input, input) print alfa("Texto ::>") print nums("Numero ::>")
Lo bueno de esto es que no nos limita a solo usarlo con Python en Consola, podemos aplicarlo por
ejemplo al hermoso PyQT4, por ejemplo, para no tener que escribir QtGui.QPushButton("Valor",self)
cada vez que creamos un botón, o para no tener que escribir QtGui.QLabel("Valor",self) por cada
label, tampoco tener que escribir QtGui.QLineEdit("Valor",self) por cada LineEdit en el formulario.
Podemos usar las siguientes líneas:
Código
Por lo que luego de eso para crear un QtGui.QLabel(); solo debemos llamarlo así:
label, inpt, boton =(QtGui.QLabel,QtGui.QLineEdit,QtGui.QPushButton)
Código
De igual forma es aplicable para cada elemento, también podríamos utilizarlo para ofuscar códigos en PyQT4, pero a eso si que no le veo más utilidad que proteger nuestro source QT4, un ejemplo
label("New Label", self)
de lo que digo en PyQT4:
Código
Espero sea de su agrado el artículo !
# -*- coding: utf-8 -*- # Autor : 0x5d ~> JaAViEr # Sitio Web ~> www.codigo.ga # Twitter ~> @javieresteban__ from PyQt4 import QtGui, QtCore import sys class testeo(QtGui.QWidget): def __init__(self, parent=None): QtGui.QWidget.__init__(self, parent) self.setWindowTitle("Bin to Dec | 0x5d") label, inpt, boton =(QtGui.QLabel,QtGui.QLineEdit,QtGui.QPushButton) self.label_binario = label("Binario :", self).setGeometry(2,15,59,17) self.input_binario = inpt(self) self.input_binario.setGeometry(60,10,230,27) self.label_resultado = label("Resultado :", self).setGeometry(2,50,80,17) self.input_salida = inpt(self) self.input_salida.setGeometry(80,43,210,27) self.input_salida.setReadOnly(True) self.boton_limpiar = boton("Limpiar campos", self) self.boton_limpiar.setGeometry(1,75,140,27) self.boton_convertir = boton("Convertir", self) self.boton_convertir.setGeometry(145,75,140,27) self.connect(self.boton_limpiar, QtCore.SIGNAL("clicked()"), self.clear_inputs) self.connect(self.boton_convertir, QtCore.SIGNAL("clicked()"), self.conversor) def clear_inputs(self): self.input_binario.setText("") self.input_salida.setText("") def conversor(self): numero = str(self.input_binario.text()) t = 0 for i,h in zip(numero[::-1],range(0,len(numero))): t+=int(i)*2**int(h) self.input_salida.setText(str(t)) app = QtGui.QApplication(sys.argv) form = testeo() form.show() app.exec_()
Fuente : http://codigo.ga/python/python-tecnicas-reduccion-y-ofuscacion-de-codigo/
Saludos, Javier !