函数参数类型
- 无参
- 强制性参数
- 默认参数
- 不定长参数
- *varargs表示,元组类型导入
- **kwargs表示,字典类型导入
- 特殊参数
- 函数定义中单独使用 *,仅关键字参数
- 函数定义中单独使用/,仅位置参数
- 函数注解
无参
调用函数不需要传参
def no_args():
'''无参数函数'''
print("这是无参数函数")
no_args() #调用输出:这是无参数函数
强制性参数
在调用函数时必须要填写的参数
def mandatory_args(str):
'''默认参数year取当年'''
print("输入内容{}".format(str))
mandatory_args('test') #调用输出:输入内容test
默认参数
定义函数时给出默认值,默认参数可选填写,调用时若传了值则使用传的值,若未传则使用定义时的默认值
#codind:utf-8
import datetime
def default_args(str,year=datetime.date.today().year): #有默认值的参数要写在无默认值参数的后边
'''默认参数year取当年'''
print("输入内容{},当前年份{}".format(str,year))
default_args('abc') #输出:输入内容abc,当前年份2021
不定长参数
*varargs表示,元组类型导入
可传入n个参数,最终以元组形式接收
def notdefine_args(str,*varargs): #不定长参数最好写在已命名参数后面,不然调用的使用要指明参数名
'''不定长参数个数,添加*参数以元组形式导入,存放所有未命名的变量参数'''
print("未命名参数:{}".format(varargs))
if str is not None:
print("第一个参数:{}".format(str))
for value in varargs:
print("未命名参数值:{}".format(value))
notdefine_args('3',2,3,'abc')
'''
输出:
未命名参数:(2, 3, 'abc')
第一个参数:3
未命名参数值:2
未命名参数值:3
未命名参数值:abc
'''
**kwargs表示,字典类型导入
可传入n个参数,最终以字典形式接收
def notdefine_kargs(**kwargs):
'''不定长参数个数,添加**参数以字典形式导入'''
print(kwargs)
for k,v in kwargs.items():
print("参数名:{},值:{}".format(k,v))
notdefine_kargs(a=1,b=2,dd='222')
'''
输出:
{'a': 1, 'b': 2, 'dd': '222'}
参数名:a,值:1
参数名:b,值:2
参数名:dd,值:222
'''
特殊参数
函数定义中单独使用 *,仅关键字参数
函数定义的星号右边的参数必须用关键字传入值
def onlykeyword_args(str1,*,str2,str3):
'''函数定义中单独出现星号 *,那么星号右边的参数必须用关键字传入值'''
print("输出内容{},{},{}".format(str1,str2,str3))
onlykeyword_args(str1=1,str2=2,str3=3) #输出:输出内容1,2,3
onlykeyword_args(1,str2=2,str3=3) #输出:输出内容1,2,3
onlykeyword_args(1,2,3) #报错onlykeyword_args() takes 1 positional argument but 3 were given
函数定义中单独使用/,仅位置参数
函数定义的/ 左边的参数必须使用指定的位置参数
def position_args(str1,/,str2,str3):
'''/ 用来指明函数形参必须使用指定位置参数,/左边的参数不能使用关键字参数的形式'''
print("输出内容{},{},{}".format(str1, str2, str3))
position_args(1,str2=2,str3=3) #输出:输出内容1,2,3
position_args(1,2,3) #输出:输出内容1,2,3
position_args(str1=1,str2=2,str3=3) #报错position_args() got some positional-only arguments passed as keyword arguments: 'str1'
函数注解
定义函数时就对需要传入的参数标明数据类型
def type_args(t:tuple,l:list)->None: #说明参数的类型
'''定义参数说明参数的数据类型'''
for i in t:
print(i)
for i in l:
print(i)
print(type_args.__annotations__)
#打印出函数的注解
{'t': <class 'tuple'>, 'l': <class 'list'>, 'return': None}