python学习-高级特性

高阶函数
可以使用函数作为参数的函数
def f(func):

sorted:对列表排序,有一个名为key的参数
指定key为abs,根据l的绝对值排序sorted(l,key=abs)

filter:对序列过滤
filter(a,b) a为函数,b为被处理的数据列表,a会对b中的每个元素判断,结果为真择保留,否则舍弃

map/reduce

map:map(a,b),a为函数,b为可迭代的对象,a用来处理b参数
 def a(i):
     return i**2
map(a,b) 对b的对象中每个数据进行求平方的操作
list(Map(a,b)) 生成新的列表

reduce(a,b)  a处理b,但是是叠加的操作
def a(x,y)
   return x+y
reduce(a,b)

Python3中 from functools import reduce
lambda :匿名函数

f = lambad x:x*2
f(2)  4

针对二元组列表

list1 = [(‘a’,1),(‘b’,2)]
sorted 排序
list(sorted(list1,lambda x:x[1]))  根据第二个元素排序

def f(x):
  if x[1]>1:
    return True
  else:
return False
list(filter(f,list1))  根据第二个元素排序
list(filter(lambda x:x[1]>1,list1))

偏函数—默认参数
from functools import partial
def a(i,m=2):
return i*m
a(4)
a(4,4)

切片
获取一个序列(列表或元祖)或者字符串中一部分

l = [‘a’,’b’,’c’,’d’,’e’,’f’,’g’]
copy = l[:] 复制l
l[:4]  [‘a’,’b’,’c’,’d’]
l[4:]  [‘e’,’f’,’g’]
l[2:5]  [‘c’,’d’,’e’]
l[1:-4]  [‘b’,’c’]
0 1 2 3 4 5 6 
a b c d e f g
-7-6-5-4-3-2 -1

列表解析
列表推导

numbers = [1,2,3,4,5,6,7,8,9,10]
[x for x in numbers if x%2==0]  获取numbers中的偶数
[x*x for x in numbers]  对numbers中的每个数求平方

字典解析

d = {‘a’:1,’b’:2,’c’:3}
{k:v*v for k,v in d.items()}
d = {‘a’:1,’b’:4,’c’:9}

元祖拆包
元祖允许左边的变量依次被元祖的元素赋值

t = (‘TOM’,12)
a,b = t
a = TOM b=12
print(‘I’m {},I’m {} years old’.format(*t))
I'm Tom,I'm 12 years old

迭代器
可迭代的对象就是能用for循环迭代的元素
比如list

for i in list:
  print(i)
it = iter(list)
next(it)

调用一次输入一个内容,直到没有内容,报错

it = list.__iter__()
it.__next__()
class Test:
   def __init__(self,name):
     self.name=name
   def __iter__(self):
     return self
   def __next__(self):
     self.name+=1
     if self.name >12:
       raise StopIteration()
     return self.name
   a = Test(1)
a就是一个迭代器
next(a) 2
next(a) 3

*能被for循环访问的就是可迭代对象,能被next函数获取下一个值的就是迭代器
*StopIteration

猜你喜欢

转载自blog.csdn.net/lc_c123/article/details/88398736