按照重要程度(日常使用频繁程度,依次增加)
(1) all() any() bytes() callable() chr() complex() divmod() eval() exec() format() frozenset() globals() hash() help() id() input() int() iter() locals() next() oct() ord() pow() repr() round()
(2) classmethod() delattr() getattr() hasattr() issubclass() isinstance() object() property() setattr() staticmethod() super()
(3 )abs() enumerate() filter() map() max() min() open() range() print() len() list() dict() str() float() reversed() set() sorted() sum() tuple() type() zip() dir()
下面针对基础数据类型对内置函数进行分类,如下图所示:
python一共提供了68个内置函数,上图为基础数据类型的38个。
重点的内置函数如下所示:
**************************最为重要的4个内置函数***********************************************
(1)zip() 拉链函数,竖着拉。以最小为基准
l1 = [1,2,3]
l2 = ['a','b','c']
print(zip(l1,l2))
运行上述代码得到:<zip object at 0x0000018578954140> 也就是说zip()函数返回的可能是一个迭代器。 因为是迭代器,我们可以通过循环来取值。具体如下
l1 = [1,2,3]
l2 = ['a','b','c']
hehe = zip(l1,l2)
for i in hehe:
print(i)
结果:
(1, 'a')
(2, 'b')
(3, 'c')
显然:确实像拉链一样竖着进行结合。如果l1,l2列表长度不一致?
l1 = [1,2,3]
l2 = ['a','b','c','d']
hehe = zip(l1,l2)
for i in hehe:
print(i)
结果:
(1, 'a')
(2, 'b')
(3, 'c')
(2)filter() 用来过滤的
def is_odd(x):
return x%2 == 1
ret = filter(is_odd,[1,4,6,7,9,13,17]
print(ret)
运行结果<filter object at 0x00000155779622E0>
循环取值
1
7
9
13
17
即:filter()函数共接收两个参数,第一个参数是函数名,第二个参数是一个可迭代的对象。通过将后面可迭代当中的所有的值都传到前面的这个函数作为参数。根据返回的结果是True还是False来决定是否在筛选的范围之内。
利用filter能够完成很多有用的功能,例如删除None,或者是空字符串
示例:
def is_str(s):
return s and str(s).strip()
ret = filter(is_str,[1,'hello','',' ',None,[],7,6,'world',12,9])
for i in ret:
print(i)
运行结果:
1
hello
7
6
world
12
9
(3)map()
Python中map函数应用于每一个可迭代的项,返回的是一个结果list,如果有其他的可迭代参数传进来,map函数则会把每一个参数都以相应的处理函数进行迭代处理。
map()函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回。
ret = map(abs,[1,-4,6,-8])
print(ret)
运行结果:<map object at 0x000001E3DDD18550>
for i in ret:
print(i)
运行结果:
1
4
6
8
filter和map有什么区别?
执行了filter函数之后的结果集合<=执行前的个数
#filter只管筛选,并不会改变原来的值
#map执行前后元素个数不变,值可能发生改变。
(4) sorted
对于list,dict进行排序,python提供了两个方法
对给定的List L进行排序。
方法1:用list的成员函数sort进行排序,在本地进行排序,不返回副本
方法2:用built-in函数sorted进行排序,返回副本,原始输入不变。
通俗讲:sorted不是在原列表的基础上排序,而是生成一个新的列表。
只要用sorted会产生一个新的列表,也就是两个列表,比较占内存,但是此内置函数要比自己写的排序算法速度要快。
l = [1,-3,0,7,88,10]
l.sort()
print(l)
运行结果i:[-3, 0, 1, 7, 10, 88]
l = [1,-3,0,7,88,10]
ret = sorted(l)
print(l)
print(ret)
运行结果:
[1, -3, 0, 7, 88, 10]
[-3, 0, 1, 7, 10, 88]
参数说明:reverse 排序规则,reverse=True 降序 或者 reverse = False 升序。有默认值
————————————————其他重要的内置函数——————————————
(1)reversed()
l = [1,-3,0,7,88,10]
l.reverse()
print(l)
运行结果:[10, 88, 7, 0, -3, 1]
l = [1,-3,0,7,88,10]
l2= reversed(l)
print(l2)
print(l)
运行结果:
<list_reverseiterator object at 0x00000178B49B8550>
[1, -3, 0, 7, 88, 10]
返回一个迭代器,反转不改变原来的列表,返回一个反序的迭代器
(2)slice()
l = [1,-3,0,7,88,10]
sli = slice(1,2,3) #切片规则 这个地方拿到的是一个切片规则,但是至于切谁不知道
print(l[sli])
(3) bytes()
print(bytes('您好',encoding='GBK').decode('GBK'))
print(bytes('您好',encoding='utf-8'))
运行结果:
您好
b'\xe6\x82\xa8\xe5\xa5\xbd'
#拿到的是gbk编码,想转换成utf-8
在网络编程中,从网络传输的角度,两个及其想从网络上通信,只能传二进制。
#文件存储
#照片和视频也是以二进制进行存储的
#html网页爬取的也是bytes编码
bytearry(byte类型的数组)
(4)print()
print('我们是花朵 \n')
print('我们是花朵 \n')
print('我们是花朵 \n')
输出结果:
我们是花朵
我们是花朵
我们是花朵
每次print 打印,就换行一次,在带上\n就会产生空格,如何解决??
print('我们是花朵 \n',end="")
print('我们是花朵 \n',end="")
print('我们是花朵 \n',end="")
运行结果
我们是花朵
我们是花朵
我们是花朵
参数end=指定输出的结束符
(5) open()
f = open("file","w")
print("aaaa",file=f)
f.close()
#默认是打印到屏幕,如果你给了它一个文件句柄,你所有打印的东西都打印到文件里了。
默认 file=None
(6)dir()查看一个对象拥有的所有方法 任意数据类型都可以
l = []
ret = dir(l)
print(ret)
运行结果
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
(7)range()
range的结果只是一个可迭代的,而不是迭代器
(8)id() 查看内存地址
(9)type() 查看数据类型
*****************************************匿名函数*****************************************
为了解决那些功能简单的需求而设计的一句话函数
匿名函数本身很简单,但是和内置函数结合起来比较难
def calc(n):
return n**n
print(calc(10)
#换成匿名函数 如下
calc = lambda n:n**n
print(calc(10)
#换成匿名函数 一行必须写完
#匿名函数格式
函数名 = lambda 参数:返回值
关于匿名函数
(1)参数可以有多个,用逗号隔开
(2)匿名函数不管逻辑多复杂,只能写一行,且逻辑执行结束后的内容就是返回值
(3)返回值和正常函数一样可以是任意数据类型、
dic = {'k1':10,'k2':100,'k3':30}
def func(key):
return dic[key]
print(max(dic,key=func)
print(max(dic,key=lambda k:dic[k])
面试题:
只要考到匿名函数,肯定不是单纯的考察匿名函数,一般情况会暗含内置函数,想到最重要的五个内置函数 max min sorted filter map
d - lambda p:p*2
t = lambda p"p*3
x=2
x=d(x)
x=t(x)
x=d(x)
print(x)