數值串行型別
元祖在定義的時候就確認了存放的空間,記憶體固定,占用空間較小雜湊列表的空間可以動態變化,記憶體占用的空間比元祖大的多
在資料固定的情況下使用元祖
from collections import namedtuple
普通元祖:
tu = ('zx', '1994', '男')
print(tu[0])
命名元祖:
使用namedtuple
相當於建立了乙個類,s1
相當於例項話了乙個包含name
,age
,gender
三個屬性的類。
__main__
:當前模組下
from collections import namedtuple
student = namedtuple('student', ['name', 'age', 'gender'])
print(type(student)) # 乙個類
s1 = student('zx', '1994', '男')
print(type(s1)) # print(s1.name) # zx
print(s1[0]) # zx
列表推導式
普通列表建立
"""列表推導式
"""三目運算
a = 10
if a > 5:
print(5)
else:
print(0)
a = 4
res = 5 if a > 5 else 0 # (判斷語句成立)if(判斷語句)else(判斷語句不成立)
print(res) # 0
res = 5 if a > 5 else ('=' if a > 5 else "!")
print(res) # !
結合列表推導式
[i for i in range(10) if i % 2 == 0] # [0, 2, 4, 6, 8]
[i if i % 2 == 0 else -1 for i in range(10) ] # [0, -1, 2, -1, 4, -1, 6, -1, 8, -1]
字典推導式dic =
# 集合
dic =
# 字典
dic =
# 錯誤 ❌❌❌
dic =
# 正確 ✅✅✅
# 其實就是:
dict(zip([1, 2, 3], [3, 2, 1]))
生成器表示式tu = (i for i in range(5))
# at 0x11433d138>
next(tu) # 0
next(tu) # 1
next(tu) # 2
next(tu) # 3
next(tu) # 4
next(tu)
"""traceback (most recent call last):
file "/users/zhongxin/desktop/py/zx/02/0807_2.py", line 33, in print(next(tu))
stopiteration
"""
生成器的作用:當我們要儲存大量資料的時候,使用生成器可以節約記憶體
建立生成器的方式:
生成器表示式
yield
只能用於函式中,當乙個函式**現yield這個關鍵字,那麼這個函式就是乙個生成器函式。
# yield 後面不寫東西
def gen():
for i in range(100000):
yield
res = gen() # next(res) # none
# yield 後面寫i
def gen1():
for i in range(100000):
yield i
res = gen()
next(res) # 1
next(res) # 2
def gen3():
for i in range(100000):
print(f'--*******')
yield i
print(f'--#######')
res = gen3()
print(res)
print(next(res))
"""第一次next列印內容
0--*******
0"""
print(next(res))
"""第一次next列印內容
0--*******
0第二次next列印內容
0--#######
1--*******
1"""
可迭代物件和迭代器物件內部實現了迭代協議的稱之為可迭代物件迭代協議:該物件實現了
__iter__
方法
li = [11, 22, 33, 44]
for i in li:
print(i)
要求:通過iter()可以將可迭代物件轉化為迭代器物件實現了迭代協議
內部還要實現
_next
方法next()方法
生成器是一種特殊的迭代器
li = [11, 22, 33, 44]
item = iter(li)
print(item) # print(next(item)) # 11
迭代器和生成器的區別:
生成器相比迭代器多了三種方法:send()
,close()
,throw()
def gen():
i = 0
while i < 10:
j = yield i
print(j)
i += 1
g = gen()
print(g) # print(next(g)) # 0
print(next(g)) # none 1
print(g.send(8)) # 8 2
def gen1():
i = 0
while i < 10:
j = yield i
if j is not none:
i = j
i += 1
g = gen1()
print(next(g)) # 0
print(g.send(8)) # 9
print(g.send(5)) # 6
print(g.send(10))
"""traceback (most recent call last):
file "/users/zhongxin/desktop/py/zx/02/0807_5.py", line 26, in print(g.send(10))
stopiteration
"""
測試開發高階 三
生成器的三個方法 close 關閉生成器 gen i for i in range 0,20,2 print next gen 0 print next gen 2 gen.close print next gen traceback most recent call last file users...
測試開發題目整理 二
3 題目內容 發現效能測試瓶頸的常用方法和可能出現效能瓶頸的地方?解析 1 常用方法 排除法 極限法 猜錯法 探針法 清單法等等 2 可能的效能瓶頸 大量大圖法 程式記憶體洩漏 程式死鎖 檔案頻繁讀寫 慢sql 快取雪崩等等 例如 慢sql,比如我們的資料庫使用的是mysql,存量資料大增後,執行s...
測試開發探秘
不知道從什麼時候開始,出現了測試開發工程師這個稱呼,以前的測試是測試工程師,開發是開發工程師,可究竟什麼時候出現的測試開發工程師呢?怎麼才算得上是測試開發工程師呢?其實雖然我做測試開發,高階測試開發,以及資深測試開發很久了,但是不能給出乙個準確的定義。但是從以往的工作,招聘面試等經驗中,可以分析一下...