python-高阶函数

一、定义

变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。

二、分类

1.map函数

map() 函数接收两个参数,一个是函数,一个是序列, map 将传入的函数依次作用到序列的每个元素,并把结果作为新的 list 返回。

### *sum 表示可变参数,可接收多个值


map() 作为高阶函数,把运算规则抽象了.

练习: 把这list列表中的所有数字转为字符串;([1,2,3]---['1','2','3'])


2.reduce函数

reduce 把一个函数作用在一个序列[x1, x2, x3...]上,这个函数必须接收两个参数,reduce 把结果继续和序列的下一个元素做累积计算。

### 类加


### 阶乘


3.filter函数

filter() 也接收一个函数和一个序列。和 map() 不同的是,filter() 把传入的函数依次作用于每个元素,然后根据返回值是 True
还是 False 决定保留还是丢弃该元素。

###在一个 list 中,删掉偶数,只保留奇数:


###删除100以内的质数


4.sorted函数

• 排序也是在程序中经常用到的算法。 无论使用冒泡排序还是快速
排序,排序的核心是比较两个元素的大小。通常规定如下:
    x < y, return -1
    x == y, return 0
    x > y, return 1

# 排序: 由小到大,sorted函数(默认reverse=False

# 排序: 由大到小, reverse=True, 代表排序后进行反转;


### 对不同类型的手机电脑品牌以销售量和单价进行排序






###sorted 函数应用

(携程笔试)

给定一个整形数组,将数据中所有的0移动到末尾,非0向保持不变;

在原始数组上进行移动操作,误创建新的数据;

#输入:

            第一行是数组长度,后续每一行是数组的一条记录;

               4

                0

                7

                0

                2

#输出:

                调整后数组的内容

                   7

                   2

                   0

                   0


#### 将0移动到开头


#### 匿名函数:将0移动到开头

    

#### 对字符串排序

例:将字符串“apple” 排在最后,


5.返回值是函数

# 闭包: 函数里面嵌套函数;


###求和


#  f = lazy_sum(1,2,3,4)  调用 lazy_sum() 时,返回的并不是求和结果,而是求和函数

#  f()   #调用函数 f 时,才真正计算求和的结果

##   调用 lazy_sum() 时,每次调用都会返回一个新的函数,即使传入相同的参数

6.匿名函数

•当我们在传入函数时,有些时候,不需要显式地定义函数,直接传入匿名函数更方便。
•关键字 lambda 表示匿名函数,冒号前面的 x 表示函数参数


• 匿名函数有只能有一个表达式,不用写 return ,返回值就是该表达式的结果。
• 因为匿名函数没有名字,不必担心函数名冲突。 此外,匿名函数也是一个函数对象,也可以把匿名函数赋值给一个变量,再利用变量来调用该函数;


##也可以把匿名函数作为返回值返回


##累加


## 可变参数和关键字参数


三、装饰器

# 装饰器: 用来装饰函数 ,或装饰类

# 装饰器函数基本格式:
def 装饰器名称(fun):
    @functools.wraps(fun)
    def wrapper(*args, **kwargs):
        pass
    return wrapper

# 使用装饰器函数

@装饰器名称     # hello = 装饰器名称(hello)    # hello = wrapper

    def hello():
        pass

# 调用函数

    hello()     # 实质执行的是wrapper函数
    hello.__name__

    hello.__doc__

### 装饰器第一个模版


 # 语法糖

#  @compute_time     <==>     hello = compute_time(hello)    
# hello()
#
#  @compute_time      <==>    hello1 = compute_time(hello1)
# hello1()






四、函数的解包

*args: 对列表或者元组进行解包的;


**kwargs:对字典解包


### 实现日志记录的装饰器函数

日志格式: 时间  函数名  运行时间:    运行结果:



###


### print(add.__name__)

### print(add.__doc__)


### 注释@functools.wraps(fun)后,结果为:


### 装饰器的第二个模版

##判断bbs账户是否登陆






###探究多个装饰器的执行顺序

# 当有多个装饰器时, 从下到上调用装饰器;





    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值