默认参数:定义函数的时候给定变量一个默认值。  def num(age=1):

位置参数:调用函数的时候根据定义函数时的形参位置和实参位置进行引用。

关键字参数:如果定义的函数中含有关键字参数,调用函数时必须要传如该关键字对应的实参。

不定长参数:在定义函数的时候不确定传入的参数的数量(可能是0个或多个)  def num(*args,**args):  (不定长参数的标志符号是*和**,args和kwargs只是变量的名字,可以改为任意的变量如(*num,**kwnum))

  *+变量名1,可以接受被其他参数接受后剩下的任意的形参(不包括赋值语句),放进一个元组里,这个元组的名字是前面的变量名1(所以位置参数必须在此参数之前)

  **+变量名2,可以接受被其他参数接受后剩下的任意赋值语句,放进一个字典中,这个字典的名字是前面的变量名2(所以关键字参数和默认参数必须在此参数之前,*+变量名也要在此参数之前)

测试上面的总结是否正确

def num_0(a,b,c,*args,city='beijing',name,**kwnum):
print(a,b,c,name,city,args,kwnum) # 输出的时候直接用*或者** 的变量名
num_0(1,2,3,4,5,6,7,city='hangzhou',name='jack',age=18,country='haidian')
#结果
D:\pycharm_project\装饰器\venv\Scripts\python.exe D:/pycharm_project/装饰器/venv/text.py
1 2 3 jack hangzhou (4, 5, 6, 7) {'age': 18, 'country': 'haidian'} Process finished with exit code 0

最后总结

调用函数传递实参的时候,先传变量/定量,再传赋值语句(num_0(1,2,3,4,5,6,7,city='hangzhou',name='jack',age=18,country='haidian'))

定义函数的时候直接按此顺序定义形参(def num_0(a,b,c,*args,city='beijing',name,**kwnum):)(位置参数,*变量名,默认参数,关键字参数,**变量名)

接下来讨论一下不定长参数中的 * 和 ** 还有什么用处

1,当在函数的形参中使用时(和上面的例子相同)
*t:将所有的其他位置的实参(变量/定量)获取,并将它们打包到元祖中,并赋值给此形参

def foo(*t):
print(t)
foo(1,2,3)
(1,2,3)

**t:将所有的其他位置的实参(赋值语句)获取,并将它们打包到字典中,并赋值给此参数

def foo(**t):
print(t)
foo(a=1,b=2)
{'x': 1, 'y': 2}

2,当在调用函数的时候使用(实参中)
*tuple_a:将此元祖的元素,当做函数调用的位置参数

def foo(a,b):
print(a,b)
tuple_a = (1,2)
foo(*tuple_a)
1,2

**dict_a:将字典中的键值对,当做函数调用的关键字参数

def foo(x, y):
print(x, y)
dict_a = {'x':1, 'y':2}
foo(**dict_a)
1,2

3,在匹配和for循环中
*x意味着‘匹配多余的元素’,x是一个列表

>>>x, *xs = (1, 2, 3, 4)
>>>xs
[2, 3, 4]
>>>x, *xs = [1, 2, 3, 4]
>>>xs
[2, 3, 4] >>> *xs, x = (, , , )
>>> xs
[, , ]
>>> x >>> x, *xs, y = (, , , )
>>> x
1
>>> xs
[, ]
>>> y
for (x, *y, z) in [ (1, 2, 3, 4) ]: print(x, y, z)
1 [2, 3] 4

4,可以用于合并字典

dict_a = {'a':1,'b':2}
dict_b = {'b':3,'c':4} dict_c = {**dict_a,**dict_b}
print(dict_c)
{'a': 1, 'b': 3, 'c': 4}
*t 表示“获取此函数的所有其他位置参数,并将它们作为元组打包到此参数中

python函数中的参数(关键字参数,默认参数,位置参数,不定长参数)的更多相关文章

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

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

  2. Python函数中参数类型

    在学习Python函数的时候,函数本身的定义和调用并不是很复杂,但是函数的参数类型和用法的确有些复杂.在此做一个小结,加深理解. Python参数的定义 负责给函数提供一些必要的数据或信息,以保证函数 ...

  3. Python 函数中,参数是传值,还是传引用?

    在 C/C++ 中,传值和传引用是函数参数传递的两种方式,在Python中参数是如何传递的?回答这个问题前,不如先来看两段代码. 代码段1: def foo(arg): arg = 2 print(a ...

  4. python函数中把列表(list)当参数时的"入坑"与"出坑"

    在Python函数中,传递的参数如果默认有一个为 列表(list),那么就要注意了,此处有坑!! 入坑 def f(x,li=[]): for i in range(x): li.append(i*i ...

  5. Python函数中的可变参数

    在Python函数中,还可以定义可变参数. 如:给定一组数字a,b,c……,请计算a2 + b2 + c2 + ……. 要定义出这个函数,我们必须确定输入的参数.由于参数个数不确定,我们首先想到可以把 ...

  6. python函数中的不定长参数

    python自定义函数中有两中不定长参数,第一种是*name,第二种是**name.加了星号 * 的参数会以元组(tuple)的形式导入,存放所有未命名的变量参数.加了两个星号 ** 的参数会以字典的 ...

  7. python函数中的参数类型

    python函数中的参数 动态获取函数的参数 python的函数类型详解

  8. python中函数的不定长参数

    例1: #定义一个含有不定长参数的函数,本例第三个参数*args def sum_nums(a,b,*args): print('_'*30) print(a) print(b) print(args ...

  9. python不定长参数 *argc,**kargcs(19)

    在 python函数的声明和调用 中我们简单的了解了函数的相关使用,然而在函数传递参数的时候,我们埋下了一个坑,关于不定长参数的传递我们还没有讲,今天这篇文章主要就是讲解这个问题. 一.函数不定长参数 ...

随机推荐

  1. 164-PHP 文本替换函数str_replace(五)

    <?php $str='Hello world!'; //定义源字符串 $search=array('Hello','world','!'); //定义将被替换的字符数组 $replace=ar ...

  2. RabbitMQ整合Spring Booot【消费者补偿幂等问题】

    如果消费者 运行时候 报错了 package com.toov5.msg.SMS; import org.springframework.amqp.rabbit.annotation.RabbitHa ...

  3. Codeforces 459C Pashmak and Buses 机智数学题

    这个题目说的是有n个人,有k辆巴士,有m天,每天都要安排n个人坐巴士(可以有巴士为空),为了使得这n个人不会成为朋友,只要每两个人在这m天里坐的巴士至少一天不相同即可. 要你求是否有这样的安排方法,如 ...

  4. 2.2 学习总结 之 servlet 的两次抽取

    说在前面 昨天 完成了文件上出的学习和实践 今天 学习servlet的两次抽取,以加快编写工程的速度 一.servlet 抽取的原因: 刚刚学习使用servlet写后台,往往只使用一个servlet来 ...

  5. Kubernetes-基于helm安装部署高可用的Redis及其形态探索

    首先是一些关于redis的介绍和其在K8S上的安装过程:https://www.kubernetes.org.cn/3974.html 1.1部署形态 通过上述地址的教程,可以完成redis 的安装和 ...

  6. 17. react redux的中间件

    1. redux 数据流程图 View 会派发一个 Action Action 通过 Dispatch 方法派发给 Store Store 接收到 Action 连同之前的 State 发给  Red ...

  7. html 鼠标样式 鼠标悬停 小手样式

    在style中添加cursor:pointer 实现鼠标悬停变成小手样式 先来一个示例 <div style="float:right"> <a class=&q ...

  8. “设计型web前端与开发型web前端”有哪些区别?

    学web前端,你弄懂开发型web前端和设计型web前端的区别了吗?今天给大家梳理一下设计型web前端做什么?都要学习什么? 想必大家也会遇到这种情况,要做一个项目,产品经理说产品原型图已经画好了,让我 ...

  9. Mac 终端命令使用自动补全时忽略大小写设置

    Mac 终端在使用 tab 补全命令时默认大小写敏感,通过以下设置方法可以忽略大小写,方法同样适用于 iTerm2. 打开终端输入以下命令: nano .inputrc 将以下命令复制进去: set ...

  10. Android自定义View——多边形网格属性图

      1.初始化变量 2.属性图解   3.如果想切换到5.6.7边形等等,则必须修改下面几条数据 4.获取宽和高 5.绘制图形 1.开始画画前:我们要把画笔准备好,这里看代码就能明白意思了,接着把整个 ...