def function_with_one_star(*t):

print(t, type(t))

def function_with_two_stars(**d)

print(d, type(d))

上面定义了两个函数,分别用了带一个星号和两个星号的参数,它们是什么意思,运行下面的代码:

function_with_one_star(1, 2, 3)

function_with_two_stars(a = 1, b = 2, c = 3)

结果如下

(1, 2, 3) <class 'tuple'>

{'a': 1, 'c': 3, 'b': 2} <class 'dict'>

由此可见,带一个星号(*)参数的函数传入的参数存储为一个元组(tuple);

而带两个星号(*)参数的函数传入的参数则存储为一个字典(dict),并且在

调用是采取 a = 1, b = 2, c = 3 的形式。

由于传入的参数个数不定,所以当与普通参数一同使用时,必须把带星号的参

数放在最后。

函数在定义中,通过在参数前加星号,将传递进来的多个参数转化为一个对象,元组或字典,可以说是将这些参数值收集起来。

参数前加一个星号,表明将所有的值放在同一个元组中,该参数的返回值是一个元组。

参数前加两个星号,表明将所有的值放在同一个字典中,该参数的返回值是一个字典。

位置参数

在参数名之前使用一个星号,就是让函数接受任意多的位置参数。

>>> def multiply(*args):

... total = 1

... for arg in args:

... total *= arg

... return total

...

>>> multiply(2, 3)

6

>>> multiply(2, 3, 4, 5, 6)

720

python把参数收集到一个元组中,作为变量args。显式声明的参数之外如果没有位置参数,这个参数就作为一个空元组。

关键字参数

python在参数名之前使用2个星号来支持任意多的关键字参数。

>>> def accept(**kwargs):

... for keyword, value in kwargs.items():

... print "%s => %r" % (keyword, value)

...

>>> accept(foo='bar', spam='eggs')

foo => 'bar'

spam => 'eggs'

注意:kwargs是一个正常的python字典类型,包含参数名和值。如果没有更多的关键字参数,kwargs就是一个空字典。

混合参数类型

任意的位置参数和关键字参数可以和其他标准的参数声明一起使用。混合使用时要加些小心,因为python中他们的次序是重要的。参数归为4类,不是所有的类别都需要。他们必须按下面的次序定义,不用的可以跳过。

1)必须的参数

2)可选的参数

3)过量的位置参数

4)过量的关键字参数

def complex_function(a, b=None, *c, **d):

这个次序是必须的,因为*args和**kwargs只接受那些没有放进来的其他任何参数。没有这个次序,当你调用一个带有位置参数的函数,python就不知道哪个值是已声明参数想要的,也不知道哪个被作为过量参数对待。

也要注意的是,当函数能接受许多必须的参数和可选的参数,那它只要定义一个过量的参数类型即可。

传递参数集合

除了函数能接受任意参数集合,python代码也可以调用带有任意多数量的函数,像前面说过的用星号。这种方式传递的参数由python扩展成为参数列表。以便被调用的函数

不需要为了这样调用而去使用过量参数。python中任何可调用的,都能用这种技法来调用。并且用相同的次序规则和标准参数一起使用。

>>> def add(a, b, c):

... return a + b + c

...

>>> add(1, 2, 3)

6

>>> add(a=4, b=5, c=6)

15

>>> args = (2, 3)

>>> add(1, *args)

6

>>> kwargs={'b': 8, 'c': 9}

>>> add(a=7, **kwargs)

24

>>> add(a=7, *args)

Traceback (most recent call last):

File "", line 1, in

TypeError: add() got multiple values for keyword argument 'a'

>>> add(1, 2, a=7)

Traceback (most recent call last):

File "", line 1, in

TypeError: add() got multiple values for keyword argument 'a'

注意这个例子的最后几行,特别留意当传递一个元组作为过量的位置参数时,是否要显式的传递关键字参数。因为python使用次序规则来扩展过量的参数,那位置参数要放在前面。这个例子中,最后两个调用是相同的,python不能决定那个值是给a的。

python 用途-python中的*和**的用途相关推荐

  1. python库的作用与用途_Python 中 absl 库的用途

    absl 库全称是 Abseil Python Common Libraries.它原本是个C++库,后来被迁移到了Python上. 它是创建Python应用的代码集合.这些代码从谷歌自己的Pytho ...

  2. Python os模块 -Python系统编程中的操作模块

    Python os模块 -Python系统编程中的操作模块 用途:处理(文件与目录)操作 以下为简单的常用操作 import os 导入os模块 help(os) 查看os模块帮助文档 os.name ...

  3. 实际上,Python 3.3中新的“ yield from”语法的主要用途是什么?

    本文翻译自:In practice, what are the main uses for the new "yield from" syntax in Python 3.3? I ...

  4. python列表前加星号是什么_Python中的星号:用途及使用方法(1)

    Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发. 原作者:Trey Hunner Python中 *和**很常见.无论是对于编程萌新还是许多从其他编程语言( ...

  5. python中debug有什么用途_Python debug 总结

    pdb import pdb; pdb.set_trace() (Pdb) 在最近刚发布的 Python 3.7 中,引入了 PPE 553 新特性 beakpoint ( Python 3.7 的新 ...

  6. python中debug有什么用途_18.python之如何debug

    原本按照计划,这节课要做一个关于函数的练习,但我希望在拿到题目时,你能够先自己尝试.在编程时你会遇到很多次报错,为了能够更好的排查错误,我临时决定加一节课来讲如何debug. 对于计算机领域里的程序故 ...

  7. python pyc文件作用_Python中pyc文件的用途

    什么是pyc文件 pyc是一种二进制文件,是由py文件经过编译后,生成的文件,是一种byte code,py文件变成pyc文件后,加载的速度有所提高,而且pyc是一种跨平台的字节码,是由python的 ...

  8. python 用途-Python在每个行业的用处

    Python 交互式的开发环境,因为Python是解释运行,这样也很大的节省编译时间.Python语法也很简单,又有几种高级数据结构,如list列表.元组等,通过使用这些数据结构起来特别简单.Pyth ...

  9. python介绍和用途-Python --- Python的简介

    编译型语言和解释型语言 计算机只能识别二进制编码(机器码),所以任何的语言在交由计算机执行时必须要先转换为机器码, 也就是像 print("hello") 必需要转换为类似 101 ...

  10. python语言用途-Python在每个行业的用处

    Python 交互式的开发环境,因为Python是解释运行,这样也很大的节省编译时间.Python语法也很简单,又有几种高级数据结构,如list列表.元组等,通过使用这些数据结构起来特别简单.Pyth ...

最新文章

  1. PHP 面向对象:类的属性
  2. cvMorphology形态学原理解析及源码分析
  3. ES6使用object的is()方法比较两个值
  4. 安卓手机上运行 PC-E500 程序
  5. Jquery全选单选功能
  6. HDFS中心缓存管理
  7. elementui el-upload 删除指定文件
  8. OBS Windows10 1909版本黑屏问题解决方案
  9. Linux服务笔记之一:Telnet远程登录
  10. 通过对比文件md5值,实现对文件的替换
  11. sql 分组 行列转换
  12. 如何在android lolipop中开启google now
  13. Openssl 编译
  14. Linux笔记本 安装 qq/TIM/微信/百度网盘......解决方案
  15. 【愚人节专场】Java实现定时发送小情话
  16. 项目经理如何处理中途接手的项目
  17. win10系统遇到深色背景自动降低亮度解决方法、WIN10自动调节亮度、如何关闭WIN10自动调节亮度
  18. 旷野徒奔-Java底层篇(1.3)
  19. 每天坚持练字有什么好处(开心书写 快乐成才)
  20. GB/T 8567-2006《计算机软件文档编制规范》可行性分析(研究)报告(FAR)

热门文章

  1. BlogEngine .NET 日期控件显示问题
  2. Python环境安装与配置
  3. Machine Vision 浅谈
  4. java——原型模式
  5. oracle数据库函数/存储过程/包区别
  6. eclipse 和 myeclipse 字符编码设置
  7. 开发板A/D转换原理
  8. jsoup开发网页客户端3
  9. 细说angular Form addControl方法
  10. python使用缩进来体现代码之间的逻辑关系-Python 使用缩进来体现代码之间的逻辑关系 ....