【前言】
函数名的多种用法 :
函数名与普通的变量名差不多,都是绑定的一块内存地址!!!
普通的变量名绑定的内存地址存放的是具体的数据值
函数名绑定的内存地址里面存放的不是数据值,而是一些代码!!!
如果想让这些代码执行的话,必须函数名后面加括号,这时候执行的,不单单是找到函数名所绑定的函数体代码所在的内存地址,而且会帮你运行内存地址里面的代码。这也是函数名与普通变量名的区别。
print(函数名)就能看出来了
。
。
。
。
【函数名的用法】
1.可以将函数名赋值变量名
2.可以将函数名当做另一个函数的实参,传给另一个函数的行参,参与到另一个函数体代码的运行中去
3.可以当作函数当作另一个函数的返回值和当作一个容器里的元素
4.可以当作容器类型的一个元素
(案例一:)
(案例二:)
1 def login(): 2 print('登录功能') 3 4 5 def transfer(): 6 print('转账功能') 7 8 9 def banlance(): 10 print('查询余额') 11 12 13 def withdrw(): # 增加新功能 14 print('体现') 15 16 17 func_dic = { 18 '1': login, 19 '2': transfer, 20 '3': banlance, 21 '4': withdrw 22 } 23 func_dic['1']() # 登录功能 24 func_dic['2']() # 转账功能
===================================
优化
1 def login(): 2 print('登录功能') 3 4 5 def transfer(): 6 print('转账功能') 7 8 9 def balance(): 10 print('查询余额') 11 12 13 def withdraw(): 14 print('提现功能') 15 16 17 func_dic = { 18 '1': login, 19 '2': transfer, 20 '3': balance, 21 '4': withdraw 22 } 23 while True: 24 print( 25 """ 26 0:退出 27 1:登录 28 2:转账 29 3:查询余额 30 4:提现 31 """ 32 ) 33 choice=input('请输入功能编号:').strip() 34 if not choice.isdigit(): 35 print('输入错误,请重新输入!') 36 continue 37 if choice=='0': 38 break 39 if choice in func_dic: 40 func_dic[choice]() 41 else: 42 print('编号不存在,请重新输入!')
.
。
。
。
【 函数嵌套】
函数嵌套:一个函数调用另一个函数
.
。
。
。
。
【闭包函数】
给函数体代码传参的方式---闭包函数 : 再拿个函数包一下,再把参数传给它,这样就可以实现,传一次参,就可以一直调用了!!!还有个更加有用的地方是可以用在装饰器上!!!
闭包函数的套路是:在原来函数的基础上套了一层函数,先运行套在外面的函数体代码,代码的最后利用return返回里面的函数名称,再用变量名res接收里面的函数名称,最后就可以通过res()来运行被包在里面的函数体代码了!!!!!!
1 定义在函数内部的函数!!!==================名字的查找顺序以定义阶段为准 2 并且该内部的函数的函数体代码中,用到了外部函数名称空间中的名字!!! 3 同时符合这两点,才能叫做闭包函数。 4 5 闭包函数实际应用>>>:是另外一种给函数体代码传参的方式!!! 6 7 1.定义在函数内容 8 2.用到外部函数名称空间中的名字 9 10 11 12 def index(): 13 name = 'jason' 14 def inner(): # inner就不是闭包函数,因为没有用到外部函数名称空间中的名字 15 print('jason') # 把'jason'改为name inner就是闭包函数了
函数传参的两种方式
1 # 一:直接把函数体需要的参数定义成形参 2 def f1(x): 3 print(x) 4 5 6 f1(1) 7 8 ================================================================ 9 # 方式二:作用域规则和闭包机制 10 def f2(): 11 x = 2 12 13 def f3(): 14 print(x) 15 16 return f3 17 18 19 f = f2() 20 f()
(案例:爬虫)