python基础教程(5)

时间:2021-08-16 18:41:47

一、函数的高阶特性。

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())