字符串转变成函数名

m
microsat
楼主 (北美华人网)
请问有什么好方法动态调用函数名,如果不用if语句的话。
python里有类。所以定义一个类的vector,比如 models = {foo1, foo2, foo3, foo4}
然后调用 models[iii].fit(xTrain, yTrain)就可以调用不同的函数了。这里foo1.fit, foo2.fit, foo3.fit, foo4.fit 各不同。
如果不用类,用if语句也可以实现。比如 input = “foofunc1”
if (input == "foofunc1") { foofunc1(xTrain, yTrain); } .... if (input == "foofunc4") { foofunc4(xTrain, yTrain); }
我的问题是,如果不用if语句,能把字符串"foofunc1"等,动态的转换成函数名吗? 这个动态定义和调用一个函数的编程技术,叫什么?



q
qqmj
回复 1楼microsat的帖子
call back functions?
g
gokgs
不会google 的马工连入门都没有。
https://stackoverflow.com/questions/3061/calling-a-function-of-a-module-by-using-its-name-a-string
m
microsat
不会google 的马工连入门都没有。
https://stackoverflow.com/questions/3061/calling-a-function-of-a-module-by-using-its-name-a-string
gokgs 发表于 2023-11-13 12:00

谢谢。非常想知道,这个call函数是怎么能把字符串,变成函数名的。
g
gokgs
谢谢。非常想知道,这个call函数是怎么能把字符串,变成函数名的。
microsat 发表于 2023-11-13 13:03

函数的本质就是个入口地址,找到地址就可以执行了,解释语言的时候把地址和函数名记录一下就好了,所谓的symbols, 这些一般 debug 才有用,python 这些垃圾语言估计根本不区分用不用,-古脑儿的先记下来再说,这些语言浪费资源,速度慢不是没有原因的。
j
jacketdog
虽然我不常这样干,但是在c++里MACRO应该可以
猪舌头
是不是函数指针这东西?
g
gokgs
虽然我不常这样干,但是在c++里MACRO应该可以
jacketdog 发表于 2023-11-13 15:21

c++ 根本没这功能, 哈哈, 因为这些破玩意需要好多 overhead, c++ 懒得去支持。
https://stackoverflow.com/questions/19473313/how-to-call-a-function-by-its-name-stdstring-in-c