python编程练习1

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值