第七节课:高级函数,装饰器
目录:
1.函数结构
2.参数列表
3.装饰器
4.作用域
一. 函数结构:
def 函数名(参数列表):
——函数体
——return 返回值
不调用不执行
二.参数列表:
1.必须参数:调用时必须传值,
2.默认参数:调用时可以不传值。
如:def test(a,b=2)
其中b为默认参数,不传值时默认为2。
3.不定长参数:元组式,字典式
*args为元组式,返回为元组。
**kwargs为字典式,返回为字典。
4.攒参顺序:首先是必须函数,然后是默认参数,元组,字典。
除必须函数外,其他的位置可调换,但要通过指定参数的形式给予赋值。
可迭代:用for循环时不用range就可循环的数据结构。
如:for i in list:
三.装饰器
(一)闭包:
1.有外部函数,有内部函数(嵌套函数)
2.内部函数使用外部函数的变量(用到就行,最少一个)
3.外部函数返回内部函数名。
例:
def outter():
age = 18
def inner():
print(age)
return inner
#调用该函数
inerl = outter()#inerl相当于返回了inner函数
inerl()
#或
outter()()
2.装饰器的意义:已知一个函数,要对函数进行改变,但不想修改原函数。
——自己领悟吧!!!!
#有一函数A
def longin(name,word):
if name =="admin" and word == "123456":
print("登陆成功")
else:
print("登陆失败")
#现要将A修改,加入验证码(在不修改A的情况下)。
def outer(args):
def inner(name, word):
val = input("请输入验证码:")
if val == "1234":
args(name, word)
return longin
@outer
def longin(name,word):
if name =="admin" and word == "123456":
print("登陆成功")
else:
print("登陆失败")
val = "1234"
name ="admin"
word = "123456"
longin(name,word)
四.作用域:
1.global:在函数内改变函数外的值。
v = 12
def test():
global v
v += 10
print(v)
test()
2.nonlocal:内层函数改变外层函数变量。
def test():
v = 12
def test2():
nonlocal v
v += 10
print(v)
return test2()
test()
3.看根在哪,在顶格用global,在外函数里用nonlocal
v = 12
def test():
global v
v += 12
def test2():
global v
v += 10
print(v)
return test2()
test()