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中装饰器的用法
Apr 27 Python
Python抓取框架 Scrapy的架构
Aug 12 Python
python常见排序算法基础教程
Apr 13 Python
Python的时间模块datetime详解
Apr 17 Python
python简单线程和协程学习心得(分享)
Jun 14 Python
Pycharm编辑器技巧之自动导入模块详解
Jul 18 Python
python读取视频流提取视频帧的两种方法
Oct 22 Python
Python实现模拟登录网易邮箱的方法示例
Jul 05 Python
Flask入门之上传文件到服务器的方法示例
Jul 18 Python
使用Python测试Ping主机IP和某端口是否开放的实例
Dec 17 Python
浅析python实现动态规划背包问题
Dec 31 Python
Python读取ini配置文件传参的简单示例
Jan 05 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实现的CSS更新类实例
2014/09/22 PHP
PHP中使用SimpleXML检查XML文件结构实例
2015/01/07 PHP
thinkphp项目部署到Linux服务器上报错“模板不存在”如何解决
2016/04/27 PHP
thinkPHP5.0框架应用请求生命周期分析
2017/03/25 PHP
php微信扫码支付 php公众号支付
2019/03/24 PHP
JavaScript中数组对象的那些自带方法介绍
2013/03/12 Javascript
js中的异常处理try...catch使用介绍
2013/09/21 Javascript
关闭ie窗口清除Session的解决方法
2014/01/10 Javascript
node.js中的http.request.end方法使用说明
2014/12/10 Javascript
JavaScript实现获取dom中class的方法
2015/02/09 Javascript
asp.net+js实现金额格式化
2015/02/27 Javascript
Jquery基础教程之DOM操作
2015/08/19 Javascript
Perl Substr()函数及函数的应用
2015/12/16 Javascript
微信小程序 地图定位简单实例
2016/10/14 Javascript
jQuery使用siblings获取某元素所有同辈(兄弟姐妹)元素用法示例
2017/01/30 Javascript
详解react-native-fs插件的使用以及遇到的坑
2017/09/12 Javascript
vue.extend实现alert模态框弹窗组件
2018/04/28 Javascript
用ES6写全屏滚动插件的示例代码
2018/05/02 Javascript
Vue 页面状态保持页面间数据传输的一种方法(推荐)
2018/11/01 Javascript
Element ui 下拉多选时新增一个选择所有的选项
2019/08/21 Javascript
vue项目使用.env文件配置全局环境变量的方法
2019/10/24 Javascript
[02:32]【DOTA2亚洲邀请赛】iceice,梦开始的地方
2017/03/13 DOTA
在Python中使用NLTK库实现对词干的提取的教程
2015/04/08 Python
Matplotlib 绘制饼图解决文字重叠的方法
2020/07/24 Python
详解python日志输出使用配置文件格式
2021/02/10 Python
法国综合购物网站:RueDuCommerce
2016/09/12 全球购物
以实惠的价格提供高品质的时尚:Newchic
2018/01/18 全球购物
车间班组长的职责
2013/12/13 职场文书
电工工作职责范本
2014/02/22 职场文书
经济职业学院毕业生自荐书
2014/03/17 职场文书
留学生求职信
2014/06/03 职场文书
大学生志愿者活动总结
2014/06/27 职场文书
英语复习计划
2015/01/19 职场文书
2015年防汛工作总结
2015/05/15 职场文书
七夕情人节问候语
2015/11/11 职场文书
2016年共产党员公开承诺书
2016/03/24 职场文书