变量赋值是我们在日常开发中经常会遇到的一个问题,下面这篇文章主要给大家介绍了关于python中将函数赋值给变量时需要注意的一些问题,文中通过示例代码介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。

前言

本文主要给大家介绍的是关于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中函数赋值给变量时的问题注意详解相关推荐

  1. python中单行注释采用的符号是什么_Python注释符号使用说明(多行注释和单行注释),用法,详解,攻略...

    Python 语言允许在任何地方插入空字符或注释,但不能插入到标识符和字符串中间. Python 源代码的注释有两种形式,分别是单行注释和多行注释: -单行注释-------------------- ...

  2. ip地址转换数字函数 iton_c# – RabbitMQ CreateConneciton问题 – 在一个应用程序中运行,但在另一个应用程序中运行...

    所以这是连接代码. var factory = new ConnectionFactory { HostName = "myserver", UserName = "te ...

  3. python连续两个冒号是什么成语_python中双冒号

    1.字符串转义序列转义字符 描述(在行尾时) 续行符\ 反斜杠符号' 单引号" 双引号a 响铃b 退格(Backspace)e 转义000 空n 换行v 纵向制表符t 横向制表符r 回车f ...

  4. arcmap中有火星坐标码_在ArcMap中使用坐标值转换一个CAD文件中的坐标位置

    (2013-04-13 20:51:19) 转 载 ▼ 标签: 股票 分类: GIS 技术研究 您现在的位置 : 首页 -> 知识库 -> ArcGIS Desktop -> 技术文 ...

  5. 如何将多个文件夹中的文件合并到一个文件夹中

    Question to say "I can!" 如何将多个文件夹中的文件合并到一个文件夹中 2011-11-27 这个算是小小的技巧吧!有两种方法,一种是传统的命令行,另一种是用 ...

  6. [Python从零到壹] 十一.数据分析之Numpy、Pandas、Matplotlib和Sklearn入门知识万字详解(1)

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  7. [Python从零到壹] 十五.文本挖掘之数据预处理、Jieba工具和文本聚类万字详解

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  8. [Python从零到壹] 五十一.图像增强及运算篇之图像灰度直方图对比分析万字详解

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  9. devexpress 中的checkboxlist怎么设置间距_HTML中怎么设置h1的字体样式你知道吗?关于设置h1标签的样式详解

    本篇文章主要为大家讲解了html中的h1标签的样式解析,但是如果不用css样式来做的话,那就只能在html4.01中显示了,所以我们还是尽快学习css层叠样式表吧,好了,现在让我们来说说这篇文章吧. ...

  10. qt怎么设置标签背景图片_HTML中怎么设置h1的字体样式你知道吗?关于设置h1标签的样式详解...

    本篇文章主要为大家讲解了html中的h1标签的样式解析,但是如果不用css样式来做的话,那就只能在html4.01中显示了,所以我们还是尽快学习css层叠样式表吧,好了,现在让我们来说说这篇文章吧. ...

最新文章

  1. axi dma 寄存器配置_FPGA Xilinx Zynq 系列(三十二)AXI 接口
  2. Python学习笔记011——内置函数exec()
  3. 2020-11-30(为什么字符串可以赋值给字符指针变量)
  4. oracle dba笔试,一个好资企业的的oracle DBA面试试题 大家来看看啊 把答案写下来 最好带注释 测试一下 了 最后30分散分 快来啊...
  5. MVDR波束形成MATLAB实现
  6. Pytorch 词嵌入word_embedding2实例(加载已训练词向量)
  7. 服务器关于数据流转方式
  8. JVM性能调优监控工具
  9. WPS Office 2019 For Linux 设置显示语言
  10. 服务器无线网卡做ap,通过TP-Link无线网卡设置虚拟AP 看完就明白
  11. PPT怎么设置html颜色代码,PPT怎么设置表格边框颜色 PPT设置表格边框颜色教程
  12. 改进YOLOv7系列:23.YOLOv7添加CBAM注意力机制
  13. 根据IP查询地理位置(简单易懂,详细注解)
  14. pdf 转化为jpg python 批量转化
  15. 一个超级棒的 Chrome 翻译插件
  16. 【FFmpeg视频播放器开发】解封装解码流程、常用API和结构体简介(一)
  17. python将房贷数据写进excel表格
  18. finereport 简单使用
  19. Linux操作系统哪个版本最好用?
  20. 姐姐担忧闪婚妹妹被骗强迫迎其乱精力病

热门文章

  1. CCNA 配置试验之一 静态路由
  2. 权限组件(4):给动态菜单增加面包屑导航
  3. linux下安装php扩展模块gettext
  4. 关于Netty的一些理解、实践与陷阱
  5. spring Cloud中,解决Feign/Ribbon整合Hystrix第一次请求失败的问题?
  6. 从安全视角来看LXD容器管理程序
  7. Mpg123源代码详解
  8. Swift 3 网络请求+数据解析
  9. 关于运维自动化工具saltstack的教程更新页面
  10. PLSQL developer 连接不上64位Oracle 的解决方法