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 相关文章推荐
web.py中调用文件夹内模板的方法
Aug 26 Python
Python多线程实例教程
Sep 06 Python
python抓取网页中图片并保存到本地
Dec 01 Python
Python爬取三国演义的实现方法
Sep 12 Python
Python多线程threading和multiprocessing模块实例解析
Jan 29 Python
Django1.9 加载通过ImageField上传的图片方法
May 25 Python
python 读取竖线分隔符的文本方法
Dec 20 Python
PyTorch基本数据类型(一)
May 22 Python
python并发编程多进程 互斥锁原理解析
Aug 20 Python
Ubuntu下Python+Flask分分钟搭建自己的服务器教程
Nov 19 Python
pytorch 常用函数 max ,eq说明
Jun 28 Python
python 下载文件的多种方法汇总
Nov 17 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
使用数据库保存session的方法
2006/10/09 PHP
Symfony2函数用法实例分析
2016/03/18 PHP
thinkphp中的url跳转用法分析
2016/07/12 PHP
PHP实现删除多重数组对象属性并重新赋值的方法
2017/06/07 PHP
PHP使用XMLWriter读写xml文件操作详解
2018/07/31 PHP
PHP getName()函数讲解
2019/02/03 PHP
Laravel框架数据库迁移操作实例详解
2020/04/06 PHP
jquery $.ajax相关用法分享
2012/03/16 Javascript
Knockoutjs的环境搭建教程
2012/11/26 Javascript
jQuery中(function(){})()执行顺序的理解
2013/03/05 Javascript
JS实现仿QQ聊天窗口抖动特效
2015/05/10 Javascript
jQuery Validation PlugIn的使用方法详解
2015/12/18 Javascript
jQuery使用eraser.js插件实现擦除、刮刮卡效果的方法【附eraser.js下载】
2017/04/28 jQuery
详解如何让InstantClick兼容MathJax、百度统计等
2017/09/12 Javascript
JS实现十分钟倒计时代码实例
2018/10/18 Javascript
浅谈vue在html中出现{{}}的原因及解决方式
2020/11/16 Javascript
[46:48]DOTA2上海特级锦标赛A组小组赛#2 Secret VS CDEC第三局
2016/02/25 DOTA
python中的函数用法入门教程
2014/09/02 Python
编写Python小程序来统计测试脚本的关键字
2016/03/12 Python
将Pytorch模型从CPU转换成GPU的实现方法
2019/08/19 Python
Python应用实现双指数函数及拟合代码实例
2020/06/19 Python
Pandas中DataFrame基本函数整理(小结)
2020/07/20 Python
CSS3之背景尺寸Background-size使用介绍
2013/10/14 HTML / CSS
使用css3 属性如何丰富图片样式(圆角 阴影 渐变)
2012/11/22 HTML / CSS
详解html5 canvas 微信海报分享(个人爬坑)
2018/01/12 HTML / CSS
德国旅游网站:weg.de
2018/06/03 全球购物
系统管理员的职责包括那些?管理的对象是什么?
2016/09/20 面试题
十八大闭幕感言
2014/01/22 职场文书
大学英语专业求职信
2014/06/21 职场文书
学生会感恩节活动方案
2014/10/11 职场文书
践行三严三实心得体会
2014/10/13 职场文书
个人欠条范本
2015/07/03 职场文书
22句经典语录:送给优柔寡断和胡思乱想的朋友们
2019/12/13 职场文书
微信小程序实现聊天室功能
2021/06/14 Javascript
一小时学会TensorFlow2之基本操作2实例代码
2021/09/04 Python
ajax请求前端跨域问题原因及解决方案
2021/10/16 Javascript