0,设计一个函数zip(lista,listb,repl),输入两个列表和占位符,返回一个新的列表,列表里面的每一个元素是一个元组,元组的元素是对应同样顺序的在lista和listb中的元素,如果长度不相同,则用占位符来代替
例如:
zip([1,2,3],[4,5,6],"a")返回[(1,4),(2,5),(3,6)]
zip([1,2,3],[4],"b")返回[(1,4),(2,"b"),(3,"b")]
第一种:
def zip(lista,listb,repl):
llist=[]
if len(lista)>len(listb):
lmax,lmin=len(lista),len(listb)
for i in range(lmin):
llist.append((lista[i],listb[i]))
for i in range(lmin,lmax):
llist.append((lista[i],repl))
else:
lmax,lmin=len(listb),len(lista)
for i in range(lmin):
llist.append((lista[i],listb[i]))
for i in range(lmin,lmax):
llist.append((repl,listb[i]))
return llist
第二种:
def zipp(lista,listb,repl):
llist=zip(lista,listb)
la=len(lista)
lb=len(listb)
if la>lb:
for i in range(lb,la):
llist.append((lista[i],repl))
else:
for i in range(la,lb):
llist.append((repl,listb[i]))
return llist
la=[1,2,3]
lb=[4,5,6,7]
lc=["e",3]
print zipp(la,lb,"z")
print zipp(la,lc,"d")
1,实现一个函数max,接受任意个整数的参数,返回其中的最大值
def max(*tupleArg):maxNum=tupleArg[0]
for k in tupleArg:
if k>maxNum:
maxNum=k
return maxNum
list=[1,3,-53,12,20]
print max(*list)
2,实现一个带参数的装饰器@callfunction(caller name),传入的参数是调用者的名字,在调用函数之前,先打印一句“”The caller is [caller name]” 的log
def deco(arg):
#第一层,arg变量为装饰器中的参数,
def _deco(func):
#第二层,传入函数相关参数func.__name__
def __deco(*args,**kwargs):
#第三层,传入函数的参数
print("before %s called." %func.__name__)
ret=func(*args,**kwargs)
print("after %s called.result is :%s" %(func.__name__,ret))
return ret
return __deco
return _deco
@deco("myfunc1")
def myfunc1(a,b):
print("myfunc1(%s,%s) called"%(a,b))
return a+b
@deco("myfunc2")
def myfunc2(a,b,c):
print("myfunc2(%s,%s,%s) called"%(a,b,c))
return a+b+c
myfunc1(1,3)
myfunc2(2,4,1)
3,实现一个装饰器@timeit,这个装饰器的作用是当函数执行完毕以后,打印出来具体使用的时间。
import time
def timeit(func):
def _timeit():
t_start=time.time()
func()
t_end=time.time()
print("call in %fs"%(t_end-t_start))
return func()
return _timeit
@timeit
def myfunc1():
print("myfunc1() is called")