通过fire.Fire()给**kwargs传递参数

本文介绍Python的Fire库,演示如何使用Fire.Fire()方法简化命令行界面的创建。通过实例,展示如何传递参数给函数,包括使用**kwargs接收任意数量的关键字参数。特别强调了正确的参数传递格式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Python工具包fire.Fire()的简单使用
首先安装fire工具包

		pip install fire

安装完成之后,用以下代码进行测试

		
		#该文件的文件名是TestFire.py
		import fire
		def greet_me(**kwargs):
		    for key,val in kwargs.items():
		        print("{0}:{1}".format(key,val))
		
		def train(**kwargs):
		    for key ,val  in kwargs.items():
		        print(key+":"+val)
		
		def add(x,y):
		    print("{0}+{1}={2}".format(x,y,(x+y)))
		
		if __name__ == "__main__":
		    fire.Fire()

这里,我们从最简单的add(x,y)说起。在上述文件所在目录下打开cmd命令窗口,然后切换python的环境,原生python这里请忽略。
在这里插入图片描述
然后在命令行内输入:python TestFire.py add 10 24
在这里插入图片描述
这是一种最简单的使用方法,大家从别的博主哪里也可以看到,那么为什么写这篇blog呢?
我们先来调用一下greent_me(**kwargs)函数,依然是在TestFire.py路径下打开cmd窗口,然后执行python TestFire.py greet_me name='tomcat',age=18,
在这里插入图片描述
这里报错了,我们看一下报错信息,ERROR: Could not consume arg: name='tomcat',age=18 Usage: TestFire.py greet_me -,乍一看没有什么内容呀,细看就是少了一个-,所以我们更换原命令重新运行,运行结果如下图所示:
在这里插入图片描述
通过fire.Fire()给**kwargs传递参数
总结,在函数名之后空一格然后加个-,再传递要传递的参数。

System check identified no issues (0 silenced). March 25, 2025 - 16:44:42 Django version 2.2.4, using settings 'DjangoWeb.settings' Starting development server at http://127.0.0.1:8009/ Quit the server with CTRL-BREAK. [25/Mar/2025 16:44:45] "GET / HTTP/1.1" 200 18047 [25/Mar/2025 16:44:48] "GET /cdn HTTP/1.1" 200 9038 Internal Server Error: /cdn Traceback (most recent call last): File "D:\0225\lib\site-packages\django\core\handlers\exception.py", line 34, in inner response = get_response(request) File "D:\0225\lib\site-packages\django\core\handlers\base.py", line 115, in _get_response response = self.process_exception_by_middleware(e, request) File "D:\0225\lib\site-packages\django\core\handlers\base.py", line 113, in _get_response response = wrapped_callback(request, *callback_args, **callback_kwargs) File "D:\0225\lib\site-packages\django\views\generic\base.py", line 71, in view return self.dispatch(request, *args, **kwargs) File "D:\0225\lib\site-packages\django\views\generic\base.py", line 97, in dispatch return handler(request, *args, **kwargs) File "D:\0225\lib\site-packages\django\utils\decorators.py", line 45, in _wrapper return bound_method(*args, **kwargs) File "D:\bs3\DjangoWeb\app\userViews.py", line 24, in wrapper return func(request) File "D:\bs3\DjangoWeb\app\views.py", line 416, in get driver = webdriver.Firefox(executable_path=r"C:\Program Files\Mozilla Firefox\geckodriver.exe") TypeError: __init__() got an unexpected keyword argument 'executable_path' [25/Mar/2025 16:44:49] "GET /cdn?search_url=chinaz.com HTTP/1.1" 500 90413
03-26
# 定义函数 """ def 函数名(参数1, 参数2): 执行代码... return 返回值 # 可选 # 调用函数 # 无参数函数 函数名(值1, 值2) """ # 定义无参函数 def show_welcome(): """显示欢迎信息""" print("🌟 欢迎使用自动化测试系统 🌟") print("请选择测试模块...") # 调用函数 show_welcome() #有参函数 # 计算测试用例执行时间 def calc_exec_time(case_count, avg_time): """计算总执行时间""" total_time = case_count * avg_time return round(total_time, 2) # 保留2位小数 # 调用函数 time = calc_exec_time(50, 1.8) print(f"总执行时间: {time}分钟") # 输出: 总执行时间: 90.0分钟 #位置参数 def create_user(name, age, role): print(f"创建用户: {name}({age}岁), 角色:{role}") # 必须按顺序传递 create_user("张三", 25, "测试工程师") # ✅ 正确 create_user(25, "测试工程师", "张三") # ❌ 顺序错误! #关键字参数 create_user(role="管理员", name="李四", age=30) # 输出: 创建用户: 李四(30岁), 角色:管理员 #默认参数 def connect_db(ip, port=3306, user="admin", pwd="123456"): print(f"连接数据库: {ip}:{port} 用户:{user}") connect_db("192.168.1.100") # 使用默认port/user/pwd connect_db("10.0.0.1", port=5432) # 覆盖部分默认值、 #函数返回值 def analyze_data(data): """分析测试数据""" min_val = min(data) max_val = max(data) avg_val = sum(data)/len(data) return min_val, max_val, avg_val # 返回元组(min, max, avg) # 接收返回值 results = analyze_data([8.2, 7.5, 9.1, 6.7]) print(f"最小值:{results[0]}, 最大值:{results[1]}, 平均值:{results[2]:.2f}") """ 参数类型 特点 示例 位置参数 按定义顺序传递 func(a, b) 关键字参数 指定参数传递,顺序可变 func(b=2, a=1) 默认参数 定义时赋予默认值 def func(a, b=5) 位置参数 > 关键字参数 > 默认参数 """ #三类参数 def report_bug(bug_id, severity="P2", assignee="测试组"): """提交缺陷报告""" print(f"[ID:{bug_id}] 严重度:{severity} 负责人:{assignee}") # 调用方式: report_bug("BUG-2024-001") # 位置参数 → [ID:BUG-2024-001] 严重度:P2 负责人:测试组 report_bug(severity="P1", bug_id="BUG-2024-002") # 关键字参数 → [ID:BUG-2024-002] 严重度:P1 负责人:测试组 # *args:可变位置参数(接收任意数量位置参数) def calculate_avg(*scores): """计算任意数量测试成绩的平均分""" total = sum(scores) return total / len(scores) if scores else 0 # 调用示例 print(calculate_avg(85, 90, 78)) # 输出: 84.333 print(calculate_avg(95, 88)) # 输出: 91.5 print(calculate_avg(100)) # 输出: 100.0 # **kwargs:可变关键字参数(接收任意数量键值对) def test_login(**credentials): """测试登录功能,支持不同参数组合""" # 1. 提取必要参数(带默认值) username = credentials.get("username", "admin") # 默认用户名 password = credentials.get("password", "123456") # 默认密码 # 2. 打印动态参数 print(f"测试登录: 用户名={username}, 密码={password}") # 3. 处理可选参数 if "captcha" in credentials: print(f"验证码: {credentials['captcha']}") if "remember_me" in credentials: print("✅ 记住登录状态") # 调用示例 test_login() # 使用默认参数 test_login(username="tester", password="p@ssw0rd") # 基础登录 test_login(username="user", captcha="AX9Y", remember_me=True) # 带验证码和记住我 # 组合使用 *args 和 **kwargs def run_test(test_name, *test_data, **config): """执行测试用例(带配置参数)""" print(f"\n执行测试: {test_name}") print(f"测试数据: {test_data}") print(f"浏览器: {config.get('browser', 'Chrome')}") print(f"超时: {config.get('timeout', 30)}秒") # 调用示例 run_test("搜索功能", "Python教程", "API文档") run_test("支付功能", "信用卡", "余额支付", browser="Firefox", timeout=45, env="staging") # 参数顺序规则(必须遵守) def valid_order(a, b, *args, c=10, **kwargs): """展示正确的参数顺序""" print(f"a={a}, b={b}, args={args}, c={c}, kwargs={kwargs}") # 正确调用 valid_order(1, 2, 3, 4, c=20, d=5, e=6) # a=1,b=2,args=(3,4),c=20,kwargs={'d':5,'e':6} # 错误调用(将导致语法错误) # def invalid_order(a, **kwargs, *args): # ❌ 语法错误 # def invalid_order(a, **kwargs, b): # ❌ 语法错误 #1. 基础异常捕获 def divide(x, y): try: result = x / y except ZeroDivisionError: # 捕获特定异常 print("错误:除数不能为0!") else: # 无异常时执行 return result print(divide(10, 2)) # 输出: 5.0 print(divide(10, 0)) # 输出: 错误:除数不能为0! #多异常处理 def parse_user_input(input_str): try: num = int(input_str) # 可能触发ValueError if num < 0: raise ValueError("输入不能为负数") # 主动抛出异常 except ValueError as ve: # 捕获值错误 print(f"输入错误: {ve}") except Exception as e: # 捕获其他所有异常 print(f"未知错误: {e}") finally: # 无论是否异常都会执行 print("处理完成") parse_user_input("abc") # 输入错误: invalid literal for int()... parse_user_input("-5") # 输入错误: 输入不能为负数 这个课程是给0基础同学讲解函数和异常处理的,优化下这个课件,补充一个习题
最新发布
08-04
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值