📜  Python | 6(命令行和变量参数)

📅  最后修改于: 2020-05-03 15:07:11             🧑  作者: Mango

本文着重于Python中函数的命令行参数以及变量参数(args和kwargs)。

命令行参数

到现在为止,我们已经使用raw_input()或input()[对于整数]在Python中进行输入。还有另一种使用命令行参数的方法。每当我们想要在脚本开始之前提供输入时,都必须提供命令行参数,而另一方面,在Python程序/脚本运行时,使用raw_input()获取输入。

例如,在UNIX环境中,“ ls”命令的参数“ -a”和“ -l”给出不同的结果。
可以使用“ sys”模块或“ argparse”模块来处理Python中的命令行参数。

# Python代码演示对命令行参数使用'sys'模块的方式
import sys
# 命令行参数以sys.argv中list的形式存储
argumentList = sys.argv
print argumentList
# 打印文件名
print sys.argv[0]
# 在文件名后打印第一个参数
print sys.argv[1]

输出:

['program1.py', 'test', '1']
program1.py
test

注意:上面的代码仅在命令行上运行。鉴于该程序已另存为program1.py,因此我们需要启动以下命令 :关于上述程序,请注意以下几点:
Python program1.py test 123

    • sys.argv采用列表形式的命令行参数。
    • 列表中的第一个元素是文件名。
    • 即使我们在参数列表中键入整数,参数也始终以字符串形式出现。我们需要使用int()函数将字符串转换为整数。

我们可以使用命令行参数来编写执行常用任务的程序。例如,我们需要多次查找阶乘。我们可以将以下程序保存在计算机中名为factorial.py的文件中,并通过简单地编写用于获取数字的阶乘(例如5)的命令来获取输出。

Python factorial.py 5

import sys
from math import factorial
print factorial(int(sys.argv[1]))
可变参数
args(*)和kwargs(**)

“ args”和“ kwargs”都用于获取函数中任意数量的参数。
args将以列表的形式为我们提供所有参数,而kwargs将为我们提供所有关键字参数(与形式参数对应的字典除外)。

# Python程序说明了args的用法,该方法会将作为参数提供给函数的所有值相乘
def multiplyAll(*values):
    mul = 1
    # values(args)将以元组的形式
    print values
    print "Type = ", type(values)
    # 将所有参数相乘并返回结果
    for i in values:
        mul = mul * i
    return mul
# 驱动程序测试上述功能
# 使用上述函数将两个数相乘
ans = multiplyAll(1,2)
print "1和2的乘法是 ", ans
# 使用上述功能将5个数字相乘
ans = multiplyAll(3, 4, 5, 6, 7)
print "3到7的乘法是 ", ans

输出:

(1, 2)
Type =
1和2的乘法是  2
(3, 4, 5, 6, 7)
Type =
3到7的乘法是  2520

请注意,在函数的形式参数之前,args使用单个星号表示,kwargs用两个星号表示。

# 演示在Python中使用kwarg的程序
# 打印学生详细信息的功能
# 每个学生的详细信息数量可能会有所不同
def printDetails(**details):
    # 变量“细节"以字典的形式包含细节
    print "Parameter details contains"
    print details
    print "Type = ", type(details)
    # 打印名字
    print "First Name = ", details['firstName']
    # 打印学生系
    print "Department = ", details['department']
    print "" # Extra line break
# 驱动程序测试上述功能
# 用三个参数调用函数
printDetails(firstName = "Nikhil",
             rollNumber = "007",
             department = "CSE")
# 用两个参数调用函数
printDetails(firstName = "Abhay",
             department = "ECE")

输出:

Parameter details contains
{'department': 'CSE', 'rollNumber': '007', 'firstName': 'Nikhil'}
Type =
First Name =  Nikhil
Department =  CSE
Parameter details contains
{'department': 'ECE', 'firstName': 'Abhay'}
Type =
First Name =  Abhay
Department =  ECE

注意,如果在函数中同时使用了args和kwargs,则args参数必须在kwarg参数之前。
范例:

# 包含args和kwargs的函数
def cheeseshop(kind, *arguments, **keywords):
    print "-- Do you have any", kind, "?"
    print "-- I'm sorry, we're all out of", kind
    for arg in arguments:
        print arg
    print "-" * 40
    keys = sorted(keywords.keys())
    for kw in keys:
        print kw, ":", keywords[kw]
# 驱动程序测试上述功能
cheeseshop("Burger", "It's very funny, sir.",
           "It's really very, VERY funny, sir.",
           shopkeeper='Michael Palin',
           client="John Cleese",
           sketch="Cheese Shop Sketch")