Python爬虫-第二章-6-函数

时间:2022-12-28 11:26:38
  1. Python匿名函数
# Demo Describe:匿名函数

'''
本章内容:
匿名函数 lambda
变量 = lambda 参数1,参数2,参数3.... : 返回值

'''


# start--------1,lambda----------------------

def fn(a, b):
return a - b


rt1 = fn(50, 25)
print(rt1) # 25

fn_lambda = lambda a, b: a - b
rt2 = fn_lambda(30, 18)
print(rt2) # 12

# end--------1,lambda----------------------

  1. Python装饰器
# Demo Describe:装饰器

'''
闭包内容回顾:
1.函数可以作为参数进行传递
2.函数可以作为返回值进行返回
3.函数可以作为变量进行赋值

装饰器:
def warpper(fn):
def inner(*args,**kwargs):
do stuff
ret = fn(*args,**kwargs)
do stuff
return ret
return inner
本质上是一个闭包
作用:
不改变原有函数的情况下,在其前后增加新功能
比如给功能前后添加日志
'''

# start--------1,wrapper的简单使用----------------------

'''
功能
设置一个管家,使其帮助玩家自动实现开关
'''


def guanjia(game):
def inner():
print('开启!')
game()
print('关闭!')

return inner


'''
→@guanjia等同于
playLOL = guanjia(playLOL)
playLOL()
'''


@guanjia
def playLOL():
print('欢迎来到英雌联盟!')


@guanjia
def playPSGame():
print('PS游戏开启!')


# playLOL()
# playPSGame()

# end--------1,wrapper的简单使用----------------------

# start--------2,wrapper的参数使用----------------------

'''
功能
设置一个管家,使其帮助玩家自动实现开关
动态传参
a. *args 接受所有位置参数并存入元组
b. **args 接受所有关键字参数并存入字典
'''


def guanjia(game):
def inner(*args, **kwargs):
print('开启!')
game(*args, **kwargs)
print('关闭!')

return inner


# @guanjia
# def playLOL(username,pwd):
# print('欢迎来到英雌联盟!',' 用户名:'+username,' 密码:'+pwd)
#
# @guanjia
# def playPSGame(username,pwd,gamename):
# print('PS游戏开启!',' 用户名:'+username,' 密码:'+pwd,' 游戏名称:'+gamename)

# playLOL('xiayong','moore123')
# playPSGame('xiayong','moore123',gamename='刀剑神域')

# end--------2,wrapper的参数使用----------------------


# start--------3,wrapper的返回值使用----------------------

'''
功能
设置一个管家,使其帮助玩家自动实现开关
动态传参
a. *args 接受所有位置参数并存入元组
b. **args 接受所有关键字参数并存入字典
'''


def guanjia(game):
def inner(*args, **kwargs):
print('开启!')
result = game(*args, **kwargs)
print('关闭!')
return result

return inner


@guanjia
def playLOL(username, pwd):
print('欢迎来到英雌联盟!', ' 用户名:' + username, ' 密码:' + pwd)
return '给你奖励一个皮肤'


@guanjia
def playPSGame(username, pwd, gamename):
print('PS游戏开启!', ' 用户名:' + username, ' 密码:' + pwd, ' 游戏名称:' + gamename)
return '给你奖励一件神器'


# resultLOL = playLOL('xiayong','moore123')
# print(resultLOL)
# resultPSGame = playPSGame('xiayong','moore123',gamename='刀剑神域')
# print(resultPSGame)

# end--------3,wrapper的返回值使用----------------------

# start--------4,一个函数携带多个wrapper----------------------

'''
功能
设置一个管家,使其帮助玩家自动实现开关
动态传参
a. *args 接受所有位置参数并存入元组
b. **args 接受所有关键字参数并存入字典
'''


def wrapper1(fn):
def inner(*args, **kwargs):
print('wrapper1 IN')
ret = fn(*args, **kwargs)
print('wrapper1 OUT')
return ret

return inner


def wrapper2(fn):
def inner(*args, **kwargs):
print('wrapper2 IN')
ret = fn(*args, **kwargs)
print('wrapper2 OUT')
return ret

return inner


@wrapper1 # wrapper1.inner(#wrapper2.inner)
@wrapper2 # wrapper2.inner
def playPSGame(username, pwd, gamename):
print('PS游戏开启!', ' 用户名:' + username, ' 密码:' + pwd, ' 游戏名称:' + gamename)
return '给你奖励一件神器'


# resultPSGame = playPSGame('xiayong','moore123',gamename='刀剑神域')
# print(resultPSGame)
'''
wrapper1 IN
wrapper2 IN
PS游戏开启! 用户名:xiayong 密码:moore123 游戏名称:刀剑神域
wrapper2 OUT
wrapper1 OUT
给你奖励一件神器
'''

# end--------4,一个函数携带多个wrapper----------------------

# start--------5,demo----------------------

'''
功能
设置一个装饰器,在用户执行数据处理操作前,需要一次登录验证
'''
loginStatus = False


def login_verify(fn):
def inner(*args, **kwargs):
global loginStatus
if loginStatus == True:
print('登录状态中,请求正在处理!')
else:
while 1:
userName = input('请输入用户账号>>>')
userPwd = input('请输入密码>>>')
if userName == 'admin' and userPwd == '123':
loginStatus = True
print('登录成功!正在处理请求!')
break
else:
print('录入用户信息错误!请重新登录!')
ret = fn(*args, **kwargs)
return ret

return inner


@login_verify
def userAdd():
print('新增处理!!!')


@login_verify
def userUpdate():
print('更新处理!!!')


@login_verify
def userDelete():
print('删除处理!!!')


userAdd()
userUpdate()
userDelete()
''' 执行结果
请输入用户账号>>>1
请输入密码>>>1
录入用户信息错误!请重新登录!
请输入用户账号>>>admin
请输入密码>>>123
登录成功!正在处理请求!
新增处理!!!
登录状态中,请求正在处理!
更新处理!!!
登录状态中,请求正在处理!
删除处理!!!
'''

# end--------4,demo----------------------