python学习16——函数对象与闭包函数

一 函数对象

函数对象指的是函数可以被当做数据来处理,具体可以分为四个方面的使用,我们如下

1.1 函数可以被引用

>>> def add(x,y):

... return x+y

...

>>> func=add

>>> func(1,2)

3

1.2?函数可以作为容?类型的元素

>>> dic={‘add‘:add,‘max‘:max}

>>> dic

{‘add‘: <function add at 0x100661e18>, ‘max‘: <built-in function max>}

>>> dic[‘add‘](1,2)

3

1.3?函数可以作为参数传入另外一个函数

>>> def foo(x,y,func):

... return func(x,y)

...

>>> foo(1,2,add)

3

1.4?函数的返回值可以是一个函数

>>> func=bar()

>>> func(1,2)

3

1.5函数对象的应用之改写优化if

以ATM主菜单为例

if-elif嵌套形式

while True:    print("""    0 退出    1 登录    2 转账    3 查询余额    4 提现    5 注册    """)    choice = input(‘请输入命令编号:‘).strip()    if not choice.isdigit():        print(‘必须输入编号‘)        continue

    if choice == ‘0‘:        break

    if choice in func_dic:        func_dic[choice]()    else:        print(‘输入的指令不存在‘)

    if choice == ‘1‘:        login()    elif choice == ‘2‘:        transfer()    elif choice == ‘3‘:        check_banlance()    elif choice == ‘4‘:        withdraw()    else:        print(‘输入的指令不存在‘)

用函数对象改写
func_dic = {    ‘0‘: [‘退出‘, None],    ‘1‘: [‘登录‘, login],    ‘2‘: [‘转账‘, transfer],    ‘3‘: [‘查询余额‘, check_banlance],    ‘4‘: [‘提现‘, withdraw],    ‘5‘: [‘注册‘, register]}# func_dic[‘1‘]()

while True:    for k in func_dic:        print(k, func_dic[k][0])

    choice = input(‘请输入命令编号:‘).strip()    if not choice.isdigit():        print(‘必须输入编号‘)        continue

    if choice == ‘0‘:        break

    # choice=‘1‘    if choice in func_dic:        func_dic[choice][1]()    else:        print(‘输入的指令不存在‘)

二 函数嵌套

1、函数的嵌套调用:

在调用一个函数的过程中又调用其他函数
def max2(x,y):
  if x > y:
    return x
  else:
    return y

def max4(a,b,c,d):
  # 第一步:比较a,b得到res1
  res1=max2(a,b)
  # 第二步:比较res1,c得到res2
  res2=max2(res1,c)
  # 第三步:比较res2,d得到res3
  res3=max2(res2,d)
  return res3

2、函数的嵌套定义:

在函数内定义其他函数

def f1():
  def f2():
    pass
例子
# 圆形
# 求圆形的求周长:2*pi*radius
def circle(radius,action=0):
  from math import pi

  def perimiter(radius):
    return 2*pi*radius

  # 求圆形的求面积:pi*(radius**2)
  def area(radius):
    return pi*(radius**2)

  if action == 0:
    return 2*pi*radius

  elif action == 1:
    return area(radius)

circle(33,action=0)

三 闭包函数

一:大前提:

闭包函数=名称空间与作用域+函数嵌套+函数对象
核心点:名字的查找关系是以函数定义阶段为准

二:什么是闭包函数

"闭"函数指的该函数是内嵌函数
"包"函数指的该函数包含对外层函数作用域名字的引用(不是对全局作用域)

def f1(x): # x=3    x=3    def f2():        print(x)    return f2

三:为何要有闭包函数=》闭包函数的应用

两种为函数体传参的方式
方式一:直接把函数体需要的参数定义成形参
def f2(x):
  print(x)

f2(1)
f2(2)

方式二:嵌套的形式
def f1(x): # x=3
  x=3
  def f2():
    print(x)
  return f2

x=f1(3)
print(x)
x()

闭包函数的例子:

import requests

传参的方案一:def get(url):    response=requests.get(url)    print(len(response.text))

get(‘https://www.baidu.com‘)get(‘https://www.cnblogs.com/linhaifeng‘)get(‘https://zhuanlan.zhihu.com/p/109056932‘)

# 传参的方案二:def outter(url):    # url=‘https://www.baidu.com‘    def get():        response=requests.get(url)        print(len(response.text))    return get

baidu=outter(‘https://www.baidu.com‘)baidu()

cnblogs=outter(‘https://www.cnblogs.com/linhaifeng‘)cnblogs()

zhihu=outter(‘https://zhuanlan.zhihu.com/p/109056932‘)zhihu()

原文地址:https://www.cnblogs.com/heirenxilou/p/12532036.html

时间: 2024-11-08 14:53:03

python学习16——函数对象与闭包函数的相关文章

函数嵌套,名称空间,作用域,函数对象,闭包函数

函数嵌套 嵌套调用是在函数内又调用其他函数 def max(x,y): return x if x > y else y def max4(a,b,c,d): res1=max(a,b) res2=max(res1,c) res3=max(res2,d) return res3 print(max4(1,2,3,4)) 嵌套定义是在函数内又定义其他函数 # def f1(): # print('f1') # def f2(): # print('f2') # def f3(): # print(

函数对象与闭包函数

一.函数对象 精髓:可以把函数当成变量去用 # func=内存地址 def func(): print('from func') 1.可以赋值 f=func print(f,func) f() <function func at 0x00000000026AC0D0> <function func at 0x00000000026AC0D0> from func 2.可以当做函数当做参数传给另外一个函数 def foo(x): # x = func的内存地址 # print(x)

python基础——函数对象和闭包

关于函数对象和闭包 闭包(closure)是函数式编程的重要的语法结构.不同的语言实现闭包的方式不同.Python以函数对象为基础,为闭包这一语法结构提供支持的 (我们在特殊方法与多范式中,已经多次看到Python使用对象来实现一些特殊的语法).Python一切皆对象,函数这一语法结构也是一个对象.在函数对象中,我们像使用一个普通对象一样使用函数对象,比如更改函数对象的名字,或者将函数对象作为参数进行传递. 一.函数对象: 1.函数可以当参数传递 示例: #把函数当成参数传递 def foo()

22、Python之函数对象和闭包

目录 一.函数对象 1.1 可以被赋值 1.2 函数可以当作参数传给另一个函数 1.3 函数可以当作一个函数的返回值 1.4 函数可以当作容器类型的一个元素 二.函数嵌套 2.1 函数的嵌套调用:在调用一个函数的过程中又调用其他函数 2.2 函数的嵌套定义:在函数内定义其他函数 三.闭包函数 3.1 什么是闭包函数 3.2 闭包函数的应用 一.函数对象 可以把函数作为变量去使用,不加括号作为内存地址,加括号作为函数运行作为返回值 1.1 可以被赋值 # func=内存地址 def func():

Python学习笔记_Python对象

Python学习笔记_Python对象 Python对象 标准类型 其他内建类型 类型对象和type类型对象 Python的Null对象None 标准类型操作符 对象值的比较 对象身份比较 布尔类型 标准类型的内建函数 typeObj cmpobj1 obj2 strobj reprobj typeobj isinstanceobj 标准类型的分类 存储模型 更新模型 访问模型 不支持的类型 Python学习笔记_Python对象 首先来理解一个通俗的含义,什么是对象?其实对象无论在什么语言里面

Python中的函数对象与闭包

函数在Python中是第一类对象,可以当做参数传递给其他函数,放在数据结构中,以及作为函数的返回结果. 下面的例子为接受另外一个函数作为输入并调用它 1 #foo.py 2 def callf(func): 3 return func() 使用上面的函数: 1 import foo 2 def helloworld(): 3 return 'Hello,World' 4 5 print foo.callf(helloworld) >>>‘Hello,World’ 2.把函数当做数据处理时

Python学习笔记(十)匿名函数

摘抄自:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001431843456408652233b88b424613aa8ec2fe032fd85a000 本文章完全用于个人复习使用,侵删: 当我们在传入函数时,有些时候,不需要显式地定义函数,直接传入匿名函数更方便. 在Python中,对匿名函数提供了有限支持.还是以map()函数为例,计算f(x)=x2时,除了定义一个f(

Python学习笔记__4.2章 返回函数

# 这是学习廖雪峰老师python教程的学习笔记 1.函数作为返回值 高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回. # 累加函数 def external(*args): def internal(): ax = 0 for n in args: ax = ax + n return ax return internal  # external的返回值是internal # 调用external() f = external(1, 3, 5, 7, 9)   #这里的 f是一

Python学习笔记__4.3章 匿名函数(简洁函数)

# 这是学习廖雪峰老师python教程的学习笔记 1.概览 关键字lambda表示匿名函数 list(map(lambda x: x * x, [1, 2, 3, 4, 5, 6, 7, 8, 9])) # 列表生成式中的 lambda 实际就是 def f(x): return x * x 但匿名函数有个限制,就是只能有一个表达式. 匿名函数不用写return,返回值就是该表达式的结果 匿名函数因为函数没有名字,不必担心函数名冲突. 此外,匿名函数也是一个函数对象,可以把匿名函数赋值给一个变量