5.1 定义与调用
函数的作用:能够将复杂的程序逻辑分解为可重复使用的模块。
业务→业务逻辑→程序逻辑
语法:
# 定义一个函数def 函数名(参数列表): """ 这个函数的功能是实现xxx功能 """ 函数体 # 调用函数函数名(参数列表)
示例:
# 定义一个函数def hello(): """ 这个函数的功能是实现输出hello,world功能 """ print("HelloWorld") # 调用函数hello()
5.2 函数名
命名规则
1、可以由字母、数字和下划线组成
2、不能以数字开头
3、不能是 Python 中的关键字(如 if 、 for 、 while 等)
合法函数名示例
def my_function(): passdef add_numbers(): passdef calculate_sum(): pass
不合法函数名示例
# 以数字开头def 123function(): pass# 是关键字def if(): pass
函数最佳命名规则
1、 使用小写字母和下划线 ,函数名应全部使用小写字母,并使用下划线 ( _ ) 分隔单词。例如, add_numbers
2、 简洁但具有描述性 ,函数名应该尽可能简短,但也要足够描述其功能。例如, get_total 比 gt 更好
3、 使用动词 ,函数名通常以动词开头,因为它表示一个动作。例如, read_file , send_email
4、 使用名词 ,如果函数用于获取某些信息,可以使用名词。例如, get_list , fetch_data
5、 使用前缀或后缀 ,使用前缀或后缀可以帮助区分不同类型的函数。例如, is_valid 表示一个布尔检查函数, get_ 通常用于获取信息
6、 避免使用数字 ,尽量不要在函数名中使用数字,除非它们有特殊意义。例如, process_data_v2 可能表示这是数据处理函数的第二个版本
最佳函数命名示例
def add_numbers(): passdef get_total(): passdef read_file(): passdef send_email(): passdef get_list(): passdef fetch_data(): passdef is_valid(): passdef process_data_v2(): pass
5.3 函数参数
在 Python 函数中,函数可以没有参数,也可以有参数。如果有参数,函数参数是用来传递数据给函数的变量。根据不同的需求,Python 支持多种类型的参数,包括位置参数、关键字参数、默认值参数、不定长参数等。
5.3.1 位置参数
位置参数是按照顺序来传递给函数的。
def multiply(x, y): print(x * y) multiply(3, 5) # 3 和 5 是位置参数
5.3.2 关键字参数
关键字参数允许你在调用函数时通过参数名指定参数值,这样就不必关心参数的实际位置了。关键字参数可以在任何位置使用,并且可以与位置参数混合使用。
def multiply(x, y): print(x * y) multiply(x=3, y=5) # 使用关键字参数multiply(3, y=5) # 混合使用位置参数和关键字参数
当位置参数和关键字参数混合使用时,位置参数必须出现在关键字参数之前
5.3.3 默认值参数
默认值参数是在定义函数时为参数指定一个默认值。如果调用函数时没有提供这个参数的值,那么就会使用默认值。
def multiply(x, y=5): print(x * y)multiply(3, 6)multiply(3)multiply(x=3, y=6)multiply(x=3)
5.3.4 不定长参数
不定长参数允许函数接受不定数量的位置参数或关键字参数。
不定长位置参数 (*args)
当参数列表前面加上星号 (*) 时,可以接收任意数量的位置参数。
def add_numbers(*args): numbers_sum = 0 for i in args: numbers_sum += i print(numbers_sum)add_numbers(1, 2)add_numbers(1, 2, 3)
不定长关键字参数(**kwargs)
当参数列表前面加上两个星号 (**) 时,可以接收任意数量的关键字参数。
def print_message(**kwargs): for key, value in kwargs.items(): print(key + "=" + str(value))print_message(name="buddha", age=18, height=1.75)print("*" * 20)print_message(name="buddha", age=18)
5.3.5 参数组合
一个函数的参数可以有位置参数、默认值参数、不定长位置参数、不定长关键字参数的组合。如果有参数组合,其函数定义时,参数从左到右的顺序是:位置参数、默认值参数、不定长位置参数、不定长关键字参数。
def show(name, height=1.80, *args, **kwargs): print(f'{name},{height}') for i in args: print(i) for key, value in kwargs.items(): print(f'{key}-{value}')show("buddha", 1, 2, says="hello,world")
5.4 函数返回值
1、返回值,就是函数执行完毕,返回给调用者的结果。如果函数没有显式地返回任何值,则通常返回 None
2、函数需要显示地返回 返回值 ,用关键字 return
3、函数内可以有多个return,碰到第一个return关键字就结束了函数的调用
4、在Python中,可以返回一个值,或用 元组 的方式返回多个值
返回一个值的示例
# 函数返回一个值def add_numbers(a, b): return a + bsum_numbers = add_numbers(1,2)print(sum_numbers) # 3
返回多个值的示例
# 函数返回元组,元组中含有多个值def do_numbers(a, b): return a + b, a - bnumbers = do_numbers(1, 2)print(numbers[0], numbers[1])
5.5 作用域
作用域是指变量在程序中的可见性范围。
1、 局部作用域:
2、 全局作用域:
3、 封闭作用域:
4、 内置作用域:
内层使用外层变量
# 全局变量x = "全局变量"def outer_function(): y = "外部函数的局部变量" # 封闭作用域 def inner_function(): z = "内部函数的局部变量" # 局部作用域 print(z) print(y) # 访问封闭作用域中的变量 print(x) # 访问全局作用域中的变量 inner_function()outer_function()# 下面这行会抛出 NameError,因为 y 是封闭作用域中的变量# print(y)# 下面这行会打印全局变量 x 的值print(x)
原则是:内层可以使用外层,外层使用不了内层
内层修改外层变量
函数内部修改全局变量,该全局变量需要在函数内部用 global 关键字声明
内层函数修改外层函数的变量,该外层函数的局部变量在内层函数中用 nonlocal 关键字声明
外层不直接使用内层的变量,这样子破坏了函数的封装性
5.6 函数的嵌套
在 Python 中,函数的嵌套是指在一个函数内部定义另一个函数。这样的设计可以用来创建更加复杂的功能组合,同时保持代码的整洁和模块化。
简单嵌套
def outer(): print("这是外部函数被调用") def inner(): print("这是内部函数被调用") inner()outer()
返回内部函数
def outer_function(): print("外包函数...") def inner_function(): return "内部函数..." return inner_function # 返回内部函数的引用inner = outer_function() # 获取内部函数的引用print(inner()) # 调用内部函数
嵌套的应用
def factorial(n): """ 实现阶乘的功能,内部函数是递归函数 """ def recursive_factorial(n): if n == 0: return 1 else: return n * recursive_factorial(n - 1) return recursive_factorial(n)print(factorial(3)) # 输出 6
5.7 匿名函数
在 Python 中,匿名函数也称为 lambda 函数。它是一种简洁的方式来定义一个小型的、一次性使用的函数。
匿名函数的语法:
lambda 参数: 表达式
说明:
示例:
# 示例 1:计算两个数的和add = lambda x, y: x + yprint(add(3, 5)) # 示例 2:对一个数进行平方运算square = lambda x: x ** 2print(square(4)) # 示例 3:判断一个数是否为偶数is_even = lambda x: x % 2 == 0print(is_even(6))
5.8 文档字符串
文档字符串是放在函数、类或模块的第一个逻辑行上的字符串,用于描述该对象的用途、行为或用法。 __doc__ 属性可以用来获取这些文档字符串的内容。
示例:
def function(*args): """函数的文档字符串 :param args: 参数说明 :return: 函数返回值说明 """ pass# 通过 函数名.__doc__ 获取文档字符串print(function.__doc__)# 通过 help(函数名) 获取文档字符串help(function)
5.9 内置函数
Python 中提供了大量的内置函数,这些函数可以直接在程序中使用。
5.9.1 获取内置函数帮助信息
方式一:官方手册地址:https://docs.python.org/3/library/functions.html
方式二: 函数名.__doc__
方式三:help(函数名)
......
5.9.2 常见内置函数示例
# print() 用于输出文本或变量的值print("Hello, World!")num = 5print(num)# len() 返回对象(如字符串、列表、元组等)的长度str = "Python"print(len(str)) list = [1, 2, 3, 4, 5]print(len(list))# range() 用于生成一个整数序列for i in range(5): print(i) # sum() 计算可迭代对象(如列表、元组等)中所有元素的总和numbers = [1, 2, 3, 4, 5]print(sum(numbers))# max() 和 min() 分别返回可迭代对象中的最大值和最小值numbers = [5, 2, 8, 1, 9]print(max(numbers))print(min(numbers))# abs() 返回一个数的绝对值num = -5print(abs(num))# type() 返回对象的类型num = 5print(type(num))# input() 用于获取用户的输入name = input("请输入您的名字:")print(f"您好,{name}!")