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】函数名存在变量中
变量函数:意思就是将函数名存在变量中,然后根据变量值动态的调用需要的函数. LOGIN = 'xxxx' PASSWD = "xxx" URL = 'xxxxx' def hand ...
- Python中将字典转为成员变量
技术背景 当我们在Python中写一个class时,如果有一部分的成员变量需要用一个字典来命名和赋值,此时应该如何操作呢?这个场景最常见于从一个文件(比如json.npz之类的文件)中读取字典变量到内 ...
- Python中将函数作为另一个函数的参数传入并调用
在Python中,函数本身也是对象,所以可以将函数作为参数传入另一函数并进行调用 在旧版本中,可以使用apply(function, *args, **kwargs)进行调用,但是在新版本中已经移除, ...
- Python函数:对变量赋值,变量即局部
b = 6 def f2(a): print(a) print(b) b = 9 UnboundLocalError: local variable 'b' referenced before ass ...
- Python 一等函数
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 15.0px Helvetica } 在 Python 中,函数是一等对象.编程语言理论家把"一等 ...
- Python:函数解释(面向过程)
1. 函数概述 在编程的语境下,函数 (function) 是指一个有命名的.执行某个计算的语句序列 (sequence of statements) .函数可以针对某类问题建立了通用解决步骤(算法) ...
- python学习 函数
# -*- config=utf-8 -*- #################################### 函数 ################################## de ...
- Python返回函数、闭包,匿名函数
函数不仅可以作为函数参数,还可以作为函数返回结果 def pro1(c,f): def pro2(): return f(c) return pro2 #调用pro1函数时,返回的是pro2函数对象& ...
- python的re模块一些方法 && Tkinter图形界面设计 && 终止python运行函数 && python读写文件 && python一旦给字符串赋值就不能单独改变某个字符,除非重新给变量赋值
Tkinter图形界面设计见:https://www.cnblogs.com/pywjh/p/9527828.html#radiobutton 终止python运行函数: 采用sys.exit(0)正 ...
随机推荐
- 金生芳-实验十四 团队项目评审&课程学习总结
实验十四 团队项目评审&课程学习总结 项目 内容 这个作业属于哪个课程 [教师博客主页链接] 这个作业的要求在哪里 [作业链接地址] 作业学习目标 (1)掌握软件项目评审会流程(2)反思总结课 ...
- Beta冲刺博客汇总(校园帮-追光的人)
所属课程 软件工程1916 作业要求 Beta冲刺博客汇总 团队名称 追光的人 作业目标 汇总Beta阶段的博客,方便查看 冲刺日志 Beta之前-凡事预则立(校园帮-追光的人)5-22 Beta冲刺 ...
- 洛谷P5092 [USACO2004OPEN]Cube Stacking 方块游戏 (带权并查集)
题目描述 约翰和贝茜在玩一个方块游戏.编号为 1\ldots n 1-n 的 n n ( 1 \leq n \leq 30000 1≤n≤30000 )个方块正放在地上,每个构成一个立方柱. 游戏开始 ...
- CF632E Thief in a Shop 和 CF958F3 Lightsabers (hard)
Thief in a Shop n个物品每个价值ai,要求选k个,可以重复.问能取到哪几个价值? 1 ≤ n, k ≤ 1000,1 ≤ ai ≤ 1000 题解 将选一个物品能取到的价值的01生成函 ...
- abp radio表单元素 消失了
框架将原本的元素都隐藏掉了,取而代之的是根据label定义了自己的样式,如下: [type="radio"]:not(:checked)+label { padding-le ...
- 强大的接口调试工具-Postman图文详解
前言 在前后端分离开发时,后端工作人员完成系统接口开发后,需要与前端人员对接,测试调试接口,验证接口的正确性可用性.而这要求前端开发进度和后端进度保持基本一致,任何一方的进度跟不上,都无法及时完成功能 ...
- 例程使用(1-4)共享内存 存图片+vector容器教程
1传输的数据 1-1数据格式说明 1 两路视频图像Mat 图像 图像数据(Mat)+图像头信息(ImgInf) //图像的宽.高.类型信息 typedef struct { int width; // ...
- Trolley slow
- 洛谷 P1120 小木棍 题解
每日一题 day54 打卡 Analysis 一,管理员已经在题目中告诉你输入时去掉长度大于50的木棍. 二,想好搜索什么.很明显我们要枚举把哪些棍子拼接成原来的长棍,而原始长度(原来的长棍的长度)都 ...
- be of + 名词
语法: “be of +抽象名词(词组)” 表示主语的某种形状或特征,相当于 "be+形容词" 例如: be of value=be valuable : be of inter ...