python高级进阶之 无参数,有参数, 可变参数的装饰器的应用
admin
2023-07-05 20:24:27
0

  请看下 无参数的装饰器

  如下:

  def test(func):

  print("test")

  def test_in():

  print("testing")

  return "test "+func()+" test"

  return test_in

  def test01(func):

  print("test01")

  def test_in():

  print("testing_01")

  return "test01 "+func()+" test01"

  return test_in

  @test

  @test01

  def f1():

  print("---f1----")

  return "hello_word"

  print(f1())

  请看有两个参数的

  def test(func):

  print("test")

  def test_in():

  print("testing")

  return "test "+func()+" test"

  return test_in

  @test

  def f1(a,b):

  print("---f1----")

  return "hello_word"

  print(f1(2,3)) # 传入两个参数

  抛错如下:

  File "D:/works/Unittest/test.py", line 14, in

  print(f1(2,3))

  TypeError: test_in() takes 0 positional arguments but 2 were given

  理解下 为什么会抛错

  @ test 意思就是 f1=test(f1) , f1 指向是 test_in 函数体

  在执行 f1(2,3) 的时候 要执行 test_in 函数体, 但是test_in 没有地方接受参数, 所以要报错

  下边我们添加上 继续执行看看结果如何:

  def test(func):

  print("test")

  def test_in(a,b):

  print("testing")

  return "test "+func()+" test"

  return test_in

  @test

  def f1(a,b):

  print("---f1----")

  return "hello_word"

  print(f1(2,3))

  报错如下:

  File "D:/works/Unittest/test.py", line 14, in

  print(f1(2,3))

  File "D:/works/Unittest/test.py", line 5, in test_in

  return "test "+func()+" test"

  TypeError: f1() missing 2 required positional arguments: 'a' and 'b'

  解释如下:无锡妇科医院排名 http://www.csfk0731.com/

  在执行test_in 函数体的时候, 发现有个 func(), 它的指向 就是 f1(a,b) , 它是需要两个参数的, 但是找不到,就会报错

  改下 再执行就不会报错了

  def test(func):

  print("test")

  def test_in(a,b):

  print("testing")

  return "test "+func(a,b)+" test"

  return test_in

  @test

  def f1(a,b):

  print("---f1----")

  return "hello_word"

  print(f1(2,3))

  3. 可变参数

  修改如下 就可以随便传递参数。

  def test(func):

  print("test")

  def test_in(*args,**kargs):

  print("testing")

  return "test "+str(func(*args,**kargs))+" test"

  return test_in

  @test

  def f1(a,b):

  print("---f1----")

  return a+b

  @test

  def f2(a,b,c,d):

  return(a+b+c+d)

  print(f1(5,9))

  print(f2(1,3,4,5))


相关内容

热门资讯

我国科学家为细胞信号“导航”开... 新华社济南5月31日电(记者张力元)人体细胞犹如一座精密的通信城市,每天都有大量“指令”穿梭传递,调...
极端大风突袭哈尔滨!过山车停摆... 极目新闻记者 詹钘5月31日,受强对流天气影响,哈尔滨国际会展中心体育场相关设施受到损坏,原计划当晚...
三原电缆取得电缆接头连接用防护... 国家知识产权局信息显示,上海三原电缆附件有限公司取得一项名为“一种电缆接头连接用防护结构”的专利,授...
原创 识... 还是那句话,机圈苦大屏久已…… 虽然大屏有大屏的美,但是小屏也有小屏的俏。在大屏旗舰占据主流的手机市...
玄戒技术取得分频电路专利,实现... 国家知识产权局信息显示,北京玄戒技术有限公司取得一项名为“分频电路、分频器、射频芯片和电子设备”的专...
为什么今年香会基调明显变了 5月29日—31日在新加坡举行的第23届香格里拉对话会(简称“香会”),见证着元首引领下大国关系继续...
成本几毛钱、假驱蚊液香精兑水,... 入夏升温,蚊虫进入活跃期,驱蚊防护成为民生刚需,《财经调查》持续接到消费者投诉,他们买到的多款网红驱...
越来越多80后90后,正在丧失... 六一儿童节到来之际,朋友圈里开始出现一种熟悉的热闹。有人晒出零食礼包,有人半开玩笑地向伴侣讨礼物,还...
洋保电子取得用于低温环境的电气... 国家知识产权局信息显示,洋保电子(太仓)有限公司取得一项名为“一种用于低温环境的电气柜”的专利,授权...
中日韩飞手争霸宁波!2026无... 潮新闻客户端 记者 陈冲 通讯员 朱凝 5月31日,2026小遛·无人机竞速世界杯(中国·宁波鄞州站...