zoukankan      html  css  js  c++  java
  • python基础教程(5)

    一、函数的高阶特性。

    1,  map()

    #map
    def f(x):
        return x * x;

    r = map(f, [1,2,3]) #map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回。
    print(list(r))
    r = map(f, {1,2,3})
    print(list(r))
    r = {1,1,2,3} #定义了一个set,set就是dict没有值得实现,采用哈希算法存储
    print(r)

     

    2,  reduce()

    #reduce
    from functools import reduce #使用reduce需要导入
    def f1(x1,x2):
        return x1 * x2;
    a = reduce(f1,[1,2,3]) #这里的函数f1必须有两个参数
    # 可以用这个表达式解释  reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
    #
    print(a)

    3,  filter()

    # 和map()类似,filter()也接收一个函数和一个序列。和map()不同的是,filter()把传入
    # 的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。
    def fil(x):
        if x % 2 == 0 :
            return x

    r = filter(fil,[1,2,3,8,4,5,6]) #通过fil过滤出函数返回的值。
    print(list(r))

    4,  sorted()

    #sorted 可以对list进行排序,同时可以制定排序规则

    r = sorted([1,8,-3,4],key=abs) #这里key指定了abs后就忽略正负进行一个排序,当然可以制定其他规则例如忽略大小写对字符串排序
    print(r)

    以上4个函数被称为高阶函数。

    二、返回函数。

    高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回。

    1,  返回函数。

    #返回函数
    def fun(*args): #星号是指参数可变m前面有讲过
       
    def sum():
            a = 0
            for i in args :
                a += i
            return a
        return sum
    #这里的返回值是sum这个函数
    print(fun(1,2,3,4,5)())#返回值函数再被运行被调用得到的结果就是求和结果
    #说明两个返回值不是同一个函数,他们地址并不一样,是两个函数,互不影响
    #闭包的使用,注意一点就好 : 返回闭包时牢记一点:返回函数不要引用任何循环变量,或者后续会发生变化的变量。

    2,  匿名函数。

    #匿名函数
    #一个例子,lambda x: x * x 就是一个匿名函数
    #关键字lambda表示匿名函数,冒号前面的x表示函数参数。
    f = lambda x: x * x #可以这样写,f就可以调用匿名函数了。

    3,  装饰器。

    #装饰器
    def fun(a):
        def exc():
            print("进入")
            return a()
        return exc

    @fun
    def b():
        print("本身")

    b() #@fun 这里就运行了b = fun(b),进入fun之后返回exc,
    # 当运行b的时候调用exc开始执行,执行完了,返回a()既是传入的b,此时调用函数本身,类似动态代理

    def log(text):
        def decorator(func):
            def wrapper(*args, **kw):
                print('%s %s():' % (text, func.__name__))
                return func(*args, **kw)
            return wrapper
        return decorator #这里有个3个层,

    @log('text')
    def a():
        print("出现") #这里就是log('text')(a),,,这里的log已经调用完了,不冲突。

    a()

    4,  偏函数

    #偏函数
    import functools
    int2 = functools.partial(int,x = '1',base = 2) #使用偏函数,来固定函数的某一的参数
    print(int2())
  • 相关阅读:
    【FFMPEG】ffmpeg 时间戳问题汇总
    【FFMPEG】基于RTP的H264视频数据打包解包类
    【FFMPEG】基于RTP的H264视频数据打包解包类
    【FFMPEG】使用FFMPEG+H264实现RTP传输数据
    【FFMPEG】使用FFMPEG+H264实现RTP传输数据
    【FFMPEG】谈谈RTP传输中的负载类型和时间戳
    【FFMPEG】谈谈RTP传输中的负载类型和时间戳
    【图像处理】FFmpeg解码H264及swscale缩放详解
    【图像处理】FFmpeg解码H264及swscale缩放详解
    【图像处理】FFmpeg-0
  • 原文地址:https://www.cnblogs.com/luohuayu/p/8846008.html
Copyright © 2011-2022 走看看