python初学过程的一些小练习题

# 习题1:

假设Python没有提供map()函数,请自行编写一个my_map()函数实现与map()相同的功能。

def my_map(my_fun,my_list):

l= []

for s in my_list:

l.append(my_fun(s))

return l

# 高手的代码就是简洁啊

def my_map2(my_fun,my_list = []):

return [my_fun(s) for s in my_list]

# 习题2:

Python提供的sum()函数可以接受一个list并求和,,请编写一个prod()函数,可以接受一个list并利用reduce()求积。

def my_reduce(my_list):

def multiplication(x,y):

return x * y

return reduce(multiplication,my_list)

print(my_reduce([1,2,3,4,5]))

# 习题3:

请编写一个decorator,能在函数调用的前后打印出’begin call’和’end call’的日志。

再思考一下能否写出一个@log的decorator。

使它既支持:@log

def f():

pass

又支持:@log(‘execute’)

def f():

pass

解1:

def log(func):

def wrapper(*args, **kw):

print ‘begin call %s():’ % func.__name__

func(*args, **kw)

print ‘end call %s():’ %func.__name__

return wrapper

@log

def now():

print ‘2013-12-25’

now()

解2:

#!/usr/bin/python

# -*- coding:utf-8 -*-

import functools

def log(text):

if isinstance(text,str):

def decorator(func):

@functools.wraps(func)

def wrapper(*args,**kw):

print ‘prog beginning…’

print ‘%s %s…’ %(text,func.__name__)

func(*args,**kw)

print ‘prog endding…’

return wrapper

return decorator

else:

@functools.wraps(text)

def wrapper(*args,**kw):

print ‘prog begging…’

text(*args,**kw)

print ‘prog endding…’

return wrapper

@log(‘execute’)

def now():

print ‘2013-12-25’

now()

print’================================================’

@log

def today():

print ‘2013-12-25’

today()

# 习题4:

如果一个类想被用于for … in循环,类似list或tuple那样,就必须实现一个__iter__()方法,该方法返回一个迭代对象,然后,Python的for循环就会不断调用该迭代对象的next()方法拿到循环的下一个值,直到遇到StopIteration错误时退出循环。我们以斐波那契数列为例,写一个Fib类,可以作用于for循环:

#!/usr/bin/env python

# -*- coding: utf-8 -*-

class Fib(object):

def __init__(self):

self.a, self.b = 0, 1 # 初始化两个计数器a,b

def __iter__(self):

return self # 实例本身就是迭代对象,故返回自己

def next(self):

self.a, self.b = self.b, self.a + self.b # 计算下一个值

if self.a > 100000: # 退出循环的条件

raise StopIteration();

return self.a # 返回下一个值

for n in Fib():

print n

不要惧怕黑暗,人间没有永恒的夜晚;不要担心严寒,

python初学过程的一些小练习题

相关文章:

你感兴趣的文章:

标签云: