求助循环里如何调用方法名

2018-12-05 18:54:22 +08:00
 u2gign
a1,a2,a3.. 是方法名
之前写的程序这样
threading.Thread(target=self.run, args=(a1, *args)).start()
threading.Thread(target=self.run, args=(a2, *args)).start()
threading.Thread(target=self.run, args=(a3, *args)).start()
...
改为循环调用
for i in range(1,num):
threading.Thread(target=self.run, args=(a+str(i), *args)).start()
报这个错误 TypeError: unsupported operand type(s) for +: 'int' and 'str'

调用的方法名 还不能是字符串,这种情况
大神如何解决
1688 次点击
所在节点    Python
6 条回复
ipwx
2018-12-05 18:55:37 +08:00
getattr(sys.modules[__name__], 'a{}'.format(i))
ipwx
2018-12-05 18:56:08 +08:00
话虽如此,但还是建议你做一个 function_map = {'a1': a1, 'a2': a2} 这样
ipwx
2018-12-05 18:56:24 +08:00
或者干脆 function_list = [a1, a2] 这样
u2gign
2018-12-06 09:34:22 +08:00
谢谢哈
wkx556874
2018-12-06 12:32:07 +08:00
a+str(i) 是否 指向的位置 和 a1 指向的位置一样?
如果不一样 args 肯定是不能接收这个参数的

我个人理解 (可能是错误的) 是 a1 是指向 函数的一个对象
而 你循环里的是 一个'a1'..'a2'.. 是有区别的.



threading.Thread(target=self.run, args=(a+str(i), *args)).start() 里面的 a 是什么? 字符串? 还是什么, +str(i), 是想做字符串拼接 然后 动态的 a1 a2 a3 么?
这种情况 是不能这样操作 字符串拼接的
应该用 list, list 可以接收 函数 为成员, 把你的要用的函数全部放进 list 里面 (这一步很有说法 )

再调用的时候 for 循环 list[i] 就可以了 此时 args 接收的就是一个函数的引用
wkx556874
2018-12-06 12:36:06 +08:00
总的来说 你要确保你在循环里 调用的是一个 方法的引用 也就是方法名
而不是其他的 比如 'a1' 一个像方法名的字符串 这是肯定不行的
至于怎么去确保不调错, 我推荐自己去摸索
我也是新手 也说不清楚 还可能是错误的.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/514678

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX