Python学习笔记

好,2019年12月24日,圣诞节。今天开始开坑学Python了!~目标是Django后端框架
资料就看廖雪峰老师的blog了。后面会陆陆续续更新这篇文章。

1,map和reduce函数的问题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
    #map比较容易理解,迭代后面的元素,每个元素用前面的函数运算
    #reduce是把后面一个序列的前两个元素做函数运算,然后把结果再和后面的继续运算,reduce要import
    #reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4) 那reduce就是返回前面第一个参数返回的结果
    #下面这个例子把str转换为int
    from functools import reduce

    def fn(x,y):
        return x*10 + y

    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]

    reduce(fn,map(char2num,'13579')

    #简化的写法看下面
    #原文里面还有一个lambda函数,后面会看到,暂时不会
    from functools import reduce

    DIGITS = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}

    def str2int(s):
        def fn(x, y):
            return x * 10 + y
        def char2num(s):
            return DIGITS[s]
        return reduce(fn, map(char2num, s))

    #练习1:把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字
    def format(L):
    def cap(s):
        return s.capitalize()
    return map(cap,L)
    #测试OK  list(format(['adam', 'LISA', 'barT']))  输出['Adam', 'Lisa', 'Bart']

    #练习2:编写一个prod()函数,可以接受一个list并利用reduce()求积:
    #请编写一个prod()函数,可以接受一个list并利用reduce()求积:
    from functools import reduce
    def prod(L):
        def multi(a,b):
            return a*b
        return reduce(multi,L)
    #测试OK prod([2,3,4]),输出24

    #练习3:利用map和reduce编写一个str2float函数,把字符串'123.456'转换成浮点数123.456:

有一个问题就是python里面貌似是next()过了以后,下次调用就停在那个位置了。比如我s=map(char2num,’13579′)以后,第一次reduce(fn,s)是ok的,但是马上再来一次就会Traceback报错,以后再看。

发表评论

电子邮件地址不会被公开。 必填项已用*标注