Python高级特性与几种函数的讲解
作者:沙沙罗曼 发布时间:2021-12-09 03:37:17
标签:python,高级特性,函数
切片
从list或tuple中取部分元素。
list = [1, 2, 3, 4]
list[0 : 3] # [1, 2, 3]
list[-2 : -1] # -1表示最后一个,[3, 4]
list[1 :: 2] # index = 1开始,每两个取一个[2, 4]
list[:] # 复制list,[1, 2, 3, 4]
# 针对tuple,切片同样适用
iterable、iterator
可迭代,迭代器,集合类型数据可迭代但不是迭代器,可通过iter()转变为迭代器。
可迭代对象可使用for-in语句遍历,判断x是否可迭代:isinstance(x, Iterable)。
列表生产式
高效创建列表,见代码示例:
# range转list
list(range(1, 5)) # [1, 2, 3, 4]
[x * x for x in range(1, 5)] # [1, 4, 9, 16]
[x * x for x in range(1, 5) if x % 2 == 0] # [4, 16]
[m + n for m in 'ABC' for n in 'XYZ'] # ['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']
[s.lower() for s in ['Hello', 'World', 'IBM', 'Apple']] # like map
generator
isinstance(generator, Iterable) = True
,可使用for-in语句,或者使用next方法。
g = (x * x for x in range(10))
next(g) # 0
next(g) # 1
next(g) # 4
for item in g:
print(item) # 9 16 ... 81
generator函数
generator函数本质是一个有状态的函数,遇到yield语句时会暂时返回。
# 有yield语句,表明时generator函数
def gen_fn():
init = 0
while init < 10:
yield init
init += 1
return 'done'
call = gen_fn() # 获得可迭代对象call
next(call) # 0
next(call) # 1
# 每次调用generator函数,得到的是一个新的generator
# for-in无法获得generator的返回值'done'
for item in gen_fn():
print(item) # 0 1 ... 9
高阶函数
参数是函数的函数即是高阶函数,可对比数学概念:g(x) = f(x) + 1
,g(x)即高阶函数。
map
# map(func, *iterables, ...)
i = map(lambda x : x * x, [1, 2, 3]) # 返回Iterator
list(i) # [1, 4, 9]
reduce
from functools import reduce
reduce(lambda previous, x : previous + x, [1, 2, 3, 4]) # 10
filter
i = filter(lambda x : x % 2 == True, [1, 2, 3, 4])
list(i) # [1, 3]
sorted 默认升序,通过key参数决定排序规则。
sorted([1,3,2], key = lambda x : -x) # [3, 2, 1]
返回函数做回函数返回值
闭包概念:包含环境成分(自由变量)和控制成分的实体(lambda表达式,函数)。
def lazy_sum(*args):
ax = 0
def sum():
nonlocal ax
for n in args:
ax = ax + n
return ax
return sum
fn = lazy_sum(1, 2, 3) # ax + sum构成了闭包
fn() # 6
fn() # 12
匿名函数
即lambda表达式。
装饰器
函数包函数的语法糖?
def log(fn):
def call(*args, **kw):
print('call %s():' % fn.__name__)
return fn(*args, **kw)
return call
# @log的作用等同now = log(now)
@log
def now():
print('2018-03-18')
now() # call now(): 2018-03-18
偏函数
把一个函数的某些参数给固定住,返回一个新的函数。类似柯里化,但更强大?
from functools import partial
binary_int = partial(int, base = 2)
binary_int('1000000') # 64
来源:https://amsimple.com/blog/article/38.html


猜你喜欢
- 本文实例讲述了php+mysqli实现批量替换数据库表前缀的方法。分享给大家供大家参考。具体分析如下:在php中有时我们要替换数据库中表前缀
- 在写sql的时候,由于有部分语句别名不能调用,百度了一下原因,原来是由于别名机制不同引起的。为了避免下一次再犯同样的错误,今天把网上找到资料
- 最近感觉被大数据定义成机器人了,随便看个网页都跳验证码。怎么用python绕验证码是个令人头秃的事情,我投降!那么今天手把手教大家如何写验证
- 科讯sql商业版中用到的ajax空间与分页函数,他们的js代码学习是非常不错的//ajax 控件 function Pa
- 使用Python加载最新的Excel读取类库xlwings可以说是Excel数据处理的利器,但使用起来还是有一些注意事项,否则高大上的Pyt
- 第一类:对于下面的这些option的可选参数,value应该被设置一个bool类型的值:选项可选value值备注CURLOPT_AUTORE
- 先来描述一下我遇到的问题,在进行matplotlib学习时, plot.show() 总是无法成功运行,总是会报一个错:RuntimeErr
- 本文实例讲述了Python机器学习之决策树算法。分享给大家供大家参考,具体如下:决策树学习是应用最广泛的归纳推理算法之一,是一种逼近离散值目
- 首先 下载 jedis.jar包然后再 工程设置里面找到Libraries,点击+。添加下载好的jedis.jar包。点击OK退出即可创建J
- 本文实例讲述了Python设计模式之备忘录模式原理与用法。分享给大家供大家参考,具体如下:备忘录模式(Memento Pattern):不破
- 在Python中有时会碰到需要一个一维列向量(n*1)与另一个一维列向量(n*1)的转置(1*n)相乘,得到一个n*n的矩阵的情况。但是在p
- 在修改后的文字后面加上: self.textEdit_6.moveCursor(QTextCursor.End)例子:self.textEd
- you-get是github上python的一个开源库(https://github.com/soimort/you-get),使用you-
- 在查询语句中使用 NOLOCK 和 READPAST 处理一个数据库死锁的异常时候,其中一个建议就是使用 NOLOCK 或者 READPAS
- ADODB.Stream在ASP编程中往往用于无组件上传,并且可以指定文件编码,可以应对各种不同的需要。但是在使用ADODB.Stream过
- (1)应用于客户需要与不同的数据源进行交互时。数据可能来自不同的数据库,他们都有各自不同的复杂格式。但客户与这些数据库间只通过一种标准语言进
- 前言在迷宫问题中,给定入口和出口,要求找到路径。本文将讨论三种求解方法,递归求解、回溯求解和队列求解。在介绍具体算法之前,先考虑将迷宫数字化
- Python是一种解释型、面向对象、动态数据类型的高级程序设计语言。Python由Guido van Rossum于 * 底发明,第一个
- a.call和apply方法详解------------------------------------------------------
- 1. 引言在数据处理、机器学习等领域,我们经常需要对各式各样的数据进行处理,本文重点介绍三种非常简单的方法来检测数据集中的异常值。