day16 内置函数和匿名函数

 

复习:

数据类型: int, float, bool,complex

数据结构:dict, tuple,list,set,str

一、内置函数

reversed: 保留原列表,返回一个反向的迭代器

# l = [1,2,3,4,5]
# l.reverse()
# print(l)
# l = [1,2,3,4,5]
# l2 = reversed(l)
# print(l2)

slice:切片

l = (1,2,23,213,5612,342,43)
sli = slice(1,5,2)
print(l[sli])
print(l[1:5:2])

format:

print(format('test', '<20')) #20空 左对齐
print(format('test', '>20'))  #右对齐
print(format('test', '^20'))  #居中

bytes:

#bytes 转换成bytes类型
# 我拿到的是gbk编码的,我想转成utf-8编码
# print(bytes('你好',encoding='GBK'))     # unicode转换成GBK的bytes
# print(bytes('你好',encoding='utf-8'))   # unicode转换成utf-8的bytes
# 网络编程 只能传二进制
# 照片和视频也是以二进制存储
# html网页爬取到的也是编码
 

bytearray:
# b_array = bytearray('你好',encoding='utf-8')
# print(b_array)
# print(b_array[0])
# '\xe4\xbd\xa0\xe5\xa5\xbd'
# s1 = 'alexa'
# s2 = 'alexb'

memoryview:

# 切片 —— 字节类型  不占内存
# 字节 —— 字符串 占内存

ord:字符按照Unicode转数字

  print(ord('a'))

  print(ord('好'))

chr:数字按照Unicode转字符

  print(chr(97))

ascii:只要是ASCII码中的就原封不动打印出来,不是就转成\u

# print(ascii('好'))
# print(ascii('1'))

repr:

# name = 'egg'
# print('你好%r'%name)
# print(repr('1'))
# print(repr(1))

 frozenset:不可变

 相关内置函数:

len enumerate(枚举)

all:有一个为false就是false

# print(all(['a','',123]))
# print(all(['a',123]))
# print(all([0,123]))

any:有一个为true就是true

# print(any(['',True,0,[]]))

zip:返回一个迭代器

l = [1,2,3,4,5]
l2 = ['a','b','c','d']
l3 = ('*','**',[1,2])
d = {'k1':1,'k2':2}
for i in zip(l,l2,l3,d):
    print(i)

filter:过滤

def is_odd(x):
     return x % 2 == 1

ret = filter(is_odd, [1,2,3,4,5,6])
print(ret)
for i in ret:
     print(i)
def is_str(s):
    return s and str(s).strip()

ret = filter(is_str, [1, 'hello','','  ',None,[], 6, 7, 'world', 12, 17])  
# 对列表中的每个值都代入到is_str中,结果是true就返回到filter中,false就不返回。
print(ret) for i in ret: print(i)

 

#请用filter过滤出1-100中平方根是整数的数
from math import sqrt

def z_sqrt(x): return sqrt(x) % 1 == 0
ret
= filter(z_sqrt,range(1,101))
for i in ret: print(i, end=' ')

map:

ret = map(abs,[1,-4,6,-8])
print(ret)
for i in ret:
    print(i)

filter与map比较:

# filter 执行了filter之后的结果集合 小于等于 执行之前的个数
# filter只管筛选,不会改变原来的值
# map 执行前后元素个数不变
# 值可能发生改变

 

sorted:

l = [1,-4,6,5,-10]
l.sort(key = abs)   # 在原列表的基础上进行排序

print(l)
print(sorted(l,key=abs))      # 生成了一个新列表 优点:不改变原列表 缺点:占内存

print(sorted(l,key=abs,reverse=True))     # reverse 翻转
print(l)
# 列表按照每一个元素的len排序
l = ['   ',[1,2],'hello world']
print(sorted(l,key = len))

二、匿名函数

为了解决那些功能很简单的需求而设计的一句话函数

#这段代码
def calc(n):
    return n**n
print(calc(10))
 
#换成匿名函数
calc = lambda n:n**n
print(calc(10))

 

#打印dic中value值最大的对应的key
dic={'k1':10,'k2':100,'k3':30}
print(max(dic))  #直接打印‘k3’
print(max(dic,key=lambda key:dic[key]))  #k2
print(dic[max(dic,key=lambda k:dic[k])])   #100

min,max,filter,map,sorted含有key关键字,且可以与lambda结合使用

res = filter(lambda x:x>10,[5,8,11,9,15])
for i in res:
    print(i)

res = map(lambda x:x**2,[1,5,7,4,8])
for i in res:
    print(i)

example :

d = lambda p:p*2
t = lambda p:p*3
x = 2
x = d(x) #x = 4
x = t(x) #x = 12
x = d(x) #x = 24
print(x)
#现有两元组(('a'),('b')),(('c'),('d')),
# 请使用python中匿名函数生成列表[{'a':'c'},{'b':'d'}]


ret = zip((('a'),('b')),(('c'),('d')))
# def fun(tup):
#     return {tup[0]:tup[1]}
# res = map(fun,ret)
res = map(lambda tup:{tup[0]:tup[1]},ret)
print(list(res))

 

 

本章小结

说学习内置函数,不如说整理自己的知识体系。其实整理这些内置函数的过程也是在整理自己的知识体系。

我们讲课的时候会归类:常用或者不常用,主要还是根据场景而言。

一个优秀的程序员就应该是在该用这个方法的时候信手拈来,把每一个内置的函数都用的恰到好处。

要想做到这一点,至少要先了解,才能在需要的时候想起,进而将它用在该用的地方。

但是在这里,我还是以自己的一点经验之谈,把几个平时工作中相对更常用的方法推荐一下,请务必重点掌握:

其他:input,print,type,hash,open,import,dir

str类型代码执行:eval,exec

数字:bool,int,float,abs,divmod,min,max,sum,round,pow

序列——列表和元组相关的:list和tuple

序列——字符串相关的:str,bytes,repr

序列:reversed,slice

数据集合——字典和集合:dict,set,frozenset

数据集合:len,sorted,enumerate,zip,filter,map





 

posted @ 2019-03-14 13:10  pumpkin_J  阅读(89)  评论(0编辑  收藏  举报