yolo 算法学习笔记(一)(keras_darknet19.py)

functools 函数

partial 函数

partial函数(偏函数)

可以将一个函数的参数设为默认值,返回一个新函数,使调用更加简单、方便
import functools as f

def print_function(*args,**kwargs):#*args可以传递元组,**kwargs可以传递字典
    print(*args)
    print(**kwargs)

p1=f.partial(print_function,1,2,3)
p1()
p1(4,5,6)

c={'a':1,
   'b':2}

p1(c)

p2=f.partial(print_function,c)
p2()
p2(1,2,3)

#输出
1 2 3

1 2 3 4 5 6

1 2 3 {'a': 1, 'b': 2}

{'a': 1, 'b': 2}

{'a': 1, 'b': 2} 1 2 3

wraps 函数

理解wraps函数,先理解装饰器和闭包的概念
闭包:

在计算机科学中,闭包(英语:Closure),又称词法闭包(Lexical Closure)或函数闭包(function closures),是引用了自由变量的函数。这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外。

def print_abc():
    abc="hello world"
    
    def printer():#嵌套函数
    
        print(abc)
        
    return printer
    
closure=print_abc()
closure()

#输出
hello world

当局部变量(abc)被函数引用时,这个局部变量将跟随函数而存在(正常情况下,局部变量只在局部存在)

装饰器:

python函数修饰符@的作用是为现有函数增加额外的功能,常用于插入日志、性能测试、事务处理等等。

创建函数修饰符的规则:
(1)修饰符是一个函数
(2)修饰符取被修饰函数为参数
(3)修饰符返回一个新函数
(4)修饰符维护被维护函数的签名

Python函数修饰符,“@”,与其说是修饰函数倒不如说是引用、调用它修饰的函数。

def test(func):
    func()
    print ("call test")

def test1(f):
    f()
    print ("call test1")

def main():
    @test
    def fun():
        print ("call fun")
        @test1
        def fun1():
            print ("call fun1")           
main()

#输出
call fun
call fun1
call test1
call test

使用functools模块提供的修改函数属性的方法wraps,相当于属性的传递

def log(func):
    @f.wraps(func)
    def wrapper():
        print('log开始 ...')
        func()
        print('log结束 ...')
    return wrapper
    
@log
def test1():
    print('test1 ..')

def test2():
    print('test2 ..')

print(test1.__name__)
print(test2.__name__)

#输出
test1  #当把@f.wraps(func)注释掉后,结果为wrapper,test2
test2

前面是网上许多人对@f.wraps(func)的解释,但感觉总跟在另一个@func之后,没有单独应用,因此,我单独试验了@f.wraps(func)的作用

def abc():
    """这个函数是abc函数"""
    print("abc")
    


@f.wraps(abc)
def log():
    """这个函数是log函数"""
    print("log.........")
    
abc()
log()
print(abc.__name__)
print(log.__name__)
print(abc.__doc__)
print(log.__doc__)

#输出    
abc
log.........
abc
abc
这个函数是abc函数
这个函数是abc函数

这个代码块说明了@f.wraps(func)将func函数的名字和doc属性都传递给了下面的函数

reduce()函数

reduce的用法

reduce(function, sequence[, initial]) -> value
:意思就是对sequence连续使用function, 如果不给出initial, 则第一次调用传递sequence的两个元素, 以后把前一次调用的结果和sequence的下一个元素传递给function. 如果给出initial, 则第一次传递initial和sequence的第一个元素给function.
返回值是一个复合函数

def add(x):
    x = x + 1
    return x

def mut(x):
    x = 2 ** x
    return x

a=f.reduce(lambda f,g:lambda *ar,**kw:g(f(*ar,**kw)),[mut,add,mut,add])

#输出
print(a(3))
513

lambda argument_list: expression:
lambda x, y: xy;函数输入是x和y,输出是它们的积xy
lambda:None;函数没有输入参数,输出是None
lambda *args: sum(args); 输入是任意个数的参数,输出是它们的和(隐性要求是输入参数必须能够进行加法运算)
lambda **kwargs: 1;输入是任意键值对参数,输出是1

update()函数

Python 字典(Dictionary) update() 函数把字典dict2的键/值对更新到dict里。

dict = {'Name': 'Zara', 'Age': 7}
dict2 = {'Sex': 'female' }

dict.update(dict2)
print (dict)

#输出
{'Name': 'Zara', 'Age': 7, 'Sex': 'female'}

假设有相同的键会直接替换成 update中字典的值:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值