先来实践一把:

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. .NET下的并行开发(案例代码)

    以下主要是通过一个报表处理程序来说明并行开发的方式.对于数据冲突和共享,可以通过对象数组解决.设计到并行的核心代码已用红色标出.在并行程序的处理上,需要把原来串行的子公司变成一个一个类的对象,让所有的 ...

  2. C#集合接口的继承关系图

  3. A Simple Problem with Integers poj 3468 多树状数组解决区间修改问题。

    A Simple Problem with Integers Time Limit: 5000MS   Memory Limit: 131072K Total Submissions: 69589   ...

  4. Backbone视图渲染React组件

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title&g ...

  5. 【head first python】1.初识python 人人都爱列表

    #coding:utf-8 #创建简单的python列表 movies = ["The Holy Grail", "The Life of Brain", &q ...

  6. Netty4 学习笔记之三:粘包和拆包

    前言 在上一篇Netty 心跳 demo 中,了解了Netty中的客户端和服务端之间的心跳.这篇就来讲讲Netty中的粘包和拆包以及相应的处理. 名词解释 粘包: 会将消息粘粘起来发送.类似吃米饭,一 ...

  7. Linux centos7系统下svn的安装与配置

    一.安装svn # yum -y install svn 二.查看svn版本信息 # svnserve --version 三.搭建svn版本库(假设项目名称为project) 1.首先创建版本库目录 ...

  8. VS2017提醒找不到MSVCR110D.dll

    我的电脑时win10我已解决,不能传文件,需要联系我

  9. MyBaits全局配置文件的各项标签2

    ▲typeHandlers 类型处理器,它架起数据库和JavaBean一一映射的桥梁,这里需要注意一下,java在JDK1.8之前,日期处理函数并不丰富,但在JDK1.8之后引入JSR-310标准,这 ...

  10. python 遇到的问题及解答

    1.使用pip安装python 模块 打开cmd 输入pip install *,如pip install numpy    等待安装(如下) C:\WINDOWS\System32>pip i ...