一、形参与实参

1.形参

只在函数内部有效。在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。

2.实参

可以是常量,变量,表达式,函数等,无论实参是哪种类型的量,在进行函数调用时,都必须有确定的值。

二、位置参数

调用函数时,必须将函数调用中的每个实参都关联到函数定义中的一个形参。

关联方式是基于实参的顺序,这被称作位置参数。

def register(name, age, major, country):
    """
    学籍注册程序
    :param name:str
    :param age:integer
    :param major:str(Chinese,Computer,English)
    :param country:str(China,Japan,US)
    :return:
    """
    info = """
    -----------你的注册信息----------
    name = %s
    age = %d
    major = %s
    country = %s
    """ % (name, age, major, country)
    print(info)


register('Mick', 20, 'CS', 'US')

#输出
'''
    -----------你的注册信息----------
    name = Mick
    age = 20
    major = CS
    country = US
'''

其中,Mick,20,CS,US分别对应name,age,major,country。

三、默认参数

在编写函数时,可以给每个形参设定一个固定值,即为默认值。

在调用函数给形参提供实参时,就使用实参值,否则,使用实参的默认值。

def register(name, age, major, country='China'):
......
register('Mick', 20, 'computer', 'US')
register('张三', 21, 'Chinese')
register('李四', 20, 'English')

#输出
'''
    -----------你的注册信息----------
    name = Mick
    age = 20
    major = computer
    country = US
    

    -----------你的注册信息----------
    name = 张三
    age = 21
    major = Chinese
    country = China
    

    -----------你的注册信息----------
    name = 李四
    age = 20
    major = English
    country = China
'''

其中,country='China'为默认参数。

四、关键参数

关键字实参 是传递给函数的名称:值对。直接将形参与实参关联起来。

注:关键参数必须放在位置参数之后。

register(age=22, name='Alex', 'computer', 'US')

报错:SyntaxError: positional argument follows keyword argument

register('Alex', 22, country='China', major='computer')

以上为正确写法。

五、非固定参数

若函数在定义时,不确定用户想传入多少个参数,就可以使用非固定参数。

def register(name, age, major, country='China', *args, **kwargs):
    info = """
    -----------你的注册信息----------
    name = %s
    age = %d
    major = %s
    country = %s
    """ % (name, age, major, country)
    print(info)
    print(args)
    print(kwargs)

#输出
'''
    -----------你的注册信息----------
    name = Alex
    age = 22
    major = computer
    country = China
    
()
{}
'''

args为元组(),kwargs为字典,此时未传入参数,两者均为空。

def register(name, age, major, country='China', *args, **kwargs):
    info = """
    -----------你的注册信息----------
    name = %s
    age = %d
    major = %s
    country = %s
    """ % (name, age, major, country)
    print(info, end='')
    print('sex='+str(kwargs.get('sex')))

    
register('Alex', 22, country='China', major='computer', sex='F')

#输出
'''
    -----------你的注册信息----------
    name = Alex
    age = 22
    major = computer
    country = China
    sex=F
'''

将sex作为参数传入kwargs,此时kwargs内存入了键值对sex=’F‘,在函数内部可用字典的方式打印出来。

def add(*n):
    ar = 0
    for x in n:
        ar = ar + x
    print(n)
    print(ar)
    return ar


add(1, 2, 5, 7)

#输出
(1, 2, 5, 7)
15

将1,2,5,7作为参数传入args,此时args内存入了一串数字,在函数内部可用元组的方式使用。