第四天、函数式编程
在群里看见有几道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去