1. 程式人生 > >python3 lambda表示式、三元運算子、迭代、閉包等高階用法

python3 lambda表示式、三元運算子、迭代、閉包等高階用法

lambda表示式基本用法:

z = lambda x, y : x + y
a = z(1, 2)
b = z("x", "y")
print(a)
print(type(a))
print(b)
print(type(b))

執行結果:

3
<class 'int'>
xy
<class 'str'>

三元運算子基本用法:

x = "asd" if 0 else "dsa"
y = "asd" if 1 else "dsa"
print(x)
print(y)

執行結果:

dsa
asd

迭代基本用法:

x = "abcd"

def xxx():
    for i in x:
        yield i

[print(i, end=" ") for i in xxx()]

執行結果:

a b c d 

閉包的基本用法:

x = [1, 2, 3, 4, 5, 6, 7]

def aaa(x):
    def bbb():
        y = 0
        for i in x:
            y += i
        return y
    return bbb
print(aaa(x)())
b_1 = aaa(x)
b_2 = aaa(x)
print(b_1==b_2)
c_1 = aaa(x)()
c_2 = aaa(x)()
print(c_1==c_2)
print()

def bbb(x):
    y = []
    for i in x:
        def aaa():
            return i ** 2
        y.append(aaa)
    return y
print([i() for i in bbb(x)])
print()

def ccc(x):
    def aaa(x):
        def bbb():
            return x ** 2
        return bbb
    y = []
    [y.append(aaa(i)) for i in x]
    return y
print([i() for i in ccc(x)])

執行結果:

28
False
True

[49, 49, 49, 49, 49, 49, 49]

[1, 4, 9, 16, 25, 36, 49]

map(), reduce(), filter() 的基本用法:

x = [1, 2, 3, 4, 5, 6, 7]

def aaa(a):
    return a * a
print(list(map(aaa, x)))            # 每次執行aaa(x[i]),生成迭代返回。

import functools
def bbb(b_1, b_2):
    return b_1 + b_2
print(functools.reduce(bbb, x))     # 執行bbb(bbb(bbb(x[0], x[1]), x[2]), x[3])……,直到x[-1],返回結果。

def ccc(c):
    return c % 2 == 1
print(list(filter(ccc, x)))         # 判斷是否為True,如果為True,生成迭代返回。

執行結果:

[1, 4, 9, 16, 25, 36, 49]
28
[1, 3, 5, 7]