前言:
Python中有着一切皆为对象的说法,那么作为对象,应该具备三种特性:
id(内存地址)、类型(type)、值(对象所具备的数据)
函数对象
作为Python函数,它也是对象的一种,来查看一下它具备的特性
def func():
print('this is test func')
# 如果使用括号的话就表示调用这个函数了,不加括号我们可以将函数作为对象使用
print(type(func))
<class 'function'> # 函数的类型
print(id(func))
140447349182960 # 函数所处的内存地址
print(func)
<function func at 0x7fe8bc5b91f0> # 函数对象的属性/值
# 函数对象名
函数对象的使用
将函数对象作为值赋给变量
def func():
print('this is func')
f = func # 注意:使用括号的话表示调用这个函数,拿函数对象不要加括号
f() # f变量已经拿到函数对象,所以直接调用f相当于间接调用 func函数
打印结果:'this is func'
可以作为返回值使用
def func():
print('this is func')
def add(x):
return x # 收到传递的值以后,没有做别的操作就执行return返回了这个值
f = func # 拿到func函数对象
res = add(func) # 将func函数对象传递给add函数
# res = func 因为将func传递进去后,执行了return 将它传递的值又返回给它了
print(res)
<function func at 0x7f9c1e50eca0> # 打印的还是func的属性
可以作为容器类型的元素,如:列表、字典、元组、集合
def func():
print('this is func project')
def bar():
print('this is bar project')
lis = [1,2,func,bar] # 将函数对象作为元素放入列表内
print(lis)
[1,2,<function func at 0x7fb5d5b0eca0>]
lis[-1]() # 可以通过这种方式执行这个函数对象
'this is bar project'
lis[-2]()
'this is func project'
函数对象练习:
使用传统写法、重复代码较多
def login():
print('login')
def register():
print('register')
def transfer():
print('transfer')
def withdraw():
print('withdraw')
while True:
choice = input('输入操作编号:').strip()
print('''
0、退出
1、登录
2、注册
3、转账
4、提现
''')
# 功能越多,分支结构越长
if choice == '0':
break
elif choice == '1':
login()
elif choice == '2':
register()
elif choice == '3':
transfer()
elif choice == '4':
withdraw()
经过函数对象优化后写法
# 写好功能函数
def login():
print('login')
def register():
print('register')
def transfer():
print('transfer')
def withdraw():
print('withdraw')
# 将函数对象集合在字典里的列表,并添加了提示信息
fun_dic = {
'1':[login,'转账'],
'2':[register,'注册'],
'3':[transfer,'转账'],
'4':[withdraw,'体现']
}
while True:
print('0 退出登录系统') # 没有0 补充添加
for k,v in fun_dic.items(): # 省略了之前的较长的提示信息内容
print(k,v[-1]) # 打印出提示信息
# 编号 以及列表最后一位的内容
choice = input('输入操作编号:').strip()
if choice == '0':
break
if choice in fun_dic: # 判断输入的编号是否对应字典的key
fun_dic[choice][0]() # 调用字典里面 对应编号的列表里面的函数对象
# 通过key找到 列表下面的第一个元素也就是函数对象 括号执行
else: # 表示输入的编号不存在
print('没有这个选项,请重新输入')
技术小白记录学习过程,有错误或不解的地方请指出,如果这篇文章对你有所帮助请
点赞收藏+关注
谢谢支持!