Python自学笔记D4

第四天、函数式编程

在群里看见有几道python基础编程考试题,做起来还是挺困难,先记着,以后要多基于实际进行编程练习!

一、输出所有关键字,随机选其中五个进行大小写转换,最后将其转换成dict,value为它的长度!

import keyword
import random
from random import sample
print(len(keyword.kwlist))
L = keyword.kwlist#所有关键字
a = random.sample(L,5)#随机五个
print(a)
d = {}#字典创立
for x in a:
    print(x.upper())#变大写,小写为lower
for x in a:    
    d[x] = len(x)#字典建立
print(d)

二、写一个函数,完成多个dic的合并,如果key相同则value相加。后续使用map可以完成调用。

def zhuanhua(x,y)#第一种方法
for k, v in y.items():
     if k in x.keys():
         x[k] += v
     else:
         x[k] = v
#第二种方法

from collections import Counter
X,Y = Counter(x), Counter(y)
z = dict(X+Y)

接下来进入今天的正式学习——

高阶函数

一、定义

由于变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。

例子:

def add(x, y, f):
    return f(x) + f(y)
add(-5, 6, abs)

MAP

list(map(f,[‘1’,‘2’]))传入的第一个参数是f,即函数对象本身。由于结果r是一个Iterator,Iterator是惰性序列,因此通过list()函数让它把整个序列都计算出来并返回一个list。

map()作为高阶函数,事实上它把运算规则抽象了,并且在此
之上还可以计算任意复杂的函数,比如,把这个list所有数字转为字符串:
list(map(str, [1, 2, 3, 4, 5, 6, 7, 8, 9]))

例如将str转换成Int:

#reduce 原理:
#reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
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))

名字大小写设定:

def normalize(name):
    n = name
    return n[0].upper()+n[1:len(n)].lower()
#第二种方法
return name.capitalize()

求乘积

def prod(L):
    def mul(x,y):
        return x * y
    return reduce(mul,L)
    #第二种方法
return reduce(lambda x,y: x*y, L )

转换小数点字符串

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 s2num(s):
    def str2num(s):
        return DIGITS[s]
    def fn1(x, y):
        return x*10+y
    for i in range(len(s)):
        if s[i] == '.':
            d = i
    return(reduce(fn1, map(str2num, s[:d]))+reduce(fn1, map(str2num, s[d+1:]))*pow(10,-len(s[d+1:])))
print('s2num(\'123.456\') =',s2num('123.456'))
#第二种方法
return float(s.encode(‘utf-8))

不学了!看618去

猜你喜欢

转载自blog.csdn.net/qq_43517875/article/details/106807954
今日推荐