python 个别特点使用
append、extend:
list.append(object) 向列表中添加一个对象object,将object这个整体打包作为list的一个元素放在list最后
list.extend(sequence) 把一个序列seq的内容添加到列表中,将这个序列和list序列合并,并放在其后面
pop、remove:
L.pop(index) -> list — remove (default last) and return list
pop(index) 是按索引号来删除列表中对应的元素,该函数的参数是索引号,也可以是空的,即pop(), 这时将最后一个元素删除
L.remove(value) -> None -- remove first occurrence of value
remove(value) 是根据参数value在列表中查找,若找到某个元素的值和参数相等,则将该元素删除,若没有找到,则抛出异常,该函数的参数不能为空,该函数没有返回值yield:
yield是生成器(generator)使用的关键字
创建列表,容量有限制,为节省空间,generator是在循环过程中一边循环一边计算不断推算出后续元素的机制
L = [x * x for x in range(10)]
g = (x * x for x in range(10))
创建L和g的区别仅在于最外层的[]和(),L是一个list,而g是一个generator, at 0x1023fb0f0>
generator的每一个元素可以通过next()函数获得,generator保存的是算法,每次调用,就计算出的下一个元素的值,直到计算到最后一个元素,没有更多的元素时,抛出的错误,一般通过循环来迭代它
如果推算的算法比较复杂,用类似列表生成式的循环无法实现的时候,还可以定义函数来实现。而把函数变成generator,就需要使用yield关键字,generator函数的“调用”实际返回一个generator对象
generator和函数的执行流程不一样。函数是顺序执行,遇到语句或者最后一行函数语句就返回。而变成generator的函数,在每次调用的时候执行,遇到语句返回,再次执行时从上次返回的语句处继续执行
用循环调用generator时,发现拿不到generator的语句的返回值。如果想要拿到返回值,必须捕获错误,返回值包含在的中
g = func(6)
while True:
try:
x = next(g)
print('g:', x)
except StopIteration as e:
print('Generator return value:', e.value)
break
//Generator return value: done
lambda:
语法唯一: lambda argument_list: expression 这里argument_list是参数列表,expression是一个关于参数的表达式,表达式中出现的参数需要在argument_list中有定义,并且表达式只能是单行的,这里的lambda argument_list: expression表示的是一个函数。这个函数叫做lambda函数。
lambda是匿名函数,有输入和输出,单行expression决定了lambda函数功能简单,不会完成复杂的逻辑
使用1:将lambda函数赋值给一个变量,通过这个变量间接调用该lambda函数;
使用2:应用在函数式编程中:filter函数,此时lambda函数用于指定过滤列表元素的条件;sorted函数,此时lambda函数用于指定对列表中所有元素进行排序的准则;map函数,此时lambda函数用于指定对列表中每一个元素的共同操作;reduce函数,此时lambda函数用于指定列表中两两相邻元素的结合条件;
使用3:应用在闭包中:函数的返回值也可以是函数。这时,lambda函数实际上是定义在某个函数内部的函数,称之为嵌套函数,或者内部函数。对应的,将包含嵌套函数的函数称之为外部函数。内部函数能够访问外部函数的局部变量。
zip:zip()函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压为列表。zip 方法在 Python 2 和 Python 3 中的不同:在 Python 3.x 中为了减少内存,zip() 返回的是一个对象。如需展示列表,需手动 list() 转换。
>>>a = [1,2,3]
>>> b = [4,5,6]
>>> c = [4,5,6,7,8]
>>> zipped = zip(a,b) # 打包为元组的列表
[(1, 4), (2, 5), (3, 6)]
>>> zip(a,c) # 元素个数与最短的列表一致
[(1, 4), (2, 5), (3, 6)]
>>> zip(*zipped) # 与 zip 相反,*zipped 可理解为解压,返回二维矩阵式
[(1, 2, 3), (4, 5, 6)]
Python之禅中有这么一句话:Explicit is better than implicit(明了胜于晦涩),就是说哪种方式更清晰就用哪一种方式,Python的定位是“优雅”、“明确”、“简单”。
领取专属 10元无门槛券
私享最新 技术干货