zoukankan      html  css  js  c++  java
  • function(函数)中的动态参数

        我们可向函数传递动态参数,*args,**kwargs,首先我们来看*args,示例如下:

        1.show(*args)

        def show(*args):
        print(args,type(args))
        #以元组的形式向列表传递参数
      show(11,22,33,44,55,66)

        首先我们定义了一个函数,函数show(*args)里面的*args可以接收动态参数,这里我们接收一个元组形式的参数,我们可以向show()里面传递很多参数,函数默认把这些参数作为一个元组进行接收。

        2.show(**args)

        def show(**kwargs):
        print(kwargs,type(kwargs))
        #以字典的形式向函数传递参数
      show(k1=80,k2="alex")

        由上面代码可以看出,**kwargs是以字典的形式接收参数的,我们知道,字典是由键-值对组成的,key-value,因而我们必须向里面传入键-值对的参数形式才能够接收,因此我们在里面传入了参数k1=80,k2="alex".这样生成了一个字典,从代码可以看出来。

        3.show(k,*args)

        def show(k,*args):
        print(k,type(k))
        print(args,type(args))

      show([11,22],33,44,55,88)

        运行结果如下:

        [11, 22] <class 'list'>
      (33, 44, 55, 88) <class 'tuple'>

        由上面代码可以看出,我们向函数定义了两个参数,一个是k,一个是*args,我们知道,形参k只能接收一个对象参数,*args可以接收多个参数并且放在一个元组中,下面我们向函数传递了多个参数,看是如何接收的。从运行结果(1)可以看出,形参k接收了参数[11,22];而后面输入的值传递给了*args,并在存放在一个列表中。

        4.show(*args,**kwargs)

        只要函数有这两个参数那么,可以传递任何形式的实参进来,人当杀人,佛当杀佛,因为可以接收任意形式的参数,但是我们知道,字典必须是由键值对组成,传递的参数要满足key=value的格式,否则会报错。这点一定要记得,Python中默认给字典传递参数的方法就是键-值对。

      def show(*args,**kwargs):
      print(args,type(args))
      print(kwargs,type(kwargs))

      show(123,"alex",666,alex="sb",nanyang="degnzhou")
      运行结果如下:

        (123, 'alex', 666) <class 'tuple'>
      {'nanyang': 'degnzhou', 'alex': 'sb'} <class 'dict'>

        我们可以看到,前面的元素被放到了一个元组tuple中,后面的元素被放到了一个字典dict中,但是我们一定要记得,*args,一定要在**kwargs前面,不然会报错,顺序一定是单个参数,动态元组,动态字典方式。

      下面我们来看一个实例: 

        def show(*args,**kwargs):
        print(args,type(args))
        print(kwargs,type(kwargs))

      l = [11,22,33,44]
      d = {"n1":88,"alex":"sb"}
      #我们想把列表l传递给形参*args,把字典传递给形参**kwargs,看下面方式是否可以
      show(l,d)                  (1)

      #如果向实现上面功能,要进行表示,指定把哪个参数传递给形参*args,另一个参数传递给形参××kwargs
      show(*l,**d)                 (2)             

         上面代码中,我们在(1)处直接调用参数,但是得到的结果不是我们想要的,我们想要把参数以列表或者字典的形式传给对应的形参,那么必须标明是传递给哪个参数的,相当于默认参数一样。否则只会传递给第一个参数*args,把列表和字典都放在同一个元组中。上面代码的运行结果如下:

        运行结果:

        ([11, 22, 33, 44], {'alex': 'sb', 'n1': 88}) <class 'tuple'>
      {} <class 'dict'>
      (11, 22, 33, 44) <class 'tuple'>
      {'alex': 'sb', 'n1': 88} <class 'dict'>

        5.字符串中参数的情况

        (1)字符串格式化,向字符串中传递列表参数

        s1 = "{0} is {1}."
      result = s1.format("alex","sb")                (1)
      l = ["alex","sb"]                              (2)
      res = s1.format(*l)
      print(result)
      print(res)

        上面,我们有两种向字符串传递参数的方法,方法(1)中我们直接按顺序传递参数给s1,在方法(2)中我们指定一个列表,但是使用*args的形式给字符串s1传递参数。列表是有序的。

        (2)向字符串中传递字典形式的参数

      s1 = "{name} is {acter}."
      result = s1.format(name="alex",acter="sb")
      d = {"name":"alex","acter":"sb"}
      #向列表中传递字典形式的参数
      res = s1.format(**d)
      print(result)
      print(res)
      在上面代码中,我们向字符串中传递了一个字典形式的参数,我们知道字典的格式,在传递给字符串的时候要指定我们传递的参数是一个字典,
    因而要使用**d格式,告诉Python。
    6.lambda表达式
    lambda简单表达式就是函数的简单表示形式:
    >>> func = lambda a:a+1
      >>> ret = func(99)
      >>> print(ret)
      100
    在上面形式中,func是定义一个函数,lambda表示的是我们定义了一个lambad表达式,其中a代表的形参,冒号(:)后面的a+1代表表达式,对
    函数进行什么样的处理,然后把结果返回给ret这个变量,调用它的变量。省略了return。
    上面形式参数可以有多个,冒号前面是参数,可以多个;冒号后面是函数体。
    lambda表达式创建了形参a;函数内容a+1,并把结果返回给调用函数的变量。

  • 相关阅读:
    从读者角度来看Blog
    NDuiker项目第3天
    IssueVision的List控件源码分析
    测试一个网站的想法
    IssueVision的PaneCaption控件源码分析
    技术研究的时候不要忘了“集成创新”
    人脸识别活体检测之张张嘴和眨眨眼
    jsp>Session 小强斋
    jsp>Request对象 小强斋
    jsp>四种作用域 小强斋
  • 原文地址:https://www.cnblogs.com/gengcx/p/6784976.html
Copyright © 2011-2022 走看看