本文共 4417 字,大约阅读时间需要 14 分钟。
本节将深入探讨Python编程语言中的函数及其应用,重点介绍函数的基本语法、特性、定义方式以及函数式编程的概念。通过多个实例分析,理解函数在程序设计中的重要性,并掌握如何利用函数实现代码重用、保持一致性和可扩展性。
函数是编程中的基本单元,它通过将特定的任务封装成独立的代码块,实现了代码的复用和模块化。在Python中,函数可以接受任意数量的参数并返回一个值,或者没有返回值(返回None)。以下是函数的几个关键特性:
可重用性
函数允许我们重复利用已有的代码逻辑,避免了代码冗余。例如,多个函数可以共享相同的日志写入逻辑,减少代码量。一致性
函数提供了统一的接口,确保不同模块之间的代码协调一致,减少了潜在的错误风险。可扩展性
通过定义新的函数,可以轻松扩展程序的功能,满足不同场景的需求。函数式编程(Functional programming)是一种以函数为中心的编程范式,其核心思想是通过一系列函数调用来实现复杂任务。与传统的面向对象编程相比,函数式编程更注重代码的简洁性和可读性。
无状态
函数式编程的函数通常不依赖外部状态,不修改变量,使用函数的结果仅依赖于输入参数。函数作为首等对象
函数可以作为参数传递、返回或存储,形成灵活的代码结构。偏函数
函数可以接受特定的参数类型或处理方式,提高代码的灵活性。在Python中,函数的定义采用 def 关键字,格式如下:
def func_name(param1, param2, ...): # 函数体 return return_value
def func1(): '''testing''' print('in func1') return 0def func2(): '''testing''' print('in func2') returnx = func1()y = func2()print('from func1 return is:', x)print('from func2 return is:', y) 函数是编程中的核心概念,它允许我们将复杂的逻辑拆分成多个简单的函数,通过函数的组合完成任务。以下是使用函数的主要优势:
代码重用
函数可以多次使用,避免重复代码。保持一致性
不同函数之间的接口一致,减少错误。可扩展性
新增功能时,只需定义新的函数或扩展现有函数。def logger(): with open('a.txt', 'a+') as f: f.write('end action\n')def test1(): print('in test1') logger()def test2(): print('in test2') logger()def test3(): print('in test3') logger()test1()test2()test3() def logger(): time_format = '%Y-%m-%d %X' time_current = time.strftime(time_format) with open('a.txt', 'a+') as f: f.write(f'{time_current} end action\n')def test1(): print('in test1')def test2(): print('in test2')def test3(): print('in test3')test1()test2()test3() import timedef logger(): time_format = '%Y-%m-%d %X' time_current = time.strftime(time_format) with open('a.txt', 'a+') as f: f.write(f'{time_current} end action\n')def test1(): print('in test1')def test2(): print('in test2')def test3(): print('in test3')test1()test2()test3() 函数可以返回任何数据类型,包括数字、字符串、列表、字典、元组等。返回值的类型决定了函数的用途。
def test01(): passdef test02(): return 0def test03(): return 0, 'hello', ['alex', 'wupeiqi'], {'name': 'alex'}t1 = test01()t2 = test02()t3 = test03()print('test01 return:', type(t1), t1)print('test02 return:', type(t2), t2)print('test03 return:', type(t3), t3) 函数调用通过 () 符号触发,参数可以通过位置或关键字方式传递。
def test(x, y=2): print(x) print(y)test(1, y=3) # 关键字参数方式test(y=2, x=1) # 关键字参数方式test(1, 2)
def test(x, y=2, soft1=True, soft2=True): print(x) print(y) print(soft1) print(soft2)test(1, 3) # 只传x和ytest(y=2, x=1) # 关键字参数方式
在Python中,全局变量属于程序的顶层,局部变量只在函数内部使用。
# 全局变量school = "Oldboy edu."def change_name(name): global school school = "Mage Linux" print("before change", name, school) name = "Alex li" print("after change", name)name = "alex"change_name(name)print(name)print("school:", school) 递归函数在函数内部调用自身,适用于分解复杂任务或处理递归关系。
def calc(n): print(n) if n // 2 == 0: return n return calc(n // 2)calc(10)
匿名函数(lambda)可以直接将表达式与函数调用结合,简化代码。
calc = lambda n: n ** nprint(calc(10))# 或者res = map(lambda x: x ** 2, [1, 5, 7, 4, 8])for i in res: print(i)
函数式编程通过函数的组合实现任务,代码更简洁且易于理解。以下是函数式编程的典型应用场景:
data = [1, 3, 6, 7, 9, 12, 14, 16, 17, 18, 20, 21, 22, 23, 30, 32, 33, 35]def binary_search(dataset, find_num): if len(dataset) > 1: mid = int(len(dataset) // 2) if dataset[mid] == find_num: return dataset[mid] elif dataset[mid] > find_num: return binary_search(dataset[:mid], find_num) else: return binary_search(dataset[mid+1:], find_num) else: return dataset[0] if dataset[0] == find_num else Noneprint(binary_search(data, 66))
高阶函数是指函数的参数可以是另一个函数,具有更强的灵活性。
def add(a, b, f): return f(a) + f(b)res = add(3, -6, abs)print(res)
本节我们深入探讨了Python中的函数及其应用,了解了函数的定义、使用场景、返回值、参数传递方式以及递归的原理。通过实例分析,我们掌握了如何利用函数实现代码重用、保持一致性和可扩展性。函数式编程的核心思想也让我们对编程有了全新的认识。
转载地址:http://olofk.baihongyu.com/