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 Web框架Pylons中使用MongoDB的例子
Dec 03 Python
Python变量作用范围实例分析
Jul 07 Python
分享几道你可能遇到的python面试题
Jul 24 Python
python基础_文件操作实现全文或单行替换的方法
Sep 04 Python
浅谈python中copy和deepcopy中的区别
Oct 23 Python
python实现员工管理系统
Jan 11 Python
Python实现定时精度可调节的定时器
Apr 15 Python
python占位符输入方式实例
May 27 Python
python模块常用用法实例详解
Oct 17 Python
Django操作session 的方法
Mar 09 Python
Python threading模块condition原理及运行流程详解
Oct 05 Python
Python基于Socket实现简易多人聊天室的示例代码
Nov 29 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
德生PL990的分析评价
2021/03/02 无线电
PHP中Restful api 错误提示返回值实现思路
2016/04/12 PHP
php基于dom实现读取图书xml格式数据的方法
2017/02/03 PHP
PHP中的访问修饰符简单比较
2019/02/02 PHP
Laravel如何实现适合Api的异常处理响应格式
2020/06/14 PHP
基于ThinkPHP删除目录及目录文件函数
2020/10/28 PHP
HTTP状态代码以及定义(解释)
2007/02/02 Javascript
JS关键字变色实现思路及代码
2013/02/21 Javascript
jQuery实现可拖动的浮动层完整代码
2013/05/27 Javascript
JS测试显示屏分辨率以及屏幕尺寸的方法
2013/11/22 Javascript
jquery的ajax异步请求接收返回json数据实例
2014/06/16 Javascript
jQuery之Deferred对象详解
2014/09/04 Javascript
javascript中通过arguments参数伪装方法重载
2014/10/08 Javascript
原生js实现autocomplete插件
2016/04/14 Javascript
快速实现JS图片懒加载(可视区域加载)示例代码
2017/01/04 Javascript
详解AngularJS用Interceptors来统一处理HTTP请求和响应
2017/06/08 Javascript
JS+WCF实现进度条实时监测数据加载量的方法详解
2017/12/19 Javascript
解决Vue 项目打包后favicon无法正常显示的问题
2018/09/01 Javascript
在Node.js下运用MQTT协议实现即时通讯及离线推送的方法
2019/01/24 Javascript
Vue-cli 移动端布局和动画使用详解
2020/08/10 Javascript
three.js 实现露珠滴落动画效果的示例代码
2021/03/01 Javascript
[53:15]2018DOTA2亚洲邀请赛3月29日 小组赛A组 LGD VS TNC
2018/03/30 DOTA
[47:45]Liquid vs OG 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Python3读取UTF-8文件及统计文件行数的方法
2015/05/22 Python
浅谈python之新式类
2018/08/12 Python
Python中logging.NullHandler 的使用教程
2018/11/29 Python
python 获取url中的参数列表实例
2018/12/18 Python
Python+Xlwings 删除Excel的行和列
2020/12/19 Python
教育科学研究生自荐信
2013/10/09 职场文书
2014年情人节活动方案
2014/02/16 职场文书
《从现在开始》教学反思
2014/04/15 职场文书
党员组织生活会发言材料
2014/10/17 职场文书
2014年学校团委工作总结
2014/12/20 职场文书
特此通知格式
2015/04/27 职场文书
2015年节能降耗工作总结
2015/05/22 职场文书
微软PC Health Check电脑健康状况检查应用下载(Win11配置检测工具)
2021/06/26 数码科技