Python 函数
函数是组织好的、可重复使用的、用来实现单一或相关联功能的代码段。函数能提高应用的模块性和代码的重复利用率。你已经使用过许多内置函数,如 print() 和 len(),现在你将学习如何创建自己的函数。
定义函数
- 函数代码块以
def关键字开头,后接函数名和圆括号()。 - 任何传入的参数和自变量都必须放在圆括号中间。
- 函数的第一行语句可以选择性地使用文档字符串(docstring)来为函数添加说明。
- 函数内容以冒号
:起始,并且缩进。 return [表达式]结束函数,选择性地返回一个值给调用方。不带表达式的return语句相当于返回None。
基本语法:
python
def function_name(parameters):
"""函数的文档字符串"""
# 函数体
statement(s)
return [expression]调用函数
定义一个函数只是给了函数一个名称,指定了函数里包含的参数,和代码块结构。这个函数的基本结构完成以后,你可以通过另一个函数调用执行,也可以直接从 Python 命令提示符执行。
python
# 定义一个简单的函数
def greet():
"""打印一句问候语。"""
print("Hello, Python!")
# 调用函数
greet() # 输出: Hello, Python!参数
函数可以接收参数,这些参数是传递给函数的值,供函数内部使用。
位置参数
调用函数时,传递的值会按照顺序依次赋给参数。
python
def greet_user(name):
"""向指定的用户打印问候语。"""
print(f"Hello, {name}!")
greet_user("Alice") # 输出: Hello, Alice!关键字参数
你也可以使用 key=value 的形式来传递参数,这样可以忽略参数的顺序。
python
def describe_pet(animal_type, pet_name):
print(f"I have a {animal_type} named {pet_name}.")
describe_pet(animal_type="hamster", pet_name="Harry")
describe_pet(pet_name="Harry", animal_type="hamster") # 顺序不重要默认参数
在定义函数时,你可以为参数指定一个默认值。如果在调用函数时没有提供该参数的值,则会使用默认值。
python
def describe_pet(pet_name, animal_type="dog"):
print(f"I have a {animal_type} named {pet_name}.")
describe_pet("Willie") # 使用默认值 'dog'
# 输出: I have a dog named Willie.
describe_pet("Mitty", "cat") # 提供新值 'cat'
# 输出: I have a cat named Mitty.返回值
函数可以使用 return 语句向调用者返回一个值。函数可以返回任何类型的值,包括列表、字典等复杂结构。
python
def add(a, b):
"""返回两个数的和。"""
return a + b
result = add(5, 3)
print(result) # 输出: 8一个函数可以没有 return 语句,或者 return 后面不跟任何值。在这种情况下,函数会自动返回 None。
返回多个值
函数可以一次返回多个值,这些值会被打包成一个元组。
python
def get_name_and_age():
name = "John"
age = 30
return name, age
# 接收返回值
info = get_name_and_age()
print(info) # 输出: ('John', 30)
# 使用元组解包接收
name, age = get_name_and_age()
print(f"Name: {name}, Age: {age}") # 输出: Name: John, Age: 30变量作用域
- 局部变量 (Local Variables): 在函数内部定义的变量,只能在函数内部访问。
- 全局变量 (Global Variables): 在函数外部定义的变量,可以在程序的任何地方访问(包括函数内部)。
python
global_var = "I am global"
def my_function():
local_var = "I am local"
print(global_var) # 可以访问全局变量
print(local_var)
my_function()
# print(local_var) # 这会引发 NameError,因为无法在函数外访问局部变量