项目github地址:bitcarmanlee easy-algorithm-interview-and-practice
欢迎大家star,留言,一起学习进步

1.一切皆对象

python是面向对象语言。在python中,一切皆对象,函数自然也不例外。在python中定义个最简单的函数如下:

def fun():print "hello world"

当代码执行遇到def以后,会现在内存中生成一个函数对象,这个函数对象被定义为这个函数的名字。当我们调用函数时就要指定函数的名字,通过函数名才能找到这个函数。 函数的代码段在定义时是不会执行的,只有当这个函数被调用时,函数内部的代码段才会被执行。 函数调用结束时,这个函数内部生成的所有数据都会被销毁。

函数可以作为对象可以赋值给一个变量,可以作为元素添加到集合对象中,可以作为参数值传递给其它函数,还可以当做函数的返回值被引用。

2.函数拥有对象模型的通用属性

函数作为一个对象,拥有对象模型的通用属性:id,类型和值。以上面的函数为例:

def fun():print "hello world"print id(fun)
print type(fun)
print fun
fun()

代码输出如下:

4297786264
<type 'function'>
<function fun at 0x1002b0398>
hello world

使用id加函数名,可以打印func这个函数在内存中的身份地址;
使用type加函数名可以打印func这个函数的类型;
只输入函数名,不加括号时,会输出函数在内存中的地址;
使用def语句来定义函数,func是函数名. 定义func这个函数后,函数里面的打印语句并没有执行,而是等待被调用 ,然后才会执行输出语句。

3.函数可以被引用


def fun():print "hello world"f1 = fun
print f1
print fun
f1()

最终的输出:

<function fun at 0x1002b0398>
<function fun at 0x1002b0398>
hello world

由上面的例子不难看出,把函数赋值给一个变量时,就是把这个函数在内存中的地址绑定给这个变量,这样引用这个变量时就是在调用这个函数。将fun赋值给变量f以后,他们指向的是同一个内存地址,使用f1变量名加括号相当于在调用fun()。

4.函数可以当参数传递

def fun():print "hello world"def wrapfunc(inner):print "hello wrap"inner()wrapfunc(fun)

最后程序的输出:

hello wrap
hello world

##5.函数作为返回值

def fun():print "hello world"def wrapfunc(inner):return innerprint wrapfunc(fun)

最后的输出结果为:

<function fun at 0x1002b0398>

python函数对象与闭包详解相关推荐

  1. 站长在线Python教程精讲:在Python函数中的局部变量详解

    欢迎你来到站长在线的站长学堂学习Python知识,本文学习的是<在Python函数中的局部变量详解>.本文的主要内容有:变量的作用域的概念.局部变量的概念.局部变量的举例. 目录 1.变量 ...

  2. python中的super用法详解_Python中super函数用法实例分析

    本文实例讲述了python中super函数用法.分享给大家供大家参考,具体如下: 这是个高大上的函数,在python装13手册里面介绍过多使用可显得自己是高手 23333. 但其实他还是很重要的. 简 ...

  3. python 元类 type_Python 使用元类type创建类对象常见应用详解

    本文实例讲述了Python 使用元类type创建类对象.分享给大家供大家参考,具体如下: type("123") 可以查看变量的类型;同时 type("类名", ...

  4. python中的json函数_python中装饰器、内置函数、json的详解

    装饰器 装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象. 先看简单例子: def run(): time.sleep(1 ...

  5. python实现排序函数_Python排序函数的使用方法详解

    Python排序函数完美体现了Python语言的简洁性,对于List对象,我们可以直接调用sort()函数(这里称为"方法"更合适)来进行排序,而对于其他可迭代对象(如set,di ...

  6. 在python中使用关键字define定义函数_python自定义函数def的应用详解

    这里是三岁,来和大家唠唠自定义函数,这一个神奇的东西,带大家白话玩转自定义函数 自定义函数,编程里面的精髓! def 自定义函数的必要函数:def 使用方法:def 函数名(参数1,参数2,参数-): ...

  7. python中tile的用法_python3中numpy函数tile的用法详解

    tile函数位于python模块 numpy.lib.shape_base中,他的功能是重复某个数组.比如tile(A,n),功能是将数组A重复n次,构成一个新的数组,我们还是使用具体的例子来说明问题 ...

  8. python def函数报错详解_python自定义函数def的应用详解

    这篇文章主要介绍了python自定义函数def的应用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 这里是三岁,来和大家唠唠 ...

  9. Python基础知识——函数的基本使用、函数的参数、名称空间与作用域、函数对象与闭包、 装饰器、迭代器、生成器与yield、函数递归、面向过程与函数式(map、reduce、filter)

    文章目录 1 函数的基本使用 一 引入 二 定义函数 三 调用函数与函数返回值 2 函数的参数 一 形参与实参介绍 二 形参与实参的具体使用 2.1 位置参数 2.2 关键字参数 2.3 默认参数 2 ...

最新文章

  1. mysql 锁-比较详细、深入的介绍
  2. Android之SDK、NDK、JNI和so文件
  3. 1001: [BeiJing2006]狼抓兔子
  4. 小程序中 使用fixed自定义弹窗时,底部长页面禁止滚动
  5. 反质数问题,求不大于n的最大反质数
  6. 标准C/C++程序通过gSOAP调用WebService
  7. Storm,Spark和Samza
  8. 34(数组). 在排序数组中查找元素的第一个和最后一个位置
  9. Intel Quick Sync Video Encoder 2
  10. python3数据库同步_Python同步Mysql不同数据库的表
  11. To_Heart—题解——POI2012 Rendezvous
  12. 【网络实验箱02】-odl-neutron北向抓包分析
  13. 道路交通事故现场计算机制图,GA 49-2014_道路交通事故现场图绘制.pdf 文档全文预览...
  14. Vue使用快速使用Echarts图标以及使用水滴图
  15. vs2013 - 高亮设置 括号匹配 (方括号) 大括号匹配 Visual Studio 2013
  16. 金庸笔下人物以及网络俏皮英语对应关系表-诗词
  17. 大数据人工智能领域从菜鸟到高手晋级指南
  18. 机械电子方向的一点心得
  19. windows ce linux,Win CE + Linux双系统 总结
  20. 编译caffe时,遇到问题:无法打开文件“libboost_thread-vc120-mt-gd-1_58.lib

热门文章

  1. 【英语学习】坚定目标,坚持去做
  2. php多个 运算_三元运算符中的多个语句 - php
  3. 对于p、v 操作的理解
  4. Intellij IDEA快捷键大全汇总(一)
  5. 用C语言编程计算阶乘
  6. 秒懂Kotlin之协变(Covariance)逆变(Contravariance)与抗变(Invariant)
  7. 速卖通开店流程及费用
  8. mybatis in 参数动态拼接
  9. 使用HBuilder制作一个简单的HTML5动漫网页——铠甲战士
  10. NOI2013快餐店【图上找环+线段树】