欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

内置函数 和 装饰器

程序员文章站 2022-07-07 21:06:56
内置函数 Python里面自带的函数 详细说明参考python官网:https://docs.python.org/3/library/functions.html#next 利用chr()的随机验证码实例: #随机验证码:(单字母版本) import random #random功能 li = [ ......

内置函数

Python里面自带的函数

内置函数 和 装饰器

详细说明参考python官网:

abs(-1)            #取绝对值
all(1,2,5,0)       #当前全部为真时,才返回真(即一假全假)
any(0,1,[])        #当前只要有一个为真,就返回真(即一真全真)
type('123')        #返回数据类型
bin()              #10进制转换成2进制
oct()              #10进制转换成8进制
hex()              #10进制转换成16进制
chr()              #内部是ascii码序号,使用该函数转化ascii中的值,随机验证码要用到这个内置函数
ord()              #和chr()相反,把ascii码里面的值转化成对应的序号
==================================================================================
compile()          #将字符串编译成python代码
exec()             #执行python代码,接收代码或者字符串,无返回值
eval()             #执行python表达式,有返回值,专门做表达式运算 eval("8*8")
==================================================================================
dict()             #生成字典
dir()              #快速查看对象提供的方法功能
divmod()           #提供一种计算出商和余数的方法,返回一个元组(商,余数),用来做分页
isinstance()       #用于判断,对象是否是某个类的实例    isinstance(s,list)
globals()          #所有全局变量
locals()           #所有局部变量
hash()             #转换成hash值
len()              #python3中字符长度,python2中字节长度
                   #python3如果需要字节长度,用bytes转换一下即可
max()              #求最大值
min()              #求最小值
sum()              #求和
memoryview()       #和内存地址相关

object() #所有类的父类 pow() #求指数 2**10 #2的10次方 pow(2,10) #同理 reverse() #翻转 round() #4舍5入 slice() #提供切片功能 sorted() #排序 zip() #融合

利用chr()的随机验证码实例:

内置函数 和 装饰器
#随机验证码:(单字母版本)

import random    #random功能

li = []
for i in range(6):
    temp = random.randrange(65,91)        #ascii中的A-Z是65-90,因此定义范围65<= temp <91
    c = chr(temp)                        #将生成的数字转换成字符
    li.append(c)                        #一个一个加入到空列表li中

result = "".join(li)                    #通过join将列表li中的字符连接起来
print(result)
#实验run:随机输出PNUOUX    

#====================================================

#随机验证码:(部分位置为数字版本)

import random

li = []
for i in range(6):
    if i == 2 or i == 4:                #第2和4次循环的时候就选择数字,即第3和5位置的验证码是数字
        num = random.randrange(0,10)    #选择ascii中的代表数字0-9,因此定义范围0<= num <10    
        li.append(str(num))                #由于数字不能直接通过join()处理,因此需要str()转换成字符串
    else:
        temp = random.randrange(65,91)
        c = chr(temp)                
        li.append(c)

result = "".join(li)
print(result)
#实验run:随机输出VH1M9B

#====================================================

#随机验证码:(终极版本:每个位置都随机出现数字或者字符)

import random

li = []
for i in range(6):
    r = random.randrange(0,5)            #进入for循环的时候就做一个random.randrange取随机值
    if r == 2 or r == 4:                #然后针对这个随机值再进行一次判断
        num = random.randrange(0,10)    
        li.append(str(num))                
    else:
        temp = random.randrange(65,91)
        c = chr(temp)                
        li.append(c)

result = "".join(li)
print(result)
#实验run:随机输出W948WO
chr()随机验证码实例

 

filter() 和 map()

filter() 循环第二个位置的可迭代对象,让每个循环元素执行第一个位置的函数,如果函数返回值为True,表示元素合法,如果返回值为False,则进行过滤

def f2(a):
    if a > 22:
        return True

li = [11,22,33,44,55]

ret = filter(f2,li) #让每一个li的值去执行f2函数
print(list(ret))
#[33, 44, 55]

#=============================================

#filter结合lambda表达式实现相同功能
li = [11,22,33,44,55]
result = filter(lambda a: a > 22 ,li)
print(list(result))
#[33, 44, 55]

 

map() 对于要批量为一个可迭代对象统一进行操作

#实现列表中每个元素都+100
li = [11,22,33,44,55]

def f1(args):
    result = []
    for i in args:
        result.append(100 + i)
        
    return result
r = f1(li)
print(list(r))
#[111, 122, 133, 144, 155]

#===================================

#用map(函数,可迭代的对象)

li = [11,22,33,44,55]

def f2(a):
    return a + 100
    
result = map(f2,li)
print(list(result))
#[111, 122, 133, 144, 155]

#===================================

#map结合lambda表达式实现相同功能

li = [11,22,33,44,55]

result = map(lambda a: a + 100,li)
print(list(result))
#[111, 122, 133, 144, 155]

 

filter和map的区别
filter 函数返回 True,将元素添加到结果中
map 函数返回值,添加到结果中

 

zip()

内置函数 和 装饰器
l1 = ["even",11,22,33]
l2 = ["is",11,22,33]
l3 = ["a",11,22,33]
l4 = ["boy",11,22,33,44]

r = zip(l1,l2,l3,l4)
print(list(r))
#[('even', 'is', 'a', 'boy'), (11, 11, 11, 11), (22, 22, 22, 22), (33, 33, 33, 33)]


l1 = ["even",11,22,33]
l2 = ["is",11,22,33]
l3 = ["a",11,22,33]
l4 = ["boy",11,22,33,44]

r = zip(l1,l2,l3,l4)
temp = list(r)[0]
result = " ".join(temp)
print(result)
#even is a boy
zip()

 

 

装饰器

@ + 函数名

如:@outer

 

功能:

1.自动执行outer函数并且将其下方的函数名 f1当做参数传递

2.将outer函数的返回值,重新赋值给 f1

一个函数被装饰器装饰之后

这个被装饰的函数会被重新赋值成装饰器的内层函数 inner()

 

详细执行流程顺序

内置函数 和 装饰器

 

参考示例

内置函数 和 装饰器内置函数 和 装饰器

内置函数 和 装饰器

 

用户登录和管理-装饰器实例:(雏形)

内置函数 和 装饰器
#!/user/bin/env python
# -*- coding:utf8 -*-

LOGIN_USER = {"is_login":False}

def outer(func):
    """
    判断用户是否登录过的装饰器
    :param func:
    :return:
    """
    def inner(*args,**kwargs):
        if LOGIN_USER['is_login']:
            r = func()
            return r
        else:
            print("请登录")
    return inner


@outer
def order():
    print("欢迎 %s 登录" % LOGIN_USER['current_user'])


@outer
def change_password():
    print("欢迎 %s 登录" % LOGIN_USER['current_user'])


@outer
def manager():
    print("欢迎 %s 登录" % LOGIN_USER['current_user'])


def login(user,pwd):
    if user == "root" and pwd == "123":
        LOGIN_USER['is_login'] = True
        LOGIN_USER['current_user'] = user
        manager()
    else:
        print("登录失败,用户名或密码错误")


def main():
    while True:
        inp = input("1.后台管理;2.登录")
        if inp == '1':
            manager()
        elif inp == '2':
            user = input("请输入用户名")
            pwd = input("请输入密码")
            login(user,pwd)


main()
用户登陆和管理