測試開發高階 三

2021-09-28 18:23:52 字數 4717 閱讀 3380

生成器的三個方法

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/zhongxin/desktop/py/zx/03/0809.py", line 5, in print(next(gen))

stopiteration

"""

gen = (i for i in range(0, 20, 2))

gen.throw(nameerror, 'name is ***')

"""traceback (most recent call last):

file "/users/zhongxin/desktop/py/zx/03/0809.py", line 2, in gen.throw(nameerror, 'name is ***')

file "/users/zhongxin/desktop/py/zx/03/0809.py", line 1, in gen = (i for i in range(0, 20, 2))

nameerror: name is ***

"""

在函式中呼叫函式自身,我們把這種函式叫做遞迴函式

遞迴邊界:遞迴的終止條件

def func(n):

print(n)

func(n - 1)

func(10)

"""traceback (most recent call last):

file "/users/zhongxin/desktop/py/zx/03/0809_1.py", line 5, in func(10)

file "/users/zhongxin/desktop/py/zx/03/0809_1.py", line 3, in func

func(n - 1)

file "/users/zhongxin/desktop/py/zx/03/0809_1.py", line 3, in func

func(n - 1)

file "/users/zhongxin/desktop/py/zx/03/0809_1.py", line 3, in func

func(n - 1)

[previous line repeated 993 more times]

file "/users/zhongxin/desktop/py/zx/03/0809_1.py", line 2, in func

print(n)

recursionerror: maximum recursion depth exceeded while calling a python object

"""def func1(n):

print(n)

if n == 1:

return

else:

func(n - 1)

func1(10)

"""1098

7654

321"""

實現乙個累加函式

1 1

2 1+2

3 1+2+3

4 1+2+3+4

5 1+2+3+4+5

...

def fun_add(n):

if n == 1:

return 1

return n + fun_add(n - 1)

print(fun_add(6))

檢視最大遞迴次數
import sys

print(sys.getrecursionlimit()) # 預設1000 實際996

sys.setrecursionlimit(3000) # 實際2996

使用裝飾器快取呼叫

呼叫同樣的引數後,使用快取,不會重新開闢空間

@functools.lru_cache(maxsize=128, typed=false)

乙個為函式提供快取功能的裝飾器,快取 maxsize 組傳入引數,在下次以相同引數呼叫時直接返回上一次的結果。用以節約高開銷或i/o函式的呼叫時間。

由於使用了字典儲存快取,所以該函式的固定引數和關鍵字引數必須是可雜湊的。

乙個題目:

爬100個台階,爬台階每一步可以上一階,兩階,或三階,請問一共有多少種爬法

from functools import lru_cache

@lru_cache(maxsize=128)

def func999(n):

if n == 1:

return 1

elif n == 2:

return 2

elif n == 3:

return 4

else:

return func999(n - 1) + func999(n - 2) + func999(n - 3)

print(func999(100)) # 180396380815100901214157639

乙個函式的返回結果只依賴於它的引數,並且在執行過程裡面沒有***

函式的***:

def func(a, b):

return a * b + 100

print(func(11, 222))

內建函式
li = [1, 2, 3, 4, 5, 6, 7]  # 每個元素*1000/2

def fun(n):

return n * 1000 / 2

res = map(fun, li)

print(res)  # print(list(res)) # [500.0, 1000.0, 1500.0, 2000.0, 2500.0, 3000.0, 3500.0]

def func1(n):

return n >= 5

res1 = filter(func1,li)

print(res1) # print(list(res1)) # [5, 6, 7]

長度不一樣,以最短為準

title = ['name', 'age', 'gender']

data = ['zx', 26, '男']

print(list(zip(title,data))) # [('name', 'zx'), ('age', 26), ('gender', '男')]

print(dict(zip(title,data))) # 

num = [1, 2, 3]

print(list(zip(title, data, num))) # [('name', 'zx', 1), ('age', 26, 2), ('gender', '男', 3)]

關鍵字:lambda

lambda 引數:表示式(返回值)
res = (lambda n: n * 2)(4)

print(res) # 8

# 偏函式之前的寫法

li = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

print(list(filter(lambda x:x>5,li))) # [6, 7, 8, 9, 10]

from functools import partial

li = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

myfilter = partial(filter, lambda x: x > 5)

print(list(myfilter(li))) # [6, 7, 8, 9, 10]

乙個簡單的例子:

from functools import partial

def func1(a, b, c):

print(a, b, c)

func1(11, 22, 33)

func1(11, 'bb', 'cc')

func1(11, 'dd', 'ee')

myfilter1 = partial(func1, 11)

myfilter1(22, 33)

myfilter1('bb', 'cc')

myfilter1('dd', 'ee')

myfilter2 = partial(func1, b=22)

myfilter2(a=11, c='cc') # 11 22 cc

myfilter2 = partial(func1, a=11, b=22)

myfilter2(c='cc') # 11 22 cc

測試開發高階 二

數值串行型別 元祖在定義的時候就確認了存放的空間,記憶體固定,占用空間較小 列表的空間可以動態變化,記憶體占用的空間比元祖大的多 在資料固定的情況下使用元祖 雜湊 from collections import namedtuple普通元祖 tu zx 1994 男 print tu 0 命名元祖 ...

測試開發探秘

不知道從什麼時候開始,出現了測試開發工程師這個稱呼,以前的測試是測試工程師,開發是開發工程師,可究竟什麼時候出現的測試開發工程師呢?怎麼才算得上是測試開發工程師呢?其實雖然我做測試開發,高階測試開發,以及資深測試開發很久了,但是不能給出乙個準確的定義。但是從以往的工作,招聘面試等經驗中,可以分析一下...

入行測試開發

02資料庫測試需要掌握哪些技能 直播 資料庫測試需要掌握哪些技能 11月5日 20 00 21 00 03 玩轉介面自動化測試 直播 玩轉介面自動化測試 11月6日 20 00 21 00 04 玩轉web自動化測試 直播 資料庫測試需要掌握哪些技能 11月7日 20 00 21 00 05 玩轉壓...