一, 形参与实参
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 内存入了一串数字, 在函数内部可用元组的方式使用.
来源: http://www.bubuko.com/infodetail-3383479.html