如何从外部传入函数名(python入门44课题2)
小甲鱼的答案是不是不应用于最新的3.9版python了?def __init__(self,func,number),
在实例化类的时候,如果func初始值写的是字符串,则字符串无法最终成为函数名,self.func()实际无法调用。如果func值直接输入函数名,则是输入一个变量,该变量未被定义。
所以python如何才能在外部传入函数名到内部调用呢?
把文本发出来,不要只发图片 因为func是函数名
报错一是因为你传入了一个字符串
报错二是因为你的变量名test没有被赋值
你需要先定义函数test
def test():
print('I love FishC!')
t1 = MyTimer(test) 本帖最后由 kleineweiss 于 2020-11-23 19:08 编辑
第一次发帖,这是个尝试发代码形式的贴
逃兵 发表于 2020-11-23 08:35
因为func是函数名
报错一是因为你传入了一个字符串
报错二是因为你的变量名test没有被赋值
谢谢!我尝试了先定义函数test但依旧报错(NameError: name 'test' is not defined)。
话说init应该是在类实例化后执行的第一个函数,在他运行的时候类里的函数都未被定义。所以还是不懂该如何能初始化时成功传入函数名
感谢您的回答!
附上代码:
class MyTimer:
def test():
print('I love FishC!')
def __init__(self, func, number=1000000):
self.prompt = "未开始计时!"
self.lasted = 0.0
self.default_timer = t.perf_counter
self.func = func
self.number = number
def __str__(self):
return self.prompt
__repr__ = __str__
def __add__(self, other):
result = self.lasted + other.lasted
prompt = "总共运行了 %0.2f 秒" % result
return prompt
# 内部方法,计算运行时间
def timing(self):
self.begin = self.default_timer()
for i in range(self.number):
self.func()
self.end = self.default_timer()
self.lasted = self.end - self.begin
self.prompt = "总共运行了 %0.2f 秒" % self.lasted
# 设置计时器(time.perf_counter() 或 time.process_time())
def set_timer(self, timer):
if timer == 'process_time':
self.default_timer = t.process_time
elif timer == 'perf_counter':
self.default_timer = t.perf_counter
else:
print("输入无效,请输入 perf_counter 或 process_time")
t1 = MyTimer(test) wp231957 发表于 2020-11-23 08:10
把文本发出来,不要只发图片
谢谢您的回复,源代码我在楼下发出来啦。报错代码如下:
>>> t1 = MyTimer(test())
Traceback (most recent call last):
File "<pyshell#3>", line 1, in <module>
t1 = MyTimer(test())
NameError: name 'test' is not defined 逃兵 发表于 2020-11-23 08:35
因为func是函数名
报错一是因为你传入了一个字符串
报错二是因为你的变量名test没有被赋值
等等,我好像懂您意思了。是在类之外定义test函数。然后在初始化类对象时,便有被定义过的变量名了是吗 kleineweiss 发表于 2020-11-23 19:24
等等,我好像懂您意思了。是在类之外定义test函数。然后在初始化类对象时,便有被定义过的变量名了是吗
{:10_277:}是的没有错
页:
[1]