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素数检测实例分析
Jun 15 Python
使用Python的Bottle框架写一个简单的服务接口的示例
Aug 25 Python
python编码总结(编码类型、格式、转码)
Jul 01 Python
python模拟登录并且保持cookie的方法详解
Apr 04 Python
Python PyQt5标准对话框用法示例
Aug 23 Python
Python3 伪装浏览器的方法示例
Nov 23 Python
flask入门之表单的实现
Jul 18 Python
python实现向微信用户发送每日一句 python实现微信聊天机器人
Mar 27 Python
python opencv根据颜色进行目标检测的方法示例
Jan 15 Python
PyQt5事件处理之定时在控件上显示信息的代码
Mar 25 Python
Python垃圾回收机制三种实现方法
Apr 27 Python
使用PyWeChatSpy自动回复微信拍一拍功能的实现代码
Jul 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图片加中文水印实现代码分享
2012/10/31 PHP
Extjs学习笔记之五 一个小细节renderTo和applyTo的区别
2010/01/07 Javascript
jquery实现简单的拖拽效果实例兼容所有主流浏览器
2013/06/21 Javascript
JS处理json日期格式化问题
2015/10/01 Javascript
jQuery中trigger()与bind()用法分析
2015/12/18 Javascript
Bootstrap缩略图与警告框学习使用
2017/02/08 Javascript
JavaScript轻松创建级联函数的方法示例
2017/02/10 Javascript
使用jQuery卸载全部事件的思路详解
2017/04/03 jQuery
老生常谈js中的MVC
2017/07/25 Javascript
vue+webpack实现异步加载三种用法示例详解
2018/04/24 Javascript
Vue移动端右滑屏幕返回上一页附源码下载
2019/06/26 Javascript
javascript设计模式 ? 简单工厂模式原理与应用实例分析
2020/04/09 Javascript
jQuery 动态粒子效果示例代码
2020/07/07 jQuery
vue 动态添加的路由页面刷新时失效的原因及解决方案
2021/02/26 Vue.js
python实现JAVA源代码从ANSI到UTF-8的批量转换方法
2015/08/10 Python
python发送邮件实例分享
2017/07/28 Python
Python 访问限制 private public的详细介绍
2018/10/16 Python
Python设计模式之组合模式原理与用法实例分析
2019/01/11 Python
详解python和matlab的优势与区别
2019/06/28 Python
Python开发之身份证验证库id_validator验证身份证号合法性及根据身份证号返回住址年龄等信息
2020/03/20 Python
Pytest框架之fixture的详细使用教程
2020/04/07 Python
Python学习笔记之装饰器
2020/08/06 Python
Python Selenium XPath根据文本内容查找元素的方法
2020/12/07 Python
纯CSS3打造属于自己的“小黄人”
2016/03/14 HTML / CSS
HTML5实现Notification API桌面通知功能
2016/03/02 HTML / CSS
雅诗兰黛香港官网:Estee Lauder香港
2017/09/26 全球购物
一些Solaris面试题
2015/12/22 面试题
Java程序开发中如何应用线程
2016/03/03 面试题
大一期末自我鉴定
2013/12/13 职场文书
大学生实习思想汇报
2014/01/12 职场文书
校运会口号
2014/06/18 职场文书
高中生个性发展自我评价
2015/03/09 职场文书
运动会100米广播稿
2015/08/19 职场文书
2019思想汇报范文
2019/05/21 职场文书
解决Swagger2返回map复杂结构不能解析的问题
2021/07/02 Java/Android
深入讲解数据库中Decimal类型的使用以及实现方法
2022/02/15 MySQL