欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Python的高阶函数和装饰器设计模式

程序员文章站 2023-11-29 11:11:40
高阶函数:我的理解就是闭包、内嵌函数举例:计数器:有问题么?问题出在base+=step,对base赋值,局部变量,没有先定义改进:声明为非局部变量nonlocal,但是不要是global变量......

高阶函数:我的理解就是闭包、内嵌函数

Python的高阶函数和装饰器设计模式

Python的高阶函数和装饰器设计模式

举例:

计数器:

Python的高阶函数和装饰器设计模式

有问题么?

问题出在base+=step,对base赋值,局部变量,没有先定义

改进:声明为非局部变量nonlocal,但是不要是global变量

Python的高阶函数和装饰器设计模式

Python的高阶函数和装饰器设计模式

观察一下:

id(f1)

id(f2)

f1==f2

自定义sort函数:

Python的高阶函数和装饰器设计模式

以下是加入reverse参数的改进:推荐flag的用法

Python的高阶函数和装饰器设计模式

改写为高阶函数,注意comp函数:

Python的高阶函数和装饰器设计模式

comp函数比较通用。可以抽象出来。如下:

Python的高阶函数和装饰器设计模式

再改写成高阶函数形式:

Python的高阶函数和装饰器设计模式

先简化一下comp函数,使其不带reverse参数:

Python的高阶函数和装饰器设计模式

替换成sort自己的调用:

Python的高阶函数和装饰器设计模式

再进一步改造comp函数为匿名函数lambda a,b:a<b

Python的高阶函数和装饰器设计模式

再改造一下,去掉reverse参数吗,由匿名函数比较关系决定升序还是降序

Python的高阶函数和装饰器设计模式

知识点补充:enumerate、集合set操作

>>> import random
>>> l=[random.randint(1,100) for i in range(5)]
>>> l
[10, 14, 62, 30, 45]

>>> print(list(enumerate(l)))
[(0, 10), (1, 14), (2, 62), (3, 30), (4, 45)]
>>> for e in enumerate(l):
    print(e[0])   
0
1
2
3
4

>>> for i,x in enumerate(l):
    print(i,'   ',x)
0     10
1     14
2     62
3     30
4     45

>>> k=set(l)
>>> k
{10, 45, 14, 30, 62}

 |  add(...)
 |      Add an element to a set.
 |      
 |      This has no effect if the element is already present.
 |  
 |  clear(...)
 |      Remove all elements from this set.
 |  
 |  copy(...)
 |      Return a shallow copy of a set.
 |  
 |  difference(...)
 |      Return the difference of two or more sets as a new set.

 

 

 

 

 

 

 

 

 

本文地址:https://blog.csdn.net/lm19770429/article/details/107057500