Python 重构 map() 函数
本帖最后由 zltzlt 于 2020-3-28 13:06 编辑Python 重构 map() 函数
要求
实现 map() 函数
禁止使用 BIF map()
例子
>>> def factorial(num):
if num == 1:
return 1
else:
return num * factorial(num-1)
>>> factorial(3)
6
>>> factorial(4)
24
>>> map(factorial, )
<map object at 0x000001A1735AEB80>
>>> list(map(factorial, ))
>>> tuple(map(factorial, ))
(1, 2, 6, 24, 120, 720, 5040, 40320)
>>> for i in map(factorial, ):
print(i)
1
2
6
24
120
720
5040
40320
>>> map(lambda x : x ** 3, )
<map object at 0x000001A1735AEAF0>
>>> tuple(map(lambda x : x ** 3, ))
(0, 1, 8, 27, 64, 125, 216, 343, 512, 729)
>>> map(list, zip(, ))
<map object at 0x000001A1735AEAF0>
>>> list((1, 2, 3))
>>> tuple(map(list, zip(, ))) # 将元组里面的元组转为列表
(, , )
>>> tuple(zip(, ))
((1, 4), (2, 5), (3, 6))
NOW,IT'S YOUR SHOWTIME ! {:10_256:} 本帖最后由 qiuyouzhi 于 2020-3-27 21:33 编辑
def map(func, iterators):
for each in iterators:
temp = func(each)
yield temp
写好啦{:10_327:} 本帖最后由 永恒的蓝色梦想 于 2020-3-27 21:35 编辑
class map:
def __init__(self,func,/,*iterables):
if iterables:
self.__func=func
self.__iterators=tuple((iter(i) for i in iterables))
else:
raise TypeError("map() must have at least two arguments.")
def __reduce__(self):
return self.__class__,self.__iterators
def __iter__(self):
return self
def __next__(self):
return self.__func(*) 本帖最后由 永恒的蓝色梦想 于 2020-3-27 22:02 编辑
一次性把后面的也做了{:10_256:}None 永恒的蓝色梦想 发表于 2020-3-27 21:30
用函数不好吗?
qiuyouzhi 发表于 2020-3-27 21:23
写好啦
出错啦{:10_327:}>>> def myMap(func, *iterators):
for each in iterators:
temp = func(each)
yield temp
>>> myMap(float,range(5),range(5,11))
<generator object myMap at 0x000001CF33FAB660>
>>> list(_)
Traceback (most recent call last):
File "<pyshell#6>", line 1, in <module>
list(_)
File "<pyshell#4>", line 3, in myMap
temp = func(each)
TypeError: float() argument must be a string or a number, not 'range' 本帖最后由 匿名 于 2020-3-28 08:05 编辑
qiuyouzhi 发表于 2020-3-27 21:23
写好啦
解答错误
输入:print(list(map(factorial, )))
输出:TypeError: unsupported operand type(s) for -: 'list' and 'int'
预期输出: qiuyouzhi 发表于 2020-3-27 21:33
用函数不好吗?
不喜欢while True 永恒的蓝色梦想 发表于 2020-3-27 21:33
出错啦
你手真快。。。
我刚改完,你就搞错。。
现在没问题了 永恒的蓝色梦想 发表于 2020-3-27 21:37
不喜欢while True
也没用到while True鸭 本帖最后由 永恒的蓝色梦想 于 2020-3-27 21:43 编辑
qiuyouzhi 发表于 2020-3-27 21:38
你手真快。。。
我刚改完,你就搞错。。
现在没问题了
出错啦{:10_327:}>>> from operator import add
>>> def map(func, iterators):
for each in iterators:
temp = func(each)
yield temp
>>> map(add,range(5),range(5))
Traceback (most recent call last):
File "<pyshell#2>", line 1, in <module>
map(add,range(5),range(5))
TypeError: map() takes 2 positional arguments but 3 were given 永恒的蓝色梦想 发表于 2020-3-27 21:41
出错啦
说好的只给一个参数呢?
def myMap(func, iterators):
for each in list(iterators):
temp = func(each)
yield temp 本帖最后由 匿名 于 2020-3-28 08:05 编辑
qiuyouzhi 发表于 2020-3-27 21:45
说好的只给一个参数呢?
没说一个呀 一个账号 发表于 2020-3-27 21:46
没说一个呀
...
行,我改 qiuyouzhi 发表于 2020-3-27 21:45
说好的只给一个参数呢?
没听说 永恒的蓝色梦想 发表于 2020-3-27 21:53
没听说
。。。
你用内置的map试试你写的能不能运行 qiuyouzhi 发表于 2020-3-27 21:53
。。。
你用内置的map试试你写的能不能运行
怎么个意思? qiuyouzhi 发表于 2020-3-27 21:53
。。。
你用内置的map试试你写的能不能运行
测着没问题{:10_327:} def map(func, *iterables):
for i in zip(*iterables):
yield func(*i) 永恒的蓝色梦想 发表于 2020-3-27 21:37
不喜欢while True
应该用 while 1 {:10_256:}
页:
[1]
2