关于新版讲函数第VI课时的疑问
import timedef time_master(func):
def call_func():
print("开始运行程序...")
start = time.time()
#func()
stop = time.time()
print("结束程序运行...")
print(f"一共耗费了 {(stop-start):.2f} 秒。")
return call_func
@time_master
def myfunc():
time.sleep(2)
print("I love FishC.")
myfunc()
输出结果是:
开始运行程序...
结束程序运行...
一共耗费了 0.00 秒。
问题是
当注释#func()后
没有执行myfunc()函数的内容(没有输出i love fishc)
func()跟myfunc()明明是不同函数名字啊。
func是形参,myfunc是实参 suchocolate 发表于 2023-1-4 16:04
func是形参,myfunc是实参
func是形参我理解,
实参一般不是func=myfunc()这样的吗?
但这里直接写func()所以不我太理解。
我试着把07行的func()改成myfunc()后,一直不停的输出
开始运行程序...
开始运行程序...
开始运行程序...
开始运行程序...
开始运行程序... 同舟 发表于 2023-1-4 16:22
func是形参我理解,
实参一般不是func=myfunc()这样的吗?
但这里直接写func()所以不我太理解。
def test(x,y):
result = x + y# 函数被调用时,传进来的x实参是5,y实参是10
print(result)
test(5,10)
# 实参x=5, y=10
本帖最后由 suchocolate 于 2023-1-4 20:29 编辑
同舟 发表于 2023-1-4 16:22
func是形参我理解,
实参一般不是func=myfunc()这样的吗?
但这里直接写func()所以不我太理解。
防止误导,参数和被装饰函数改个名
import time
def time_master(arg):# arg是形参,与普通函数不同,普通函数可能传入的是字符串或数字或列表,装饰器传如的是函数对象。装饰器被调用时,arg的实参就是test函数对象
def call_func():
print("开始运行程序...")
start = time.time()
arg() #执行传入的函数对象
stop = time.time()
print("结束程序运行...")
print(f"一共耗费了 {(stop-start):.2f} 秒。")
return call_func
@time_master # 调用装饰器,把test函数作为对象传给装饰器
def test():
time.sleep(2)
print("I love FishC.")
test()
suchocolate 发表于 2023-1-4 18:31
防止误导,参数和被装饰函数改个名
{:7_112:}
原来是这样,我大概懂了。
意思是要是没有装饰器@time_master,
def time_master(arg)定义的只是普通函数,
加入装饰器后,装饰器下面的test()函数就要以实参的形式传入 time_maste()函数
非常感谢!谢谢了。
页:
[1]