python函数调整价格_python 装饰器修改调整函数参数

简单记录一下利用python装饰器来调整函数的方法。现在有个需求:参数line范围为1-16,要求把9-16的范围转化为1-8,即9对应1,10对应2,...,16对应8。

下面是例子:

1 defformat_lines():2 defmake_wrapper(func):3 def wrapper(*args, **kwargs):4 lines = list(args)[1:]5 new_args =list()6 for index, line inenumerate(lines):7 ifisinstance(line,tuple):8 for index, l inenumerate(line):9 if line > 8 and line <16:10 line = line % 8

11 elif line == 16:12 line = 8

13 new_args.insert(index,line)14 new_args.insert(0,args[0])15 return func(*tuple(new_args), **kwargs)16 else:17 if line > 8 and line <16:18 line = line % 8

19 elif line == 16:20 line = 8

21 new_args.insert(index,line)22 new_args.insert(0,args[0])23 return func(*tuple(new_args), **kwargs)24 returnwrapper25 return make_wrapper

注意:wrapper的参数args即实际的lines,修改完后,传递给实际的func函数即可

使用:

class MainCom_Usb_Cmd():

"""atc platform hardware usb cmd

"""

def __init__(self,ip,port):

self.address = (ip, int(port))

@format_lines()

def turn_on_usb_signal(self,*lines):

"""only turn on usb signal

"""

if not lines :

lines = range(1,9)

while True:

try:

self.client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

self.client.connect(self.address)

break

except Exception, e:

time.sleep(0.1)

continue

try:

is_succeed = True

self.close_usb(lines,is_connect=True)

for line in lines:

retry_count = 0

while retry_count < 3:

self.client.send(‘SwitchToUSB:::&%d&&&&\n\r‘ % line)

time.sleep(.2)

data = self.client.recv(1024)

if len(data)>0:

print data

pattern = re.compile(r"CH%d\s+USB\s+sig\s+connect\s+to\s+PCUSB" % line)

match = pattern.search(data)

if match is None:

retry_count = retry_count + 1

else:

break

if retry_count >= 3:

is_succeed = False

except:

traceback.print_exc()

finally:

self.client.close()

return is_succeed

@format_lines()

def turn_on_usb_power(self,*lines):

"""only turn on usb power for fastly charging device

"""

if not lines:

lines = range(1,9)

while True:

try:

self.client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

self.client.connect(self.address)

break

except Exception, e:

time.sleep(0.1)

continue

try:

is_succeed = True

self.close_usb(lines,is_connect=True)

for line in lines:

retry_count = 0

while retry_count < 3:

self.client.send(‘SwitchToDUT5V:::&%d&&&&\n\r‘ % line)

time.sleep(.2)

data = self.client.recv(1024)

if len(data)>0:

print data

pattern = re.compile(r"CH%d\s+USB\s+POWER\s+connect" % line)

match = pattern.search(data)

if match is None:

retry_count = retry_count + 1

else:

break

if retry_count >= 3:

is_succeed = False

except:

traceback.print_exc()

finally:

self.client.close()

return is_succeed

原文:http://www.cnblogs.com/linyihai/p/6239104.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值