函数

一、函数基本语法

def 函数名(参数1, 参数2, ...):
    """文档字符串(可选)"""
    函数体
    return 返回值(可选)

二、函数文档

在函数开头的三引号引起来的内容,可以编写函数文档,以说明此函数的作用,以及用法,使用其它人员理解。

图片[1] - 函数 - 正则时光

三、函数模块

1.编写函数模块

将编写的函数放在以.py为扩展名的文件中,即创建一个函数模块文件。

2.导入模块

import module_name                     # 导入整个模块
from module_name import function_name   # 从模块中导入特定函数或类
from module_name import function_name1, function_name2   # 从模块中导入多个函数或类
import module_name as alias_name   # 导入模块并使用别名
from module_name import *    # 导入模块中所有内容(不推荐,可能存在命名空间污染)

四、模块搜索路径

在Python中,模块搜索路径是一个列表,包含了Python解释器在导入模块时会搜索的所有目录。这个列表可以通过 sys.path 来查看和修改。

1.查看模块搜索路径

import sys
print(sys.path)

2.添加自定义路径到模块搜索路径

你可以通过修改 sys.path 来添加自定义路径,以便Python解释器能够找到你自定义的模块。

import sys
sys.path.append('/path/to/your/module')

3.PYTHONPATH环境变量

你也可以通过设置 PYTHONPATH 环境变量来添加自定义路径。这样,每次启动Python解释器时,这些路径都会被自动添加到 sys.path 中。

4.默认搜索路径

sys.path 的默认内容通常包括:

  • 当前脚本的目录(如果是在交互式解释器中,则是当前工作目录)。
  • 环境变量 PYTHONPATH 中列出的目录(如果设置了的话)。
  • Python安装时自带的标准库目录。
  • 根据安装路径可能存在的其他目录。

五、函数参数形式

1.位置参数

位置参数是最常见的参数类型,调用函数时,传入的参数值按照顺序与函数定义中的参数一一对应。

def add(a, b):
    return a + b

result = add(3, 5)  # 位置参数,3对应a,5对应b
print(result)  # 输出 8

2.关键字参数

关键字参数允许在调用函数时使用参数名来指定传入的值,这样可以不按照顺序传递参数。

def add(a, b):
    return a + b

result = add(b=5, a=3)  # 关键字参数,明确指定了a和b的值
print(result)  # 输出 8

3.默认值参数

默认值参数允许在定义函数时为参数指定默认值,如果调用函数时没有提供该参数的值,则使用默认值。

def add(a, b=5):
    return a + b

result = add(3)  # 使用默认值b=5
print(result)  # 输出 8

4.不定长参数

*args:用于接收任意数量的位置参数,这些参数会被收集到一个元组中。

def add(*args):
    return sum(args)

result = add(1, 2, 3, 4)  # 传递多个位置参数
print(result)  # 输出 10

**kwargs:用于接收任意数量的关键字参数,这些参数会被收集到一个字典中。

def print_info(**kwargs):
    for key, value in kwargs.items():
        print(f"{key}: {value}")

print_info(name="Alice", age=30)  # 传递多个关键字参数
# 输出:
# name: Alice
# age: 30

结合这些参数类型,你可以灵活地定义和调用函数。例如:

def example_function(a, b=2, *args, **kwargs):
    print(f"a: {a}")
    print(f"b: {b}")
    print(f"args: {args}")
    print(f"kwargs: {kwargs}")

example_function(1, 3, 4, 5, name="Alice", age=30)
# 输出:
# a: 1
# b: 3
# args: (4, 5)
# kwargs: {'name': 'Alice', 'age': 30}

在这个例子中,a 是位置参数,b 是默认值参数,args 接收额外的位置参数,*kwargs 接收额外的关键字参数。

六、传递值问题

函数可以传递元组、列表、字典值

传递参数时,在函数内的改动会影响到传递前的参数。如果不想影响,使用var.copy()方法来传递值。

七、函数与变量作用域

1.全局变量

全局变量是在函数外部定义的变量,它们在整个程序中都可见,可以在任何函数内部访问。

global_var = 10

def print_global():
    print(global_var)  # 可以直接访问全局变量

print_global()  # 输出 10

2.局部变量

局部变量是在函数内部定义的变量,它们只在定义它们的函数内部可见,函数外部无法访问。

def local_example():
    local_var = 20
    print(local_var)  # 局部变量,只能在函数内部访问

local_example()  # 输出 20
# print(local_var)  # 这行代码会报错,因为local_var在函数外部不可见

3.修改全局变量

如果在函数内部需要修改全局变量,需要使用 global 关键字声明。

global_var = 10

def modify_global():
    global global_var  # 声明要修改的是全局变量
    global_var = 30

modify_global()
print(global_var)  # 输出 30

4.局部变量与全局变量同名

如果局部变量和全局变量同名,在函数内部局部变量会覆盖全局变量。

global_var = 10

def conflicting_example():
    global_var = 20  # 局部变量,覆盖全局变量
    print(global_var)  # 输出 20

conflicting_example()
print(global_var)  # 输出 10,全局变量未被修改

5.嵌套函数中的变量作用域

在嵌套函数中,内部函数可以访问外部函数的变量,但需要使用 nonlocal 关键字来修改外部函数的变量。

def outer_function():     # outer_function是一个带有闭包变量的函数。函数里面还有函数。
    outer_var = 10

    def inner_function():
        nonlocal outer_var  # 声明要修改的是外部函数的变量
        outer_var = 20
        print(outer_var)  # 输出 20

    inner_function()
    print(outer_var)  # 输出 20

outer_function()

八、匿名函数

Lambda函数可以用于需要函数对象的任何地方,但通常用于简单的操作。

1.基本语法

lambda arguments: expression

2.示例

def apply_function(func, value):
    return func(value)

result = apply_function(lambda x: x * 2, 5)
print(result)  # 输出 10
© 版权声明
THE END
喜欢就支持一下吧
点赞6 分享