内容表
Python 中的可变长度参数
Python 中的关键字变量长度参数
可变长度参数是一个可以接受数量可变的参数。要指示该函数可以采取可变参数,请使用"*"(例如*args)编写可变参数。
可变参数有助于在开头不知道确切参数数量的情况下,它也有助于使函数的功能更加灵活。先看以下函数:
def add_num(num1, num2):
return num1 + num2
此函数只能用于计算两个数值相加,如果传入两个以上的数值,将获得错误。
result = add_num(5,6,7)print('Sum is', result)
result = add_num(5,6,7)TypeError: add_num() takes 2 positional arguments but 3 were given
通过将参数更改为*args,您可以指定该函数接受可变数量的参数,并可用于任意个数值的相加。
def add_num(*args):
sum =0
for num in args:
sum += num
return sum
result = add_num(5,6,7)print('Sum is', result)
result = add_num(5,6,7,8)print('Sum is', result)
result = add_num(5,6,7,8,9)print('Sum is', result)
输出
Sumis18Sumis26Sumis35
关于 Python 中可变长度参数的要点:
将可变长度参数命名为"*args"不是强制性的。所需是*,名称可以是任何可变名称,例如*数字,*名称。
使用可变长度参数,您可以将零参数或更多参数传递到函数。
值传递给 *args储在一个元组(tuple)。
在变量参数之前,可以其它的参数,但不能在变量参数之后。在可变参数之后,只可以有关键字参数。
def add_num(n,*numbers):
sum =0
print('n is', n)
for num in numbers:
sum += num
sum += n
return sum
result = add_num(8,5,6,7)print('Sum is', result)
输出
n is8Sumis26
正如在这里看到的n是第一个参数,第一个值传递给该参数。
如果更改为以下形式:
def add_num(*numbers, n):
然后,将导致错误。
输出
result = add_num(8,5,6,7)TypeError: add_num() missing 1 required keyword-only argument:'n'
可以在变量参数后添加关键字参数。
def add_num(*numbers, n):
sum =0
print('n is', n)
for num in numbers:
sum += num
sum += n
return sum
result = add_num(5,6,7, n=8)print('Sum is', result)
输出
n is8Sumis26
Python 关键字可变长度参数是接受可变数量的关键字参数(以键、值对形式进行参数定义)的参数。要指示该函数可以采用关键字可变长度参数,请使用双星号"**"(例如**kwargs)编写参数。
关键字变长参数传递的值存储在关键字 arg 名称引用的字典中。
def display_records(**records):
for k, v in records.items():
print('{} = {}'.format(k,v))
display_records(Firstname="Jack",Lastname="Douglas", marks1=45, marks2=42)
display_records(Firstname="Lisa",Lastname="Montana", marks1=48, marks2=45, marks3=49)
输出
Firstname=JackLastname=Douglas
marks1 =45
marks2 =42Firstname=LisaLastname=Montana
marks1 =48
marks2 =45
marks3 =49
您可以在关键字变量长度参数之前传递其它参数,但在此之后不再传递正式参数,因此以下是一个有效的函数定义。
def display_records(a,**records):
应用:添加材料库
"可选择model,添加钢、铜、铝的材料"" from abaqus import * from abaqusConstants import *
"定义添加材料的函数" def add_SI_Materials(): "导入材料模块" import material "输入材料名称,使用getInput()函数,自动输入前一个model Name" name = getInput('Enter model name', mdb.models.keys()[-1]) if not name in mdb.models.keys(): raise ValueError,'mdb.models[%s] not found'% repr(name) "添加steel材料参数" m = mdb.models[name].Material('Steel') m.Elastic(table=((200000000000.0, 0.3),)) m.Density(table=((7800.0, ), )) m.Plastic(table=((400000000.0, 0.0), (420000000.0, 0.02), (500000000.0, 0.2), (600000000.0, 0.5))) "添加copper材料参数" m = mdb.models[name].Material('Copper') m.Elastic(table=((110000000000.0, 0.3),)) m.Density(table=((8970.0, ), )) m.Plastic(table=((314000000.0, 0.0), )) "添加Aluminium材料参数" m = mdb.models[name].Material('Aluminum') m.Elastic(table=((70000000000.0, 0.35), )) m.Density(table=((2700.0, ), )) m.Plastic(temperatureDependency=ON, table=((270000000.0, 0.0, 0.0), (300000000.0, 1.0, 0.0), (243000000.0, 0.0, 300.0), (270000000.0, 1.0, 300.0))) "调用函数,运行结果即导入了以上三种材料" add_SI_Materials()
|