1.函数的定义和调用
在 Python 中,函数通过定义和调用来实现,函数定义的基本语法如下:
def function_name(parameters):
"""docstring"""
statements
return [expression]
1.1 定义
def 是 Python 中定义函数的关键字,后面跟着函数名称,括号里是函数的参数,冒号结尾。函数体是缩进的部分,可以包含一些语句和表达式。如果函数有返回值,使用 return 关键字。
# 定义函数
def greeting(name: str) -> str:
"""
This function returns a greeting message.
"""
return "Hello, " + name + "!"
1.2 调用
可以通过函数名称加括号的形式来调用函数,传递参数给函数。函数可以返回值,也可以不返回任何值。
# 调用函数
result = greeting("John")
print(result) # 输出:Hello, John!
2.函数的参数
函数可以接收多个参数,这些参数可以是必需的或可选的。在函数定义中使用参数列表来指定这些参数。
2.1 必需参数
必需参数是函数定义中必须包含的参数,调用函数时必须提供这些参数的值。
# 定义函数,接收两个必需参数
def add(a, b):
return a + b
# 调用函数,传递两个参数
result = add(3, 5)
print(result) # 输出:8
2.2 关键字参数
关键字参数是在调用函数时,用参数名(关键字)来指定参数值的方式,可以避免参数顺序的问题。
# 定义函数,接收两个关键字参数
def greeting(name, message):
return message + ", " + name + "!"
# 调用函数,传递两个关键字参数
result = greeting(message="How are you", name="John")
print(result) # 输出:How are you, John!
2.3 默认参数
默认参数指的是在函数定义中给参数指定一个默认值,在调用函数时可以不传递该参数的值。如果函数调用时传递了该参数的值,则会覆盖默认值。
# 定义函数,接收两个参数,其中 b 参数是一个默认参数
def add(a, b=2):
return a + b
# 调用函数,传递一个参数
result1 = add(3)
print(result1) # 输出:5
# 调用函数,传递两个参数,并覆盖 b 的默认值
result2 = add(3, 5)
print(result2) # 输出:8
2.4 可变参数
可变参数是一种用于处理可变数量参数的一种参数形式,可以用一个通用的参数名称来接收任意数量的参数。在函数定义中,用 *args 的形式来定义可变参数。
# 定义函数,接收可变数量参数
def sum(*args):
total = 0
for n in args:
total += n
return total
# 调用函数,传递多个参数
result1 = sum(1, 2, 3, 4)
print(result1) # 输出:10
# 调用函数,传递列表或元组作为参数
values = [1, 2, 3, 4, 5]
result2 = sum(*values)
print(result2) # 输出:15
2.5 关键字可变参数
使用关键字可变参数可以接收任意数量的关键字参数。在函数定义中,用 **kwargs 的形式来定义关键字可变参数。
# 定义函数,接收任意数量的关键字参数
def print_kwargs(**kwargs):
print(kwargs)
# 调用函数,传递关键字参数
print_kwargs(a=1, b=2, c=3)
# 输出:{'a': 1, 'b': 2, 'c': 3}
3.函数的返回值
函数可以返回一个或多个值,使用 return 关键字。如果函数没有显式指定返回值,则默认返回 None。
# 定义函数,返回一个值
def square(x):
return x ** 2
# 调用函数,输出返回值
result = square(3)
print(result) # 输出:9
# 定义函数,返回多个值
def coordinates(x, y):
return x, y
# 调用函数,输出多个返回值
x, y = coordinates(3, 4)
print("x =", x) # 输出:x = 3
print("y =", y) # 输出:y = 4
4.函数的作用域
函数中定义的变量有自己的作用域,也就是变量的可见性和使用范围。
4.1 函数内部作用域
在函数内部定义的变量拥有局部作用域,它们不能在函数外部访问。
# 定义函数
def func():
var = "Hello, World!"
print(var)
# 调用函数
func() # 输出:Hello, World!
# 尝试访问函数内定义的变量
print(var) # 报错:NameError: name 'var' is not defined
4.2 函数外部作用域
在函数外部定义的变量拥有全局作用域,可以在函数内部访问和修改。
# 定义全局变量
x = 10
# 定义函数
def func():
global x
x += 1
print(x)
# 调用函数
func() # 输出:11
# 访问全局变量
print(x) # 输出:11
5.函数的文档字符串
函数的文档字符串是函数的第一个语句中的字符串,用于为函数提供注释和帮助信息。文档字符串可以通过函数内置的 __doc__ 属性来访问。
# 定义函数,包含文档字符串
def square(x):
"""
This function returns the square of the given number.
"""
return x ** 2
# 访问函数的文档字符串
print(square.__doc__)
# 输出:This function returns the square of the given number.
6.匿名函数(Lambda函数)
匿名函数(Lambda函数)是一种简单的函数,它可以在一行代码中定义一个函数,通常用于传递一个简单的函数作为参数。
# 定义匿名函数
add = lambda x, y: x + y
# 使用匿名函数
result = add(3, 5)
print(result) # 输出:8
7.函数装饰器
函数装饰器是一种用于修改函数行为的函数,它们通常在函数定义之前使用 @decorator_name 的形式来声明。
# 定义函数装饰器
def my_decorator(func):
def wrapper(*args, **kwargs):
print("Before function is called.")
result = func(*args, **kwargs)
print("After function is called.")
return result
return wrapper
# 使用函数装饰器,装饰已有函数
@my_decorator
def my_function():
print("Function has been called.")
# 调用装饰后的函数
my_function()
# 输出:
# Before function is called.
# Function has been called.
# After function is called.
总结
本文介绍了 Python 函数的基本语法,包括函数的定义和调用、函数的参数、函数的返回值、函数的作用域、函数的文档字符串、匿名函数和函数装饰器。函数是编写可重用代码的基本方式之一,学会函数的使用对于 Python 开发非常重要。