ITS·黑客

Python学习笔记(六)map,reduce

2017-04-09  本文已影响0人  木凛

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]))

上一篇 下一篇

猜你喜欢

热点阅读