Bootstrap

python day8

笔记:

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()

;