济南建站公司哪有,合肥网红,涉密资质 网站建设,网站 备案号前言
本文主要给大家介绍的是关于python将函数赋值给变量时需要注意的一些问题#xff0c;分享出来供大家参考学习#xff0c;下面话不多说了#xff0c;来一起看看详细的介绍#xff1a;
见过两种函数赋值给变量的形式#xff0c;一种是
af
另一种是
af()
这两种形式是有…前言
本文主要给大家介绍的是关于python将函数赋值给变量时需要注意的一些问题分享出来供大家参考学习下面话不多说了来一起看看详细的介绍
见过两种函数赋值给变量的形式一种是
af
另一种是
af()
这两种形式是有区别的分别总结一下。
1.af型属于将变量指向函数。
用代码验证一下f absf(-10)
10
说明变量f现在已经指向了abs函数本身。直接调用abs()函数和调用变量f()完全相同。这是廖雪峰老师python教程上的例子现在调用f()和调用abs()是一样的了。
再举一个工厂函数的例子
def maker(N):
def action(X):
return X**N
return action
这个嵌套函数的外层返回值为内层函数的函数名注意没有括号这里有无括号是有很大区别的。此时调用外部函数
fmaker(2)
那么如上所述f便指向了action函数且限制条件为N2可以理解为f为N等于2时的action函数。我们来调用它f(3)
9
证明f和action函数是一样的。
2.af()型属于将f()的返回值赋值给a的过程
这里的a仅仅接收f()的返回值如果f()没有返回值那么a即被赋值为None。这里值得注意的一点是在af()的执行过程中f()会运行一次这也是我刚刚搞明白的如def add(x,y):
zxy
print(z)
aadd(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(tbegin call)
resultfunc(*args,**kw)
print(tend call)
return result
开始不太理解为什么使用resultfunc(*args,**kw)这句后来理解后才明白其实赋值本身并没有意义只是这句话同时使得func函数运行了所以写成
def wrapper(*args,**kw):
print(tbegin call)
func(*args,**kw)
print(tend call)
结果也是一样的。
总结
以上就是这篇文章的全部内容了希望本文的内容对大家的学习或者工作能带来一定的帮助如果有疑问大家可以留言交流谢谢大家对脚本之家的支持。