Python 中使用 def 来定义函数。依次是 def 函数名、括号、括号中的参数及结尾的冒号,另起一行缩进写函数体,函数的返回值用 return 语句返回。
如:
def func(参数):
函数体
return
调用函数时会对传入的参数进行自动检查,包括参数的类型及参数的数量,如果不符合要求会抛出 TypeError 异常。
参数的类型可分为:
1、必选参数
2、默认参数
3、可变参数
4、关键字参数
函数中的参数顺序一定要按以上顺序排列。
下面通过示例来更好的理解函数的各类参数:
定义函数:
>>> def func(hostname,os='CentOS',*role,**other):
... print('Hostname : %s\nOS : %s\nRole : %s\nOther : %s'%(hostname,os,role,other))
...
>>>
其中 hostname 为必选参数,os为默认参数,role为可变参数,other为关键字参数。
*和**分别为可变参数和关键字参数前缀,可变参数类型为列表或元组,关键字参数类型为字典。
演示:
1、
>>> func('web1')
Hostname : web1
OS : CentOS
Role : ()
Other : {}
>>>
调用之前定义的 func 函数,并传入'web1'必选参数。在输出的结构中 OS 显示为默认的 CentOS。
2、
>>> func('web2','ubuntu')
Hostname : web2
OS : ubuntu
Role : ()
Other : {}
>>>
调用之前定义的 func 函数,并传入'web2'必选参数,默认参数用 'ubuntu' 替换。
3、
>>> func('db-1','redhat','MySQL','Redis')
Hostname : db-1
OS : redhat
Role : ('MySQL', 'Redis')
Other : {}
>>>
调用之前定义的 func 函数,并传入必选参数,默认参数,以及两个可变参数。可变参数类型可以为列表或元组,如下:
>>> func('db-1','redhat',*['MySQL','Redis'])
Hostname : db-1
OS : redhat
Role : ('MySQL', 'Redis')
Other : {}
>>>
>>> func('db-1', 'redhat',*('MySQL', 'Redis'))
Hostname : db-1
OS : redhat
Role : ('MySQL', 'Redis')
Other : {}
>>>
当传入的可变参数是列表或元组时要在前加上*,对应的结果输出为元组。
4、
>>> func('db-3', 'redhat','MySQL', 'Redis', ip='172.16.100.3')
Hostname : db-3
OS : redhat
Role : ('MySQL', 'Redis')
Other : {'ip': '172.16.100.3'}
>>>
>>> func('db-3', 'redhat','MySQL', 'Redis', ip='172.16.100.3', m_port=3307)
Hostname : db-3
OS : redhat
Role : ('MySQL', 'Redis')
Other : {'ip': '172.16.100.3', 'm_port': 3307}
>>>
>>> func('db-3', 'redhat','MySQL', 'Redis', **{'ip' : '172.16.100.3', 'm_port' : 3307})
Hostname : db-3
OS : redhat
Role : ('MySQL', 'Redis')
Other : {'ip': '172.16.100.3', 'm_port': 3307}
>>>
调用之前定义的 func 函数,并传入必选参数,默认参数,两个可变参数及关键字参数。
当传入的关键字参数是字典时要在前加上**,对应的结果输出为字典。
当然以上测试中的列表、元组及字典可以先定义再引用:
>>> db_3_o={'ip' : '172.16.100.3', 'm_port' : 3307}
>>> db_3_r=['MySQL', 'Redis']
>>> func('db-3', 'redhat',*db_3_r, **db_3_o)
Hostname : db-3
OS : redhat
Role : ('MySQL', 'Redis')
Other : {'ip': '172.16.100.3', 'm_port': 3307}
>>>