首页/文章/ 详情

Abaqus-Python系列第四课-函数参数

1年前浏览1850

继续学习Abaqus-Python二次开发,那么函数就是我们绕不开的内容。本文将帮助大家理解 Python 中的可变长度参数 (*args) 及 关键字可变长度参数 (**kwargs) 。

内容表

  1. Python 中的可变长度参数

  2. Python 中的关键字变量长度参数


1、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 中可变长度参数的要点:

  1. 将可变长度参数命名为"*args"不是强制性的。所需是*,名称可以是任何可变名称,例如*数字,*名称。

  2. 使用可变长度参数,您可以将零参数或更多参数传递到函数。

  3. 值传递给 *args储在一个元组(tuple)。

  4. 在变量参数之前,可以其它的参数,但不能在变量参数之后。在可变参数之后,只可以有关键字参数

    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

2、Python 中的关键字变量长度参数

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()

 


来源:ABAQUS仿真世界
Abaqus二次开发材料
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2023-08-17
最近编辑:1年前
yunduan082
硕士 | 仿真主任工程... Abaqus仿真世界
获赞 157粉丝 234文章 323课程 0
点赞
收藏
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习计划 福利任务
下载APP
联系我们
帮助与反馈