📅  最后修改于: 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
我们可以使用命令行参数来编写执行常用任务的程序。例如,我们需要多次查找阶乘。我们可以将以下程序保存在计算机中名为factorial.py的文件中,并通过简单地编写用于获取数字的阶乘(例如5)的命令来获取输出。
Python factorial.py 5
import sys
from math import factorial
print factorial(int(sys.argv[1]))
“ 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")