python3基础09

day09

pyhthon函数的参数传递
 传递方式:
   位置传参
     序列传参
   关键字传参
     字典关键字传参

位置传参:
  实际参数(实参)的对应关系与形式参数(形参)的对应关系
  是接位置来依次对应的
 示例:
  def mymin(a,b,c):
     pass
  mymin(1,2,3)  #1,2,3位置对应关系传给a,b,c
 说明:
  实际参数和形式参数通过位置进行传递和匹配
  实际参数的个数必须与形式参数的个数相同

 示例见:
   posittional_give_args.py

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

 说明:
   序列传参时,序列拆解的位置将与形参一一对应
   序列的位置信息对应相应的参数位置
 示例见:
   sequence_give_args.py


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]) 
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)
 说明:
   实参和形参按着形参名进行匹配,可以不按位置进行匹配
 示例见:
   keywords_give_args.py

   def myfun(a, b, c):
      print("a的值是:",a)
      print("b的值是:",b)
      print("c的值是:",c)
  

   myfun(c=33,b=22,a=11)   
   myfun(b=44,c=10,a=5) 

字典关键字传参:
  是指实参为字典,将字典用**拆解后进行关键字传参的方式
  说明:
   字典的键名与形参名一致
   字典的键名必须为字符串(且为标识符的命名方式)
   字典的键名要在形参中存在
  示例见:
   dict_keywords_give_args.py

   def myfun(a, b, c):
       print("a的值是:",a)
       print("b的值是:",b)
       print("c的值是:",c)
   
   d = {"c":300,"b":200,"a":100}
   myfun(**d1)  # myfun(a=100,b=200,c=300)

函数的综合传参
  函数的传参方式,在能确定形参能唯一匹配到实参的情况下
  可以任意组合
  函数的位置传参要先于关键字传参
  
 说明:
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})


练习一:
  写一个函数 getminmax(a,b,c)有三个参数
  此函数用于返回三个数的最大值,最小值
  形成元组后返回
  元组格式:
  (最大值,最小值)
   
  可以尝试三种传参方式


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

函数的缺省参数
  语法:
    def 函数名(形参名1=默认实参1,形参名2=默认实参2,...):
        语句块
  示例见:
    default_args.py

  说明:
    缺省参数必须自右至左依次存在,如果一个参数有缺省参数,
    则其右侧的所有参数都必须有缺省参数
    缺省参数可以有0个或多个,甚至全部都有缺省参数
  示例:
    def fn(a, b=10, c):   # 错的
        pass
    def fn(a=100, b=200, c=300): # 对的
        pass

练习二:
  写一个函数myadd,此函数可以计算两个,三个,四个实参的和
  如: 
   def myadd(...):
   ...
   print(myadd(100,200))
   print(myadd(100,200,300))
   print(myadd(100,200,300,400))
   print(myadd(100,200,400,500,600))  #报错
  缺省参数运算符左右不加空格

练习三:
   写一个myrange函数,此函数用给定的参数返回
   一个存有对应整数的列表
   如:
   def myrange(start,stop=None,sep=1):
    ....

    L = myrange(5)   # L = [0,1,2,3,4]
    L = myrange(5,10)  #L = [5,6,7,8,9]
    L = myrange(5,10,2)  # L = [5,7,9]
    for x in myrange(5,10,2):
        print(x)     #5 7 9


函数形参的定义方式:
  位置形参
  星号元组
  命名关键字形参
  双星字典形参

位置形参
  def  函数名(形参名1,形参名2,...)
       语句块

  如:sum() pow()

星号元组形参
  def  函数名(*元组形参名)
       语句块
  如:print()
  作用:
   收集多余的位置传参
  说明:
   元组命名一般是'args'
  示例见:
   star_tuple_args.py

练习四:
  写一个函数 mysum 
  可以传入任意个实参的数字,返回所有实参的和
  def mysum(*args):
  ...
  print(mysum(1,2,3,4))
  print(mysum(1,2,3,4,5,6))


练习五:
  已知内建函数max帮助文档为:
  help (max)
  max(iterable)
  max(arg1,arg2,*arg)

  仿造max,写一个mymax函数,功能要求与max完全相同
 (要求,不允许调用max函数)

  print(mymax([6,8,3,5]))
  print(mymax([100,200]))
  print(mymax([1,3,5,7,9]))

命名关键字形参:
  语法:
   def 函数名(*,命名关键字形参)
       语句块
   或
   def 函数名(*args,命名关键字形参)
  
   注:* 和*args 只能存在一个,不能同时使用
  作用:
   强制所有的参数都必须用关键字传参或字典关键字传参
  示例:
   named_keyword_args.py
  
双星字典形参
   语法:
    def 函数名(**字典形参名)
       语句块
   作用:
     收集多余的关键字传参
   说明:
     字典形参名一般命名为kwargs
   示例见:
     double_star_args.py


函数的参数说明:
  位置形参,缺省参数,星号元组形参,双星号字典形参等可以混合使用
  
  函数参数自左至右的顺序为:
    1.位置形参
    2.星号元组形参
    3.命名关键字形参
    4.双星号字典形参

  示例:
   def fn(a,b,*args,c,**kwargs):
       pass
   fn(100,200,300,400,d='D',e='E',c='C')

思考:
  查看>>>help(print)
  猜想print函数的参数列表是如何定义的
   def myprint(*args,sep,end):


课后练习:
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()

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值