目录
- 一、函数基础
- 1. 函数的概念和作用
- 2. 函数的定义和调用
- 3. 参数传递
- 二、返回值和文档字符串
- 返回值的概念和用法
- 1. 返回值的概念
- 2. 使用 `return` 关键字返回值:
- 3. 多个返回值的情况:
- 文档字符串(docstring)的作用和使用方法
- 1. 文档字符串的作用:
- 2. 使用方法:
- 3. 查看文档字符串:
- 三、局部变量和全局变量
- 局部变量(Local Variables)
- 全局变量(Global Variables)
- 区别:
- 在函数中访问全局变量:
- 四、函数的形参、实参
- 形参(形式参数)
- 实参(实际参数)
- 关系和作用
- 五、内嵌函数
- 内嵌函数的定义和调用
- 内嵌函数的作用和用法
- 注意事项
一、函数基础
1. 函数的概念和作用
在编程中,函数是一段可重复使用的代码块,它接收输入参数、执行特定任务,并返回结果。
函数的作用在于封装特定功能,使得代码更易读、更易维护,并且能够提高代码的重用性和模块化。
函数的优点包括:
- 模块化: 将代码分割为函数可以使得程序结构更清晰,更易于理解和维护。
- 可重用性: 可以多次调用同一个函数,避免重复编写相同的代码。
- 简化复杂性: 通过将复杂的操作封装在函数中,可以简化主程序的逻辑结构。
- 提高可读性: 给函数起一个具有描述性的名称可以使代码更易读懂,降低理解成本。
2. 函数的定义和调用
在 Python 中,使用 def
关键字定义函数,语法如下:
def function_name(parameters):
"""文档字符串(可选)"""
# 函数体
statements
return expression # 可选
function_name
是函数的名称,用于标识函数。parameters
是函数的参数列表,可以包含零个或多个参数,多个参数之间用逗号分隔。"""文档字符串"""
是函数的文档字符串,用于描述函数的作用、参数、返回值等信息,是可选的。statements
是函数的代码块,包含了实现特定功能的语句。return expression
是函数的返回语句,可选的,用于返回计算结果给调用者。
函数定义完成后,可以通过函数名称和参数列表来调用函数,如下所示:
result = function_name(arguments)
function_name
是函数的名称。arguments
是传递给函数的参数列表,可以是位置参数或关键字参数。result
是函数调用的返回值,如果函数没有返回值,则返回None
。
3. 参数传递
在函数调用时,可以通过参数传递数据给函数。Python 函数支持多种类型的参数传递方式,包括:
- 位置参数: 位置参数是按照参数的位置顺序传递的,调用时参数的顺序必须与函数定义时的参数顺序相匹配。
def greet(name, message):
print(f"Hello, {name}! {message}")
greet("yushifu", "How are you?")
# 输出: Hello, yushifu! How are you?
- 关键字参数: 关键字参数是按照参数名进行传递的,可以不按照参数定义的顺序传递参数。
greet(message="How are you?", name="yushifu")
# 输出: Hello, yushifu! How are you?
- 默认参数: 默认参数在函数定义时就已经赋予了默认值,调用函数时可以不传递该参数,使用默认值。
def greet(name, message="How are you?"):
print(f"Hello, {name}! {message}")
greet("yushifu")
# 输出: Hello, yushifu! How are you?
- 可变长参数: 可变长参数允许函数接受任意数量的参数。在函数定义时,使用
*args
来表示可变长位置参数,使用**kwargs
来表示可变长关键字参数。
def calculate_sum(*args):
total = 0
for num in args:
total += num
return total
print(calculate_sum(1, 2, 3, 4, 5)) # 输出: 15
def print_info(**kwargs):
for key, value in kwargs.items():
print(f"{key}: {value}")
print_info(name="yushifu", age=23, city="Beijing")
# 输出:
# name: yushifu
# age: 23
# city: Beijing
二、返回值和文档字符串
返回值的概念和用法
在函数中,返回值是指函数执行完毕后向调用者传递的结果。
使用返回值可以将函数内部计算的结果传递给其他代码进行处理。
在 Python 中,使用 return
关键字来返回值。
1. 返回值的概念
- 函数可以返回一个或多个值给调用者。
- 返回值可以是任何数据类型,包括数字、字符串、列表、元组、字典等。
- 如果函数没有明确的返回语句,它会默认返回
None
。
2. 使用 return
关键字返回值:
def add(a, b):
result = a + b
return result # 返回计算结果给调用者
return result
语句将计算结果 result
返回给调用者。
3. 多个返回值的情况:
def calculate(a, b):
total = a + b
difference = a - b
return total, difference # 返回多个值
return total, difference
返回了两个值,实际上返回的是一个元组 (total, difference)
。
文档字符串(docstring)的作用和使用方法
文档字符串是函数定义的一部分,用于描述函数的作用、参数、返回值等信息。文
档字符串被存储在函数的 __doc__
属性中,可以通过 help()
函数或 .__doc__
属性来查看函数的文档字符串。
1. 文档字符串的作用:
- 帮助其他开发者理解函数的作用和用法。
- 为函数提供简明扼要的描述,方便使用者了解函数的功能和用法。
- 提供参数和返回值的说明,帮助使用者正确调用函数。
2. 使用方法:
def greet(name):
"""输出问候语
Args:
name (str): 要问候的人的名字
Returns:
str: 包含问候语的字符串
"""
return f"Hello, {name}!"
在函数定义的第一行使用三重引号 """..."""
来定义文档字符串。文档字符串通常包括以下内容:
- 函数的作用和功能描述。
- 参数的说明,包括参数名和类型。
- 返回值的说明,包括返回值的类型。
3. 查看文档字符串:
可以使用 help()
函数或者直接访问 .__doc__
属性来查看函数的文档字符串。
print(help(greet))
# 或者
print(greet.__doc__)
三、局部变量和全局变量
局部变量(Local Variables)
-
局部变量是在函数内部声明的变量,它们只能在函数内部使用,函数执行结束后就会被销毁。
-
局部变量的作用域仅限于函数内部,外部代码无法访问局部变量。
def my_function():
x = 10 # x 是局部变量
print("Inside the function:", x)
my_function()
# 输出: Inside the function: 10
# 尝试在函数外部访问局部变量将会引发 NameError
print(x)
# 输出: NameError: name 'x' is not defined
全局变量(Global Variables)
- 全局变量是在整个程序中声明的变量,它们可以在程序的任何地方被访问。
- 与局部变量不同,全局变量的作用域不限于特定的函数或代码块。
y = 20 # y 是全局变量
def my_function():
print("Inside the function:", y)
my_function()
# 输出: Inside the function: 20
print("Outside the function:", y)
# 输出: Outside the function: 20
区别:
-
作用域:
- 局部变量的作用域限于函数内部,只能在函数内部访问。
- 全局变量的作用域是整个程序,可以在程序的任何地方访问。
-
生存周期:
- 局部变量的生存周期仅限于函数执行期间,函数执行结束后会被销毁。
- 全局变量的生存周期与程序的执行周期相同,只有当程序结束时才会被销毁。
-
访问权限:
- 局部变量只能在声明它们的函数内部访问,外部代码无法直接访问。
- 全局变量可以在整个程序的任何地方访问,包括函数内部和外部。
在函数中访问全局变量:
在函数内部可以访问全局变量,但如果要修改全局变量的值,则需要使用 global
关键字将其声明为全局变量。
z = 30 # z 是全局变量
def my_function():
global z
z = 40 # 修改全局变量 z 的值
print("Inside the function:", z)
my_function()
# 输出: Inside the function: 40
print("Outside the function:", z)
# 输出: Outside the function: 40
四、函数的形参、实参
形参(形式参数)
-
形参是在函数定义时声明的参数,用于接收函数调用时传递的实际参数值。
-
形参是函数定义中的占位符,其值在函数调用时由实参传递给它。
-
形参通常用于指定函数的输入参数。
def greet(name):
print("Hello,", name)
# 在这个函数中,name 就是一个形参
在上面的例子中,name
是函数 greet
的形参,它用来接收调用函数时传递的实际参数值。
实参(实际参数)
- 实参是函数调用时传递给函数的实际数值或对象,它们是真实存在的数据,用来填充函数定义中的形参。
- 实参是函数调用时实际提供给函数的值。
greet("yushifu")
# 在这个函数调用中,"yushifu" 就是一个实参
在这个例子中,“Alice” 是传递给函数 greet
的实参,它会被赋值给函数定义中的形参 name
。
关系和作用
-
关系:
- 实参是在调用函数时传递给函数的值,填充函数定义中的形参。
- 形参是在函数定义时声明的参数,用来接收调用函数时传递的实际参数值。
-
作用:
- 形参用于指定函数的输入参数,在函数定义中起到接收外部数据的作用。
- 实参用于传递真实数据给函数,在函数调用时起到向函数传递信息的作用。
def add_numbers(x, y): # x, y 是形参
sum = x + y
print("The sum is:", sum)
add_numbers(3, 5) # 3, 5 是实参
# 输出: The sum is: 8
在这个例子中,x
和 y
是函数 add_numbers
的形参,当我们调用 add_numbers(3, 5)
时,3 和 5 分别是传递给 x
和 y
的实参,用于计算两个数的和。
五、内嵌函数
- 内嵌函数(
Nested Functions
)指的是在一个函数内部定义的另一个函数。 - 内嵌函数在外部函数内部声明,且只能在外部函数内部被调用。
内嵌函数的定义和调用
在 Python 中,可以在一个函数的内部定义另一个函数,这就是内嵌函数。内嵌函数只能在包含它的外部函数内部调用。
def outer_function():
def inner_function():
print("This is the inner function")
inner_function() # 在外部函数内部调用内嵌函数
outer_function()
# 输出: This is the inner function
在上面的例子中,inner_function
就是 outer_function
的内嵌函数。在 outer_function
的内部,我们调用了 inner_function
。
内嵌函数的作用和用法
-
封装和隐藏: 内嵌函数可以帮助我们将一些逻辑相关的代码封装在外部函数内部,从而隐藏实现细节,使代码更加模块化和可维护。
-
代码复用: 内嵌函数可以在外部函数内部被重复调用,实现代码复用,避免重复编写相似的逻辑。
-
闭包(Closure): 内嵌函数可以形成闭包,即可以访问外部函数的局部变量,从而实现一些特殊的功能,如记忆化、延迟计算等。
-
限制作用域: 内嵌函数可以限制其作用域,避免与外部函数的其他部分发生命名冲突,提高代码的可维护性。
-
模块化设计: 使用内嵌函数可以更好地进行模块化设计,将功能逻辑划分为更小的单元,提高代码的可读性和可维护性。
注意事项
- 内嵌函数只能在包含它的外部函数内部调用,外部函数的其他部分无法直接访问内嵌函数。
- 内嵌函数可以访问外部函数的局部变量,形成闭包的特性。
- 内嵌函数的作用域仅限于外部函数内部。