Python全栈(第一期)Day16

今日主要内容:
内置函数
匿名函数

一,关于数据

数据类型 :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]

猜你喜欢

转载自blog.csdn.net/qq_42615032/article/details/84781234
今日推荐