web服务器

函数

2018-11-28  本文已影响173人  GHope

高阶函数
filter(过滤) --> map(映射) --> functools.reduce(规约)
生成式、推导式(一定程度上对高阶函数的替代)
[x ** x for x in l if x % 2]

函数参数:

  1. 位置参数
  2. 可变参数 - tuple
  3. 关键字参数 - dict
  4. 命名关键字参数

在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]
上一篇下一篇

猜你喜欢

热点阅读