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配置文件解析模块ConfigParser使用实例
Apr 13 Python
Python回调函数用法实例详解
Jul 02 Python
对Python中gensim库word2vec的使用详解
May 08 Python
python使用for循环计算0-100的整数的和方法
Feb 01 Python
如何通过python画loss曲线的方法
Jun 26 Python
Python中的self用法详解
Aug 06 Python
在Python3 numpy中mean和average的区别详解
Aug 24 Python
Pytorch修改ResNet模型全连接层进行直接训练实例
Sep 10 Python
python中bytes和str类型的区别
Oct 21 Python
Python单例模式的四种创建方式实例解析
Mar 04 Python
Python xlrd/xlwt 创建excel文件及常用操作
Sep 24 Python
python 利用openpyxl读取Excel表格中指定的行或列教程
Feb 06 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下检测字符串是否是utf8编码的代码
2008/06/28 PHP
PHP面向对象分析设计的61条军规小结
2010/07/17 PHP
浅析php中抽象类和接口的概念以及区别
2013/06/27 PHP
php实现带读写分离功能的MySQL类完整实例
2016/07/28 PHP
PHP仿微信多图片预览上传实例代码
2016/09/13 PHP
jQuery 全选效果实现代码
2009/03/23 Javascript
js 操作符实例代码
2009/10/24 Javascript
javascript hasFocus使用实例
2010/06/29 Javascript
第六篇Bootstrap表格样式介绍
2016/06/21 Javascript
1秒50万字!js实现关键词匹配
2016/08/01 Javascript
Bootstrap CDN和本地化环境搭建
2016/10/26 Javascript
ionic进入多级目录后隐藏底部导航栏(tabs)的完美解决方案
2016/11/23 Javascript
vue2.x+webpack快速搭建前端项目框架详解
2017/11/30 Javascript
Vue页面跳转动画效果的实现方法
2018/09/23 Javascript
Vue组件通信的几种实现方法
2019/04/25 Javascript
JavaScript设计模式之门面模式原理与实现方法分析
2020/03/09 Javascript
javascript 代码是如何被压缩的示例代码
2020/05/06 Javascript
vue使用openlayers实现移动点动画
2020/09/24 Javascript
下载给定网页上图片的方法
2014/02/18 Python
Python实现数通设备端口使用情况监控实例
2015/07/15 Python
windows上安装Anaconda和python的教程详解
2017/03/28 Python
浅谈Python中带_的变量或函数命名
2017/12/04 Python
详解python string类型 bytes类型 bytearray类型
2017/12/16 Python
Python安装lz4-0.10.1遇到的坑
2018/05/20 Python
python得到单词模式的示例
2018/10/15 Python
python3.4控制用户输入与输出的方法
2018/10/17 Python
Python使用指定端口进行http请求的例子
2019/07/25 Python
python selenium实现发送带附件的邮件代码实例
2019/12/10 Python
python面向对象之类属性和类方法案例分析
2019/12/30 Python
PyCharm中如何直接使用Anaconda已安装的库
2020/05/28 Python
Python中zip函数如何使用
2020/06/04 Python
大学生个人自我鉴定
2013/12/03 职场文书
粗加工管理制度
2014/02/04 职场文书
商场消防演习方案
2014/02/12 职场文书
残疾人小组计划书
2014/04/27 职场文书
公司中层管理培训心得体会
2016/01/11 职场文书