函数参数

函数之参数

参数:实参和形参

实参:位置实参、关键字实参

形参:位置形参、默认形参、可变长形参、关键字形参、可变长关键字形参

定义:实参:就是传值给形参的,是在函数被调用阶段()内的参数,有常量、变量、表达式三种组合

fn(10,20,23,34)    fn(a,b,c,d,e)       fn(a=10,b=20,c=30)

形参:就是函数用来接收外界传值,是在函数被定义阶段()内的参数,通常为变量

#形参随着函数的调用而产生,也随着函数的结束而销毁

def fn(a,b):

  print(a)

  print(b)

fn(a,b)

在执行函数的时候,a和b的值随着函数被调用而产生,传出来一个形式上的值,随着函数的结束,a和b的值也被销毁。

实参:位置实参和关键字实参

位置实参:使用位置来对形参进行传值,从左到右依次传值

def fn(a,b,c):

  print(a)

  print(b)

  print(c)

fn(10,20,30)

结果就是(10,20,30)

关键字实参:使用关键字实参来对形参传值,可以不按照顺利来,形参按照名字取值

def fn(a,b,c):

  print(a)

  print(b)

  print(c)

fn(a=20,c=40,b=29)

结果就是(20,29,40)

#位置实参和关键字实参两者的混用

位置实参:位

关键字实参:位,关键字

***1.位置实参必须在关键字实参的前面2.多个位置实参还是按照位置进行传值3.关键字实参是给没有从位置实参拿到值给形参传值,可以不按照顺序

总结:位置实参不用明确实参名的传值方式,一定是按照位置对形参进行传值

   关键字实参要明确名字与值,为形参传值,可以不按照顺利

形参:位置形参、默认形参、可变长形参、关键字形参、可变长关键字形参

位置形参:是按照位置来接受实参的传值,可以接受位置实参和关键字实参的传值。

默认形参:使用‘=’来对形参进行赋值,可接受位置实参和关键字实参的传值,还可以不用传值

#位置形参和默认形参同时存在的时候,默认形参必须在位置形参之后

依据:位置形参必须传值,默认形参可以不用传值

可变长位置形参:只能由位置实参来传值

可变长位置形参用来接收没有被位置形参和默认形参接受的值,会以元组的方式接受传入的位置实参

def fn(*args):

  print(args)

fn()        #不传值的时候就是个空元组

fn()       #传值的时候按照位置接受没有被位置形参和默认形参接受的值,已元组的方式存储

###小细节:三者混用的时候1.可变长位置形参只能由位置实参进行传值2.位置实参必须在关键字实参前3.关键字实参只能已位置进行传值

###总结:位置形参:位置实参、关键字实参

     默认形参:位置实参、关键字实参、不用传值

    可变长位置形参:位置形参

***小技巧:

def fn(*args):

  print(args)

fn(1,2,3,4,5)        结果:(1,2,3,4,5)

x='abcde'            fn(x)      ('abcde',)

y=['egon',18]       fn(y)      (['egon',18],)

z={'a':1,'b':2}       fn(z)       ({'a':1,'b':2},)

如果要打印出一个列表里面的多个值的话,可以在实参的位置加一个分隔符*,就会将列表,字符串,字典打散传入

fn(*x)                ('a','b','c','d','e')

fn(*y)               ('egon',18)

fn(*z)               ('a','b')

关键字形参:只能由关键字实参来传值

*为分割线,可以用*args来接受值,也可以只用来分割,不用来接收值

*之后的所有值都是关键字形参

def fn(a,b=10,*,c,d=30,e):

a:位置形参

b:默认形参

c,d,e都是关键字形参,可以不按照顺序来,但是必须由关键字实参进行传值

可变长关键字形参:**kwargs,使用字典来进行存储

用来接收没有被关键字形参接受完的关键字实参的传值,也只能由关键字实参来传值

def fn(*,a,b=20,c,**kwargs):

  print(a,b)                          (20,10)

  print(kwargs)                     {30,10,45}

fn(a=20,c=30,d=10,e=45)     

整体赋值

dic={'name':'egon','age':18}

def fn(**kwargs):

  print(kwargs)

fn(**dic)                                        #{'name':'egon','age':18}

总结:出现在*之后的参数都是关键字形参,必须由关键字实参进行传值,没有顺序要求

可变长关键字形参使用字典来存放数据

8888

整体总结:

def fn(a,b=10,*args,d,f=20,**kwargs):

print(a)                  

print(b)

print(args)

print(d)

print(f)

print(kwargs)

#1有位置实参的传值,a必须传值,*args和**kwargs如果都要能接收到值,则默认参数必须使用位置实参来传值,f可以不用传值

#2全部为关键字传值

fn(ax=100,y=10,z=20,b=29,a=200)

#位置形参和默认形参:位置实参和关键字实参

#可变长位置形参:只能用位置实参传值

#所有关键字形参:必须使用关键字实参传值

原文地址:https://www.cnblogs.com/mcc61/p/10760307.html