AI大模型入门-参数的传递

视频链接:

不如语冰

https://space.bilibili.com/70431433?spm_id_from=333.1007.0.0

文章代码链接:

https://github.com/zyf-ngu/Qmatter

参数的传递

代码在运行时,需要传入不同的参数。对于简单程序来说,参数可以直接写在文件里,但是这样修改维护不方便,Python动态维护参数的常用方法有2类,一类是处理命令行的args类,另一个就是把参数写在config配置文件里作为模块导入到需使用的文件。

argparse

argparse用来解析命令行参数和选项

分为三个步骤

1创建参数解析器 :是参数解析系统的"配置器",负责定义参数规则,在下面的添加参数后基本不变,ArgumentParser 类实例

parser=argparse.ArgumentParser()

2解析器添加参数:

parser.add_argument("num1",type,required,default)

parser.add_argument("num2",type,required,default)

3输出解析结果:是参数解析系统的"输出",包含解析后的实际值,每次运行根据命令行输入变化,Namespace 类实例

args=parser.parse_args()

三个步骤形成了一个完整的工作流:定义规则 → 解析输入 → 使用结果

注意这里解析参数得到的args是一个对象,而前面获取的参数就是它的属性,因此在代码中使用参数就是获取对象的属性,方法为对象名.参数名,即 args.num1 ,args.num2

或者使用vars()将解析值转换成字典对象。

我们重点关注分析一下第二步的添加参数到底是在做什么?首先要明确,解析器要添加读取的是命令行上的内容,这些内容就是参数的值,而add_argument()括号里的内容就是在指定参数的名称,参数值的数据类型,数量,帮助信息等。

参数的类型有2种,位置参数(参考函数的位置参数)和选项标志,

添加位置参数(必需参数

位置参数(类似于函数的位置参数):在add_argument()`中只提供参数名称(不包含前缀`-`或`--`)。例如:`parser.add_argument("filename")`。

parser.add_argument(

"filename", # 参数名称

type=str, # 参数转换函数

nargs="+", # 接受一个或多个值

help="输入文件路径" # 帮助信息)

添加位置参数时需要注意什么?

  1. 顺序性:位置参数在命令行中出现的顺序必须与程序中定义的顺序一致。

2.必需性:默认情况下,位置参数是必需的。如果用户没有提供,argparse会报错。如果希望位置参数可选,可以通过设置nargs参数(例如nargs='?')来实现。如果设置了`nargs='?'`,则可以为位置参数设置默认值。

运行时在命令行输入 python example.py test.docx,这个test.docx就是参数filename的值。

添加可选参数

parser.add_argument(

"-v", "--verbose", # 短选项和长选项

action="store_true", # 参数行为

dest="show_details", # 结果对象中的属性名

help="显示详细输出" # 帮助信息)

可选参数:在add_argument()中提供了以-或--开头的选项标志。

(1)-v和--verbose是用来定义同一个命令行选项的两种形式。它们的主要区别在于:-v 是短选项(一个短横线加一个字母),便于快速输入;而 --verbose是长选项(两个短横线加一个单词或词组)。长选项含义更清晰,更易阅读和理解。 在同一个add_argument方法中,它们指向同一个目标(即同一个属性)。一般使用长选项去掉前面的两个短横线后的名字(即verbose)作为属性名

在命令行上,用户可以使用以下任意一种形式: python main.py -v 或 python main.py --verbose 。无特殊设置的话,命令行上出现了可选参数,则其对应的参数的值设为true,否则,设为false。

如果只定义了一个选项(例如只定义-v或只定义--verbose),那么用户就只能使用定义的那个选项。

另外,短选项可以合并使用,例如如果有多个短选项,可以合并在一起写:

组合多个短选项 (当多个选项都不需要额外参数时)

python script.py -avs # 等同于 -a -v -s

参数辅助信息

1.help帮助信息:在所有添加的参数后面可以使用help来描述参数的作用。运行程序时只需添加 -h 或 --help 参数即可,其它参数均不需要。

2.type:参数类型转换函数,指将命令行输入的字符串(默认所有参数值都是字符串)转换为程序所需的特定数据类型(如整数、浮点数、布尔值、文件对象等)的过程。当基础类型不能满足需求时,可以创建自定义转换函数,然后令type=自定义函数名。

3.metavar:在帮助文档中显示的参数名称。

4.dest="show_details":可以使用dest参数显式指定属性名(赋别名)。

5.required:标记可选参数是否必需,true为必需。一般用在可选参数,因为位置参数默认是必需的。

6 数量可变的参数:使用nargs参数可以指定参数的数量,传入的参数将被放到参数名称的列表里。

  • nargs=?:0个或1个参数。

  • nargs=*:0个或多个参数。

  • nargs=+:1个或多个参数。

  • 整数:确切个数的参数(如nargs=2表示需要两个参数)。

7.action:"store"和"store_true",两者效果完全相同,都会将添加参数的值设置为True。如果未指定,则存储一个False值(或者如果设置了`default`则存储默认值)。

|-------------------|-------------------|---------------|
| action 类型 | 功能描述 | 常用参数 |
| "store" | 存储参数值(默认,可省略) | type, default |
| "store_const" | 存储常量值 | const |
| "store_true" | 存储 True | - |
| "store_false" | 存储 False | - |
| "append" | 将值追加到列表 | - |
| "append_const" | 将常量追加到列表 | const |
| "count" | 计算参数出现次数 | - |
| "help" | 显示帮助信息 | - |
| "version" | 显示版本信息 | version |
| "extend" | 扩展列表(Python 3.8+) | nargs |

  1. choices:参数允许的值范围,如1, 2, 3, range(1, 10)
  2. default:参数默认值(当未提供时使用)

添加互斥参数

group = parser.add_mutually_exclusive_group()

group.add_argument(

"--fast",

action="store_true",

help="快速模式(牺牲准确性)")

group.add_argument(

"--accurate",

action="store_true",

help="精确模式(速度较慢)")

获取参数 , 创建一个空 parser 对象,模拟读取命令行参数(实际读取 kawrgs 的参数)

配置文件

在大型项目中,为了更好地维护和管理参数,通常会把关键的参数放置在配置文件里,常用的配置文件一般包括.py文件和.json文件,在开源项目里会有.example文件指导用户给定初始的参数(为了避免在版本控制中暴露敏感信息(如数据库密码、API 密钥等),我们通常不会直接修改 config.py.example 文件,而是将其复制为 config.py,并在这个新文件中修改参数的值。

值得注意的是,若configs是个库,下面有多个配置文件,需要在库下面添加一个 init.py文件,文件里导入各个配置文件,然后在应用文件里再直接导入库 import configs。配置文件参数的优先级低于命令行参数,即命令行传递的参数是最终使用的参数。

.py文件

直接使用 Python 语法 :通过变量、字典或类定义配置。

灵活性强:支持动态逻辑(如条件判断、计算表达式)。

无需解析器 :直接通过 import 导入配置,完全按照Python数据结构的正常方法使用。

潜在安全隐患:如果配置文件来自不可信来源,执行代码可能带来风险。

示例代码

#字典

DATABASE = {

"host": "localhost",

"port": 3306,

"username": "admin",

"password": "secret",

"timeout": 10}

#变量,一般全大写

DEBUG = True # 可动态控制配置项

#使用方式

from config import DATABASE, DEBUG

print(DATABASE"host") # 输出: localhost

print(DEBUG) # 输出: True

可以看到,.py文件将配置参数以字典,变量等数据形式存储,使用时直接import导入对应变量,然后就可以按照Python语法正常使用。

.json 配置文件

结构化数据格式:键值对存储,支持嵌套结构。

跨语言兼容:几乎所有编程语言都能解析。

无代码执行:纯数据文件,安全性高。

严格语法:不允许注释(原生 JSON),需注意格式正确性。

示例文件

{"database": {

"host": "localhost",

"port": 3306,

"username": "admin",

"password": "secret"},

"debug": true}

使用方式

import json

with open("config.json") as f:

config = json.load(f)

print(config"database""host") # 输出: localhost

print(config"debug") # 输出: True

相关推荐
用户938515635078 小时前
从 Vite 脚手架到 WebGPU 推理:手写一个 DeepSeek-R1 浏览器端大模型 Demo
javascript·人工智能·全栈
Jerry_Chenug8 小时前
MCP 入门到实战:把文档、接口和工具接入 Cursor
人工智能
用户6760840656178 小时前
GraphBLAS_01_图的稀疏表示
python
Revolution618 小时前
一堆 if 把 Agent Loop 写乱了:Hooks 到底解决了什么?
人工智能
m沐沐8 小时前
【深度学习】深入理解长短期记忆网络 LSTM
人工智能·pytorch·深度学习·神经网络·lstm
xiancai_xianyu8 小时前
企业本体语义:设备保养与供应商评估,为什么需要统一的语义模型?
大数据·人工智能
小陈工8 小时前
第7篇:Django框架核心原理与实战深度解析(下)
后端·python·面试
中微极客8 小时前
多模态AI实战:GPT-4o/Gemini/Claude 3对比与工程落地
人工智能
武子康8 小时前
GitHub Actions `pull_request_target` 与 Pwn Request:高权限工作流里的 Fork 代码执行风险(2026)
人工智能·github·ai编程