函数参数类型

  • 无参
  • 强制性参数
  • 默认参数
  • 不定长参数
  • *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}