Python中的一切都是对象。而在谈论对象时,人们通常指的是数据集,并称它们为属性,而对象具有某种预定义的功能来更新这些数据或与其他对象交换数据。但实际上,函数也是一种对象。你为什么这么说?继续阅读!作为对象的数据类型所有数据类型,例如数字、字符串、列表和字典,在Python中都是对象。把它的外观想象成一个数据盒子,有的盒子只是拿着一个int、bool或str变小,有的盒子是拿着一个list或dict变大,不同的是它们的大小反映了计算机所需的内存将这些数据存储在.当然,盒子还可以有其他的特性,比如颜色、材质等,可以定义为与盒子相关的不同类型的数据。作为对象,可以应用以下常见的含义或功能:可以用作函数的返回值。可以作为参数传递给函数。可以赋值给一个变量。可以作为数据的一部分与其他对象相关联。#Assignaninttoavariablea=5#Useanintasanargumentinafunctiondefadd_two(a):returna+2add_two(6)#Returnastringinafunctiondefis_even(a):return'even'ifa%2==0else'odd'is_even(745)#Abooleanvalueinatuple(True,7,8)作为Python对象的含义在上面的代码片段中,您可以看到Python对象的这些含义的示例,例如int和string。即使对Python编码或任何编程语言知之甚少,也不难理解。那么为什么有人说Python中函数也是对象呢?在我们进入函数作为对象的主题之前,让我们回顾一下函数是什么:函数是一个命名的代码块,它接受零个或多个输入并在执行一些计算后返回一个输出。这是一个简单的例子,说明了上面定义中突出显示的关键组件:#Assignaninttoavariablea=5#Useanintasanargumentinafunctiondefadd_two(a):returna+2add_two(6)#Returnastringinafunctiondefis_even(a):return'even'ifa%2==0else'odd'is_even(745)#Abooleanvalueinatuple(True,7,8)在前面的部分中,我们提到了Python数据对象具有的一些常用功能。以下示例将向您展示函数如何提供此类功能。使用一个函数作为另一个函数的参数由于函数是对象,您可以将一个函数作为参数传递给另一个函数。如下所示,创建了三个函数:combine_two_numbers()、add_two_numbers()和multiply_two_numbers(),后者用于计算元组中两个数的和与乘积。与通常的函数不同,函数add_two_numbers和multiply_two_numbers作为参数传递,它们分别进一步计算这些数字元组的和和乘积。函数的变量赋值作为函数的参数在下面的代码片段中,我创建了一个名为greeting()的函数并将其赋值给变量say_hello,它产生与greeting()相同的输出。关于将函数分配给变量需要注意的一件事是greeting()和say_hello()函数都指向内存中的同一个对象。例如,如果您检查他们的地址,两者的值都相同,如下所示。如果删除greeting()函数,名称“greeting”变为未定义,而删除不会影响“sayhello”函数引用的底层对象。所以,这里有一个重要的概念,就是引用函数的变量和实际存储在内存中的对象是不一样的。操作函数函数作为返回值作为对象,Python函数可以作为函数的有效返回值。看看下面的示例,我编写了一个名为add_number_creator()的函数,它返回一个将数字添加到整数参数的函数。函数add_three()和add_five()是通过调用add_number_creator()函数创建的。这两个函数执行它们应该做的事情,将3和5加到函数调用中指定的整数上。FunctionsasreturnvaluesFunctionsaspartofanotherobject我们还可以创建一个函数列表,并使这些函数成为列表对象的一部分。按照前面的示例,我们使用add_number_creator()函数创建三个输入整数的函数,分别将0、1和2相加。如您所见,可以枚举函数列表,就像通常枚举整数或字符串列表一样。作为另一个对象的一部分的函数没错,函数就像Python中的任何其他对象一样,可以分配给变量并在函数内使用。文章中的例子比较简单,复杂的情况也是如此。善用此功能可帮助您灵活编码。
