美文网首页
函数式编程

函数式编程

作者: Modelstrategy | 来源:发表于2017-12-17 20:46 被阅读0次
# map()函数


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()函数,把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字。输入:['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(),我们就可以写出把str转换为int的函数:

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 改写

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

# Python提供的sum()函数可以接受一个list并求和,请编写一个prod()函数,可以接受一个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重写

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

# 使用filter() 结合 埃氏筛法 筛选素数


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)

# 回数


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()函数
# 按照绝对值排序
L3 = [5, 9, -12, -21, 36]
print('sorted L3: ', sorted(L3, key=abs))

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

# 对于字符排序默认依照ASCII码

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

# 假设我们用一组tuple表示学生名字和成绩:
# [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)]
# 请用sorted()对上述列表分别按名字排序:

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))

# 利用闭包返回一个计数器函数,每次调用它返回递增整数


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

相关文章

  • RxSwift初探(1)

    一、前提:函数响应式编程思想 简单来说 函数响应式编程 = 函数式编程 + 响应式编程 (1)函数式 函数式编程是...

  • iOS 函数编程 & 链式编程

    函数式(链式)编程 函数式编程概念 函数式编程是种编程范式 函数式编程 Functional Programmin...

  • 函数式编程(一)—— 前置知识

    为什么要学函数式编程? 什么是函数式编程?函数式编程和面向对象编程的不同对于函数式编程思维方式的理解: 函数式编程...

  • 二十二、函数式编程、面向协议式编程

    函数式编程(Functional Prigramming) 函数式编程 函数式编程(Functional Prig...

  • Python中的函数式编程

    函数式编程 说到函数式编程,我们的重点在于为什么要采用函数式编程,而不是什么是函数式编程。 函数式编程的优点:一、...

  • RxSwift-初探

    函数响应式编程 一:函数式 函数式编程简称FP(Functional Programming),函数式编程就是一种...

  • 《Kotlin入门实战》CH5 | 函数与函数式编程

    函数与函数式编程 函数式编程与命令式编程最大的不同是:函数式编程的焦点在于数据的映射,命令式编程(imperati...

  • 函数响应式编程思想 & RxSwift 核心逻辑(一)

    函数响应式编程思想 函数响应式编程思想即是将函数式编程和响应式编程相结合。 函数式编程 顾名思义,就是像函数一样的...

  • RxJava系列|RxJava简介(一)

    函数响应式编程 函数式编程是一种编程范式。 常见的编程范式有:命令式编程、函数式编程和逻辑式编程。 面向对象就是一...

  • 了解C# 函数式编程

    什么是函数式编程 函数式编程是一种编程范式,维基百科对函数式编程定义如下: 函数式编程(英语:functional...

网友评论

      本文标题:函数式编程

      本文链接:https://www.haomeiwen.com/subject/olduwxtx.html