|
Página 1 de 2
|
¿ Es Posible Pasar Una Función Como Parámetro ?
Autor |
Mensaje |
Shell
Analista Programador
Registrado: Marzo 2010
Mensajes: 5278
Edad: 53 Ubicación: Al otro lado de la pantalla
|
¿ Es Posible Pasar Una Función Como Parámetro ?
Buenas!.
Se que os sonara raro. Pero es que en Python es posible y no tengo ni idea si con algo sofisticado, un puntero por ejemplo
se pueda hacer en gambas. No me gustan los punteros, mata mis serpientes.
Os voy a mostrar un código de Python para que veáis la idea. Fijaros.
def tiempo_funciones_desordenar(func_desord, lst):
t1 = time.perf_counter()
func_desord(lst)
t2 = time.perf_counter()
return (t2 - t1 ) * 1000000
Se trata de calcular el tiempo que usa varias funciones. En este caso el tiempo devuelto es en micro segundos.
Como veis, se le pasa la función como argumento y dentro de la función tiempo_funciones_desordena, se la llama,
pasándole lst como argumento.
Inocentemente use objeto y variant, pero gambas me dice que no. Que eso no es un tipo de datos. Jeje.
¿ Es posible eso en otro lenguajes ?. Por ejemplo en ¿ C ?.
La idea principal de pasarle la función como es habitual en usar una función es evitar la repetición del código.
Saludos
=================== Gambas Básico
"No es un bug, es una característica no documentada"
|
#1 Domingo, 27 Marzo 2016, 01:26 |
|
|
vuott
Analista Programador
Registrado: Agosto 2013
Mensajes: 2086
Edad: 60 Ubicación:
|
Re: ¿ Es Posible Pasar Una Función Como Parámetro ?
No me gustan los punteros, mata mis serpientes.
Punctatrum contra serpentes !
|
#2 Domingo, 27 Marzo 2016, 02:07 |
|
|
vuott
Analista Programador
Registrado: Agosto 2013
Mensajes: 2086
Edad: 60 Ubicación:
|
Re: ¿ Es Posible Pasar Una Función Como Parámetro ?
func_desord(lst)
No comprendo (hace falta ver el tu código) porque no puedes hacer:
última edición por vuott el Domingo, 27 Marzo 2016, 02:29; editado 3 veces
|
#3 Domingo, 27 Marzo 2016, 02:12 |
|
|
Shell
Analista Programador
Registrado: Marzo 2010
Mensajes: 5278
Edad: 53 Ubicación: Al otro lado de la pantalla
|
Re: ¿ Es Posible Pasar Una Función Como Parámetro ?
Vuott:
Citar:
Punctatrum contra serpentes !
En realidad Python usa punteros a su manera. Pero son punteros de serpientes...
Citar:
No comprendo (hace falta ver el tu código) porque no puedes hacer:
Tengo tres formas de hacer lo mismo. Bueno, dos. En una uso un bucle While y en la otra un bucle For.
Quiero comparar el tiempo que emplea cada bucle y ver cual es el más adecuado....(For naturalmente).
Saludos
=================== Gambas Básico
"No es un bug, es una característica no documentada"
|
#4 Domingo, 27 Marzo 2016, 09:42 |
|
|
Shell
Analista Programador
Registrado: Marzo 2010
Mensajes: 5278
Edad: 53 Ubicación: Al otro lado de la pantalla
|
Re: ¿ Es Posible Pasar Una Función Como Parámetro ?
En el Main, sobran variables.
=================== Gambas Básico
"No es un bug, es una característica no documentada"
|
#5 Domingo, 27 Marzo 2016, 09:46 |
|
|
Shell
Analista Programador
Registrado: Marzo 2010
Mensajes: 5278
Edad: 53 Ubicación: Al otro lado de la pantalla
|
Re: ¿ Es Posible Pasar Una Función Como Parámetro ?
Y aquí el código en Python...
#!/usr/bin/python3
import random
import time
def shuffle1(l):
cuenta = 0
listanueva = []
while cuenta < len(l):
j = random.randint(0,len(l) - 1)
if l[j] not in listanueva:
listanueva.append(l[j])
cuenta += 1
return listanueva
def shuffle2(l):
listanueva = l.copy()
for i in range(len(l)):
j = random.randint(0,len(l) - 1)
listanueva[i], listanueva[j] = listanueva[j], listanueva[i]
## # Codigo tradicional sustituido
## t = listanueva[i]
## listanueva[i] = listanueva[j]
## listanueva[j] = t
return listanueva
def shuffleoriginal(l):
return random.shuffle(l)
def tiempo_funciones_desordenar(func_desord, lst):
t1 = time.perf_counter()
func_desord(lst)
t2 = time.perf_counter()
return (t2 - t1 ) * 1000000
def main():
lista = ['Juan','Mateo','Santiago','Marcos']
# print (lista)
# print (shuffle2(lista))
tiempo_bucle_while = tiempo_funciones_desordenar(shuffle1, lista)
tiempo_bucle_for = tiempo_funciones_desordenar(shuffle2, lista)
tiempo_original = tiempo_funciones_desordenar(shuffleoriginal, lista)
print ('El código con bucle while ha tomado {:.2f}uS'.format(tiempo_bucle_while))
print ('El código con bucle for ha tomado {:.2f}uS'.format(tiempo_bucle_for))
print ('El código con shuffle ha tomado {:.2f}uS'.format(tiempo_original))
if __name__=='__main__': main()
Jijiji...
Saludos
=================== Gambas Básico
"No es un bug, es una característica no documentada"
|
#6 Domingo, 27 Marzo 2016, 09:49 |
|
|
vuott
Analista Programador
Registrado: Agosto 2013
Mensajes: 2086
Edad: 60 Ubicación:
|
Re: ¿ Es Posible Pasar Una Función Como Parámetro ?
En gambas es posible pasar un Puntero a Función solo con las funciones externas.
|
#7 Domingo, 27 Marzo 2016, 10:00 |
|
|
Shell
Analista Programador
Registrado: Marzo 2010
Mensajes: 5278
Edad: 53 Ubicación: Al otro lado de la pantalla
|
Re: ¿ Es Posible Pasar Una Función Como Parámetro ?
Vuott:
Bueno, lo de usar puntero como puse en el código fue en plan de "película de ciencia ficción".
Ah, encontré este post, en el que por lo visto un programador de C/C++ pregunta sobre la ausencia de punteros en Python.
Es interesante la respuesta que dan.
http://es.stackoverflow.com/questio...teros-en-python
Saludos
=================== Gambas Básico
"No es un bug, es una característica no documentada"
última edición por Shell el Domingo, 27 Marzo 2016, 10:04; editado 2 veces
|
#8 Domingo, 27 Marzo 2016, 10:04 |
|
|
Shell
Analista Programador
Registrado: Marzo 2010
Mensajes: 5278
Edad: 53 Ubicación: Al otro lado de la pantalla
|
Re: ¿ Es Posible Pasar Una Función Como Parámetro ?
Fijaros en este código, sobre el tema de referencias.
Clase Persona:
Código principal:
Public Sub Main()
Dim bob As New Persona
Dim nancy As Persona
bob.nombre = "Bob"
bob.dinero = 100
nancy = bob
nancy.nombre = "Nancy"
Print bob.nombre, "tiene", bob.dinero, "euros."
Print nancy.nombre, "tiene", nancy.dinero, "euros."
End
Salida:
Citar:
Nancy tiene 100 euros.
Nancy tiene 100 euros.
La explicación es fácil.
Saludos
=================== Gambas Básico
"No es un bug, es una característica no documentada"
|
#9 Domingo, 27 Marzo 2016, 10:10 |
|
|
vuott
Analista Programador
Registrado: Agosto 2013
Mensajes: 2086
Edad: 60 Ubicación:
|
Re: ¿ Es Posible Pasar Una Función Como Parámetro ?
Ah, encontré este post, en el que por lo visto un programador de C/C++....
Solo por curiosidad, te traduzco el primero ejemplo en C que está en la pagina.
#include <stdio>
int main(void) {
// your code goes here
int a = 5;
int *b = &a;
printf("a = %d; b = %d\n", a, *b); // (1)
a = 6;
printf("a = %d; b = %d\n", a, *b); // (2)
return 0;
}
Traducción a Gambas:
última edición por vuott el Domingo, 27 Marzo 2016, 20:16; editado 1 vez
|
#10 Domingo, 27 Marzo 2016, 10:15 |
|
|
|
Temas parecidos
Temas parecidos
|
Página 1 de 2
|
Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado Usuarios registrados conectados: Ninguno
|
No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas No puede adjuntar archivos Puede descargar archivos No puede publicar eventos en el calendario
|
|
|
|
|