Skr-Eric的Python课堂(十一)——Python的函数的参数传递

python 函数的参数传递

传递方式:

  位置传参

    序列传参

  关键字传参

    字典关键字传参

 

位置传参:

  实际参数(实参)的对应关系与形式参数(形参)的对应关系是接位置来依次对应的.

  示例:    

def mymin(a, b, c):
       pass

mymin(1, 2, 3)  # 1,2,3位置位置对应关系传给a,b,c

  说明:

    实际参数和形式参数通过位置进行传递和匹配

    实际参数的个数必须与形式参数的个数相同

 

  示例:

# 此示例示意位置传参
def myfun(a, b, c):
    '这是一个函数传参的示例'
    print('a的值是:', a)
    print('b的值是:', b)
    print('c的值是:', c)

myfun(1, 2, 3)
myfun(4, 5, 6)
myfun(5, 6, 4)

 

序列传参:

  序列传参是指在函数调用过程中,用*将序列拆解后按位置进行传递的传参方式

  说明:

    序列传参时,序列拆解的位置将与形参一一对应

    序列的位置信息对应相应的参数位置

  示例:

# 此示例示意序列传参
def myfun(a, b, c):
    '这是一个函数传参的示例'
    print('a的值是:', a)
    print('b的值是:', b)
    print('c的值是:', c)

s1 = [11, 22, 33]
s2 = (44, 55, 66)
s3 = "ABC"
myfun(*s1)  # 等同于 myfun(s1[0], s1[1], s1[2])  # 11 -->a, 22 --> b, 33 --> c
myfun(*s2)  # 等同于 myfun(s2[0], s2[1], s2[2])
myfun(*s3)  # 等同于 myfun(s3[0], s3[1], s3[2])

 

关键字传参

  关键字传参是指传参时,按着形参的名称给形参赋值

  实参和形参按名称进行匹配

  示例:

def myfun(a, b, c):
    pass

myfun(b=22, c=33, a=11)  # 11->a,22->b,33->c
myfun(c=66, b=55, a=44)  # 44->a,55->b,66->c

  说明:

    实参和形参按着形参名进行匹配,可以不按位置进行匹配

  示例:

# 此示例示意关键字传参
def myfun(a, b, c):
    '这是一个函数传参的示例'
    print('a的值是:', a)
    print('b的值是:', b)
    print('c的值是:', c)

myfun(c=33, b=22, a=11)
myfun(b=200, c=300, a=100)
myfun(a=100, b=200, c=300)

 

字典关键字传参:

  是指实参为字典,将字典用 ** 拆解后进行关键字传参的方式

  说明:

    字典的键名和形参名一致

    字典的键名必须为字符串(且为标识符的命名方式)

    字典的键名要在形参中存在

  示例:

# 此示例示意 字典关键字传参
def myfun(a, b, c):
    '这是一个函数传参的示例'
    print('a的值是:', a)
    print('b的值是:', b)
    print('c的值是:', c)

d1 = {'c': 300, 'b': 200, 'a': 100}
myfun(**d1)  # myfun(a=100, b=200, c=300)
# myfun(a=d1['a'], b=d1['b'], c=d1['c'])  # 100-->a  200-->b  300-->c
d2 = {'c': 300, 'b': 200, 'd': 400}
myfun(**d2)

 

函数的综合传参

  函数的传参方式,在能确定形参能唯一匹配到相应实参的情况下可以任意组合

  函数的位置传参要先于关键字传参

  说明:

    1. 位置传参和序列传参可以混合使用且可以顺序颠倒

      如:

        myfun(100, *[200, 300])

        myfun(*[100, 200], 300)

        myfun(*[100], 200, *[300])

    2. 函数的关键字传参和字典关键字传参可以混合使用,且可以顺序颠倒

      如:

        myfun(c=300, **{'b':200, 'a': 100})

        myfun(**{'b':200, 'c': 300}, a=100)

    3. 位置传参和关键字传参可以混合使用,但位置传参要先于关键字传参:

      如:

        myfun(100, c=300, b=200)

        myfun(10, c=30, **{'b': 20})

 

---------------以下讲函数的定义时如何定义形参--------

函数的缺省参数

  语法:

    def 函数名(形参名1=默认实参1, 形参名2=默认实参2, ... ):

      语句块

  示例:

def info(name, age=1, address='不详'):
    print('我叫', name, '我今年',
          age, '岁,我的住址:', address)

info('Eric', 25, '龙岗区')
info('Tom', 15)  # <--两个参数调用
info('张飞')
# info()  # 出错

  说明:

    缺省参数必须自右至左依次存在.如果一个参数有缺省参数,则其右侧的所有参数都必须有缺省参数

    缺省参数可以有0个或多个,甚至全部都有缺省参数

  示例:

def fn(a, b=10, c):  # 错的
    pass

def fn(a=100, b=200, c=300):  # 对的
    pass

 

函数形参的定义方式:

   位置形参

   星号元组形参

   命名关键字形参

   双星字典形参

 

位置形参

  def 函数名(形参名1, 形参名2, ...):

      语句块

 

星号元组形参

  语法:

    def 函数名(*元组形参名):

      语句块

  作用:

    收集多余的位置传参

  说明:

    元组形参名一般命名为'args'

  示例:

# 此示例示意星号元组形参的用法
def func(*args):
    print("实参的个数是:", len(args))
    print("args =", args)

func()
func(1, 2, 3, 4, 5)
func(1, 2, 3, 4, 5, 6, 7, 8, 9)

 

命名关键字形参:

  语法:

    def 函数名(*, 命名关键字形参):

        语句块

    或

    def 函数名(*args, 命名关键字形参):

        语句块

  作用:

    强制所有的参数都必须用关键字传参或字典关键字传参

  示例:

# 此示例示意命名关键字传参
def fun(*, c, d):
    print('c=', c)
    print('d=', d)

# fun(3, 4)  # 出错
fun(d=4, c=3)  # 正确

def fun2(a, b, *, c, d):  # *是位置形参和关键形参的分隔符
    print(a, b, c, d)

fun2(1, 2, c=3, d=4)

def fun3(a, b, *args, c, d):
    print(a, b, args, c, d)

fun3(11, 22, 33, 44, 55, d=400, c=300)
fun3(1, 2, **{'d': 4, 'c': 3})

 

双星号字典形参

  语法:

    def 函数名(**字典形参名):

        语句块

  作用:

    收集多余的关键字传参

  说明:

     字典形参名一般命名为 kwargs

  示例:

# 此示例示意双星号字典形参
def fun(**kwargs):
    print("关键字传参的个数是:", len(kwargs))
    print('kwargs=', kwargs)

fun(name='Eric', age=25, address='深圳市龙岗区')
fun(a=1, b="BBBB", c=[2, 3, 4], d=True)
fun(a=100, **{'c': 300, 'b': 200}, d=400)

 

函数的参数说明:

  位置形参,缺省参数,星号元组形参,双星号字典形参等可以混合使用

  函数参数自左至右的顺序为:

    1. 位置形参

    2. 星号元组形参

    3. 命名关键字形参

    4. 双星号字典形参

  示例: 

def fn(a, b, *args, c, **kwargs):
    pass

fn(100, 200, 300, 400, d='D', e='E', c='C')

 

课后习题:

  1. 写一个函数mysum(n) ,此函数用来计算

     1+2+3+4+....+n的和

    如:

      print(mysum(100))  # 5050

 

  2. 实现带有界面的学生信息管理系统

    操作界面:

      +-------------------------+

      | 1)  添加学生信息          |

      | 2)  显示学生信息          |

      | 3)  删除学生信息          |

      | 4)  修改学生信息          |

      | q)  退出                 |

      +-------------------------+

      请选择: 1

 

    修改之前学生信息管理程序,学生信息依旧为:

         姓名,年龄,成绩

    要求: 每个功能写一个函数与之相对应

 

  示例:

    def main():

        L = []

        while True:

            # 此处先显示菜单

            s = input("请选择: ")

            if s == 'q':

                break

            elif s == '1':

                L += input_student()

            elif s == '2':

                output_student(L)

            ...

    main()

 

想要看更多的课程请微信关注SkrEric的编程课堂

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值