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参数和作用域的使用
Nov 01 Python
python聊天程序实例代码分享
Nov 18 Python
python skimage 连通性区域检测方法
Jun 21 Python
python2 与 pyhton3的输入语句写法小结
Sep 10 Python
django解决跨域请求的问题
Nov 11 Python
Python实现的线性回归算法示例【附csv文件下载】
Dec 29 Python
python按比例随机切分数据的实现
Jul 11 Python
django-rest-swagger的优化使用方法
Aug 29 Python
Python连接SQLite数据库并进行增册改查操作方法详解
Feb 18 Python
解决python打开https出现certificate verify failed的问题
Sep 03 Python
Python 实现劳拉游戏的实例代码(四连环、重力四子棋)
Mar 03 Python
python实现监听键盘
Apr 26 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
用PHP中的 == 运算符进行字符串比较
2006/11/26 PHP
PHP实现文件下载详解
2014/11/27 PHP
Yii框架日志记录Logging操作示例
2018/07/12 PHP
详解阿里云视频直播PHP-SDK接入教程
2020/07/09 PHP
JavaScript 原型学习总结
2010/10/29 Javascript
js算法中的排序、数组去重详细概述
2013/10/14 Javascript
JavaScript中提前声明变量或函数例子
2014/11/12 Javascript
javascript制作坦克大战全纪录(2)
2014/11/27 Javascript
angularJS 中$scope方法使用指南
2015/02/09 Javascript
jQuery实现在列表的首行添加数据
2015/05/19 Javascript
jQuery点击改变class并toggle及toggleClass()方法定义用法
2015/12/11 Javascript
理解Javascript图片预加载
2016/02/23 Javascript
JavaScript面试题(指针、帽子和女朋友)
2016/11/23 Javascript
node学习记录之搭建web服务器教程
2017/02/16 Javascript
详解微信小程序 登录获取unionid
2017/06/27 Javascript
JS鼠标滚动分页效果示例
2017/07/05 Javascript
在vue中实现点击选择框阻止弹出层消失的方法
2018/09/15 Javascript
JS实现的贪吃蛇游戏完整实例
2019/01/18 Javascript
Node.js + express基本用法教程
2019/03/14 Javascript
微信小程序实现图片选择并预览功能
2019/07/25 Javascript
浅谈Vue2.4.0 $attrs与inheritAttrs的具体使用
2020/03/08 Javascript
vue中使用router全局守卫实现页面拦截的示例
2020/10/23 Javascript
django输出html内容的实例
2018/05/27 Python
10分钟教你用Python实现微信自动回复功能
2018/11/28 Python
Python 带有参数的装饰器实例代码详解
2018/12/06 Python
Python集合基本概念与相关操作实例分析
2019/10/30 Python
使用TensorFlow直接获取处理MNIST数据方式
2020/02/10 Python
Python基于百度AI实现OCR文字识别
2020/04/02 Python
Python 中由 yield 实现异步操作
2020/05/04 Python
几道Web/Ajax的面试题
2016/11/05 面试题
软件售后服务方案
2014/05/29 职场文书
2014年财务科工作总结
2014/11/11 职场文书
中班下学期个人总结
2015/02/12 职场文书
钱学森观后感
2015/06/04 职场文书
如何用JavaScipt测网速
2021/05/09 Javascript
写好Python代码的几条重要技巧
2021/05/21 Python