Python 中的函数是第一类对象
- 好像很多地方都会看到这样一句话
- Python 创始人也说过,所有的对象都是第一类对象
什么是第一类对象
- 在上面中所说的第一类对象,其实是指函数作为一个对象,与其它对象具有相同的地位
- 具体来说,数值可以被赋值给变量、作为参数传递给函数、作为返回值
- 因为函数和数值具有相同的地位,所以函数也可以被赋值给变量、作为参数传递给函数、作为返回值
将对象赋值给变量
可以将数值、字符串、列表、字典类型的对象赋值给变量
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(var(1, 2)) # 输出结果 2
将函数作为参数传递
def func(): print("function") def pass_func(data): print("pass func") data() pass_func(func) # 输出结果 pass func function
将函数作为返回值
def func(): print("function") def return_func(): print("pass func") return func # 等价 var = func var = return_func() var()
将函数作为第一类对象的意义
将函数作为第一类对象,是一种重要的抽象机制,极大的提升了程序的灵活性
实战栗子
- 存在一个列表 [1, -1, 2, -2, 3, -3]
- 打印输出列表中的正数
- 打印输出列表中的负数
包含重复性代码的解决方法
代码结构完全相同,只是条件判断不同
# 重复性代码解决方法 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) # 输出结果 1 2 3 -1 -2 -3
将函数作为参数传递
# 重复性代码解决方法 list = [1, -1, 2, -2, 3, -3] def positive(x): return x > 0 def negative(x): return x < 0 def test(list, select_fun): for item in list: if select_fun(item): print(item) test(list, positive) test(list, negative) # 输出结果 1 2 3 -1 -2 -3