Python学习 10day__高级语法

filter函数

  过滤函数:对一组数据进行过滤,符合条件的数据会生成一个新的列表并返回


1 # 对一个列表进行过滤,偶数组成一个新列表
2 
3 def isEcen(a):
4     return a % 2 == 0
5 
6 l = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
7 r = filter(isEcen, l)
8 print(type(r))                    # 类型为filter类型 可迭代 用for进行输出
9 print([i for i in r])

 


高阶函数 排序

  把一个列表按照给定算法进行排序

1 a = [99, 4564, 45646 ,465346 ,213 ,4864 ,1231, 784351]
2 a1 = sorted(a)                  # 从小到大
3 print(a1)
4 a2 = sorted(a, reverse=True)    # 从大到小
5 print(a2)
6 
7 a = [846, -45, 4563453, -5644, 453]
8 al = sorted(a, key=abs, reverse=True)       # abs为取绝对值;绝对值倒叙排序
9 print(al)

返回函数

  函数可以返回具体的值
  也可以返回一个函数作为结果


 1 def a1(a):
 2     print("a1")
 3     return None
 4 p = a1(3)
 5 print(a)
 6 
 7 def a2():
 8     def a3():
 9         print("a3")
10         return 3
11     return a3                # 函数a3作为返回值
12 
13 pp = a2()
14 print(pp)
15 print(pp())

 1 def a4(*args):
 2     def a5():
 3         i = 0
 4         for n in args:   # a5使用了外部a4的变量
 5             i += n
 6         return i
 7     return a5            # 返回内部函数a5
 8 
 9 ppp = a4(1, 2, 3, 4, 5, 6, 7)
10 print(ppp())

 


闭包

  当一个函数在内部定义函数,并在内部的函数中应用外部函数的参数或者局部变量
  当内部函数作为返回值的时候,相关参数和变量保存在返回的函数中,这种结构叫做闭包


 1 def count():
 2     fs = []
 3     for i in range(1, 4):
 4         def f():
 5             return i * i
 6         fs.append(f)
 7     return fs
 8 f1, f2, f3 = count()
 9 print(f1())
10 print(f2())
11 print(f3())
12 '''
13 输出结果为三个9,造成这种情况的原因是返回函数引用了i,i并非立即执行,二十等到三个
14 函数都返回的时候才执行,而这个时候i已经变成了3,最终调用的时候都返回的是3*3
15 因此,返回函数不能引用任何循环变量
16 '''

解决方法
def count2():
    def f(j):
        def g():
            return j * j
        return g           # 返回值为内部函数
    fs = []
    for i in range(1, 4):
        fs.append(f(i))
    return fs

b1, b2, b3 = count2()
print(b1())
print(b2())
print(b3())

 



装饰器

  在不改变原有代码的基础上附加功能
  可以装饰任何函数

 1 import time
 2 def ptime(f):
 3     def wrapper(*args, **kwargs):
 4         print("time: ",time.ctime())
 5         return f(*args, **kwargs)
 6     return wrapper
 7 
 8 @ptime                       # 装饰器,语法@+新功能函数 此处相当于hello()=ptime(hello())
 9 def hello():
10     print("hello world")
11 
12 hello()

 


偏函数

  参数固定的函数,相当于一个有特定参数的函数体
  functools.partial的作用,把一个函数的某些参数固定,返回一个新函数

1 #把字符串转换为十进制数
2 print(int('123456'))
3 # 把八进制转换为十进制
4 print(int('123456',base=8))
用偏函数固定参数,实现上面的八进制转换为十进制

1 import functools
2 
3 int8 = functools.partial(int, base=8)
4 print(int8('123456'))

 

posted @ 2018-07-28 23:20  Burtit  阅读(196)  评论(0编辑  收藏  举报