1. 函数的可变参数

当函数的参数前面有一个星号*的时候表示这是一个可变的位置参数,两个星号**表示是可变的关键字参数。

#!env python

#coding=utf-8

#

def foo(*args, **kwarg):

for item in args:

print item

for k,v in kwarg.items():

print k,v

print 30*'='

if __name__ == '__main__':

foo(1, 2, 3, a=4, b=5)

foo(2, 3, a=4, b=5, c=1)

输出如下:

lxg@web-Dev ~/station $ python test_param.py

1

2

3

a 4

b 5

==============================

2

3

a 4

c 1

b 5

==============================

这样我们可以传入任意个数的参数。

2. unpack参数

星号*把序列/集合解包(unpack)成位置参数,两个星号**把字典解包成关键字参数。下面通过示例来进一步加深理解:

#!env python

#coding=utf-8

def foo(*args, **kwarg):

for item in args:

print item

for k,v in kwarg.items():

print k,v

print 30*'='

if __name__ == '__main__':

#foo(1, 2, 3, a=4, b=5)

#foo(2, 3, a=4, b=5, c=1)

v = (1, 2, 4)

v2 = [11, 15, 23]

d = {'a':1, 'b':12}

foo(v, d)

foo(*v, **d)

foo(v2, d)

foo(*v2, **d)

输出如下:

lxg@web-Dev ~/station $ python test_param.py

(1, 2, 4)

{'a': 1, 'b': 12}

==============================

1

2

4

a 1

b 12

==============================

[11, 15, 23]

{'a': 1, 'b': 12}

==============================

11

15

23

a 1

b 12

==============================

上面的示例中如果v、v2、d没有加星号那么就当成了一个参数传递给了函数,如果加了星号那么就会解包后传递给函数。foo(*d, **d)等价于foo(1, 2, 4, a=1, b=12)。

3. 几个注意点

可变位置参数*args是一个元组,是不可修改的。

>>> def foo(*args):

... args[0] = 5

...

>>> foo(1, 2, 3)

Traceback (most recent call last):

File "", line 1, in

File "", line 2, in foo

TypeError: 'tuple' object does not support item assignment

>>> l = [1, 2, 3]

>>> foo(*l)

Traceback (most recent call last):

File "", line 1, in

File "", line 2, in foo

TypeError: 'tuple' object does not support item assignment

无论我们怎么传入参数,args都是一个tuple类型,不能进行修改。

对于字典类型的如果只使用一个型号*那么传入的只是字典的键。

>>> def foo2(*args, **kwarg):

... print args, kwarg

...

>>> d = {'a':1, 'b':2, 'c':3}

>>> foo2(*d)

('a', 'c', 'b') {}

>>> foo2(**d)

() {'a': 1, 'c': 3, 'b': 2}

python输出星号_Python的星号(*、**)的作用相关推荐

  1. python输出结果_python输出结果

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! tdqm输入的list可以是字符串,也可以对输出进度条加一些描述import t ...

  2. 用python输出数组_Python 中输出数组中的全部元素

    只需要在开头加上一句即可 import numpy as np np.set_printoptions(threshold=np.inf) Python 输出到文本中 参考:https://blog. ...

  3. python输出星号_python中星号

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! *在python中具有特殊含义,就像它在c中一样? 我在python cookb ...

  4. python传入参数加星号_Python 带星号(* 或 **)的函数参数详解

    1. 带默认值的参数 在了解带星号(*)的参数之前,先看下带有默认值的参数,函数定义如下: >> def defaultValueArgs(common, defaultStr = &qu ...

  5. python输出方格_Python蓝桥杯练习 剪格子

    问题描述 如下图所示,3 x 3 的格子中填写了一些整数. +----+--+ |10 1|52| +--***--+ |20|30 1| *******--+ | 1| 2| 3| +--+--+- ...

  6. python 输出引号_python输出字符串单双引号如何选择

    在Python当中字符串的输出既可以使用单引号,也可以使用双引号,使用单引号或双引号是没有区别的:当使用双引号将输出的字符串括起来时,内部也可使用单引号,将单双引号匹配正确即可. 在Python中我们 ...

  7. python输出时间_Python获取并输出当前日期时间

    取得时间相关的信息的话,要用到python time模块,python time模块里面有很多非常好用的功能,你可以去官方 文档了解下,要取的当前时间的话,要取得当前时间的时间戳,时间戳好像是1970 ...

  8. new to python什么意思_Python中__new__的作用

    __new__ 的作用 依照Python官方文档的说法,__new__方法主要是当你继承一些不可变的class时(比如int, str, tuple), 提供给你一个自定义这些类的实例化过程的途径.还 ...

  9. python输出偶数_python程序使用递归查找数字是偶数还是奇数

    所以我想通过使用递归函数找到偶数,该函数重复从数字中减去2以找到它是否为偶数. 到目前为止,我所拥有的功能是 def isEven(number): if number!=0: return(n-2) ...

最新文章

  1. GDAL中GDALDataset::RasterIO分块读取的实现
  2. Go 为什么这么“快”
  3. Java新手,强烈不建议你用 a.equals(b) 判断对象相等!
  4. WHUST 2015 Summer Contest #11
  5. 计算机网络安全课程好吗,浅议计算机网络课程教学问题与对策 计算机网络安全有哪些...
  6. java pdfbox 解析报错_pdfbox 读取文件报错 java.io.IOException: Page tree root must be a dictionary...
  7. gulp中使用babel-polyfill编译es6拓展语法
  8. 休眠:保存vs持久并保存或更新
  9. 哈佛大学计算机科学专,哈佛大学计算机科学专业
  10. Android中的savedInstanceState
  11. Endnote X8 #安装%办法与*安装*包%
  12. xtrabackup 2.4.3 BUG
  13. python代码_Python代码的优化技巧
  14. 新升级带特效喝酒神器小程序源码-多种游戏支持流量主
  15. 数据仓库ETL工具箱——简介
  16. 市场的各大TWS蓝牙耳机芯片方案汇总
  17. 机器学习中类别变量的编码方法总结
  18. 天才程序员: 那些年我偷懒没敲的EOS代码, 让我失去了一切, 如果...
  19. 一文理解分布式常见的一致性算法
  20. 成都自传-MoccA and 555

热门文章

  1. [nodejs]国内npm安装nodejs modules失败的几个解决方案
  2. 207. Course Schedule
  3. [Leetcode][LCP 19][JAVA][秋叶收藏集][动态规划]
  4. [Leetcode][第459题][JAVA][重复的字符串][子串][匹配]
  5. [Leedcode][JAVA][第210 题][课程表 II][拓扑排序][BFS][DFS][有向图]
  6. [剑指offer]面试题第[48]题[Leetcode][JAVA][第3题][无重复字符的最长字串][滑动窗口][HashSet/Map]
  7. 修改value_EXCEL批量名称修改
  8. excel亮灯怎么设置_Excel表格技巧—怎么给表格设置密码
  9. 手工机器人的做法大全用易拉罐_纯手工自制黄油,做法简单详细易操作,蛋糕、饼干、面包都能用...
  10. python 输入正方形_Python打印正方形