python中oxf2是什么_文成小盆友python-num4 装饰器,内置函数

一 .python 内置函数补充chr() -- 返回所给参数对应的 ASCII 对应的字符,与ord()相反

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

# Author:wencheng.zhao

a = chr(65)

print(a)

b = chr(66)

print(b)

##输出如下:

A

B

Process finished with exit code 0

ord --返回所给的值在ASCII中对应的数字,与chr()作用相反

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

# Author:wencheng.zhao

a = ord("A")

b = ord("B")

print(a)

print(b)

##显示如下:

65

66

Process finished with exit code 0

ascii表对应如下:

ASCII:

应用如上两个内置函数编写一个自动生成验证码的小程序:

要求: 随机产生8为验证码

验证码包含数字和字母,代码实现如下

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

# Author:wencheng.zhao

import random

li = [] ##定义一个空列表用于存放结果

for i in range(8): #每次生成一个字母or数字,生成8次

r = random.randrange(0,8) ##当r为此范围内的数字时就让次位置上的验证码为纯数字

if r == 2 or r == 4: ##随便等于 等于的值越多 产生纯数字的可能行就也越大

num = random.randrange(0,10) ##num为0-9的任意随机数字

li.append(str(num)) ##将数字结果存如空列表中

else: ##如果没有为纯数字的情况

temp = random.randrange(65,91) ##根据ascii表可得 65 - 90 为应为字母

c = chr(temp) ##将得到的随机数字转换成对应的字母

li.append(c) ##将结果存放到最终列表里

result = " ".join(li) #将结果排列

print(result) #打印结果

###最终现实如下:

D 9 F 3 1 O X 4

Process finished with exit code 0

compile() 将source编译成代码或者对象,代码或者对象能够通过语句exec()执行或者通过eval()来求值

exec() 执行python的代码 -- 执行完毕后无返回值。

eval() 执行python表达式 --执行完毕后有返回值。对比如下:

code = "print(123)"

aa = compile(code,"","exec") ##编译

ss = exec(aa) # 执行

print(ss) #无返回值

num = "8*8"

bb = eval(num)

print(bb) #有返回值,返回值为计算结果

##现实结果如下:

123

None

64

Process finished with exit code 0

dir() --用来快速获取**所提供的功能

a = dir(list)

print(a)

##显示结果如下:

['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']

Process finished with exit code 0

help() --- 查看帮助 ,比较详细

###########基础平台提供的功能############

def w1(func):

def inner():

print("#验证1")

print("#验证2")

print("#验证3")

return func()

return inner

@w1

def f1():

print ("f1")

@w1

def f2():

print ("f2")

@w1

def f3():

print ("f3")

@w1

def f4():

print ("f4")

##其他业务部门调用不变

###业务部门A调用基础平台的功能###

f1()

f2()

f3()

f4()

##

print(" "*3)

###业务部门B调用基础平台的功能###

f1()

f2()

f3()

f4()

####################################

##执行结果如:

#验证1

#验证2

#验证3

f1

#验证1

#验证2

#验证3

f2

#验证1

#验证2

#验证3

f3

#验证1

#验证2

#验证3

f4

#验证1

#验证2

#验证3

f1

#验证1

#验证2

#验证3

f2

#验证1

#验证2

#验证3

f3

#验证1

#验证2

#验证3

f4

Process finished with exit code 0

解释器-解决代码

完美!!-- 对于第四总方法,也是仅仅对基础平台的代码进行了修改,就玩去能够实现其他部门在调用这些函数时都先进行验证,并且其他调用部门是完全不用修改任何代码。

对于详细的实现过程,和实现方法如下:单独以f1为例说明如下:

###########基础平台提供的功能############

def w1(func):

def inner():

print("#验证1")

print("#验证2")

print("#验证3")

func()

print("end")

return inner

@w1

def f1():

print ("f1")

@w1

def f2():

print ("f2")

@w1

def f3():

print ("f3")

@w1

def f4():

print ("f4")

##其他业务部门调用不变

###业务部门A调用基础平台的功能###

f1()

从这段代码的执行顺序看:

1.def w1(func): 将w1函数加载到内存中

2.@w1 --- python 中语法糖 具体会执行如下操作:

执行w1函数,并将@下面的函数的函数名作为w1函数的参数 ,相当于 w1(f1)

所以,内部就会去执行:

def inner:

#验证

return f1() # func是参数,此时 func 等于 f1

return inner # 返回的 inner,inner代表的是函数,非执行函数

其实就是将原来的 f1 函数塞进另外一个函数中

将执行完的w1函数返回值赋值给@w1下面的函数的函数名

w1函数的返回值是:

def inner:

#验证

return 原来f1() # 此处的 f1 表示原来的f1函数

然后,将此返回值再重新赋值给 f1,即:    新f1 = def inner:

#验证

return 原来f1()

所以,以后业务部门想要执行 f1 函数时,就会执行 新f1 函数,在 新f1 函数内部先执行验证,再执行原来的f1函数,然后将 原来f1 函数的返回值 返回给了业务调用者。

如此一来, 即执行了验证的功能,又执行了原来f1函数的内容,并将原f1函数返回值 返回给业务调用着

进阶:带参数的装饰器

1个参数:

def w1(func):

def inner(arg1):

print("#验证1")

print("#验证2")

print("#验证3")

func(arg1)

print("end")

return inner

@w1

def f1(arg1):

print ("f1","-->",arg1)

f1("这是一个参数的")

2个参数:

###########基础平台提供的功能############

def w1(func):

def inner(arg1,arg2):

print("#验证1")

print("#验证2")

print("#验证3")

func(arg1,arg2)

print("end")

return inner

@w1

def f1(arg1,arg2):

print ("f1","-->",arg1,arg2)

f1("这是一个参数的","增加了第二个参数")

3.三个参数的:

###########基础平台提供的功能############

def w1(func):

def inner(arg1,arg2,arg3):

print("#验证1")

print("#验证2")

print("#验证3")

func(arg1,arg2,arg3)

print("end")

return inner

@w1

def f1(arg1,arg2,arg3):

print ("f1","-->",arg1,arg2,arg3)

f1("这是一个参数的","增加了第二个参数","增加了第三个参数")

4.??n个参数??如何处理 --- “万能参数”装饰器

###########基础平台提供的功能############

def w1(func):

def inner(*args,**kwargs):

print("#验证1")

print("#验证2")

print("#验证3")

func(*args,**kwargs)

print("end")

return inner

@w1

def f1(*args,**kwargs):

print ("f1","-->",args)

print(kwargs)

f1("一个参数的","二个参数","第三个参数","....","n个参数的",key="value")

####输出如下

#验证1

#验证2

#验证3

f1 --> ('一个参数的', '二个参数', '第三个参数', '....', 'n个参数的')

{'key': 'value'}

end

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值