函數(shù)式編程

# map()函數(shù)


def power(x):
    return x * x


r = map(power, [i for i in range(10) if i % 2 == 2 ])

print(list(r))

for i in r:
    print(i)

# 利用map()函數(shù),把用戶輸入的不規(guī)范的英文名字,變?yōu)槭鬃帜复髮?xiě),其他小寫(xiě)的規(guī)范名字。輸入:['adam', 'LISA', 'barT'],輸出:['Adam', 'Lisa', 'Bart']:

L = ['adam', 'LISA', 'barT']


def str_correct(str):

    new_str = str.lower().title()


    return new_str

print(str_correct('barT'))

new_str_list = map(str_correct, L)
for i in new_str_list:
    print(i)


# 配合map(),我們就可以寫(xiě)出把str轉(zhuǎn)換為int的函數(shù):

from functools import reduce


def func(a, b):
    return a * 10 + b

def char2num(s):
    digits = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}
    return digits[s]


result = reduce(func, map(char2num, '23131'))
print('result: ', result)

# 用lambda 改寫(xiě)

result_2 = reduce(lambda x, y: 10 * x + y, map(char2num, '23131'))
print('result_2: ', result_2)

# Python提供的sum()函數(shù)可以接受一個(gè)list并求和,請(qǐng)編寫(xiě)一個(gè)prod()函數(shù),可以接受一個(gè)list并利用reduce()求積:

L = [1, 2, 3, 4, 5, 6, 7, 8]
L2 = [3, 5, 7, 9]


def prod(a, b):
    return a * b


result_3 = reduce(prod, L)
print('result_3: ', result_3)

# 用lambda重寫(xiě)

result_4 = reduce(lambda a, b: a * b, L)
print('result_4: ', result_4)

# 使用filter() 結(jié)合 埃氏篩法 篩選素?cái)?shù)


def odd_list():
    n = 1
    while True:
        n = n + 2
        yield n


def if_divisible(n):
    return lambda x: x % n > 0


def prime():
    yield 2
    it = odd_list()
    while True:
        n = next(it)
        yield n
        it = filter(if_divisible(n), it)

# 回?cái)?shù)


def is_palindrome(n):
    s = str(n)
    return s == s[::-1]


result_5 = filter(is_palindrome, range(1, 1000))
for i in result_5:
    print(i)

# sorted()函數(shù)
# 按照絕對(duì)值排序
L3 = [5, 9, -12, -21, 36]
print('sorted L3: ', sorted(L3, key=abs))

# 使用lambda按照平方值排序
print('sorted L3: ', sorted(L3, key=lambda x: x * x))

# 對(duì)于字符排序默認(rèn)依照ASCII碼

L5 = ['Credit', 'Zoo', 'about', 'bob']
print("sorted string list: ", sorted(L5, key=str.lower))

# 假設(shè)我們用一組tuple表示學(xué)生名字和成績(jī):
# [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)]
# 請(qǐng)用sorted()對(duì)上述列表分別按名字排序:

L6 = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)]


def by_name(l):
    for i in l:
        return i[0]


print(sorted(L6, key=by_name))

# 利用閉包返回一個(gè)計(jì)數(shù)器函數(shù),每次調(diào)用它返回遞增整數(shù)


def create_counter():
    s = [0]  # !!!

    def counter():
        s[0] = s[0] + 1  # !!!
        return s[0]

    return counter


counter = create_counter()

print(counter())
print(counter())
print(counter())

# !!!


def list_test():
    L = [0]
    L[0] = L[0] + 1
    return L


for i in range(10):
    print(list_test())
# 輸出
1
2
3
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容