python中将函数赋值给变量时需要注意的一些问题


Posted in Python onAugust 18, 2017

前言

本文主要给大家介绍的是关于python将函数赋值给变量时需要注意的一些问题,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍:

见过两种函数赋值给变量的形式,一种是

a=f

另一种是

a=f()

这两种形式是有区别的,分别总结一下。

1.a=f型属于将变量指向函数。

用代码验证一下:

>>> f = abs
>>> f(-10)
10

说明变量f现在已经指向了abs函数本身。直接调用abs()函数和调用变量f()完全相同。这是廖雪峰老师python教程上的例子,现在调用f()和调用abs()是一样的了。

再举一个工厂函数的例子:

def maker(N):

def action(X):



return X**N


return action

这个嵌套函数的外层返回值为内层函数的函数名,注意没有括号,这里有无括号是有很大区别的。此时调用外部函数:

f=maker(2)

那么如上所述,f便指向了action函数,且限制条件为N=2,可以理解为f为N等于2时的action函数。我们来调用它:

>>> f(3)
9

证明f和action函数是一样的。

2.a=f()型属于将f()的返回值赋值给a的过程

这里的a仅仅接收f()的返回值,如果f()没有返回值,那么a即被赋值为None。这里值得注意的一点是,在a=f()的执行过程中,f()会运行一次,这也是我刚刚搞明白的,如:

>>> def add(x,y):

z=x+y


print(z)
>>>a=add(3,4)
7

这里虽然只有一个赋值语句执行了,但是却输出了结果7,说明赋值过程函数add执行了,然而a的值为None,且只能通过print语句才可以显示。不只是赋值过程函数会执行,写在return语句中也会如此。

>>>def log(func):
 def wrapper(*args, **kw):
  
 print('call %s():' % func.__name__)
  
 return func(*args, **kw)
 
return wrapper
>>>@log
>>>def now():
 
 print('2015-3-25')

这是廖雪峰老师python教程装饰器一节的例程,刚开始我以为return func(*args,**kw)这个语句是返回了now()函数(即func函数)的返回值,后来发现now函数没有返回值,即为None,所以其实是这个语句在赋值过程,

 func(*args,**kw)执行了,即函数now的print语句执行了。

下面的习题中,一个变形是要求在函数调用的前后打印出'begin call'和'end call',下面一位网友的程序是这么写的:

def wrapper(*args,**kw):
   print(t+'begin call')
   result=func(*args,**kw)
   print(t+'end call')
   return result

开始不太理解为什么使用result=func(*args,**kw)这句,后来理解后才明白其实赋值本身并没有意义,只是这句话同时使得func函数运行了,所以写成

def wrapper(*args,**kw):
   print(t+'begin call')
   func(*args,**kw)
   print(t+'end call')

结果也是一样的。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
python中mechanize库的简单使用示例
Jan 10 Python
Python 自动刷博客浏览量实例代码
Jun 14 Python
Python 列表理解及使用方法
Oct 27 Python
EM算法的python实现的方法步骤
Jan 02 Python
django2用iframe标签完成网页内嵌播放b站视频功能
Jun 20 Python
Python3中函数参数传递方式实例详解
May 05 Python
Django打印出在数据库中执行的语句问题
Jul 25 Python
使用pyecharts生成Echarts网页的实例
Aug 12 Python
Django中的AutoField字段使用
May 18 Python
基于Python正确读取资源文件
Sep 14 Python
15个Pythonic的代码示例(值得收藏)
Oct 29 Python
秀!学妹看见都惊呆的Python小招数!【详细语言特性使用技巧】
Apr 27 Python
python中子类调用父类函数的方法示例
Aug 18 #Python
Python设计实现的计算器功能完整实例
Aug 18 #Python
python中类和实例如何绑定属性与方法示例详解
Aug 18 #Python
Python实现基于多线程、多用户的FTP服务器与客户端功能完整实例
Aug 18 #Python
对python中return和print的一些理解
Aug 18 #Python
浅析Python中return和finally共同挖的坑
Aug 18 #Python
Python多进程multiprocessing用法实例分析
Aug 18 #Python
You might like
用函数读出数据表内容放入二维数组
2006/10/09 PHP
PHP中的正规表达式(一)
2006/10/09 PHP
PHP页面间传递参数实例代码
2008/06/05 PHP
php 格式化数字的时候注意数字的范围
2010/04/13 PHP
PHP数组排序函数合集 以及它们之间的联系分析
2013/06/27 PHP
php 修改、增加xml结点属性的实现代码
2013/10/22 PHP
php使用PDO从数据库表中读取数据的实现方法(必看)
2017/06/02 PHP
PHP实现页面静态化深入讲解
2021/03/04 PHP
动态加载外部javascript文件的函数代码分享
2011/07/28 Javascript
日历查询的算法 如何计算某一天是星期几
2012/12/12 Javascript
JS简单的图片放大缩小的两种方法
2013/11/11 Javascript
js实现数组去重、判断数组以及对象中的内容是否相同
2013/11/29 Javascript
jQuery Easyui使用(一)之可折叠面板的布局手风琴菜单
2016/08/17 Javascript
vue2.0在table中实现全选和反选的示例代码
2017/11/04 Javascript
layui之select的option叠加问题的解决方法
2018/03/08 Javascript
vue实现个人信息查看和密码修改功能
2018/05/06 Javascript
angularjs性能优化的方法
2018/09/05 Javascript
js判断鼠标移入移出方向的方法
2020/06/24 Javascript
Vue-cli4 配置 element-ui 按需引入操作
2020/09/11 Javascript
[02:42]DOTA2英雄基础教程 杰奇洛
2013/12/23 DOTA
[01:07:19]DOTA2-DPC中国联赛 正赛 CDEC vs XG BO3 第一场 1月19日
2021/03/11 DOTA
收集的几个Python小技巧分享
2014/11/22 Python
在Mac OS上部署Nginx和FastCGI以及Flask框架的教程
2015/05/02 Python
Python实现文件按照日期命名的方法
2015/07/09 Python
Python中的复制操作及copy模块中的浅拷贝与深拷贝方法
2016/07/02 Python
python 打印出所有的对象/模块的属性(实例代码)
2016/09/11 Python
Python科学画图代码分享
2017/11/29 Python
wxPython+Matplotlib绘制折线图表
2019/11/19 Python
HTML5页面中尝试调起APP功能
2017/09/12 HTML / CSS
详解使用双缓存解决Canvas clearRect引起的闪屏问题
2019/04/29 HTML / CSS
优秀干部获奖感言
2014/01/31 职场文书
单位委托函范文
2015/01/29 职场文书
求职简历自我评价2015
2015/03/10 职场文书
python基础之函数的定义和调用
2021/10/24 Python
MySQL为数据表建立索引的原则详解
2022/03/03 MySQL
Nginx实现负载均衡的项目实践
2022/03/18 Servers