dandan0523 发表于 2021-5-7 15:52:55

麻烦大家看个作业题

这是第44讲关于计时器的课后作业,看不懂这个代码啊{:5_104:}   问题已经标红了

import time as t

class MyTimer:
    def __init__(self):
      self.prompt = "未开始计时!"
      self.lasted = 0.0
      self.begin = 0
      self.end = 0
      self.default_timer = t.perf_counter   #这里调用的是perf_counter()方法为什么没有带括号啊
   
    def __str__(self):
      return self.prompt

    __repr__ = __str__

    def __add__(self, other):
      result = self.lasted + other.lasted
      prompt = "总共运行了 %0.2f 秒" % result
      return prompt
   
    # 开始计时
    def start(self):
      self.begin = self.default_timer()      #代码中哪里有default_timer()方法啊? 上面语句:self.default_timer = t.perf_counter 其中default_timer不是属性吗?
      self.prompt = "提示:请先调用 stop() 停止计时!"
      print("计时开始...")

    # 停止计时
    def stop(self):
      if not self.begin:
            print("提示:请先调用 start() 进行计时!")
      else:
            self.end = self.default_timer()
            self._calc()
            print("计时结束!")

    # 内部方法,计算运行时间
    def _calc(self):
      self.lasted = self.end - self.begin
      self.prompt = "总共运行了 %0.2f 秒" % self.lasted
      
      # 为下一轮计时初始化变量
      self.begin = 0
      self.end = 0

    # 设置计时器(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")

阿奇_o 发表于 2021-5-7 16:49:37

本帖最后由 阿奇_o 于 2021-5-7 16:53 编辑

类的属性和方法,本质上都属于 “类的成员”

至于函数方法名,带不带括号,根据你的需要来——

1. 带上() 就会马上执行该函数方法的代码逻辑;   不带上,就只是引用 该函数在内存中的地址(可等待需要时,再加上(),来执行)。

2. 如果该名称,不是可执行的函数方法,而是一般对象,就会类型报错,如 TypeError: 'int' object is not callable


-- 至于,计时器的逻辑,就 你用一个变量记录它开始的时间点,然后结束时,用另一个变量记录结束的时间点,两个变量相减,不就是 过程时间了吗?

帅周 发表于 2021-5-11 17:21:28

带括号代表返回值,而不带代表这个函数本身

dandan0523 发表于 2021-5-16 21:54:31

阿奇_o 发表于 2021-5-7 16:49
类的属性和方法,本质上都属于 “类的成员”

至于函数方法名,带不带括号,根据你的需要来——


谢谢您{:5_109:}
页: [1]
查看完整版本: 麻烦大家看个作业题