Python基础知识-Part8:函数式编程之高阶函数

定义:“能接受另一个函数作为参数的函数,称为高级函数”。

map&reduce

1、“map(function_name, Iterable_object)”,“map()”返回的是一个“Iterator”对象,而这个“Iterator”对象所做的运算,由传入的“function_name”所指向的函数决定。

2、“reduce(function_name, Iterable_object)”,“reduce()”返回的是一个经过“function_name”所指函数运算的“value”。

from functools import reduce


def normalize(str_name):
    return str_name[0].upper() + str_name[1:].lower()


list_name1 = ['adam', 'LISA', 'barT']
list_name2 = list(map(normalize, list_name1))
print(list_name2)
print()


def prod_operation(x, y):
    return x * y


def prod(list_name):
    return reduce(prod_operation, list_name)


print(prod([3, 5, 7, 9]))
print()


def StringToFloat(str_name):
    def function_integer(x, y):
        return x * 10 + y

    def function_float(x, y):
        return 0.1 * x + y

    def CharacterToNumber(char_name):
        return int(char_name)

    float1 = reduce(
        function_integer, map(
            CharacterToNumber, str_name[:str_name.find('.')]))
    float2 = 0.1 * reduce(
        function_float, map(
            CharacterToNumber, str_name[:str_name.find('.'):-1]))
    return float1 + float2


str_name = '123.456'
float_name = StringToFloat(str_name)
print(float_name)
print(type(float_name))

 

filter

1、“filter”和“map”相类似,都是对一个“list”中的所有元素做“function”的运算,但是“filter”会根据“function”的返回值去决定留下或者删去元素,也就是“过滤”。

2、“bool(None)”的结果是“False”,所以在下面第二个例子中,除了“A”、“b”、“C”之外的所有元素才会删除。

def is_odd(number):
    return number % 2 == 1


def not_empty(str_name):
    return str_name and str_name.strip()


print(list(filter(is_odd, [1, 2, 3, 4, 5, 6, 7, 8, 9])))
print(list(filter(not_empty, ['A', ' ', 'b', None, 'C', ''])))

def _odd_iter():
    n = 1

    while True:
        n += 2
        yield n


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


def primes():
    yield 2

    it = _odd_iter()

    while True:
        n = next(it)
        yield n
        it = filter(_not_divisible(n), it)


for n in primes():
    if n < 1000:
        print(n)
    else:
        break

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


output = filter(is_palindrome, range(1, 1000))
print('1~1000:', list(output))

 

sorted

1、“sorted”是排序,可以快速对“list”里的元素进行排序。但是“list”的元素必须类型相近,否则会出现无法排序。比如浮点数和整数类型本质上都是数字,可以;字符串与字符串,可以;但是浮点数和字符串不可以。

2、作为高阶函数,“key=”就是做排序的依据函数的调用处。

list_name = [-11, -2, -3, 4, 1]

print(sorted(list_name))
print(sorted(list_name, key=abs))
print(sorted(list_name, reverse=True))
print(sorted(list_name, key=abs, reverse=True))

list_name1 = ['a', 'A', 'b', '1', 1, 0, 'OK', None, 0.5]
print(sorted(list_name1))

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值