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]