笔记:
1.全局变量:声明在函数外边的变量 全局变量:a
a = 100
def test_01():
a = 0
b = 110
print(a)
print(b)
2.局部变量:范围仅限于函数内部
def test_02():
print(a)
无法修改全局变量,如果要进行修改,使用globle关键字
def test_03():
global a
a += 100
print(a)
test_03()
3.值传递
在传递参数时,仅仅是把值拷贝一份传递给参数的函数,变量的值不发生变化
def test01(x, y):
x += 10
y += 20
print(x, y)
a = 10
b = 20
test01(a, b)
print(a)
print(b)
4.引用传递
在传递参数的时候,传地址,函数形参获取的值,也是同一块内存
def test02(nums):
print(id(nums))
nums.append(10)
nums.append(100)
print(nums)
list1 = [1, 2, 3]
print(id(list1))
test02(list1)
print(list1)
5.匿名函数
python中,存在函数作为参数传递给函数,并且不想被外界访问,而且参数函数足够简单,即可以定义为匿名函数(lambda 表达式) lambda [a,b]:代码块
def test01(fn):
a = fn(1,2)
print(a)
test01(lambda a, b: a + b)
6.偏函数
我们有时候需要调用某个函数,如果想将该函数中的某个参数设置一个固定的值,那么就可以使用偏函数
import functools
int2 = functools.partial(int,base=2)
print(int2('10010'))
7.函数的嵌套
def fun1():
b = 20
def fun2(): #fun2 = def(){}
print(b)
print("222222222")
return fun2
a = fun1()
a()
运行结果
20
222222222
8.闭包
闭包:一个函数嵌套另一个函数,内层函数用到外层函数的局部变量,内层函数即为闭包
def outer():
a = 10
def inner():
nonlocal a
a += 100
return inner
a = outer()
9.装饰器
装饰器本质上就是一个闭包,作用:不改变原有函数的前提下,为函数添加新的功能,但是源代码没改变
运用:用户登录、日志
装饰器雏形:
def wrapper(目标函数):
def inner():
之前添加的事情
目标函数原函数执行
之后添加的事情
return inner
def guanjia(fn):
def inner():
print("开挂")
fn()
print("关闭外挂")
return inner
@guanjia
def play_dnf():
print("你好啊,我是赛利亚,今天又是美好的一天")
@guanjia
def play_wz():
print("来和妲己玩耍吧")
play_dnf()
play_wz()