1)函数本身也可以赋值给变量,即:变量可以指向函数。
1.1)注:由于abs函数实际上是定义在import builtins模块中的,所以要让修改abs变量的指向在其它模块也生效,要用import builtins; builtins.abs = 10。
2)map()传入的第一个参数是f,即函数对象本身。由于结果r是一个Iterator,Iterator是惰性序列,因此通过list()函数让它把整个序列都计算出来并返回一个list。
>>>list(map(str,[1, 2, 3, 4, 5, 6, 7, 8, 9]))
['1', '2', '3', '4', '5', '6', '7', '8', '9']
3)reduce把一个函数作用在一个序列[x1, x2, x3, ...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算,其效果就是:
reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
4)因为capitalize会自动将首字母大写,余下的字母全部变成小写字母
一、字符串转为数字
from functools import reduce
def str2int(s):
def fn(x, y):
return x * 10 + y
def char2num(s):
return {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}[s]
return reduce(fn, map(char2num, s))
二、浮点数字符串转化为数字
>>> s = '123.456'
>>> s
'123.456'
# 然后记录小数点以后数字字符的个数
>>> n = len(s.split('.')[1])
>>> n
3
# 去掉字符串中的小数点
>>> string = s.replace('.', '')
>>> string
'123456'
# 转换为整数
>>> integer = str2int(string)
>>> integer
123456
# 最后将integer除以pow(10, n)即可
>>> integer / pow(10, n)
123.456
因此写出的str2float将更加简短
def str2float(s):
return str2int(s.replace('.', '')) / pow(10, len(s.split('.')[1]))