生命在于学习——Python学习日记(十四)

在这里插入图片描述
本篇文章记录的是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)

上面的应用场景比较少 , 函数的嵌套定义更多的用在闭包

# 函数的嵌套定义你可以认为把一堆函数丢到一个大容器(最外面的那个函数)中
# 同时在外部是无法访问这个函数的,只能在大容器中访问这些函数
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

「已注销」

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值