概述
将函数作为第一类对象
什么是第一类对象
在前言中所说的第一类对象,其实是指函数作为一个对象,与其它对象具有相同的地位。具体来说,数值可以被赋值给变量、作为参数传递给函数、作为返回值,因为函数和数值具有相同的地位,所以函数也可以被赋值给变量、作为参数传递给函数、作为返回值。
Python 中的常见类型对象包括:
数值,例如:123、3.14
字符串,例如:“Hello”、“World”
布尔值,例如:True、False
列表,例如:[1, 2, 3]
字典,例如:{‘name’: ‘tom’, ‘age’: 12}
可以在如下场合中处理这些对象,包括:
- 将对象赋值给变量
可以将数值、字符串、列表、字典类型的对象赋值给变量,例如:
number = 123
string = "hello"
list = [1, 2, 3]
dict = {'name': 'tom', 'age': 12}
- 将对象作为参数传递
可以将数值、字符串、列表、字典类型的对象作为参数传递给函数,例如:
print(123)
print("hello")
print([1, 2, 3])
print({'name': 'tom', 'age': 12})
- 将对象用作返回值
可以将数值、字符串、列表、字典类型的对象作为函数的返回值,例如:
def return_number():
return 123
def return_string():
return "hello"
def return_list():
return [1, 2, 3]
def return_dict():
return {'name': 'tom', 'age': 12}
将函数作为第一类对象
将函数作为第一类对象,函数具有和数值、字符串、列表、字典等类型的对象具有相同的地位,因此:
- 可以将函数赋值给变量
def max(a, b):
if a > b:
return a
else:
return b
var = max
print('max = %d' % var(1, 2))
运行结果:
- 在第 1 行,定义函数 max
- 在第 7 行,将函数 max 作为值赋予变量 var
- 在第 8 行,变量 var 的类型是函数,因此可以进行函数调用
程序的输出结果如下:
max = 2
- 可以将函数作为参数传递
def func():
print('Inside func')
def pass_func(data):
print('Inside pass_func')
data()
pass_func(func)
- 在第 1 行,定义函数 func
- 在第 4 行,定义函数 pass_func,函数 pass_func 的参数 data 的类型是函数
- 在第 6 行,调用函数 data (),data 的类型是函数,因此可以进行函数调用
- 在第 8 行,将函数 func 作为参数传递给函数 pass_func
程序的输出结果如下:
Inside pass_func
Inside func
- 可以将函数作为返回值
def func():
print('Inside func')
def return_func():
print('Inside return_func')
return func
var = return_func()
var()
- 在第 1 行,定义函数 func
- 在第 4 行,定义函数 return_func,函数 return_func 返回一个函数类型的对象
- 在第 6 行,将函数 func 作为值返回
- 在第 8 行,调用 return_func (),将函数的返回值保存到变量 var
- 在第 9 行,变量 var 的类型是函数,因此可以进行函数调用
程序的输出结果如下:
Inside return_func
Inside func
将函数作为第一类对象的意义
将函数作为第一类对象,是一种重要的抽象机制,极大的提升了程序的灵活性。通过一个例子进行说明。假设需要完成这样的任务:
存在一个列表 [1, -1, 2, -2, 3, -3]
打印输出列表中的正数
打印输出列表中的负数
我们使用两种方法实现:
1.包含重复性代码的解决方法
2.将函数作为参数传递
- 包含重复性代码的解决方法
list = [1, -1, 2, -2, 3, -3]
def print_positive(list):
for item in list:
if item > 0:
print(item)
def print_negative(list):
for item in list:
if item < 0:
print(item)
print_positive(list)
print_negative(list)
- 在第 3 行,定义了函数 print_positive,该函数打印 list 中的正数
- 在第 8 行,定义了函数 print_negative,该函数打印 list 中的负数
- 对比函数 print_positive 和函数 print_negative,两者的相似度很高 代码的结构完全相同 遍历 list
时,两者的选择条件不一样,print_positive 使用 item > 0 的条件选择,print_negative 使用 item < 0 的条件选择
程序的输出结果如下:
1
2
3
-1
-2
-3
- 将函数作为参数传递
list = [1, -1, 2, -2, 3, -3]
def select_positive(x):
return x > 0
def select_negative(x):
return x < 0
def select(list, select_function):
for item in list:
if select_function(item):
print(item)
select(list, select_positive)
select(list, select_negative)
- 在第 3 行,定义了函数 select_postive,如果参数 > 0,则返回真
- 在第 6 行,定义了函数 select_negative,如果参数 < 0,则返回真
- 在第 9 行,定义了函数 select,包含两个参数,第 1 个参数是列表,第 2 个参数的类型是函数
- 在第 10 行,遍历列表 list
- 在第 11 行,参数 selct_function 是一个函数,用于选择是否选中当前正在遍历的数值
- 在第 14 行,将函数 select_positive 作为参数传递给函数 select,函数打印列表中的正数
- 在第 15 行,将函数 select_negative 作为参数传递给函数 select,函数打印列表中的负数
程序的输出结果如下:
1
2
3
-1
-2
-3
从慕课网学习笔记中摘抄
最后
以上就是老实金鱼为你收集整理的将函数作为第一类对象的全部内容,希望文章能够帮你解决将函数作为第一类对象所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复