No supe cómo ponerle al título ;D
El asunto es que mi idea es "crear" un estilo switch en python (para usos propios simplemente) y ando intentando una forma que me pareció interesante, supongo que para muchos de acá no es nueva, es la siguiente:
def switch(forum):
return{
'underc0de': 'something...',
'another one' : 'testing...'
}[forum]
print switch('underc0de');
El problema viene cuando quiero intentar un método dentro del diccionario a retornar, por ejemplo:
import urllib
def switch(x,s):
return{
'bin2hex': hex(s),
'encode' : urllib.quote(s)
}[x]
print switch('encode','http://underc0de.org/foro/python/?action=post')
He comprobado antes esto:
print urllib.quote('http://underc0de.org/foro/python/?action=post')
Y funciona, debe ser un error tonto ::) pero no lo veo :'(
¿Alquien sabe qué pasa?
Zalu2!
El error que te da es:
CitarTypeError: hex() argument can't be converted to hex
¿Verdad?
Saludos!
Coincido con 11Sep.
hex(number) -> string
Saludos!
WhiZ
No tienes permitido ver enlaces.
Registrate o Entra a tu cuenta
El error que te da es: CitarTypeError: hex() argument can't be converted to hex
¿Verdad?
Saludos!
Si es ese, me olvidé ponerlo ;D , alguna idea brot?
Zalu2
def switch(x,s):
return {
'bin2hex':s.encode("hex"),
'encode':urllib.quote(s)
}[x]
Saludos!
WhiZ
No tienes permitido ver enlaces.
Registrate o Entra a tu cuenta
Coincido con 11Sep.
hex(number) -> string
Saludos!
WhiZ
El asunto no tiene que ver (o eso creo) con el hex, por ejemplo:
def switch(x,s):
return{
'bin2hex': hex(s),
'encode' : 'Otra cosa...'
}[x]
print switch('bin2hex',255)
funciona correctamente, el problema es usando
urllib.
edito:
No tienes permitido ver enlaces.
Registrate o Entra a tu cuenta
def switch(x,s):
return {
'bin2hex':s.encode("hex"),
'encode':urllib.quote(s)
}[x]
Saludos!
WhiZ
Vale, eso funciona correctamente, lo que me queda duda es porqué no funciona de la otra manera? ???
Zalu2!
Claro. En este caso le estás pasando un int como argumento (que es lo que espera) mientras que en el ejemplo del urllib le estás pasando un string.
Probá el código que te pasé más arriba que tendría que funcionar.
Saludos!
WhiZ
No tienes permitido ver enlaces.
Registrate o Entra a tu cuenta
No tienes permitido ver enlaces.
Registrate o Entra a tu cuenta
Coincido con 11Sep.
hex(number) -> string
Saludos!
WhiZ
El asunto no tiene que ver (o eso creo) con el hex, por ejemplo:
def switch(x,s):
return{
'bin2hex': hex(s),
'encode' : 'Otra cosa...'
}[x]
print switch('bin2hex',255)
funciona correctamente, el problema es usando urllib.
Zalu2!
No es cierto, el problema en realidad es de la función hex() porque sólo te convierte a hexadecimal números enteros y urllib.quote() recibe una cadena una cadena. Además debes tener encuenta que Python genera todo el diccionario Así que obligatoriamente (si no hay errores) ejecuta ambas funciones hex() y urllib.quote()
Saludos!
Vale, ahora entiendo, era eso jeje, eso me pasa por estar ya 9 horas seguidas en el ordenador ::)
Tema solucionado.
Gracias! broths
Zalu2
La única forma que se me ocurre de hacer lo que necesitas de una forma similar a la que planteas al inicio sería algo así:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import urllib
def hexadecimal(texto):
return texto.encode("hex")
def quote(texto):
return urllib.quote(texto)
def switch(opcion):
return {
"bin2hex": "hexadecimal",
"encode": "quote",
}[opcion]
print locals()[switch("encode")]("http://underc0de.org/foro/python/?action=post")
Saludos!
jooder cada dia flipo mas con python :o
Bastante interesante el ejemplo, mi idea era "generar" un switch un poco más compacto, pero la verdad esta idea me ha gustado bastante, me has puesto a pensar bastante xD (me costó entender la sintaxis, creo que estoy un poco oxidado jaja) y no encontré mucha información por papi google.
Estaré probando para ver cuanto jugo le sacamos..
Siempre tienes algo bajo la manga once :P
Zalu2!
No tienes permitido ver enlaces.
Registrate o Entra a tu cuenta
Bastante interesante el ejemplo, mi idea era "generar" un switch un poco más compacto, pero la verdad esta idea me ha gustado bastante, me has puesto a pensar bastante xD (me costó entender la sintaxis, creo que estoy un poco oxidado jaja) y no encontré mucha información por papi google.
Ups, lo siento bro, te explico:
locals() te regresa un diccionario con los elementos locales, globals() te regresa un diccionario con los elementos globales. Al regresar un diccionario, puedes acceder a cualquier valor con [] en nuestro caso con [switch("encode")] (que nos regresa: quote) y también le puedes pasar parametros como a una función normal ("http://underc0de.org/foro/python/?action=post")
Así que quedaría algo así: locals()["quote"](parametros) y lo que haría es llamar a la función quote pasándole como parametro "http://underc0de.org/foro/python/?action=post"
No tienes permitido ver enlaces.
Registrate o Entra a tu cuenta
Siempre tienes algo bajo la manga once :P
Zalu2!
Yo culpo a Python, cada día descubres algo nuevo :p
Saludos bro y que bueno verte de nuevo
No tienes permitido ver enlaces.
Registrate o Entra a tu cuenta
No tienes permitido ver enlaces.
Registrate o Entra a tu cuenta
Bastante interesante el ejemplo, mi idea era "generar" un switch un poco más compacto, pero la verdad esta idea me ha gustado bastante, me has puesto a pensar bastante xD (me costó entender la sintaxis, creo que estoy un poco oxidado jaja) y no encontré mucha información por papi google.
Ups, lo siento bro, te explico:
locals() te regresa un diccionario con los elementos locales, globals() te regresa un diccionario con los elementos globales. Al regresar un diccionario, puedes acceder a cualquier valor con [] en nuestro caso con [switch("encode")] (que nos regresa: quote) y también le puedes pasar parametros como a una función normal ("http://underc0de.org/foro/python/?action=post")
Así que quedaría algo así: locals()["quote"](parametros) y lo que haría es llamar a la función quote pasándole como parametro "http://underc0de.org/foro/python/?action=post"
No tienes permitido ver enlaces.
Registrate o Entra a tu cuenta
Siempre tienes algo bajo la manga once :P
Zalu2!
Yo culpo a Python, cada día descubres algo nuevo :p
Saludos bro y que bueno verte de nuevo
Si, al parecer lo entendí bien, que bueno que me lo confirmas, la verdad es que python es un lenguaje sorprendente en todos sus sentidos, tambien he visto algunas maravillas con perl ::)
PD: Por ahí tengo el proyecto que estabamos realizando (
el wargame), a ver cuando nos topamos en el skype :P
Zalu2