Python中的包装函数

时间:2018-07-19 06:33:12

标签: python wrapper

#***This code uses wrapper function to print the phone number in a
standard format with country code (if not supplied in the input)***

def ori_func(a):
    mm=[]
    def wraap(*args):
        for k in args:
            for i in k:
                #print(i)
                if len(str(i))==10:
                    mm.append("+91"+str(i))
                elif str(i)[0]=="0" and len(str(i))==11:
                    mm.append("+91"+str(i)[1:])
            #elif len(str(i))==12 and i[0]=="+":
            #    mm.append(i)
                elif len(str(i)) == 12:
                    mm.append("+"+str(i))
                #print (mm)
        return a(mm)
    return wraap

@ori_func
def srt_phone(mm):
    #sorted(int(mm))
    for j in sorted(mm):
        cc=str(j)[:3]
        mmn1=str(j)[3:8]
        mmn2=str(j)[8:]
        print (cc+" "+mmn1+" "+mmn2)

m=[1234567891, 912345678923, +919876543219,"07418529637"]
srt_phone(m)

据我所知,此代码可以正常工作。但是,我需要您浏览我的代码,并让我知道我对Wrapper函数的了解水平是正确的

  1. 当我将列表传递给包装函数时,是否需要像我一样在包装函数中真正使用2个“ For”循环?还有其他办法吗?
  2. 当我们要求获取电话号码以INT格式输入时,如何处理以0开头的输入?

谢谢

1 个答案:

答案 0 :(得分:0)

  1. 是的。还有其他方法,但是那很干净。
  2. 您不能,我建议不要将电话号码视为数字,因为它们不是实数。实数不能以+或0开头。

您的代码对我来说很好;我做了一些不同的事情,但这只是个人喜好。我确实建议您考虑在内部函数中使用@functools.wraps(a)