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定时执行之Timer用法示例
May 27 Python
Django中URL视图函数的一些高级概念介绍
Jul 20 Python
如何在Python中编写并发程序
Feb 27 Python
python3学生名片管理v2.0版
Nov 29 Python
用Python写一个模拟qq聊天小程序的代码实例
Mar 06 Python
使用python os模块复制文件到指定文件夹的方法
Aug 22 Python
使用Python爬虫库BeautifulSoup遍历文档树并对标签进行操作详解
Jan 25 Python
解决Tensorflow 内存泄露问题
Feb 05 Python
基于Python获取docx/doc文件内容代码解析
Feb 17 Python
python等待10秒执行下一命令的方法
Jul 19 Python
python 如何做一个识别率百分百的OCR
May 29 Python
使用python+pygame开发消消乐游戏附完整源码
Jun 10 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
Yii入门教程之目录结构、入口文件及路由设置
2014/11/25 PHP
php中memcache 基本操作实例
2015/05/17 PHP
解决php-fpm.service not found问题的办法
2017/06/06 PHP
JS 自动安装exe程序
2008/11/30 Javascript
js对图片base64编码字符串进行解码并输出图像示例
2014/03/17 Javascript
jquery mobile页面跳转后样式丢失js失效的解决方法
2014/09/06 Javascript
Javascript实现字数统计
2015/07/03 Javascript
javascript html5摇一摇功能的实现
2016/04/19 Javascript
JavaScript闭包实例详解
2016/06/03 Javascript
Vuejs第十三篇之组件——杂项
2016/09/09 Javascript
基于javascript实现最简单选项卡切换
2017/02/01 Javascript
原生js实现秒表计时器功能
2017/02/16 Javascript
浅谈sass在vue注意的地方
2017/08/10 Javascript
react中的ajax封装实例详解
2017/10/17 Javascript
typescript nodejs 依赖注入实现方法代码详解
2019/07/21 NodeJs
JavaScript实现抖音罗盘时钟
2019/10/11 Javascript
Vue-Ant Design Vue-普通及自定义校验实例
2020/10/24 Javascript
详解python函数传参是传值还是传引用
2018/01/16 Python
Python3连接SQLServer、Oracle、MySql的方法
2018/06/28 Python
使用python生成杨辉三角形的示例代码
2018/08/29 Python
Python面向对象之类的内置attr属性示例
2018/12/14 Python
PyQt4实时显示文本内容GUI的示例
2019/06/14 Python
Django+python服务器部署与环境部署教程详解
2020/03/30 Python
深入了解Python 变量作用域
2020/07/24 Python
Needle & Thread官网:英国仙女品牌
2018/01/13 全球购物
Carmen Sol官网:购买果冻鞋、手袋和配件
2021/01/01 全球购物
销售冠军获奖感言
2014/02/03 职场文书
揭牌仪式主持词
2014/03/19 职场文书
市场部业务员岗位职责
2014/04/02 职场文书
高中语文课后反思
2014/04/27 职场文书
工作说明书格式
2014/07/29 职场文书
营业用房租赁协议书
2014/11/26 职场文书
2015年个人思想总结
2015/03/09 职场文书
2015年父亲节寄语
2015/03/23 职场文书
Python matplotlib安装以及实现简单曲线的绘制
2022/04/26 Python
在SQL Server中使用 Try Catch 处理异常的示例详解
2022/07/15 SQL Server