今日内容概要
函数参数的两大分类
位置参数与关键字参数
默认参数
可变长参数(重点)
其他函数参数补充(了解)
名称空间的概念
今日内容详细
函数参数的两大分类
形式参数
在函数定义阶段括号内所填的参数 简称"形参"
def func(a,b):
pass
# a和b就是函数func的形参
实际参数
在函数调用过程中括号内所传入的参数 简称"实参"
func(1,2)
# 数据1和2就是函数func的实参
"""
形参与实参的关系
我们可以将形参看成是变量名 实参看成是变量值
两者在函数调用阶段临时绑定 函数运行结束断开
形参的表现形式只有一种就是变量名
实参的表现形式有很多种(但是把我核心 就是 数据值)
"""
位置参数
位置参数
按照从左往右的顺序依次填入的参数
位置形参
在函数定义阶段括号内按照从左往右的顺序依次填入的变量名
位置实参
在函数调用阶段括号内按照从左往右的顺序依次传入的数据值
# 定义一个可以比较大小的函数(传入两个值 返回较大的)
def size(a,b):
if a>b:
print(a)
else:
print(b)
关键字实参(可以打破位置顺序)
在函数调用阶段通过形参名=数据值得形式指名道姓的传值
"""
1.位置形参与位置实参在函数调用阶段 按照位置一一对应绑定
2.位置参数在保定的时候多一个不行少一个也不行
"""
'''格式越简单的越靠前 格式越复杂的越靠后'''
默认参数
默认参数
默认形参
在函数的定义阶段就可以给形参赋值了
1.该形参在函数调用阶段如果不给值 做使用默认的
2.该形参在函数调用阶段如果给值 则使用你给的
# 定义学员注册功能
def register(name, age, salary):
print('%s|%s|%s' % (name, age, salary))
register('jason', 18, 2000)
register('tom', 28, 1000)
register('tony', 38, 500)
"""
位置形参与默认值形参在定义的时候
位置形参必须在默认值形参的前面
"""
'''格式越简单的越靠前 格式越复杂的越靠后'''
可变长参数
# 1.函数无论传入多少位置参数都可以正常运行
# 可变长形参
def func(*a):
print(a)
func() # ()
func(1) # (1,)
func(1, 2) # (1, 2)
func(1, 2, 3, 4, 5, 6) # (1, 2, 3, 4, 5, 6)
def func(x, y, *a):
print(x, y, a)
func(1) # 报错
func(1,2) # 1 2 ()
func(1, 2, 3, 4, 5, 6) # 1 2 (3, 4, 5, 6)
"""
*号在形参中的使用
用于接受多余的位置参数 并组织成元组的形式赋值给*号后面的变量名
"""
#2.函数无论传入多少关键字参数都可以正常运行
def index(**a):
print(a)
index() # {}
index(a=1, b=2, c=3) # {'a': 1, 'b': 2, 'c': 3}
index(y=1, x=2, z=3, u=5, i=7) # {'y': 1, 'x': 2, 'z': 3, 'u': 5, 'i': 7}
def index(x,y,**a):
print(x,y,a)
index(y=2,x=1,a=1,b=2) # 1 2 {'a': 1, 'b': 2}
"""
**号在形参中的使用
用于接受多余的关键字参数 并组织成字典的形式赋值给**号后面的变量名
"""
3.定义一个函数无论传入多少位置参数和关键字都可征程运行
def index(*a,**b):
print(a,b)
index() # () {}
index(1, 2, 3, 4, 5) # (1, 2, 3, 4, 5) {}
index(z=10, p=20, l=30) # () {'z': 10, 'p': 20, 'l': 30}
index(1, 2, 3, 4, 5, z=10, p=20, l=30) # (1, 2, 3, 4, 5) {'z': 10, 'p': 20, 'l': 30}
"""
墨守成规
可变长形参 *与**后面的变量名其实是可以随便定义的
但是python中推荐使用
*args
**kwargs
def index(*args, **kwargs):
pass
"""
# new_list = [11,22,33]
# index(new_list) # 报错
# index(new_list, 2, 3) # [11, 22, 33] 2 3
# index(new_list[0], new_list[1], new_list[2]) # 11 22 33
'''如果index形参是*args 列表里有很多元素 如何实现按照位置一一传入'''
def index(*args):
print(args) # ()
index()
new_list = [11, 22, 33, 44, 55, 66]
index(*new_list) # (11, 22, 33, 44, 55, 66)
"""
*号在实参中的使用
会将列表、元组内的元素打散成位置参数的形式一一传值
"""
def index(**kwargs):
print(kwargs)
new_dict = {'name':'jason', 'age':18}
index(**new_dict) # {'name': 'jason', 'age': 18}
index(name = 'jason', age = 18) # {'name': 'jason', 'age': 18}
"""
**号在实参中的使用
会将字典内的键值对打散成关键字参数传入
"""
函数参数补充(了解)
1.命名关键字参数
def register(name,age,*,sex,height):
pass
register('jason',18, sex='mail',height=183) # 正确使用
"""
sex height在传入实参是必须以关键字参数的形式
ps:该类型的参数几乎不用 也很少碰到
"""