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中type的构造函数参数含义说明
Jun 21 Python
python爬虫_微信公众号推送信息爬取的实例
Oct 23 Python
PyQt5每天必学之QSplitter实现窗口分隔
Apr 19 Python
十分钟利用Python制作属于你自己的个性logo
May 07 Python
Python初学者常见错误详解
Jul 02 Python
python中eval与int的区别浅析
Aug 11 Python
python 利用turtle模块画出没有角的方格
Nov 23 Python
浅析Python3 pip换源问题
Jan 06 Python
python中对二维列表中一维列表的调用方法
Jun 07 Python
python实现学生管理系统开发
Jul 24 Python
解决python和pycharm安装gmpy2 出现ERROR的问题
Aug 28 Python
Python中的turtle画箭头,矩形,五角星
Mar 16 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
S900/ ETON E1-XM 收音机
2021/03/02 无线电
PHP EOT定界符的使用详解
2008/09/30 PHP
php通过修改header强制图片下载的方法
2015/03/24 PHP
PHP的mysqli_stat()函数讲解
2019/01/23 PHP
jQuery EasyUI API 中文文档 - Calendar日历使用
2011/10/19 Javascript
jquery图片延迟加载 前端开发技能必备系列
2012/06/18 Javascript
js 操作select和option常用代码整理
2012/12/13 Javascript
检查输入的是否是数字使用keyCode配合onkeypress事件
2014/01/23 Javascript
jQuery学习笔记之jQuery.fn.init()的参数分析
2014/06/09 Javascript
jQuery实现提交按钮点击后变成正在处理字样并禁止点击的方法
2015/03/24 Javascript
jQuery带进度条全屏图片轮播特效代码分享
2020/06/28 Javascript
jQuery中bind(),live(),delegate(),on()绑定事件方法实例详解
2016/01/19 Javascript
prototype框架中美元符号$用法分析
2016/01/22 Javascript
从0开始学Vue
2016/10/27 Javascript
express框架实现基于Websocket建立的简易聊天室
2017/08/10 Javascript
javascript高级模块化require.js的具体使用方法
2017/10/31 Javascript
详解redux异步操作实践
2018/08/15 Javascript
详解从0开始搭建微信小程序(前后端)的全过程
2019/04/15 Javascript
vue获取验证码倒计时组件
2019/08/26 Javascript
JavaScript实现答题评分功能页面
2020/06/24 Javascript
[58:21]DOTA2亚洲邀请赛 4.3 突围赛 Liquid vs VGJ.T 第二场
2018/04/04 DOTA
Python使用QRCode模块生成二维码实例详解
2017/06/14 Python
在Python中使用AOP实现Redis缓存示例
2017/07/11 Python
python 对txt中每行内容进行批量替换的方法
2018/07/11 Python
python将.ppm格式图片转换成.jpg格式文件的方法
2018/10/27 Python
详解Java中一维、二维数组在内存中的结构
2021/02/11 Python
绝对令人的惊叹的CSS3折叠效果(3D效果)整理
2012/12/30 HTML / CSS
Ryderwear美国官网:澳大利亚高端健身训练装备品牌
2018/04/24 全球购物
英国手机零售商:Metrofone
2019/03/18 全球购物
Europcar澳大利亚官网:全球汽车租赁领域的领导者
2019/03/24 全球购物
信息专业毕业生五年职业规划参考
2014/02/06 职场文书
本科应届生求职信
2014/08/05 职场文书
捐资助学感谢信
2015/01/21 职场文书
初二英语教学反思
2016/02/15 职场文书
60条职场经典语录,总有一条能触动你的心
2019/08/21 职场文书
使用react+redux实现计数器功能及遇到问题
2021/06/02 Javascript