如何用Python传递姓名和年龄参数?

在Python中处理命令行参数是开发命令行工具的基础功能,能提升脚本的灵活性和用户体验,以下是几种主流方法及详细实现:


使用 sys.argv(基础场景)

适用于简单参数解析,直接读取命令行输入:

import sys
if len(sys.argv) == 3:
    name = sys.argv[1]  # 获取第一个参数 -> "Alice"
    age = sys.argv[2]   # 获取第二个参数 -> "25"
    print(f"Name: {name}, Age: {age}")
else:
    print("Usage: python script.py <name> <age>")

特点

  • 无需额外库,但需手动验证参数数量和类型
  • 无自动帮助文档生成

使用 argparse(推荐方案)

Python标准库,支持复杂参数规则,自动生成帮助文档:

import argparse
# 初始化解析器
parser = argparse.ArgumentParser(description="用户信息录入")
# 添加参数规则
parser.add_argument("name", type=str, help="用户姓名")  # 必选位置参数
parser.add_argument("--age", type=int, default=18, help="用户年龄(默认18)")  # 可选参数
parser.add_argument("-v", "--verbose", action="store_true", help="显示详细输出")  # 布尔标志
# 解析参数
args = parser.parse_args()
# 使用参数
if args.verbose:
    print(f"详细信息:{args.name},{args.age}岁")
else:
    print(f"{args.name}: {args.age}")

关键方法

  • add_argument() 参数详解:
    • type:指定数据类型(如 int/str
    • default:设置默认值
    • required=True:强制要求可选参数(如 --age 变为必填)
    • choices=[18,20,25]:限制参数可选值
    • action="store_true":无需值的布尔标志
  • 自动生成帮助文档:
    $ python script.py -h
    usage: script.py [-h] [--age AGE] [-v] name

使用 getopt(类C风格)

兼容传统C语言风格的参数解析:

import sys, getopt
# 示例命令: python script.py -n Alice -a 25 --verbose
try:
    opts, args = getopt.getopt(sys.argv[1:], "n:a:v", ["name=", "age=", "verbose"])
except getopt.GetoptError:
    sys.exit(2)
name = age = None
verbose = False
for opt, arg in opts:
    if opt in ("-n", "--name"):
        name = arg
    elif opt in ("-a", "--age"):
        age = arg
    elif opt in ("-v", "--verbose"):
        verbose = True
print(f"Name: {name}, Age: {age}, Verbose: {verbose}")

适用场景

  • 需要兼容POSIX命令行传统规范时
  • 相比 argparse 更底层,代码量较大

第三方库推荐(高级需求)

  1. click:通过装饰器简化参数定义
    import click
    @click.command()
    @click.option("--name", prompt="Your name", help="用户姓名")
    @click.option("--age", default=18, help="用户年龄")
    def greet(name, age):
        click.echo(f"Hello {name}, age {age}")
  2. fire:自动将函数/类转为命令行接口
    import fire
    def calculate(x, y=10):
        return x * y
    if __name__ == '__main__':
        fire.Fire(calculate)  # 直接支持命令: python script.py 5 --y=3

方法 适用场景 优势
sys.argv 1-2个简单参数 无需导入库
argparse 大多数标准CLI工具 功能全面、文档自动生成
click 复杂交互式工具 优雅的链式语法
fire 快速原型开发 零参数解析代码

关键建议

  • 生产环境优先使用 argparse(标准库兼容性好)
  • 需要更简洁语法时选 click
  • 避免手动解析 sys.argv(易出错且难维护)

引用说明:

  • Python官方文档:argparse, getopt
  • click 库文档:https://click.palletsprojects.com/
  • Google fire 项目:https://github.com/google/python-fire

原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/8736.html

(0)
酷番叔酷番叔
上一篇 9小时前
下一篇 9小时前

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信