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 cookielib 登录人人网的实现代码
Dec 19 Python
Python获取文件ssdeep值的方法
Oct 05 Python
Python爬虫信息输入及页面的切换方法
May 11 Python
Python判断中文字符串是否相等的实例
Jul 06 Python
Pycharm新手教程(只需要看这篇就够了)
Jun 18 Python
Python 使用folium绘制leaflet地图的实现方法
Jul 05 Python
tensorflow 只恢复部分模型参数的实例
Jan 06 Python
tensorboard显示空白的解决
Feb 15 Python
python 识别登录验证码图片功能的实现代码(完整代码)
Jul 03 Python
Django日志及中间件模块应用案例
Sep 10 Python
pytorch Dataset,DataLoader产生自定义的训练数据案例
Mar 03 Python
Python办公自动化之教你如何用Python将任意文件转为PDF格式
Jun 28 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
Laravel框架学习笔记(一)环境搭建
2014/10/15 PHP
Laravel5.4框架中视图共享数据的方法详解
2019/09/05 PHP
学习js所必须要知道的一些
2007/03/07 Javascript
jsp js鼠标移动到指定区域显示选项卡离开时隐藏示例
2013/06/14 Javascript
JavaScript实现复制功能各浏览器支持情况实测
2013/07/18 Javascript
jQuery中事件对象e的事件冒泡用法示例介绍
2014/04/25 Javascript
复杂的javascript窗口分帧解析
2016/02/19 Javascript
js原生实现FastClick事件的实例
2016/11/20 Javascript
微信小程序提交form操作示例
2018/12/30 Javascript
vue循环数组改变点击文字的颜色
2019/10/14 Javascript
vue 实现input表单元素的disabled示例
2019/10/28 Javascript
vue中使用极验验证码的方法(附demo)
2019/12/04 Javascript
原生javascript制作的拼图游戏实现方法详解
2020/02/23 Javascript
解决React在安装antd之后出现的Can't resolve './locale'问题(推荐)
2020/05/03 Javascript
vue 监听窗口变化对页面部分元素重新渲染操作
2020/07/28 Javascript
如何在vue中使用百度地图添加自定义覆盖物(水波纹)
2020/11/03 Javascript
[00:32]2018DOTA2亚洲邀请赛出场——VP
2018/04/04 DOTA
跟老齐学Python之私有函数和专有方法
2014/10/24 Python
Python命令行参数解析模块optparse使用实例
2015/04/13 Python
详解Python3中setuptools、Pip安装教程
2019/06/18 Python
python的pstuil模块使用方法总结
2019/07/26 Python
python操作微信自动发消息的实现(微信聊天机器人)
2020/07/14 Python
canvas画布实现手写签名效果的示例代码
2019/04/23 HTML / CSS
印度网上购物首选目的地:Flipkart
2016/08/01 全球购物
时尚设计师手表:The Watch Cabin
2018/10/06 全球购物
卡骆驰德国官方网站:Crocs德国
2019/03/29 全球购物
如何在Oracle中查看各个表、表空间占用空间的大小
2015/10/31 面试题
护士自我鉴定
2013/10/23 职场文书
优秀团干部个人事迹
2014/05/29 职场文书
联谊活动总结
2014/08/28 职场文书
2014教师党员个人自我评议
2014/09/20 职场文书
信访工作汇报材料
2014/10/27 职场文书
公司财务制度:成本管理控制制度模板
2019/11/19 职场文书
Python实战之实现简易的学生选课系统
2021/05/25 Python
Python Django / Flask如何使用Elasticsearch
2022/04/19 Python
分析SQL窗口函数之排名窗口函数
2022/04/21 Oracle