函数对象(函数名)
? 函数对象指函数可以被当做“数据”来处理。
-
函数名可以当成变量赋值 def index():
print('from index')
a = index
a()
print(a)
-
函数名可以当成函数的参数 def index():
print('from index')
def func(a):
a()
print('from func')
func(index)
-
函数名也可以当成函数的返回值 def index():
print('from index')
def func():
print('from func')
return index
res = func()
res()
-
函数名可以作为容器类型的元素 def index():
print('from index')
l = [1, 2, 3, index]
print(l)
练习:
def register():
print('注册')
def login():
print('登录')
def transfer():
print('转账')
def shopping():
print('购物')
def withdraw():
print('提现')
func_dict = {
'1': register,
'2': login,
'3': transfer,
'4': shopping,
'5': withdraw
}
while True:
print("""
1. 注册
2. 登录
3. 转账
4. 购物
5. 提现
""")
choice = input('请输入序号:>>>').strip()
if choice in func_dict:
func_name = func_dict[choice]
func_name()
else:
print('请好好输入')
函数的嵌套定义
? 即在函数里面定义其他函数。
示例:
def all_func(type):
def register():
print('注册')
def login():
print('登录')
def transfer():
print('转账')
def withdraw():
print('提现')
if type == 1:
register()
elif type == 2:
login()
elif type == 3:
transfer()
elif type == 4:
withdraw()
else:
print('请重新输入!')
all_func(2)
函数的嵌套调用
? 即表示在函数里面调用其他函数。
示例:
def my_max(a, b):
if a > b:
return a
return b
def many_max(a, b, c, d):
res = my_max(a, b)
res1 = my_max(res, c)
res2 = my_max(res1, d)
return res2
print(many_max(1,2,3,4))
闭包函数
? 闭:指的是定义在函数内部的函数
? 包:指的是内嵌函数包含对外部函数作用域(而非全局作用域)中的变量的引用。
? 两者同时满足才能称之为“闭包函数”。可以说闭包函数为传参的第二种方式。
-
传参的第一种方式:通过形参传参 def index(a,b):
print(a,b)
index(1,2)
-
传参的第二种方式:闭包函数 def outer(a, b):
def my_max():
if a > b:
return a
return b
return my_max
res = outer(2, 20)
print(res())
print(res())
|