3.29day10函数的参数分类总结

函数的参数
一、应参与实参
def fn(形参们): #注:形参随着函数的调用而产生,随着调用结束而销毁
pass

fn(实参们)

实参:调用函数,在括号内传入实际的值,值可以为常量、变量、表达式或三者的结合

(*****)
形参:定义函数,在括号内声明变量名,

# 在函数的外部不能直接使用函数的形参
# 注:形参随着函数的调用而产生,随着调用结束而销毁


二、实参分类
位置实参:不用明确 实参名 的传参方式,只能按照规定位置给形参传值

关键字实参:必须明确 形参名字 和 值 来为 形参 传值,可以不用按照位置传值

*****
注意:混用
1、关键字实参 必须出现在位置实参后
2、多个 位置实参 还是要按照位置传值
3、关键字实参 为没有从 位置实参 拿到值的 形参 传值,可以不用按照位置传值

def fn2(a, b, c, d, e, f):
print(a, b, c, d, e, f)

fn2(10, 20, 30, e=100, f=500, d=200)

三、形参的分类
形参分 位置形参 和 关键字形参

位置形参 有:
位置形参:位置实参 与 关键字实参 可以对其传参
默认形参:位置实参 与 关键字实参 都可以对其传参,也可以不被传参
可变长位置形参:接收 位置形参、默认形参 没有接收完的所有 位置实参

关键字形参 有:
无初值关键字形参:只能由 关键字实参 传值
有初值关键字形参:只能由 关键字实参 传值,也可以不被传值
可变长关键字形参:接收两种 关键字形参 没有接收完的所有 关键字实参

一、位置形参范畴

1. 位置形参

位置形参 可以由 位置实参 和 关键字实参 来传值
def fn(a, b, c):
print(a, b, c)

fn(1, 2, 3)
fn(a = 1, b = 2, c = 3)

2. 默认形参

默认形参 可以由 位置实参 和 关键字实参 来传值, 也可以不用传值(采用自身默认值)
def fn(a = 1, b = 2):
print(a, b)

fn(10, 20) # 用位置实参给a,b传值
fn(10) # 只给a传值
fn(b = 20) #只给b传值
fn(a = 10, b = 20) # 用关键字实参给a,b传值

混用:
位置形参 与 关键字形参 混用时,位置形参 必须在前
def fn(a, b, c = 10, d = 20):
print(a, b, c, d)

# 位置形参 必须传值,默认形参 根据需求是否传值
fn1(100, 200, d=1000)

3. 可变长 位置形参
可变长 位置形参 会以元组形式
接受 位置形参 与 默认形参 未接收完的所有传入的 位置实参,用索引来取第几个
# 可变长形参只能由 位置实参 来传值 (*****)
def fn(a, b=10, *args):
print(a, b)
print(args)


# 小细节:
可变长形参只能接受位置实参的值,位置实参还必须在关键字实参前,
导致默认形参只能由位置实参来传值

fn(1, 20, 100, 200)
# 1给a 20给b,不能用b=20传 100,200给args

二、关键字形参范畴
# 前提:出现在 * 之后的形参
def fn(a, b=10, *, c, d=20, e):
pass
# c,d,e都是出现在*之后,都是 关键字形参,由于必须由 关键字实参 来传值,没有顺序的强行要求


# 可变长关键字形参:用来接收没有被 关键字形参 接收完的 关键字形参,也只能由 关键字实参 来传值
# 用字典来存放数据
def fn(**kwargs):
print(kwargs)
fn(a=10,b=20) # {'a': 10, 'b': 20}

dic = {'x': 100, 'y': 200}
fn(**dic) # {'x': 100, 'y': 200}

四、参数总结
def fn(a, b, c=10, *args, d, e=20, f, **kwargs):
pass

# 位置形参:a、b
# 默认形参:c
# 可变长位置形参:args
# 无初值关键字形参:d、f
# 有初值关键字形参:e
# 可变长关键字参数:kwargs

# 1.位置形参与默认形参: 能用 位置实参 关键字实参 传值
# 2.可变长位置形参:只能 位置实参 传值
# 3.所有关键字形参:只能 关键字实参 传值
posted @ 2019-03-29 15:23  输诚  阅读(132)  评论(0编辑  收藏  举报