kleineweiss 发表于 2020-11-23 05:01:23

如何从外部传入函数名(python入门44课题2)

小甲鱼的答案是不是不应用于最新的3.9版python了?
def __init__(self,func,number),
在实例化类的时候,如果func初始值写的是字符串,则字符串无法最终成为函数名,self.func()实际无法调用。如果func值直接输入函数名,则是输入一个变量,该变量未被定义。
所以python如何才能在外部传入函数名到内部调用呢?

wp231957 发表于 2020-11-23 08:10:43

把文本发出来,不要只发图片

逃兵 发表于 2020-11-23 08:35:35

因为func是函数名
报错一是因为你传入了一个字符串
报错二是因为你的变量名test没有被赋值
你需要先定义函数test
def test():
    print('I love FishC!')

t1 = MyTimer(test)

kleineweiss 发表于 2020-11-23 19:03:04

本帖最后由 kleineweiss 于 2020-11-23 19:08 编辑

第一次发帖,这是个尝试发代码形式的贴


kleineweiss 发表于 2020-11-23 19:16:03

逃兵 发表于 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)

kleineweiss 发表于 2020-11-23 19:20:28

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

kleineweiss 发表于 2020-11-23 19:24:54

逃兵 发表于 2020-11-23 08:35
因为func是函数名
报错一是因为你传入了一个字符串
报错二是因为你的变量名test没有被赋值


等等,我好像懂您意思了。是在类之外定义test函数。然后在初始化类对象时,便有被定义过的变量名了是吗

逃兵 发表于 2020-11-24 09:12:16

kleineweiss 发表于 2020-11-23 19:24
等等,我好像懂您意思了。是在类之外定义test函数。然后在初始化类对象时,便有被定义过的变量名了是吗

{:10_277:}是的没有错
页: [1]
查看完整版本: 如何从外部传入函数名(python入门44课题2)