🎉 Python 函数参数的五种类型详解 🎉

Python 函数参数的五种类型详解

今天咱们来聊聊函数参数这个话题。你可能已经写过不少函数了,但是对于参数的各种用法,可能还有些模糊。别担心,今天我们就来彻底搞清楚Python函数参数的五种类型,让你的代码写得更优雅、更灵活!

参考文章:Python 函数参数的五种类型 | 简单一点学习 easeasy.me

位置参数(Positional Arguments) - 最基础的参数类型关键字参数(Keyword Arguments) - 让代码更清晰默认参数(Default Arguments) - 让函数更灵活可变位置参数(args) - 处理不定数量的参数可变关键字参数(kwargs) - 处理不定数量的关键字参数参数类型的组合使用 - 实际应用中的最佳实践总结和建议

1. 位置参数(Positional Arguments)

位置参数是最基础的参数类型,就像排队一样,按照顺序来传递参数。

def greet(name, age):

print(f"你好,{name}!你今年{age}岁了。")

# 调用函数时,参数必须按顺序传递

greet("小明", 25) # 输出:你好,小明!你今年25岁了。

注意事项:

参数的顺序很重要,不能搞错 参数的数量必须匹配,多了少了都不行

# 错误示例

greet(25, "小明") # 输出会很奇怪:你好,25!你今年小明岁了。

greet("小明") # 报错:缺少参数

2. 关键字参数(Keyword Arguments)

关键字参数让你可以通过参数名来传递值,不用担心顺序问题。

def introduce(name, age, city):

print(f"我叫{name},今年{age}岁,来自{city}。")

# 使用关键字参数,顺序可以随意

introduce(age=28, city="北京", name="小红")

introduce(name="小李", city="上海", age=30)

混合使用:

# 位置参数必须在关键字参数前面

introduce("小王", age=26, city="广州") # 正确

# introduce(name="小王", 26, "广州") # 错误!

3. 默认参数(Default Arguments)

默认参数让函数更加灵活,如果调用时没有提供某个参数,就使用默认值。

def create_user(name, age, city="未知"):

print(f"用户:{name},年龄:{age},城市:{city}")

create_user("张三", 25) # 输出:用户:张三,年龄:25,城市:未知

create_user("李四", 30, "深圳") # 输出:用户:李四,年龄:30,城市:深圳

实际应用场景:

def connect_database(host, port=3306, timeout=30):

print(f"连接数据库:{host}:{port},超时时间:{timeout}秒")

connect_database("localhost") # 使用默认端口和超时

connect_database("192.168.1.100", port=5432) # 自定义端口

重要提醒:

# 危险!不要用可变对象作为默认参数

def add_item(item, items=[]): # 这样写有问题!

items.append(item)

return items

# 正确的写法

def add_item(item, items=None):

if items is None:

items = []

items.append(item)

return items

4. 可变位置参数(*args)

当你不知道会传入多少个位置参数时,*args就派上用场了。

def calculate_sum(*numbers):

total = 0

for num in numbers:

total += num

return total

print(calculate_sum(1, 2, 3)) # 输出:6

print(calculate_sum(1, 2, 3, 4, 5)) # 输出:15

print(calculate_sum()) # 输出:0

实际应用:

def log_message(level, *messages):

print(f"[{level}]", end=" ")

for msg in messages:

print(msg, end=" ")

print() # 换行

log_message("INFO", "用户登录成功")

log_message("ERROR", "数据库连接失败", "请检查网络", "错误代码:500")

5. 可变关键字参数(**kwargs)

**kwargs让你可以接收任意数量的关键字参数。

def create_profile(**info):

print("用户档案:")

for key, value in info.items():

print(f" {key}: {value}")

create_profile(name="小明", age=25, city="北京", hobby="编程")

实际应用场景:

def send_email(to, subject, **options):

print(f"发送邮件到:{to}")

print(f"主题:{subject}")

# 处理可选参数

if "cc" in options:

print(f"抄送:{options['cc']}")

if "priority" in options:

print(f"优先级:{options['priority']}")

if "attachment" in options:

print(f"附件:{options['attachment']}")

send_email("user@example.com", "会议通知",

cc="boss@example.com",

priority="高",

attachment="meeting.pdf")

6. 参数类型的组合使用

在实际开发中,我们经常需要组合使用这些参数类型。记住这个顺序:**位置参数 → 默认参数 → *args → kwargs

def advanced_function(required_arg, default_arg="默认值", *args, **kwargs):

print(f"必需参数:{required_arg}")

print(f"默认参数:{default_arg}")

print(f"可变位置参数:{args}")

print(f"可变关键字参数:{kwargs}")

# 各种调用方式

advanced_function("必需的")

advanced_function("必需的", "自定义默认值")

advanced_function("必需的", "自定义默认值", 1, 2, 3)

advanced_function("必需的", "自定义默认值", 1, 2, 3, name="小明", age=25)

实际项目示例:

def api_request(url, method="GET", *args, **kwargs):

"""发送API请求的通用函数"""

print(f"请求URL:{url}")

print(f"请求方法:{method}")

# args可以用来传递额外的位置参数

if args:

print(f"额外参数:{args}")

# kwargs可以用来传递请求头、超时时间等

headers = kwargs.get("headers", {})

timeout = kwargs.get("timeout", 30)

print(f"请求头:{headers}")

print(f"超时时间:{timeout}秒")

# 使用示例

api_request("https://api.example.com/users")

api_request("https://api.example.com/users", "POST",

headers={"Content-Type": "application/json"},

timeout=60)

7. 总结和建议

使用建议:

优先使用位置参数和关键字参数:它们最直观,代码可读性好合理使用默认参数:让函数更灵活,但不要滥用谨慎使用*args和kwargs**:虽然灵活,但会降低代码可读性参数顺序要正确:位置参数 → 默认参数 → *args → **kwargs

最佳实践:

# 好的函数设计

def process_data(data, format="json", validate=True, **options):

"""

处理数据的函数

Args:

data: 要处理的数据(必需)

format: 数据格式(默认json)

validate: 是否验证数据(默认True)

**options: 其他可选参数

"""

pass

# 清晰的调用方式

process_data(my_data)

process_data(my_data, format="xml")

process_data(my_data, validate=False, encoding="utf-8")

好了,Python函数参数的五种类型就介绍完了!记住,熟练掌握这些参数类型,能让你的代码更加灵活和优雅 🐍✨。

✨ 相关推荐 ✨

用友软件售前/售后技术支持工程师面试经验
365网站余额截图

用友软件售前/售后技术支持工程师面试经验

🎯 08-12 👁️ 7361
星之海洋4:最后的希望 全流程白金图文攻略
bat365官方网页版

星之海洋4:最后的希望 全流程白金图文攻略

🎯 07-21 👁️ 2154
苹果 iPhone 3gs 32gb 手机
bat365官方网页版

苹果 iPhone 3gs 32gb 手机

🎯 06-28 👁️ 9197