(5)函数对象

函数对象指的是:

函数的内存地址可以像变量值一样去使用

 

函数对象的使用

def func():   #定义一个函数
  print('from func')   #这是功能

 

1、函数对象可以被引用

f=func  #将函数地址放到一个变量中

print(f)   #打印这个函数的值,得到的是一个函数的内存地址

 f()  #这里变量加上括号,就会得到函数的功能

PS:想要引用一个函数的功能,必须将这个函数的的内存地址放入一个变量,然后再调用这个变量

PS:在函数地址放入变量的时候不能加(),如果加了()就是将函数的功能放入变量,而不是内存地址

 

2、可以当做参数传给另外一个函数

def func():
  while True:
    message = input('输入数字')
    if message == '1':
      print('ok')
    else:
      print('no')

def bar(x):   #这个函数有一个形参X
  print('这里开始调用x,即调用func')   #打印这个形参
  x()    #形参直接当函数调用

bar(func)   #调用bar函数时候把func函数的内存地址作为实参传入

PS:func的内存地址传给bar的形参,这个形参就像一个可调用的函数一样被调用,形参x的值就是func的功能

 

 

3、可以当做一个返回值传给另一个函数

def func():
  message = input('输入数字: ')
  if message == '1':
    return True
  else:
    return False

def foo():  
  print('这里开始调用功能')
  if func() is True:    #这里判定func函数传回的是什么值
    print('登录成功')
  else:
  print('登录失败')

res = foo   #这里将函数的内存地址放入一个变量,这样在全局下,其他的函数也可以调用这个函数的功能
res()   #可以调用foo()函数

PS:在一个函数内获取另一个函数的返回值,直接写判定语句即可,函数会自动调用函数获得返回值

 

4、可以当做容器类型的元素

l=[func]   #将func的函数内存地址放入列表的某一个位置

  print(l)  #这里打印l获得就是func函数的内存地址

l[0]()    #调用方式就是列表的位置加()

 

dic={'0':func}   #将func的内存地址放入字典的某一个键值对中

  print(dic)  #这里打印这个字典就会获得这个函数的内存地址

dic['0']()    #通过字典的键去调用这个值得功能

 

函数的内存地址分为两大类用途

1、直接加()调用函数的功能

2、可以当做变量值一样使用,可以被引用,可以被当做参数值被传入,可以当做返回值,可以当做容器元素使用

 

函数对象的应用实例

def login():
print('login')

def register():
print('register')

def shoppping():
print('shopping')

def pay():
print('pay')

def withdraw():
print("withdraw")

def transfer():
print('transfer')

func_dic={
'1':login,
'2':register,
'3':shoppping,
'4':pay,
'5':withdraw,
'6':transfer
}

while True:
print("""
0: 退出
1: 登录
2: 注册
3: 购物
4: 支付
5: 提现
6: 转账
""")
choice=input('输入操作>>>: ').strip()
if choice == '0': break
if choice in func_dic:
func_dic[choice]()
else:
print('输入的指令不存在')

PS:函数对象的一种应用,把函数内存地址放入容器里,当做容器类型的元素,去调用

 

posted @ 2018-11-18 09:42  clyde_S  阅读(190)  评论(0编辑  收藏  举报