我的编程空间,编程开发者的网络收藏夹
学习永远不晚

怎么理解关于python函数对象与闭包

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

怎么理解关于python函数对象与闭包

本篇内容介绍了“怎么理解关于python函数对象与闭包”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

  一、函数对象

  在 Python 中万物皆为对象,函数也不例外,函数作为对象可以赋值给一个变量、可以作为元素添加到集合对象中、可作为参数值传递给其它函数,还可以当做函数的返回值,这些特性就是第一类对象所特有的。

  1、函数可以被引用

  >>> def add(x,y):

  ... return x+y

  ...

  >>> func=add

  >>> func(1,2)

  3

  2、函数可以作为容器类型的元素

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

  >>> dic

  {'add': , 'max': }

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

  3

  3、函数可以作为参数传入另外一个函数

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

  ... return func(x,y)

  ...

  >>> foo(1,2,add)

  3

  4、函数的返回值可以是一个函数

  def bar():

  return add

  func=bar()

  func(1,2)

  3

  5、应用案例

  (1)最简单的写法

  def login():

  '''登录'''

  print('登录成功')

  def registry():

  '''注册'''

  print('注册成功')

  def check_balance():

  '''查询余额'''

  print('余额查询成功')

  def withdraw():

  '''提现'''

  print('提现成功')

  print('''

  1 登录

  2 注册

  3 查询余额

  4 提现

  ''')

  choice = input('请输入您要执行的操作编号:').strip()

  if choice == '1':

  login()

  elif choice == '2':

  registry()

  elif choice == '3':

  check_balance()

  else:

  withdraw()

  缺点:如果函数很多,那么冗余太大,后期增加功能也不方便

  (2)优化后的代码

  def login():

  '''登录'''

  print('登录成功')

  def registry():

  '''注册'''

  print('注册成功')

  def check_balance():

  '''查询余额'''

  print('余额查询成功')

  def withdraw():

  '''提现'''

  print('提现成功')

  func = {

  '0':('退出',None),

  '1':('登录',login),

  '2':('注册',registry),

  '3':('查询余额',check_balance),

  '4':('提现',withdraw)

  }

  while True:

  for i in func:

  print(i,func[i][0])

  choice = input('请输入您要执行的操作编号:').strip()

  if choice == '0':

  break

  elif choice not in func:

  print('尊敬的用户,您好!你需要执行的操作不存在,请重新选择操作编号!')

  continue郑州专业人流医院 http://4g.zyfuke.com/

  else:

  func[choice][1]()

  二、函数嵌套

  再一个函数的函数体中又定义一个新函数。称之为函数嵌套

  1、应用案例一

  对圆的所有操作函数我们都放进circle函数中去,通过指定action参数的值,从而来确定调用那个函数,执行那个操作(类似文件处理中的指定r,w,a模式)。

  2、闭包函数

  (1)闭与包

  函数被当做数据处理时,始终以本地的作用域为准。若内嵌函数包含对外部函数作用域(而非全局作用域)中变量的引用,那么该’内嵌函数’就是闭包函数,简称闭包(Closures)

  x=1

  def outer():

  x=2

  def inner():

  print(x) #此处的x就是外部函数的变量x,因此inner为闭包函数

  return inner

  func=outer()

  func() # 结果为2

  可以通过函数的closure属性,查看到闭包函数所包裹的外部变量

  >>> func.__closure__

  (,)

  >>> func.__closure__[0].cell_contents

  2

  “闭”代表函数是内部的,“包”代表函数外’包裹’着对外层作用域的引用。因而无论在何处调用闭包函数,使用的仍然是包裹在其外层的变量。

  3、闭包函数的用途

  目前为止,我们得到了两种为函数体传值的方式,一种是直接将值以参数的形式传入,另外一种就是将值间接传给闭包函数

  import requests

  #方式一:

  def get(url):

  return requests.get(url).text

  #方式二:

  def page(url):

  def get():

  return requests.get(url).text #url是外部函数的变量,因此get是闭包函数

  return get

  提示:requests模块是用来模拟浏览器向网站发送请求并将页面内容下载到本地,需要事先安装:pip3 install requests

  对比两种方式,方式一在下载同一页面时需要重复传入url,而方式二只需要传一次值,就会得到一个包含指定url的闭包函数,以后调用该闭包函数无需再传url

  ……

  闭包函数的这种特性有时又称为惰性计算。使用将值包给函数的方式,在接下来的装饰器中也将大有用处。

“怎么理解关于python函数对象与闭包”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

怎么理解关于python函数对象与闭包

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

怎么理解关于python函数对象与闭包

本篇内容介绍了“怎么理解关于python函数对象与闭包”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!  一、函数对象  在 Python 中
2023-06-01

Python函数对象与闭包怎么使用

本篇内容介绍了“Python函数对象与闭包怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一 函数对象函数对象指的是函数可以被当做&r
2023-06-30

怎么理解JavaScript闭包函数

本篇内容介绍了“怎么理解JavaScript闭包函数”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!变量作用域要理解JavaScript闭包,
2023-06-25

怎么理解LeetCode关于数组的相对排序

本篇内容介绍了“怎么理解LeetCode关于数组的相对排序”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!  给你两个数组,arr1 和 ar
2023-06-02

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录