0%

函数

Python 函数详解(Python 3.x)

函数是 Python 中组织代码的基本单元,用于封装可重用的逻辑。与 Java 的 “方法” 类似,但 Python 函数更灵活,支持默认参数、关键字参数、可变参数等特性。本文将全面介绍 Python 函数的定义、参数类型、返回值及模块使用。

函数的基本定义与调用

使用 def 关键字定义函数,语法为:

1
2
3
def 函数名(参数列表):
函数体(缩进代码块)
[return 返回值]

无参数函数

不接收参数的函数,直接执行预设逻辑:

1
2
3
4
5
6
# 定义无参数函数
def say_hello():
print("Hello, Python!")

# 调用函数(函数名后加括号)
say_hello() # 输出:Hello, Python!

带参数函数

接收输入参数,根据参数执行不同逻辑:

1
2
3
4
5
6
7
8
9
10
11
12
# 定义比较两个数的函数
def print_max(a, b):
if a > b:
print(f"{a} 是最大值")
elif a == b:
print("两者相等")
else:
print(f"{b} 是最大值")

# 调用函数并传递参数
print_max(5, 7) # 输出:7 是最大值
print_max(3, 3) # 输出:两者相等

函数参数的高级用法

Python 函数参数支持多种灵活的传递方式,远超传统语言的位置参数。

默认值参数

为参数指定默认值,调用时可省略该参数(默认值参数必须放在无默认值参数之后):

1
2
3
4
5
6
7
8
# 定义带默认值的函数
def greet(name, greeting="Hello"):
print(f"{greeting}, {name}!")

# 调用时省略默认值参数
greet("Alice") # 输出:Hello, Alice!
# 显式传递默认值参数
greet("Bob", "Hi") # 输出:Hi, Bob!

注意:默认值参数的默认值只在函数定义时计算一次,若默认值是可变对象(如列表),可能导致意外结果:

1
2
3
4
5
6
def add_item(item, lst=[]):  # 不推荐:默认值为可变对象
lst.append(item)
return lst

print(add_item(1)) # 输出:[1]
print(add_item(2)) # 输出:[1, 2](默认列表被复用)

解决方法:用 None 作为默认值,在函数内初始化可变对象:

1
2
3
4
5
def add_item(item, lst=None):
if lst is None:
lst = []
lst.append(item)
return lst

关键字参数

调用函数时,通过 “参数名 = 值” 的方式传递参数,无需严格遵守位置顺序:

1
2
3
4
5
6
7
8
9
10
def describe_person(name, age, city):
print(f"{name}{age}岁,来自{city}")

# 传统位置参数(需按顺序传递)
describe_person("Alice", 20, "Beijing")

# 关键字参数(可打乱顺序)
describe_person(age=21, name="Bob", city="Shanghai")
# 混合使用(位置参数必须在关键字参数前)
describe_person("Charlie", city="Guangzhou", age=22)

关键字参数的优势:

  • 提高代码可读性(明确参数含义)。
  • 无需记忆参数顺序,尤其适合参数较多的函数。

可变参数

当参数数量不确定时,使用可变参数接收任意数量的输入:

  • *args:接收任意数量的位置参数,打包为元组(tuple)。
  • **kwargs:接收任意数量的关键字参数,打包为字典(dictionary)。
1
2
3
4
5
6
7
8
9
10
11
12
# 定义含可变参数的函数
def print_info(name, *hobbies, **details):
print(f"姓名:{name}")
print("爱好:", hobbies) # hobbies 是元组
print("详细信息:", details) # details 是字典

# 调用函数
print_info(
"Alice",
"读书", "旅行", # 位置参数,被 *hobbies 接收
age=20, city="Beijing" # 关键字参数,被 **details 接收
)

输出结果

1
2
3
姓名:Alice
爱好: ('读书', '旅行')
详细信息: {'age': 20, 'city': 'Beijing'}

注意:参数定义顺序必须为:普通参数 → *args**kwargs

函数的返回值

使用 return 语句返回函数执行结果,若未指定 return,函数默认返回 None

基本返回值

1
2
3
4
5
6
# 定义返回单个值的函数
def add(a, b):
return a + b

result = add(3, 5)
print(result) # 输出:8

返回多个值

Python 函数可通过元组间接返回多个值(本质是返回一个元组,自动解包):

1
2
3
4
5
6
7
8
9
def get_user():
name = "Alice"
age = 20
city = "Beijing"
return name, age, city # 等价于 return (name, age, city)

# 自动解包为多个变量
user_name, user_age, user_city = get_user()
print(user_name, user_age, user_city) # 输出:Alice 20 Beijing

函数与模块(Module)

模块是包含函数和变量的 .py 文件,用于代码复用(类似 Java 的包)。

导入模块

假设存在 my_module.py 文件,内容如下:

1
2
3
4
5
6
7
8
# my_module.py
def greet(name):
return f"Hello, {name}!"

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

PI = 3.14159

可通过以下方式导入模块中的内容:

导入方式 说明 示例调用
import 模块名 导入整个模块 my_module.greet("Alice")
from 模块名 import 成员 导入模块中的指定成员(函数、变量) from my_module import greet; greet("Alice")
import 模块名 as 别名 给模块起别名,简化调用 import my_module as mm; mm.add(1, 2)
from 模块名 import * 导入模块中所有公开成员(不推荐) greet("Alice")

示例:使用模块

1
2
3
4
5
6
7
8
9
10
11
12
# 导入整个模块并起别名
import my_module as mm

print(mm.greet("Bob")) # 输出:Hello, Bob!
print(mm.add(2, 3)) # 输出:5
print(mm.PI) # 输出:3.14159

# 导入指定成员
from my_module import greet, PI

print(greet("Charlie")) # 输出:Hello, Charlie!
print(PI) # 输出:3.14159

安装与使用第三方模块

Python 生态有大量第三方模块,可通过 pip 安装(Python 3 建议用 pip3):

1
2
# 安装 requests 模块(用于网络请求)
pip3 install requests

使用第三方模块:

1
2
3
4
import requests

response = requests.get("https://www.baidu.com")
print(response.status_code) # 输出:200(表示请求成功)

函数的作用域

变量的作用域指其可访问的范围,Python 函数有两种主要作用域:

  • 局部变量:在函数内部定义,仅在函数内有效。
  • 全局变量:在函数外部定义,可在整个模块内访问。
1
2
3
4
5
6
7
8
9
10
11
12
# 全局变量
global_var = "我是全局变量"

def my_func():
# 局部变量
local_var = "我是局部变量"
print(local_var)
print(global_var) # 可访问全局变量

my_func()
print(global_var)
# print(local_var) # 报错:局部变量在函数外不可访问

修改全局变量:需用 global 声明:

1
2
3
4
5
6
7
8
count = 0

def increment():
global count # 声明使用全局变量 count
count += 1

increment()
print(count) # 输出:1

欢迎关注我的其它发布渠道

表情 | 预览
快来做第一个评论的人吧~
Powered By Valine
v1.3.10