我们可向函数传递动态参数,*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,并把结果返回给调用函数的变量。

function(函数)中的动态参数的更多相关文章

  1. python基础学习Day10 函数形参的动态参数、*args **kwargs 命名空间 global 与 nonlocal

    一.函数形参的动态参数 原因:为了拓展,对于实参数量不固定,故需要万能参数,即动态参数, *args   **kwargs # def sum1(*args): # 在函数定义时,在*位置参数,聚合. ...

  2. linux中probe函数中传递的参数来源(上)

    点击打开链接 上一篇中,我们追踪了probe函数在何时调用,知道了满足什么条件会调用probe函数,但probe函数中传递的参数我们并不知道在何时定义,到底是谁定义的,反正不是我们在驱动中定义的(当然 ...

  3. 0057 Spring MVC如何获取HTTP请求头信息--URL中的动态参数--@RequestHeader--@CookieValue--@PathVariable

    获取HTTP请求头信息 一个HTTP请求除了有参数和实体内容外还有HTTP请求头信息,Spring MVC也可以获取这部分信息 @RequestHeader解可以将请求头信息映射到处理方法的形参上 @ ...

  4. 函数的进阶(动态参数,命名空间和作用域,函数的嵌套,gloabal和nonlocal关键字)

    1. 函数参数--动态传参 昨天已经解过了传参, 如果需要给一个函数传参,而参数又是不确定的. 或者我们给一个函数传很多参数, 我的形参就要写很多, 写起来就很麻烦, 这时我们可以考虑使用动态参数.形 ...

  5. python函数知识二 动态参数、函数的注释、名称空间、函数的嵌套、global,nonlocal

    6.函数的动态参数 *args,**kwargs:能接受动态的位置参数和动态的关键字参数 *args -- tuple *kwargs -- dict 动态参数优先级:位置参数 > 动态位置参数 ...

  6. day11函数的进阶动态参数,命名空间,作用域,第一类对象

    一.习题收藏 5.写函数,计算传入字符串中[数字].[字母].[空格] 以及 [其他]的个数,并返回结果. # def func4(s): # dic = { # 'num':0,'alpha':0, ...

  7. Python函数中如何定义参数

    一.位置参数:根据函数定义时的参数位置传递参数#形参和实参的个数必须一致def fun1(): print("运行结果") print("this is fun1(),n ...

  8. 从Win32程序中的主函数中获取命令行参数

    在标准C或者Win32控制台程序的main函数中,它们都有两个参数:"argc" 和 "argv",如下所示: int main(int argc, char ...

  9. python:函数中五花八门的参数形式(茴香豆的『回』字有四种写法)

    毫不夸张的说,python语言中关于函数参数的使用,是我见过最为灵活的,随便怎么玩都可以,本文以数学乘法为例,演示几种不同的传参形式: 一.默认参数 def multiply1(x, y): retu ...

随机推荐

  1. Spring MVC入门示例

    1.新建一个Java Web项目 2.导入jar包 3.在WEB-INF下面建一个hello.jsp页面. <%@ page language="java" import=& ...

  2. laravel cookie加密解密原理

    通过控制台的 cookie 信息我们会发现,每次请求之后,关键的 cookie,如PHPSESSID.XSRF-TOKEN 都会发生变化,并且都是很长的一串字符串. 其实这是一个 json 数组,其中 ...

  3. .Net并行编程系列之一:并行基础

    现在普通PC平台上面多核处理器的普及,让我们领教了能够利用多核进行并行计算的软件的处理能力,同时继承更多地核心正是当前处理器发展的趋势. 但是作为一个.NET开发人员,是否有时候会发现你的程序占用了其 ...

  4. Exponential Distribution指数分布

    sklearn实战-乳腺癌细胞数据挖掘(博主亲自录制视频教程) https://study.163.com/course/introduction.htm?courseId=1005269003&am ...

  5. jdk的keystore生成

    使用jdk路径下的keytool.exe生成 生成证书: 导出证书,此时输入生成证书时设置的密码:

  6. java中16进制转换10进制

    java中16进制转换10进制 public static void main(String[] args) { String str = "04e1"; String myStr ...

  7. 往android主项目中添加辅助项目

    一个较大的工程往往需要多个项目组成,便于更好的并行开发和管理,但最后还是要合到一起来发布.那如何往主项目里添加其他辅助项目呢? 通常的做法是将辅助项目打包成jar包,像库一样导入到主项目,但是如果我们 ...

  8. React读取Excel——js-xlsx 插件的使用

    介绍 SheetJS js-xlsx 是一款能够读写多种格式表格的插件,浏览器支持良好,并且能在多个语言平台上使用,目前在 github 上有 12602 个 star, 刚好项目中遇到了前端解析 e ...

  9. 【Java】将字符串转化为整数

    前几天面试遇到这个问题:在Java中如何将字符串转化为整数,当时too young too naive,随便回答了一下.今天跑去看Java源码中paresInt函数的写法,Oh my god!其实不看 ...

  10. Prufer Code

    1069. Prufer Code Time limit: 0.25 secondMemory limit: 8 MB A tree (i.e. a connected graph without c ...