当前位置:   article > 正文

python之函数对象+函数嵌套_python 嵌套对象

python 嵌套对象

python之函数对象+函数嵌套

一、函数对象的四种用法

  • 精髓:可以把函数当做变量去用

1、函数可以被应用(也可以说可以被赋值)

  1. def func(): #func=函数的内存地址
  2.    print('from func')
  3. f = func
  4. f()  # from func

2、函数可以作为参数传入另一个函数

  1. 示例一:
  2. def fucn():
  3.    print("from func")
  4. def bar(x):
  5.    print(x) #m=11111
  6. mm = 11111
  7. bar(mm) #11111
  8. 示例二:
  9. def fucn():
  10.    print("from fuunc")
  11. def bar(x):
  12.    print(x)  #func的内存地址:<function fucn at 0x000002358B9C3EE0>
  13. bar(fucn) #把func的内存地址给了bar
  14. bar(fucn()) #先调用fucn函数,拿到fucn的返回值在传给bar函数,返回结果:from fuunc、None,这里研究的是函数本身,而不是函数的返回值
  15. 实例三 在函数bar内调用了函数fucn
  16. def fucn():
  17.    print("from fuunc")
  18. def bar(x):
  19.    x() #from fuunc #触发函数体func的运行
  20. bar(fucn)

3、函数当做另外一个函数的返回值

  1. 示例一:
  2. def func():
  3.    print("from func")
  4. def add(x):  # x=函数func的内存地址
  5.    return x  # return 函数func的内存地址
  6. res=add(func)  # add(函数func的内存地址)
  7. print(res) #<function func at 0x000001D745153EE0>
  8. 实例二:
  9. def func():
  10.    print('from func')
  11. def foo(x):
  12.    return x
  13. res = foo(func)
  14. print(res)  # <function func at 0x000001618F52CEE0>
  15. res()  # from func

4、函数可以作为容器类型的元素

  1. 示例一:
  2. def func():
  3.    print("from func")
  4. x=10
  5. l=[x,func]
  6. print(l) #[10, <function func at 0x00000191CFD83EE0>]
  7. l[-1]() #调用函数func的内存地址,而()触发函数体内的代码的运行,返回结果:from func
  8. 示例二:
  9. def func():
  10.    print('from func')
  11. li = [func]
  12. print(li)  # [<function func at 0x000001D99DC2CEE0>]
  13. li[0]()  # from func

函数可以作为容器类型的元素应用列举

  • 需求:模拟用户登录,注册。登录以后可以实现转账、查询余额、提醒、充值功能

  1. 示例一:代码的冗余性比较差
  2. def login():
  3.    print("login")
  4. def register():
  5.    print("register")
  6. def tranfer():
  7.    print("transter")
  8. while True:
  9.    print("""
  10.   0 退出
  11.   1 登录
  12.   2 注册
  13.   3 转账
  14.         """)
  15.    choice=input("请输入操作编号:").strip()
  16.    if choice =="0":
  17.        break
  18.    elif choice =="1":
  19.        login()
  20.    elif choice== "2":
  21.        register()
  22.    elif choice =="3":
  23.        tranfer()
  24.    else:
  25.        print("输入的操作不存在")
  26. 示例二:
  27. def login():
  28.    print("login")
  29. def register():
  30.    print("register")
  31. def tranfer():
  32.    print("transter")
  33. func_dic={
  34.    "1":login,
  35.    "2":register,
  36.    "3":tranfer
  37. }
  38. while True:
  39.    print("""
  40.   0 退出
  41.   1 登录
  42.   2 注册
  43.   3 转账
  44.   4 提款
  45.         """)
  46.    choice=input("请输入操作编号:").strip()
  47.    if choice =="0":
  48.        break
  49.    elif choice =="1":
  50.        func_dic[choice]()
  51.    else:
  52.        print("输入的操作不存在")
  53. 示例三:
  54. def login():
  55.    print("login")
  56. def register():
  57.    print("register")
  58. def tranfer():
  59.    print("transter")
  60. def  withdraw():
  61.    print('withdraw')
  62. func_dic={
  63.    "1":[login,"登录"],
  64.    "2":[register,"注册"],
  65.    "3":[tranfer,"转账"],
  66.    "4":[withdraw,"提现"]
  67. }
  68. while True:
  69.    print("0 退出")
  70.    for k in func_dic:
  71.        print(k,func_dic[k][-1])
  72.    choice=input("请输入操作编号:").strip()
  73.    if choice =="0":
  74.        break
  75.    elif choice =="1":
  76.        func_dic[choice][0]()
  77.    else:
  78.        print("输入的操作不存在")
  79.        
  80. 实例四:
  81. def login():
  82.    print("登录功能")
  83. def register():
  84.    print("注册功能")
  85. def transfer_accounts():
  86.    print("转账功能")
  87. def check_banlance():
  88.    print("查询功能")
  89. def withdraw_deposit():
  90.    print('提现')
  91. def recharge():
  92.    print('充值')
  93. func_dic = {
  94.    '0': ('退出', exit),
  95.    '1': ('登录', login),
  96.    '2': ('注册', register),
  97.    '3': ('查询余额', check_banlance),
  98.    '4': ('提线', withdraw_deposit),
  99.    '5': ('充值', recharge),
  100.    '6': ('转账', transfer_accounts),
  101. }
  102. while True:
  103.    for key, value in func_dic.items():
  104.        print(f'{key}:{value[0]}')
  105.    cmd = input("输入命令编号>>:").strip()
  106.    if not cmd.isdigit():
  107.        print("请输入命令对应的数字编号")
  108.        continue
  109.    if cmd not in func_dic:
  110.        print("输入命令编号范围超出")
  111.        continue
  112.    func_dic[cmd][1]()

二、函数嵌套

1.函数的嵌套定义:

在函数内定义其他函数

  1. def f1():
  2.    print('from f1')
  3.    def f2():
  4.        print('from f2')
  5.    f2()
  6. f1()

应用示例

使用场景:小功能组合

需求:求圆的周长和面积

周长(perimeter) =2 * pi * 半径(radius)`

面积(area) = pi * 半径 ** 2

  1. 代码一:
  2. from math import  pi #导入math模块
  3. def circle(radius,mode=0):
  4.    def perimiter(radius): #计算周长函数
  5.        return 2 * pi * radius
  6.    def area(radius): #计算面积函数
  7.        return pi * (radius ** 2)
  8.    if mode ==0: #选0计算周长
  9.        return perimiter(radius)
  10.    elif mode == 1: #选1计算面积
  11.        return area(radius)
  12. res=circle(10,mode=1) #传入半径10,选择1
  13. print(res) #314.1592653589793
  14. 代码二:
  15. def circle(radius, action=0):
  16.    from math import pi
  17.    def perimeter(radius):
  18.        return 2 * pi * radius
  19.    def area(radius):
  20.        return pi * radius ** 2
  21.    if action == 0:
  22.        res = perimeter(radius)
  23.    elif action == 1:
  24.        res = area(radius)
  25.    return res
  26. print(circle(3))  # 求圆的周长:18.84955592153876
  27. print(circle(3, 1))  # 求圆的面积:28.274333882308138

2.函数的嵌套调用:在调用一个函数的过程中又调用其他函数组合

  • 在调用一个函数的过程中又在他内部调用其他函数的组合(用一个小功能拼成一个大功能)

  1. # 比价两个值的大小
  2. def max2(a, b):
  3.    if a > b:
  4.        return a
  5.    elif a < b:
  6.        return b
  7. # 比较四个值的大小
  8. def maxs(a, b, c, d):
  9.    res = max2(a, b)
  10.    res = max2(res, c)
  11.    return max2(res, d)
  12. print(maxs(1, 2, 3, 4))  # 4

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/585299
推荐阅读
相关标签
  

闽ICP备14008679号