zoukankan      html  css  js  c++  java
  • 函数参数的魅力

    函数参数:

    函数分为形参和实参。
    对于函数的定义:
              def func(name):
                print(name)
              func(name)
      定义的来说,在函数中定义的name就是形参,在函数调用中的name就是实参。
      
    形参的定义:形参就是在函数定义时候的变量,需要从外部进行传值。
    def fn(a,b,c): # 形参要拷贝实参的值,随着函数的调用产生,随着函数调用结束销毁了
    # a,b,c必须从外界进行获取,才有意义
    print(a)
    print(b)
    print(c)
    # 内部使用外部变量,外部要提前产生
    print(x)
    print(y)
    print(z)

    # x,y,z是实际存在的值
    x = 10
    y = 20
    z = 30

    fn(10,20,30)
    fn(x,y,z)
    fn(x+10,y*2,z/5)

    实参:实参是函数括号中传入的实际值,可以是常量、变量、表达式进行的组合。
    # 位置实参:一定要按位置传值
    def fn(a,b,c):
    print(a,b,c)

    fn(10,20,66)

    # 关键字实参
    # 每有必要按照顺利传递

    fn(a=55,b=64,c=89)
    fn(b=55,a=64,c=89)


    # 两者混用(*********非常常用**********)
    # 关键字实参必须出现在位置实参之后哦

    fn(77,88,9)
    fn(10,b=55,c=99)
    fn(10,c=55,b=99)


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


    fun(10,20,30,40,50,60)
    fun(10,c=20,d=30,e=50,f=60,b=40)

    形参的种类

    1.位置参数:从左到右按照顺序定义参数
          位置形参:必须选参数
          位置实参:按照位置给形参传值
    2.关键字参数:按照a=10的形式来定义参数
          无需按照位置为形参传值
                注意的问题:
                        1. 关键字实参必须在位置实参右面
                        2. 对同一个形参不能重复传值
    3.默认参数:形参在定义时就已经为其赋值 可以传值也可以不传值,经常需要变得参数定义成位置形参,变化较小的参数定义成默认参数(形参)
            注意的问题:
                    1. 只在定义时赋值一次
                    2. 默认参数的定义应该在位置形参右面
                    3. 默认参数通常应该定义成不可变类型
    4.可变长度参数:指的是实参的长度不固定
           
    # 变长位置形参# 可变长形参只能由位置实参来传值# 它会以元组的形式接受所有传入的位置实参
             但是实参分为位置和关键字两种:所以针对这两种提供了*args和**kwargs两种。*为分界线,可以有变量名*args,也可以进行分割.

      ===================================*args=============================================
            def fn(*args):
            print(args)
            fn(1,2,3,4,5)

            a = 'abcdef'
            b = [1,2,3,4,5]
            c =(1,2,3,4,5)
            d = {1,2,3,4,5}

            fn(a)
            fn(b)
            fn(c)
            fn(d)

            # 把变量进行打散传值(本质就是传的地址)
            fn(*a)
            fn(*b)
            fn(*c)
            fn(*d)
      ==================================**kwargs=============================================
          def foo(x,y,**kwargs):
                    print(x,y)
                    print(kwargs)
              foo(1,y=2,a=1,b=2,c=3)
    
              def foo(x,y,**kwargs):
                print(x,y)
                print(kwargs)
              foo(1,y=2,**{'a':1,'b':2,'c':3})
    
    
              def foo(x,y,z):
                  print(x,y,z)
              foo(**{'z':1,'x':2,'y':3})
    (***********)总体函数的定义:
              def func(a,b=10,*args,c,d=10,**kwargs):
                print(a,b)
                print(args)
                print(c,d)
                print(kwargs)

              func(10,5,3,4,5,c=3,e=7,f=14)
      ==============print======================================
              10,5
              (3,4,5)
              3,10
              {'e':7,'f':14}

          


        
  • 相关阅读:
    【练习】flushback基于时间的闪回查询
    【练习】审计
    【练习】新建虚拟机
    织梦安全防护教程首页被挟持、被串改、被挂马、被入侵之后如何解决?
    织梦手机站下一篇变上一篇而且还出错Request Error!
    织梦图集上传错误提示ERROR: Upload Error!
    织梦炒鸡简单3部曲修改文档标题长度限制
    织梦dede:arclist和dede:list输出每个文章的内容有多少页
    织梦后台管理模板无法正常显示模板文件列表解决方法
    织梦列表页多种属性排序[ajax]-支持select方式和降序升序切换
  • 原文地址:https://www.cnblogs.com/wanglei957/p/10621734.html
Copyright © 2011-2022 走看看