函数参数的魅力

函数参数:

函数分为形参和实参。
对于函数的定义:
          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}

      


    
原文地址:https://www.cnblogs.com/wanglei957/p/10621734.html