函数

global与nonlocal关键字使用

  • x = 111
    def index():
    局部修改全局变量 需要使用关键字声明
    global x
    x = 222
    index()
    print(x)
    name_list = ['jason', 'kevin']
    def index():
    name_list.append('heiheihei')
    index()
    print(name_list)
    如果想在局部修改全局数据
    如果数据为不可变类型则需要关键字global声明
    如果数据为可变类型则无需关键字global声明
  • def index():
    x = 111
    l1 = [11,22]
    def func():
    内部局部修改外部局部
    l1.append(333)
    func()
    print(l1)
    index()
    如果想要在内部的局部修改外部局部的不可变类型数据,需要关键字nonlocal声明
    image

函数对象(函数名)

函数名遇到括号就会调用

  • 用法1:函数名可以当做变量名赋值
    def index():
    print('from index')
    a = index
    a() # 本质就是在调用index函数

  • 用法2:函数名还可以当做函数的实参
    def index():
    print('from index')
    def func(a):
    print(a)
    a()
    print('from func')
    func(index)

  • 用法3:函数名还可以当做函数返回值
    def index():
    print('from index')
    def func():
    print('from func')
    return index
    res = func() # 调用func并接受func的返回值
    res()

  • 用法4:函数名可以当做容器类型(内部可以存放多个数据)的元素
    def index():
    print('from index')
    l = [111, 222, 333, index()]
    print(l)
    image

函数的嵌套调用

嵌套调用:函数内部调用其他函数

  • eg:
    def index():
    print('from index')
    def func():
    index()
    print('from func')
    func()

  • def many_max(x,y,z,m):
    res = my_max(x,y)
    res1 = my_max(res,z)
    res2 = my_max(res1,m)
    return res2
    ret = many_max(1,2,3,4)
    print(ret)7
    image

函数的嵌套定义

函数体内部定义其他函数
将复杂的功能全部隐藏起来 暴露一个简单的接口

  • def all_func(type):
    def register():
    print('注册功能')
    def login():
    print('登录功能')
    def transfer():
    print('转账功能')
    def shopping():
    print('购物功能')
    这里仅仅是延时嵌套定义的现象 暂不考虑优化
    if type == '1':
    register()
    elif type == '2':
    login()
    elif type == '3':
    transfer()
    elif type == '4':
    shopping()
    else:
    print('不知道啥功能')
    all_func('3')
    image

闭包函数

闭:定义在函数内部的函数
包:内部函数使用了外部函数名称空间中的名字

  • 只有符合上述两个特征的函数才可以称之为"闭包函数"
    def outer():
    x = 222
    def index():
    print('from index', x)
    return index
    闭包函数其实是给函数传参的第二种方式

  • 方式1:函数体代码需要用到数据 直接在括号内定义形参即可
    def index(username):
    print(username)
    def my_max(a, b):
    if a > b:
    return a
    return b

  • 方式2:利用闭包函数
    def outer(x,y):
    x = 2
    y = 40
    def my_max():
    if x > y:
    return x
    return y
    return my_max
    res = outer(2,40)
    print(res())
    print(res())

image

posted @ 2021-11-16 15:04  丶祈安  阅读(62)  评论(0编辑  收藏  举报