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 相关文章推荐
以一段代码为实例快速入门Python2.7
Mar 31 Python
python中的装饰器详解
Apr 13 Python
linux环境下的python安装过程图解(含setuptools)
Nov 22 Python
浅析python3字符串格式化format()函数的简单用法
Dec 07 Python
Python3调用百度AI识别图片中的文字功能示例【测试可用】
Mar 13 Python
python实现倒计时小工具
Jul 29 Python
Python字典底层实现原理详解
Dec 18 Python
jupyter notebook的安装与使用详解
May 18 Python
TensorFlow keras卷积神经网络 添加L2正则化方式
May 22 Python
浅谈keras 模型用于预测时的注意事项
Jun 27 Python
Python grequests模块使用场景及代码实例
Aug 10 Python
详解python with 上下文管理器
Sep 02 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中在数据库中保存Checkbox数据(1)
2006/10/09 PHP
文章推荐系统(三)
2006/10/09 PHP
PDO版本问题 Invalid parameter number: no parameters were bound
2013/01/06 PHP
php+js iframe实现上传头像界面无跳转
2014/04/29 PHP
深入解析WordPress中加载模板的get_template_part函数
2016/01/11 PHP
JQuery select标签操作代码段
2010/05/16 Javascript
javascrpt绑定事件之匿名函数无法解除绑定问题
2012/12/06 Javascript
浅谈JavaScript数据类型及转换
2015/02/28 Javascript
jquery做个日期选择适用于手机端示例
2017/01/10 Javascript
vue.js的提示组件
2017/03/02 Javascript
基于vue实现多引擎搜索及关键字提示
2017/03/16 Javascript
JS表单提交验证、input(type=number) 去三角 刷新验证码
2017/06/21 Javascript
vue+mousemove实现鼠标拖动功能(拖动过快失效问题解决方法)
2018/08/24 Javascript
Vue  webpack 项目自动打包压缩成zip文件的方法
2019/07/24 Javascript
vuejs element table 表格添加行,修改,单独删除行,批量删除行操作
2020/07/18 Javascript
vue 动态给每个页面添加title、关键词和描述的方法
2020/08/28 Javascript
Python常用模块介绍
2014/11/21 Python
python通过pil模块获得图片exif信息的方法
2015/03/16 Python
PyQt5每天必学之切换按钮
2020/08/20 Python
Python将一个CSV文件里的数据追加到另一个CSV文件的方法
2018/07/04 Python
Python实现iOS自动化打包详解步骤
2018/10/03 Python
python对文件目录的操作方法实例总结
2019/06/24 Python
python hashlib加密实现代码
2019/10/17 Python
Django bulk_create()、update()与数据库事务的效率对比分析
2020/05/15 Python
PyTorch中torch.tensor与torch.Tensor的区别详解
2020/05/18 Python
专门经营化妆刷的美国彩妆品牌:Sigma Beauty
2017/09/11 全球购物
匡威西班牙官网:Converse西班牙
2019/10/01 全球购物
SIDESTEP荷兰:在线购买鞋子
2019/11/18 全球购物
写出SQL四条最基本的数据操作语句(DML)
2012/12/12 面试题
信息部岗位职责
2013/11/12 职场文书
淘宝客服自我总结鉴定
2014/01/25 职场文书
优秀毕业生求职信
2014/06/05 职场文书
八项规定对照检查材料
2014/08/31 职场文书
服务明星事迹材料
2014/12/29 职场文书
环保建议书范文
2015/09/14 职场文书
教你怎么用python实现字符串转日期
2021/05/24 Python