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抓taobao图片爬虫
Oct 26 Python
Python性能优化技巧
Mar 09 Python
在Ubuntu系统下安装使用Python的GUI工具wxPython
Feb 18 Python
Python爬虫爬验证码实现功能详解
Apr 14 Python
python基本语法练习实例
Sep 19 Python
numpy.linspace 生成等差数组的方法
Jul 02 Python
PyCharm代码回滚,恢复历史版本的解决方法
Oct 22 Python
解决python中使用PYQT时中文乱码问题
Jun 17 Python
Python 循环终止语句的三种方法小结
Jun 24 Python
如何使用Python标准库进行性能测试
Jun 25 Python
python paramiko远程服务器终端操作过程解析
Dec 14 Python
python数据库开发之MongoDB安装及Python3操作MongoDB数据库详细方法与实例
Mar 18 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/10/09 PHP
PHP中的MYSQL常用函数(php下操作数据库必备)
2010/09/12 PHP
php调用方法mssql_fetch_row、mssql_fetch_array、mssql_fetch_assoc和mssql_fetch_objcect读取数据的区别
2012/08/08 PHP
PHP的switch判断语句的“高级”用法详解
2014/10/01 PHP
php连接MSsql server的五种方法总结
2018/03/04 PHP
phpQuery采集网页实现代码实例
2020/04/02 PHP
javascript学习笔记(三)显示当时时间的代码
2011/04/08 Javascript
jQuery实现div浮动层跟随页面滚动效果
2014/02/11 Javascript
JavaScript获取指定元素位置的方法
2015/04/08 Javascript
jQuery图片轮播插件——前端开发必看
2016/05/31 Javascript
基于Marquee.js插件实现的跑马灯效果示例
2017/01/25 Javascript
详解angularJs指令的3种绑定策略
2017/04/13 Javascript
React-router中结合webpack实现按需加载实例
2017/05/25 Javascript
JavaScript判断浏览器和hack滚动条的写法
2017/07/23 Javascript
react 实现页面代码分割、按需加载的方法
2018/04/03 Javascript
JavaScript new对象的四个过程实例浅析
2018/07/31 Javascript
用POSTMAN发送JSON格式的POST请求示例
2018/09/04 Javascript
node 版本切换的实现
2020/02/02 Javascript
[00:52]黑暗之门更新 新英雄孽主驾临DOTA2
2016/08/24 DOTA
python 动态获取当前运行的类名和函数名的方法
2014/04/15 Python
详解python进行mp3格式判断
2016/12/23 Python
python使用tcp实现局域网内文件传输
2020/03/20 Python
解决Python运行文件出现out of memory框的问题
2018/12/03 Python
在Python中字典根据多项规则排序的方法
2019/01/21 Python
在Python 字典中一键对应多个值的实例
2019/02/03 Python
Pycharm无法打开双击没反应的问题及解决方案
2020/08/17 Python
python 从list中随机取值的方法
2020/11/16 Python
倩碧美国官网:Clinique美国
2016/07/20 全球购物
澳大利亚领先的内衣店:Bendon Lingerie澳大利亚
2020/05/15 全球购物
如何利用find命令查找文件
2016/11/18 面试题
学校爱心捐款倡议书
2014/05/13 职场文书
感恩节活动策划方案
2014/05/16 职场文书
教师职位说明书
2014/07/29 职场文书
诉讼授权委托书
2014/10/15 职场文书
2016先进工作者事迹材料
2016/02/25 职场文书
go使用Gin框架利用阿里云实现短信验证码功能
2021/08/04 Golang