博客简介
关于函数,我们一定都不陌生。函数参数的传递分为可更改类型mutable:numbers,strings, tuples
不可更改(immutable)类型:list,set,dictionary
本篇博客针对Python3中的函数参数类型规则作出总结:
Python中的函数参数类型有:
- 必需参数
- 关键字参数
- 默认参数
- 不定长参数
- 强制位置参数
必需参数
- 必需参数须以正确的顺序传入函数。
- 调用时的数量必须和声明时的一样。
- 举例:
def func(a,b):
print("Function:%d %d"%(a,b))
func(1,2)
'''
Function:1 2
'''
关键字参数
- 函数调用使用关键字参数来确定传入的参数值。
- 使用关键字参数允许函数调用时参数的顺序与声明时不一致
- 使用
function(key=value)
的形式来传入参数,Python 解释器能够用参数名匹配参数值。 - 举例:
def func(a,b):
print("Function:%d %d"%(a,b))
func(b=2,a=1)
'''
Function:1 2
'''
默认参数
- 默认参数允许改关键字没有匹配具体值
- 如果没有传递参数,则会使用默认参数
- 举例:
def func(a,b=0):
print("Function:%d %d"%(a,b))
func(1)
'''
Function:1 0
'''
不定长参数
有时候我们也许需要一个函数能处理比当初声明时更多的参数。类似于传入一个C++中的数组:
- 参数长度可变,也可以是0
- 参数有两种类型:元组tuple和字典dictionary
- 不定长元组:
function(*tuple)
的形式传入 - 如果单独出现星号,
*
前面的参数必须不能有关键字传入*
后的参数必须用关键字传入。 - 不定长字典:
function(*diction)
的形式传入
*Tuple形式传入:
def func(a,*b):
print("Function:",a,b)
def function(a,*b):
print("Function:",a)
for val in b:
print(val)
func(1,2,3,4,5)
func(1,(2,3,4,5))
function(1,2,3,4,5)
'''
Function: 1 (2, 3, 4, 5)
Function: 1 ((2, 3, 4, 5),)
Function: 1
2
3
4
5
'''
def function(b,*x,c):
print("sucess")
function(1,0,c=1)
'''
1 2 3 4 (0,) 5
sucess
function(b=1,0,c=1)
错误
'''
**dictionary形式传入
#coding=UTF-8
def func(a,**b):
print("Function:",a,b)
def function(a,**b):
print("Function:",a)
for key,val in b.items():
print(key,"=>","val")
func(1,key1="value1",key2="value2",key3="value3")
function(1,key1="value1",key2="value2",key3="value3")
'''
Function: 1 {'key1': 'value1', 'key2': 'value2', 'key3': 'value3'}
Function: 1
key1 => val
key2 => val
key3 => val
'''
注意:这里的dictionary只是形式导入,key为参数名,而非真正的键值。
强制位置参数
Python3.8 新增了一个函数形参语法 / 用来指明函数形参必须使用指定位置参数,不能使用关键字参数的形式:
/
之前的参数必须使用指定位置的必须参数传入/
之后的参数不做要求- 举例:
def func(a, b, /, c, d, *e, f, g):
print(a, b, c, d, e, f,g)
func(1,2,3,4,0,0,0,f=5,g=6)
'''
1 2 3 4 (0, 0, 0) 5 6
'''
'''
形参 a 和 b 必须使用指定位置参数,c 或 d 也必须是指定位置的形参(*),而 f 或 g 要求为关键字形参:
'''