函数中参数传递的5种方式

摘要:
Defsum(a,b):returna+bsum(5,6)2.关键字参数关键字参数:首先使用正式的参数定义,然后在调用时以关键字的形式传入参数。调用函数时不考虑参数的顺序。Defsub(a,b):returna-bs1=subs2=subs3=sub3。默认参数默认参数:默认参数表示在定义函数时,参数预先指定了相应的默认值。这样,可以重新分配值,也可以使用默认值而不进行分配。特别是,默认参数只能稍后定义。

1、必须参数(位置参数)
      必需参数:先用形式参数定义,然后在调用时对应位置使用实参(具体的数值)调用,定义的形式参数和调用的实际参数必需一一对应(顺序、数量)。

      def sum(a, b):
          return a + b

      sum(5, 6)

2、关键字参数
      关键字参数:先使用形式参数定义,然后调用时以关键字的形式(形式参数 = 实际参数)传入参数,函数调用时不关心参数的顺序。

      def sub(a, b):
          return a - b

      s1 = sub(a=6, b=3)
      s2 = sub(b=3, a=0)
      s3 = sub(9, b=3)

3、默认参数
      默认参数:默认参数是指函数在定义时,参数被预先赋予相应的默认值。这样在调用时,可以重新赋值, 也可以(对默认参数)不用赋值而使用默认的值。特别注意,默认参数只能定义在后面。

      def mul(a, b=3, c=2):
            print("a:{0}, b:{1}, c:{2}".format(a, b, c))
            return a*b*c

      print(mul(2))
      print(mul(2, b=4))   #若要对默认值参数重新赋值,需要使用 关键字=值 的形式传参
      print(mul(2, b=4, c=6))

4、不定长参数
     不定长参数:数需求传入的参数数量不明确的情况下,一般使用 *args或者 **kwargs形式声明参数的形式

    (1)以*args形式声明参数在函数内使用args获取传入的参数(args的值是由参数构成的元组)

     def fun(*args):
           print(args)

     #调用示例1
     fun(1, 2, 3, 4, 'a')
     fun()
     fun(4,'a')

     #调用示例2
     l = [1, 2, 3, 4]
     t = ('a', 'b', 'c')
    d = {1:2, 2:3, 3:4}
    #当传入参数为列表、元组、或者字典的时候,参数名字前需要加*
     fun(*l)
     fun(*t)
     fun(*d)

  (2)**kwargs形式的可变参数,在函数内部kwargs是一个字典,字典的key是我们传入的形式参数的名字,值为实际参数的值,若以字典形式传入时,注意字典的key必须时字符串

    def fun(**kwargs):
          print(kwargs)

    #调用形式1:
    fun(a = 1, b = 2, c = 3)
    fun()

    #调用形式2
    d = {'1':2,'2':3,'3':4}
    fun(**d)

5、必须关键字参数
      必须关键字参数:对于必须关键字参数 在传入时必须以关键字形式传入,一般需要写在所有参数的最后部分,与其他形式的参数之间用 * 隔开。

      def funkw(a, k=0, *, city, age):
            print(a)
            print(k)
            print(city)
            print(age)

      #正确的调用
      funkw(20, city='西安', age=30)

      #错误的调用
      #funkw(20, k=23, '西安', 30)

免责声明:文章转载自《函数中参数传递的5种方式》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇oracle dblink使用gulp实现公共html代码复用下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Effective Modern C++:05右值引用、移动语义和完美转发

         移动语义使得编译器得以使用成本较低的移动操作,来代替成本较高的复制操作;完美转发使得人们可以撰写接收任意实参的函数模板,并将其转发到目标函数,目标函数会接收到与转发函数所接收到的完全相同的实参。右值引用是将这两个不相关的语言特性连接起来的底层语言机制,正是它使得移动语义和完美转发成了可能。 23:理解std::move和std::forw...

FreeRTOS 任务与调度器(1)

 前言: Task.c和Task.h文件内是FreeRTOS的核心内容,所有任务和调度器相关的API函数都在这个文件中,它包括下图这些内容FreeRTOS文件如下: Task.c和Task.h文件内是FreeRTOS的核心内容,所有任务和调度器相关的API函数都在这个文件中,它包括下图这些内容 在开始介绍函数之前,首先我们先简单了解一下任务状态: •...

ASM

在学习汇编之前,我们要介绍一下常用的函数调用约定,以便我们对于一些指令的理解。 函数调用约定 常见的函数调用约定:stdcall , cdecl, fastcall, thiscall, naked call 1, __cdecl(C调用约定.)C/C++ 缺省调用方式 1)压栈顺序: 函数参数从右到左 2)参数栈维护: 由调用函数把参数弹出栈,传送参数的...

非模态对话框居中显示

第一种最简单,就是在建立对话框模板的时候,在MoreStyle中选择Center。这样对话框就会居中了。 第二种方式是使用CenterWindow();,如pDlg->CenterWindow,调用了这个函数以后再调用显示函数。 第三种方式,就是计算父窗口的坐标,然后使用MoveWindow或者是SetWindowPos函数来使窗口移到我们想要的位置...

图形化显示 Python 函数之间的调用关系

0X01 安装方法 1.下载并安装graphviz 下载地址: https://graphviz.gitlab.io/_pages/Download/windows/graphviz-2.38.msi 注意:安装路径可任意选择 2.配置环境变量 比如我的安装路径是 E:Graphviz2.38 那么就在系统环境变量 path 中添加下面的项 E:Graph...

Linux等待队列原理与实现

当进程要获取某些资源(例如从网卡读取数据)的时候,但资源并没有准备好(例如网卡还没接收到数据),这时候内核必须切换到其他进程运行,直到资源准备好再唤醒进程。 waitqueue (等待队列) 就是内核用于管理等待资源的进程,当某个进程获取的资源没有准备好的时候,可以通过调用  add_wait_queue() 函数把进程添加到  waitqueue 中,然...