
本篇文章记录的是Python函数对象和嵌套的知识。
一、函数对象
精髓:可以把函数名当成变量名去用
函数名和变量名一样,都是指向的是内存地址
二、函数名的用途
1、可以赋值
把一个函数名赋值给另一个变量名
# func=函数的内存地址
def func():
    pass
f=func        
print(func)   # <function func at 0x000001E78F9B3EA0> 
print(f)      # <function func at 0x000001E78F9B3EA0>2、当参数
函数名也可以当做参数传给另一个函数
def func():
    pass
def foo(x):  # × = func的内存地址#
    print(x)
    x()
foo(func)  # foo( func的内存地址)3、当返回值
函数名也可以当函数的返回值
def func():
    pass
def foo(x):
    return x    
res = foo(func)
print(res)4、当元素
函数名可以当做容器类型的一个元素
def func():
    print('func函数: ',func)
    
l=[func,]
print(l)
l[0]()        # 调用func函数
dic={ 'k1' :func}
print(dic)
dic['k1']()  # 调用func函数5、小练习
def login():
    print('登录功能')
def transfer():
    print('转账功能')
def check_balance():
    print('查询余额')
def change_password():
    print('修改密码')
# 巧用数据类型
dic = {
    # '1': login,
    '0': ('退出', None),
    '1': ['登录', login],
    '2': ['转账', transfer],
    '3': ['查询余额', check_balance],
    '4': ['更改密码', change_password],
    # '2': transfer,
    # '3': check_balance,
}
while 1:
    for key, value in dic.items():
        print('{} {}'.format(key, value[0]))
    choice = input('请输入编号:').strip()
    if not choice.isdigit():
        print('必须输入编号,憨批')
        continue
    if choice == '0':
        break
    if choice in dic:
        dic[choice][1]()
    else:
        print('你输入的命令不存在,憨批')三、函数的嵌套
1、函数的嵌套调用
在调用一个函数的过程又调用其他的函数
def func1():
    print("调用了func1函数")
    
def func2():
    print("调用了func2函数")
    
def func3():
    print("调用了func3函数")
    
    
def func():
    func1()
    func2()
    func3()应用场景:
把各个小功能(小函数),封装到一个大功能(大函数)里面
def max2(x, y):
    return x if x > y else y
# 比较4个参数的大小
def max4(a, b, c, d):
    # 比较a,b得到res1
    res1 = max2(a, b)
    # 比较res1,c,得到res2
    res2 = max2(res1, c)
    # 比较res2,d ,得到res3
    res3 = max2(res2, d)
    return res3
print(max4(7838237, 9859, 949, 90))2、函数的嵌套定义
在函数内定义其它的函数
def func():
    def func1():
        pass
        # 举例:
# 求圆的周长和面积,但是只在圆内调用,在其他地方不用
from math import pi
def circle(radius, action=None):
    "radius:半径 action为0是求周长 action为1是求面积 "
    def get_perimeter(radius):
        return 2 * radius * pi
    def get_area(radius):
        return pi * radius ** 2
    # 求圆的周长
    if action == 0:
        return get_perimeter(radius)
    # 求圆的面积
    elif action == 1:
        return get_area(radius)==上面的应用场景比较少 , 函数的嵌套定义更多的用在闭包==
# 函数的嵌套定义你可以认为把一堆函数丢到一个大容器(最外面的那个函数)中
# 同时在外部是无法访问这个函数的,只能在大容器中访问这些函数 
         
             京公网安备11010802044340号
京公网安备11010802044340号