先来实践一把:

def f1(*args):
print(args)
f1(1,2,3,4)
得出:(1, 2, 3, 4) ----- 是一个元祖

Part 1:

*args可以传递任意多的数,args返回的是一个元祖,可迭代

如果要传入一个列表或元祖,变成多个参数传递,比方说我输入[1,2,3,4],传入到f1变成f1(1,2,3,4)四个参数

def f1(*args):
print(args) f1([1,2,3,4])
得出:([1,2,3,4],),
如果我这么做传入的只是一个参数,对于args,只是元祖中的一个元素
*args可以看作多参数类型,把元祖拆成一个个参数,就像下面这样
print(*args)
得出:1 2 3 4

如果我传一个参数给一个函数,这个函数把参数传递给另一个函数,就可以像上面这样用

def f1(*args):
f2(*args) #这样a,b,c,d都会被赋值
def f2(a,b,c,d):
print(a,b,c,d)
f1([1,2,3,4])

Part 2:

**args为自定参数传值,args为字典类型,**args拆开args字典,如果要二次传递也是这么组:

def f3(**kwargs):
f2(**kwargs)
def f2(a,b,c,d):
print(a,b,c,d)
f3(a=1,b=2,c=3,d=4)

*kwargs是什么鬼?

def f4(*args,**kwargs):
print(args,kwargs)
f4(1,2,a=3,b=4)
如果这样的函数,好理解,第一个是元祖(1,2),第二个是字典{'a': 3, 'b': 4}
def f4(*args,**kwargs):
print(*args,*kwargs)
第一眼看:擦,这能执行,但是
这个执行的结果是:1 2 a b 来一个三段论:
*取出kwargs的key
Kwargs是字典
也可以说*
可以取出任意字典的key。

推测:也就是任意的key都可以被*拆分, 来执行一个:
print(*{'a': 3, 'b': 4})
得出a b
也就是说*类似运算符,列表来试试:
print(*[1,2,3,4])
得出1 2 3 4
字符串来试试:
print(*"fdfdsfd")
得出f d f d s f d 可以扩展为任意迭代器?确实,不行,*只能和字符串,列表,字典,集合合作,只能在函数中传递参数,字典只能传key,那我要传value就两个**

小知识:Python函数传递变长的更多相关文章

  1. Python函数中*args和**kwargs来传递变长参数的用法

    参考自: http://www.jb51.net/article/78705.htm 单星号形式(*args)用来传递非命名键可变参数列表.双星号形式(**kwargs)用来传递键值可变参数列表. 1 ...

  2. python 函数传递参数的多种方法

    python中函数根据是否有返回值可以分为四种:无参数无返回值,无参数有返回值,有参数无返回值,有参数有返回值. Python中函数传递参数的形式主要有以下五种,分别为位置传递,关键字传递,默认值传递 ...

  3. scala学习手记21 - 传递变长参数

    在Java中是可以使用变长参数的,如下面的方法: public void check(String ... args){ for(String tmp : args){ System.out.prin ...

  4. python 函数传递可变参数的用法

    可变参数 在Python函数中,还可以定义可变参数.顾名思义,可变参数就是传入的参数个数是可变的,可以是1个.2个到任意个,还可以是0个. 我们以数学题为例子,给定一组数字a,b,c……,请计算a2 ...

  5. Python 函数传递list,传递dict 以及*args和**kargs

    函数之间传递list: def show(ll): for i in ll: print(i) show(['chen','hang','wang','yadan']) #============== ...

  6. day14 Python函数之可变长参数

    函数参数 1.形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元.因此,形参只在函数内部有效.函数调用结束返回主调用函数后则不能再使用该形参变量 2.实参可以是常量.变量.表 ...

  7. python开发笔记-变长字典Series的使用

    Series的基本特征: 1.类似一维数组的对象 2.由数据和索引组成 import pandas as pd >>> aSer=pd.Series([1,2.0,'a']) > ...

  8. 【小白学Lua】之Lua变长参数和unpack函数

    一.简介 Lua的变长参数和unpack函数在实际的开发中应用的还挺多的,比如在设计print函数的时候,需要支持对多个变量进行打印输出,这时我们就需要用到Lua中的变长参数和unpack函数了. 二 ...

  9. 详解Python函数参数定义及传参(必备参数、关键字参数、默认可省略参数、可变不定长参数、*args、**kwargs)

    详解Python函数参数定义及传参(必备参数.关键字参数.默认可省略参数.可变不定长参数.*args.**kwargs) Python函数参数传参的种类   Python中函数参数定义及调用函数时传参 ...

随机推荐

  1. Amazon验证码机器算法识别

    Amazon验证码识别 在破解Amazon的验证码的时候,利用机器学习得到验证码破解精度超过70%,主要是训练样本不够,如果在足够的样本下达到90%是非常有可能的. update后,样本数为2800多 ...

  2. Microsoft Win32 to Microsoft .NET Framework API Map

    Microsoft Win32 to Microsoft .NET Framework API Map .NET Development (General) Technical Articles   ...

  3. ecmobile中IOS版本中界面文字不显示的解决

    查找以下方法. - (BOOL)setCurrentLanguageName:(NSString *)name{        BeeLanguage * lang = [self findLangu ...

  4. day1作业--三级菜单

    作业概述: 写一个三级菜单 实现如下功能: (1)可依次选择进入各子菜单 (2)在每一级按“b”都可以返回上一级,按“q"都可以退出 流程图: readme: 简介: three_menu. ...

  5. 集合Collection

    /* * 集合的由来: * 我们学习的是面向对象语言,而面向对象语言对事物的描述是通过对象体现的,为了方便对多个对象进行操作,我们就必须把这多个对象进行存储. * 而要想存储多个对象,就不能是一个基本 ...

  6. 获取layer.open弹出层的返回值

    正在开发的车联网项目用到了layer API.当我在开发“新建电子围栏”的时候需要弹出地图,用户在地图中画一个区域,最后将这个弹出层的数据返回给原页面.下面是我的实现过:程: 触发弹出层的代码: la ...

  7. App.Config详解及读写操作

    App.Config详解及读写操作   App.Config详解 应用程序配置文件是标准的 XML 文件,XML 标记和属性是区分大小写的.它是可以按需要更改的,开发人员可以使用配置文件来更改设置,而 ...

  8. Ubuntu1404 (1)

    0.初始设置 (1)开户root账号并重启系统: sudo gedit /usr/share/lightdm/lightdm.conf.d/50-ubuntu.conf, 添加greeter-show ...

  9. JavaScript的学习2

      1. a.字符串运算符 符号 功能 + 字符串连接 += 将左边的值加上右边的值然后再赋值给左边的变量 b.比较运算符 运算符 含义 说明 > 大于 M>N,当M大于N时,返回TRUE ...

  10. G不可失

    html和css部分和引用的库 <!DOCTYPE html><html lang="en"><head> <meta charset=& ...