python函数返回自身 python 函数 返回

python+函数的返回值能不能直接输出?在Python中python函数返回自身 , 一个函数python函数返回自身的返回值可以直接输出python函数返回自身,示例代码如下:
# 定义一个函数
def add(a, b):
return a + b
# 调用函数并输出返回值
print(add(1, 2))
在这段代码中python函数返回自身 , 我们首先定义python函数返回自身了一个名为add的函数,该函数接收两个参数a和b,并通过return语句返回它们的和 。接着,我们调用该函数并传入参数1和2,并使用print函数输出函数的返回值 , 即3 。
请注意,上面的代码只是一个示例,实际应用中可能需要根据实际情况进行更多的处理,比如考虑函数没有返回值等情况 。
Python 里为什么函数可以返回一个函数内部定义的函数“在Python中,函数本身也是对象”
这一本质 。那不妨慢慢来,从最基本的概念开始,讨论一下这个问题:
1. Python中一切皆对象
这恐怕是学习Python最有用的一句话 。想必你已经知道Python中的list, tuple, dict等内置数据结构,当你执行:
alist = [1, 2, 3]
时,你就创建了一个列表对象,并且用alist这个变量引用它:
当然你也可以自己定义一个类:
class House(object):
def __init__(self, area, city):
self.area = area
self.city = city
def sell(self, price):
[...]#other code
return price
然后创建一个类的对象:
house = House(200, 'Shanghai')
OK,你立马就在上海有了一套200平米的房子,它有一些属性(area, city) , 和一些方法(__init__, self):
2. 函数是第一类对象
和list, tuple, dict以及用House创建的对象一样,当你定义一个函数时 , 函数也是对象:
def func(a, b):
return a+b
在全局域,函数对象被函数名引用着,它接收两个参数a和b,计算这两个参数的和作为返回值 。
所谓第一类对象,意思是可以用标识符给对象命名,并且对象可以被当作数据处理 , 例如赋值、作为参数传递给函数 , 或者作为返回值return 等
因此,你完全可以用其他变量名引用这个函数对象:
add = func
这样,你就可以像调用func(1, 2)一样 , 通过新的引用调用函数了:
print func(1, 2)
print add(1, 2)#the same as func(1, 2)
或者将函数对象作为参数,传递给另一个函数:
def caller_func(f):
return f(1, 2)
if __name__ == "__main__":
print caller_func(func)
可以看到,
函数对象func作为参数传递给caller_func函数,传参过程类似于一个赋值操作f=func;
于是func函数对象,被caller_func函数作用域中的局部变量f引用,f实际指向了函数func;cc
当执行return f(1, 2)的时候,相当于执行了return func(1, 2);
因此输出结果为3 。
3. 函数对象 vs 函数调用
无论是把函数赋值给新的标识符,还是作为参数传递给新的函数,针对的都是函数对象本身 , 而不是函数的调用 。
用一个更加简单,但从外观上看,更容易产生混淆的例子来说明这个问题 。例如定义了下面这个函数:
def func():
return "hello,world"
然后分别执行两次赋值:
ref1 = func#将函数对象赋值给ref1
ref2 = func()#调用函数,将函数的返回值("hello,world"字符串)赋值给ref2
很多初学者会混淆这两种赋值,通过Python内建的type函数,可以查看一下这两次赋值的结果:
In [4]: type(ref1)
Out[4]: function
In [5]: type(ref2)
Out[5]: str
可以看到,ref1引用了函数对象本身,而ref2则引用了函数的返回值 。通过内建的callable函数,可以进一步验证ref1是可调用的,而ref2是不可调用的:

推荐阅读