函数
2018-11-28 本文已影响173人
GHope
高阶函数
filter(过滤) --> map(映射) --> functools.reduce(规约)
生成式、推导式(一定程度上对高阶函数的替代)
[x ** x for x in l if x % 2]
函数参数:
- 位置参数
- 可变参数 - tuple
- 关键字参数 - dict
- 命名关键字参数
在Python中函数是一等对象(公民):
1、函数可以赋值给变量
2、函数可以作为函数的参数 ---> filter / map
3、函数可以作为函数的返回值 ---> 装饰器
编程范式(理念):
指令编程(汇编语言)/ 过程式编程(C语言)
Python即支持面向对象编程又支持函数式编程
一行代码求阶乘(1-5)
# 高阶函数
reduce(int.__mul__, range(1,6))
# 定义求n的求阶乘函数
fn = lambda n: reduce(int.__mul__, range(1, n + 1))
heapq(求最大或最小的几个)
list1 = [2,3,4,5,6,7,8]
# 最大的3个
heapq.nlargest(3,list1)
# 最小的3个
heapq.nsmallest(3,list1)
dict2 = [{'name':'Hope', 'age':18},{'name':'Lucy', 'age':16},{'name':'Tom', 'age':22}]
itertools(排列 / 组合 / 笛卡尔积)
def main():
for val in itertools.permutations('ABCD'):
print(val)
print('-' * 50)
for val in itertools.combinations('ABCDE', 3):
print(val)
print('-' * 50)
for val in itertools.product('ABCD', '123'):
print(val)
if __name__ == '__main__':
main()
collections模块下的工具类
"""
找出序列中出现次数最多的元素
"""
from collections import Counter
def main():
words = [
'look', 'into', 'my', 'eyes', 'look', 'into', 'my', 'eyes',
'the', 'eyes', 'the', 'eyes', 'the', 'eyes', 'not', 'around',
'the', 'eyes', "don't", 'look', 'around', 'the', 'eyes',
'look', 'into', 'my', 'eyes', "you're", 'under'
]
counter = Counter(words)
print(counter.most_common(3))
if __name__ == '__main__':
main()
穷举法、贪婪法、分治法、动态规划
"""
穷举法 - 穷尽所有可能直到找到正确答案
"""
def main():
# 公鸡5元一只 母鸡3元一只 小鸡1元三只
# 用100元买100只鸡 问公鸡/母鸡/小鸡各多少只
for x in range(20):
for y in range(33):
z = 100 - x - y
if 5 * x + 3 * y + z // 3 == 100 and z % 3 == 0:
print(x, y, z)
# A、B、C、D、E五人在某天夜里合伙捕鱼 最后疲惫不堪各自睡觉
# 第二天A第一个醒来 他将鱼分为5份 扔掉多余的1条 拿走自己的一份
# B第二个醒来 也将鱼分为5份 扔掉多余的1条 拿走自己的一份
# 然后C、D、E依次醒来也按同样的方式分鱼 问他们至少捕了多少条鱼
fish = 1
while True:
total = fish
enough = True
for _ in range(5):
if (total - 1) % 5 == 0:
total = (total - 1) // 5 * 4
else:
enough = False
break
if enough:
print(fish)
break
fish += 1
if __name__ == '__main__':
main()
def fib(num, temp={}):
"""用递归计算Fibonacci数(动态规划)"""
if num in (1, 2):
return 1
try:
return temp[num]
except KeyError:
temp[num] = fib(num - 1) + fib(num - 2)
return temp[num]