默认参数:定义函数的时候给定变量一个默认值。  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. 第二阶段scrum-4

    1.整个团队的任务量: 2.任务看板: 会议照片: 产品状态: 前端制作完成,数据库在制作中.

  2. DataTable数据类型的一些操作 增加行、插入行、修改数据、修改列名、修改列顺序、计算、选取或删除行(列)、排序、某列distinct值 等

    Datatable 这个数据类型在C#中涉及到对数据库读取时的用处还是挺大的,最近在处理一个报表开发时,一开始把所有的操作都放在sql 上面来做,就是我需要什么样的数据我就query出什么,但是这样其 ...

  3. 好记性不如烂笔头--shell参数及shell判断if系列

    $0 当前脚本的文件名$n 传递给脚本或函数的参数.n 是一个数字,表示第几个参数.例如,第一个参数是$1,第二个参数是$2$# 传递给脚本或函数的参数个数$* 传递给脚本或函数的所有参数$@ 传递给 ...

  4. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 字体图标(Glyphicons):glyphicon glyphicon-edit

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...

  5. java基础源码 (5)--reflect包-AccessibleObject类

    学习参考博客:https://blog.csdn.net/benjaminzhang666/article/details/9664585AccessibleObject类基本作用 1.将反射的对象标 ...

  6. C#如何编写短信接口,以及接口的调用,包括C#.net访问web,并处理返回值的简例。

    在系统的开发中我们经常会用到接口,下面给大家介绍一种短信接口的编写与调用. 我们常调用接口来完成一些信息的通知或者发送验证码,那么这些操作是如何完成的呢?来看一下详细的介绍吧! 首先呢,我们需要有一个 ...

  7. c++程序—布尔值

    #include<iostream> using namespace std; #include<string> int main() { //创建bool数据类型 bool ...

  8. C++的随机数

    C++产生随机数 C++中没有自带的random函数,要实现随机数的生成就需要使用rand()和srand(). 不过,由于rand()的内部实现是用线性同余法做的,所以生成的并不是真正的随机数,而是 ...

  9. eclipse的重要快捷键

    1.快速修正:ctrl + 1 2.单词补全:alt + / 3.查看轮廓:ctrl + o 4.打开eclipse中工作区的资源: ctrl + shift + r 它可以打开当前eclipse的工 ...

  10. 资源的合并与压缩-html压缩

    资源的合并:减少http请求数量 资源的压缩:减少请求资源的大小 html压缩 html代码压缩就是压缩这些在文本文件中有意义,但是在html中不显示的字符,包括空格,制表符,换行符等,还有一些其他意 ...