今日主要内容:
内置函数
匿名函数
一,关于数据
数据类型 :int bool 。。。
数据结构 : dict list tuple set str
冷知识:dict 和 tuple 是python中独特的
二,内置函数
1,reversed
# reversed()
l = [1, 2, 3, 4, 5]
l.reverse()
print(l)
l = [1, 2, 3, 4, 5]
l2 = reversed(l) #并没有真的去返回一个列表,而是给一个迭代器。节省空间
print(l2)
# 保留原列表,返回一个反向的迭代器
for i in l2:
print(i)
输出结果:
[5, 4, 3, 2, 1]
<list_reverseiterator object at 0x000001220DCE2F98>
5
4
3
2
1
2,切片:slice
l = (1, 2, 23, 213, 5612, 342, 43)
sli = slice(1, 5, 2) #隔一个切一个
print(l[sli])
print(l[1:5:2])
输出结果:
(2, 213)
(2, 213)
3,格式调整
#一个调整格式的方式
print(format('test', '<20')) #开20个空间左对齐
print(format('test', '>40')) #开40个空间右对齐
print(format('test', '^40')) #开40个空间居中
输出结果:
不方便显示,,,理解就行!
4,字节类型
# bytes:转换成bytes类型
# 我拿到的是gbk编码的,我想转成utf-8编码
print(bytes('你好', encoding='GBK')) # unicode转换成GBK的bytes
print(bytes('你好', encoding='utf-8')) # unicode转换成utf-8的bytes
print(bytes('你好', encoding='utf-8').decode('utf-8'))
# 网络编程 只能传二进制
# 照片和视频也是以二进制存储
# html网页爬取到的也是编码
输出结果:
b’\xc4\xe3\xba\xc3’
b’\xe4\xbd\xa0\xe5\xa5\xbd’
你好
b_array = bytearray('你好', encoding='utf-8')
print(b_array)
print(b_array[0]) #可以用来修改字符串 了解一下就行
# 优点:在修改的时候能够节省内存
输出结果:
bytearray(b’\xe4\xbd\xa0\xe5\xa5\xbd’)
228
5,memoryview()
# 函数:memoryview()
# 我们每次做切片,内存中都会生成一个新的,非常占用内存
l = 'ahfjskjlyhtgeoahwkvnadlnv'
l2 = l[:10]
print(l)
print(l2)
v = memoryview(bytearray(l[0:10], 'utf-8'))
print(v)
输出结果:
ahfjskjlyhtgeoahwkvnadlnv
ahfjskjlyh
<memory at 0x000002677EB52A08>
6,ord+chr+ascii
'''
ord: 字符按照Unicode转数字
chr:数字按照Unicode转字符
ascii:只要是ascii码中的内容,就直接打印出来,不是就转化成另一种形式
'''
print(ord('好'))
print(ord('1'))
print(chr(97))
print(ascii('好'))
print(ascii('1'))
输出结果:
22909
49
a
‘\u597d’
'1’
7,repr
name = 'egg'
print('你好%s'% name) #s-->str
print('你好%r'% name) #r-->repr
print(repr('1')) # 区分:repr 可以让你显现原型
print(str('1'))
输出结果:
你好egg
你好’egg’
‘1’
1
8,all-any-zip
'''
all: Return True if bool(x) is True for all values x in the iterable.
any: 判断是否有bool值为False的值
zip: 返回一个迭代器: 拉链形式
'''
print(all(['a', '', 123]))
print(all(['a', 123]))
print(all([0, 123]))
print(any(['', 1, 0, []]))
print('00000000000000000000000000000000000')
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)
输出结果:
False
True
False
True
00000000000000000000000000000000000
(1, ‘a’, '’, ‘k1’)
(2, ‘b’, '’, ‘k2’)***
9,过滤
#case1: 过滤数字
def is_odd(x):
return x % 2 == 1 #return True/False, 只有结果是True才能结果滤波器
ret = filter(is_odd, [1, 4, 6, 7, 9, 12, 17])
print(ret) # 可以看到这个地方又拿到一个迭代器---->又是为了节省内存
for i in ret:
print(i)
输出结果:
<filter object at 0x000002A5CF4F9710>
1
7
9
17
# case2:过滤字符串,去掉空的
def is_str(s):
return s and str(s).strip()
ret = filter(is_str, [1, 'hello', '', ' ', None, [], 6, 7, 'world', 12, 17])
print(ret)
for i in ret:
print(i)
输出结果:
<filter object at 0x0000028DD0269710>
1
hello
6
7
world
12
17
# case3: 过滤出1-100中开平方之后是整数的数字
from math import sqrt
def func(num):
res = sqrt(num)
return res % 1 == 0
ret = filter(func, range(1, 101))
for i in ret:
print(i)
输出结果:
1
4
9
16
25
36
49
64
81
100
10,map
'''
# filter 执行了filter之后的结果集合 <= 执行之前的个数
# filter只管筛选,不会改变原来的值
# map 执行前后元素个数不变
# 值可能发生改变
'''
ret = map(abs, [1, -4, 6, -8])
print(ret)
for i in ret:
print(i)
输出结果:
<map object at 0x00000224A732FE48>
1
4
6
8
11,sorted
l = [1, -4, 6, 5, -10]
l.sort(key = abs) # 在原列表的基础上进行排序
print(l)
print(sorted(l, key=abs, reverse=True))# 生成了一个新列表,不改变原列表, but占内存
print(l) #排序之后,原列表依旧还在
l = [' ', [1, 2], 'hello world']
new_l = sorted(l, key=len) # 根据元素长度排序,同样--->key可以给一个func
print(new_l)
输出结果:
[1, -4, 5, 6, -10]
[-10, 6, 5, -4, 1]
[1, -4, 5, 6, -10]
[[1, 2], ’ ', ‘hello world’]
三,匿名函数
1,lambda
#匿名函数:lambda
# 把下面这个add函数改写成匿名函数
# def add(x,y):
# return x+y
add = lambda x, y: x+y
print(add(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 key: dic[key]))
输出结果:
k2
k2
总结:带key的内置函数
min
max
filter
map
sorted
note: 注意区分map and filter
------>都可以和func+lamba合作
2,map
#case1
def func(x):
return x**2
ret = map(func, [-1, 2, -3, 4])
for i in ret:
print(i)
print('00000000000000000000000000')
#case2
ret = map(lambda x: x**2, [-1, 2, -3, 4])
for i in ret:
print(i)
输出结果:
1
4
9
16
00000000000000000000000000
1
4
9
16
3,面试题:zip
# 面试题:
# 现有两元组(('a'),('b')),(('c'),('d')),
# 请使用python中匿名函数生成列表[{'a':'c'},{'b':'d'}]
# max min sorted filter map
# 匿名函数 --> 想到:内置函数
# zip
ret = zip((('a'),('b')),(('c'),('d')))
res = map(lambda tup: {tup[0]: tup[1]}, ret)
print(list(res))
输出结果:
[{‘a’: ‘c’}, {‘b’: ‘d’}]
4,变态题
# 这个题是真的很费劲, 没法说出的好不好
def multipliers():
return [lambda x:i*x for i in range(4)] #return
print([m(2) for m in multipliers()])
print('000000000000000000000000')
def multipliers():
return (lambda x: i*x for i in range(4)) #return
print([m(2) for m in multipliers()])
输出结果:
[6, 6, 6, 6]
000000000000000000000000
[0, 2, 4, 6]