一 .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