用zip實現map,包含生成器的方式

2021-10-02 15:00:46 字數 1417 閱讀 9656

s1 = 'abc'

s2 = 'xyz123'

print(list(zip(s1, s2)))

print(list(map(abs, [-2, -1, 0, 1, 2])))

print(list(map(pow, [1, 2, 3], [2, 3, 4, 5])))

def my_map(func, *args):

res =

for i in zip(*args):

return res

def my_map2(func, *args):

return [func(*i) for i in zip(*args)]

# 使用生成器

def my_map3(func, *args):

res =

for i in zip(*args):

yield func(*i)

def my_map4(func, *args):

return (func(*i) for i in zip(*args))

print('my_map:')

print(my_map(abs, [-2, -1, 0, 1, 2]))

print(my_map2(abs, [-2, -1, 0, 1, 2]))

# 包含到 乙個list中呼叫,強迫一次生成所有的值

print('生成器方式:')

print(list(my_map3(abs, [-2, -1, 0, 1, 2])))

print(list(my_map4(abs, [-2, -1, 0, 1, 2])))

輸出:

[('a', 'x'), ('b', 'y'), ('c', 'z')]

[2, 1, 0, 1, 2]

[1, 8, 81]

my_map:

[2, 1, 0, 1, 2]

[2, 1, 0, 1, 2]

生成器方式:

[2, 1, 0, 1, 2]

[2, 1, 0, 1, 2]

*args是可變引數,args接收的是乙個tuple;

呼叫函式時如何傳入可變引數語法:

可變引數既可以直接傳入:func(1, 2, 3),又可以先組裝list或tuple,再通過*args傳入:func(*(1, 2, 3))

關鍵字:

使用兩個星號,如:**kw是關鍵字引數,kw接收的是乙個dict。

關鍵字引數既可以直接傳入:func(a=1, b=2),又可以先組裝dict,再通過**kw傳入:func(**)

生成器 PHP的生成器yield 原創

在php 5.5中,php多了乙個新的特性,那就是生成器 generator 生成器提供了一種更簡單的方法來實現簡單的物件迭代。下面的manual的引用 生成器提供了一種更容易的方法來實現簡單的物件迭代,相比較定義類實現 iterator 介面的方式,效能開銷和複雜性大大降低。生成器允許你在 for...

生成器實現range功能

range 引數 i,引數 j,引數 z 引數 i是起始位置,引數 j是結束位置,引數 z是在引數1和引數2範圍內的遞增量。如下 def generator i 0,j 0,z 1 range功能的實現 while i 1 遞增時 yield i yield 只保留 當前 數值 i i z pass...

生成器模式 Builder C 實現

意圖 將乙個複雜物件的建立與它的表示分離,使得同樣的構建過程可以建立不同的表示。適用性 1.當建立複雜物件的演算法應該獨立於該物件的組成部分以及它們的裝配方式時。2.當構建過程必須允許被構建的物件有不同的表示時。效果 1.使得可以改變乙個產品的內部表示。2.隱藏產品的內部結構。3.使得構造 和表示 ...