在坚持的初期,坚持本身比坚持的事情更重要。 也许,生活的意义并不在于实现了怎样伟大的梦想,而是在于自己全身心地投入,让每一天都成为梦想的一部分。 只要是能确定带给自己价值感的事情,去做就好。 时间在流逝,每一天,都值得认真对待。
高阶函数指的是能接收一个或多个函数作为参数的函数,python中有一些内置的高阶函数,在某些场合使用可以提高代码的效率。
返回一个将 function 应用于 iterable 中每一项并输出其结果的迭代器。 如果传入了额外的 iterable 参数,function 必须接受相同个数的实参并被应用于从所有可迭代对象中并行获取的项。
y, m, d = map(int, input().split('/')) print(y, m, d) print(type(y), type(m), type(d)) 输入:2020/9/3 结果如下: 2020 9 3 <class 'int'> <class 'int'> <class 'int'> import math # 对数据做映射 print(list(map(lambda x: 2 ** x + 1, [1, 3, 5, 7]))) print(list(map(lambda y: math.log10(y), [10, 100, 1000, 10000]))) print(list(map(lambda x, y: x ** 2 + y, [1, 2, 3, 4, 5], [1, 2, 3, 4, 5]))) 运行结果如下: [3, 9, 33, 129] [1.0, 2.0, 3.0, 4.0] [2, 6, 12, 20, 30] 再举个简单例子,假设用户输入的英文名字不规范,没有按照首字母大写,后续字母小写的规则 利用map()函数,把一个list(包含若干不规范的英文名字)变成一个包含规范英文名字的list。 输入:['bob', 'LISA', 'barT', 'faker'] 输出:['Bob', 'Lisa', 'Bart', 'Faker'] def trans(s): s = s[0].upper() + s[1:].lower() # 首字母大写 后续字母小写 return s print(list(map(trans, ['bob', 'LISA', 'barT', 'faker']))) print(list(map(lambda x: x[0].upper() + x[1:].lower(), ['bob', 'LISA', 'barT', 'faker']))) 运行结果如下: ['Bob', 'Lisa', 'Bart', 'Faker'] ['Bob', 'Lisa', 'Bart', 'Faker']filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回一个迭代器对象,如果要转换为列表,可以使用 list() 来转换。 接收的两个参数中,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判断,然后返回 True 或 False,最后将返回 True 的元素放到迭代器中。如果 function 是 None ,则会假设它是一个身份函数,即 iterable 中所有返回假的元素会被移除。
lis = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] print(list(filter(lambda x: x % 2, lis))) # 符合条件 得到奇数 print(list(filter(lambda y: y % 2 == 0, lis))) # 得到偶数 运行结果如下: [1, 3, 5, 7, 9] [2, 4, 6, 8, 10] # 如果 function 是None,则会假设它是一个身份函数,即 iterable 中所有返回假的元素会被移除。 s = [1, 2, '', [], {}, (), '123'] print(list(filter(None, s))) 运行结果如下: [1, 2, '123'] # 利用filter函数筛选出水仙花数 # 水仙花数是指一个3位数,它的每个位上的数字的3次幂之和等于它本身(例如:1^3 + 5^3 + 3^3 = 153) lis = [i for i in range(100, 1001)] # 三位数 # 输出水仙花数 print(list(filter(lambda x: x == sum([int(i) ** 3 for i in str(x)]), lis))) 运行结果如下: [153, 370, 371, 407] """ @Author :叶庭云 @Date :2020/9/12 15:01 @ :https://blog.csdn.net/fyfugoyfa """ # filter的应用案例-埃氏筛法求素数 def odd_sequence(): # 构造从3开始的奇数序列 n = 1 while True: n = n + 2 yield n def prime_filter(prime_num): # 筛选素数的函数 return lambda x: x % prime_num > 0 def primes(): yield 2 # 先返回第一个素数2,然后利用filter()函数不断产生筛选后的新序列 nums = odd_sequence() while True: prime_num = next(nums) # 取出序列第一个数 yield prime_num # 返回序列第一个数 nums = filter(prime_filter(prime_num), nums) # 得到新序列 def main(): for n in primes(): if n < 100000: print(n) else: break if __name__ == '__main__': main()reduce把一个函数作用在一个序列[x1, x2, x3, …]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算。返回的是一个计算的最终结果。
from functools import reduce s = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] # 做累积计算 print(reduce(lambda x,y: x + y, s)) print(reduce(lambda x,y: 10 * x + y, s)) print(reduce(lambda x,y: str(x) + str(y), s)) 运行结果如下: 45 123456789 0123456789作者:叶庭云 :https://blog.csdn.net/fyfugoyfa 本文仅用于交流学习,未经作者允许,禁止转载,更勿做其他用途,违者必究。 文章对你有所帮助的话,欢迎给个赞或者 star 呀,你的支持是对作者最大的鼓励,不足之处可以在评论区多多指正,交流学习呀。