python中的@、->、*arg、**kwarg使用方法[探索1]

写在前面的话

  1. 虽然处于研究生阶段的我有了一定的学术成果,但是为了更好的就业,我决定每天至少学习一种python用法!
  2. 做到以代码+注释的形式进行记录

1.@函数装饰器

注:下面的代码探究源自:
http://c.biancheng.net/view/2270.html

1.简单的@

[85]
def funA(fn): #funB被当成了输入函数fn
  print('A')
  print(fn) #fn只是一个对funB的复制
  print(fn()) #输出的是原来funB中的print('B'),但还会输出一个None,原因见下行
  print(type(fn())) #输出的结果是NoneType,所以这个B是这个类型的
  fn() #不加print,就不会出现None,但是并没有改变实质
  return 'fkit'
[86]
@funA #funB最终被装饰成什么(数值,函数)仅由@后的函数(即funA)return的类型
def funB():
  print('B')
结果:
A
<function funB at 0x7f8279de2620>
B
None
B
<class 'NoneType'>

[78]
funB #funB最终被替换为了'fkit'字符串
结果:
'fkit'

2.带参数的@

[70]
def foo(fn): #先计算外层的,再计算内层的
  # 嵌套一个另一个函数
  def bar(a):
    print(fn)
    print(fn(a*(a-1))) #与前面一样,还是要附带输出None类型
    print("*"*15)
    return fn(a*(a-1)) #这里返回的是一个值
  return bar
[71]
@foo #由于最后foo返回的是一个函数bar,所以my_test最后会被装饰为一个函数
def my_test(a):
  print("my_test函数",a)
[72]
print(my_test) #返回的是bar函数
结果:
<function foo.<locals>.bar at 0x7f8279ebfd90>

[73]
my_test(10)
结果:
<function my_test at 0x7f8279ebf268>
my_test函数 90
None
***************
my_test函数 90

2.->、*arg、**kwarg


```python
def arg_kwarg_example(a,*arg,**kwarg)->float: #*arg自动将55,11转为tuple(55,11),**kwarg自动将d=3,p=3转为键值对{'d': 3, 'p': 2},->只表明函数的输出值类型是float
  print("a:",a,"dtype",type(a))
  print("*arg",arg,"dtype:",type(arg))
  print("**kwarg",kwarg)

arg_kwarg_example(1,55,11,d=3,p=2)
输出:
a: 1 dtype <class 'int'>
*arg (55, 11) dtype: <class 'tuple'>
**kwarg {'d': 3, 'p': 2}

本人现在的研究方向是:
图像的语义分割,如果有志同道合的朋友,可以组队学习
haiyangpengai@gmail.com qq:1355365561

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值