python函数动态参数 python函数的5种参数详解

Python参数类型

上一期我们学习参数传递怎么传递,也了解了参数的几种类型。

创新互联是一家集网站建设,通榆企业网站建设,通榆品牌网站建设,网站定制,通榆网站建设报价,网络营销,网络优化,通榆网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。

首先,我们再来回顾一下,形参和实参:

形参是在定义函数时定义的,放在函数名后面的圆括号里,可为空

实参是调用函数时为形参传入具体的参数值

简单总结一下,谁调用函数,谁就负责传入参数。

好呐,本期我们来详细学习函数几种参数类型,大纲如下:

python函数的参数名是无意义的,Python允许在调用函数时通过通过名字来传入参数值。

位置参数:按照形参位置传入的参数

调用函数时,实参默认按位置顺序传递的。同时实参个数也要和形参匹配

举一个小栗子

如果实参的个数与形参不匹配时,调用函数运行就会报错

Python中,形参与调用函数紧密联系在一起的。

关键字参数:调用函数时,使形参名称来传递参数,形式为“形参名=实参”

关键字参数,又叫命名参数,传递时无需考虑参数位置和顺序

举一个小栗子

默认参数:定义函数时,我们可以为形参提前设置具体的值。

在定义函数时,默认参数要放到位置等其他参数后面

在调用函数时,默认参数是可选的。如果传入新值,则会覆盖默认值

举一个小栗子

注意,默认值不能位于位置参数前面,否则程序会报错误

不定长参数又名可变参数。

不定长参数指的是可变数量的参数,分两种情况:

如果不定长参数后面,可以新增参数吗?

我们通过例子来看,会发生什么?

运行上面的程序,Python解释器会报错

原因是,形参a已经是不定长参数,我们调用的test(2,3,4)传入的三个实参,系统自动把它们属于形参a的值,形参b 和形参c就等于没有值传入,这时候系统就认为,调用函数的对象,参数没有传够。

为了解决这一报错,python引入了 强制命名参数

规定,调用不定参数后面有跟位置参数的函数时,传入给位置参数时,必须要强制命名参进行传参。

逆向参数收集针对的对象传入函数的实参

调用函数时,如果实参是元组,列表或者字典,通过在实参前面加入星号,可以自动把元素进行隔开,然后再转入给函数进行处理

举一个小栗子

本期,我们详细学习了参数几种类型,为后面我们学习函数,打好基础。

实践是检验真理的过程,大家多动手练习练习,会有不一样的奇妙旅程~

好呐,以上是本期内容,欢迎大佬们评论区指正~

Python的位置参数、默认参数、关键字参数、可变参数区别

对于python函数参数,对于初学者可能就是进入了迷宫,尽管我也是初学者,简单总结一下。

说参数之前,先讲一下两个packing(包裹)和unpacking(解包裹):

输出:

我总结不了这个概念,只能帮大家到这了

一、位置参数和关键字参数:

调用函数时根据函数定义的参数位置来传递参数。

注意:

有位置参数时,位置参数必须在关键字参数的前面,但关键字参数之间不存在先后顺序的

二、默认参数:

用于定义函数,为参数提供默认值,调用函数时可传可不传该默认参数的值(注意:所有位置参数必须出现在默认参数前,包括函数定义和调用)

三、可变参数:

定义函数时,有时候我们不确定调用的时候会传递多少个参数(不传参也可以)。此时,可用包裹(packing)位置参数,或者包裹关键字参数,来进行参数传递,会显得非常方便。

1、包裹位置传递

我们传进的所有参数都会被args变量收集,它会根据传进参数的位置合并为一个元组(tuple),args是元组类型,这就是包位置传递。

2、包裹关键字传递

kargs是一个字典(dict),收集所有关键字参数

四、解包裹参数:

*args 和 **kargs ,也可以在函数调用的时候使用,称之为解包(unpacking)

1、在传递元组时,让元组的每一个元素对应一个位置参数

2、在传递词典字典时,让词典的每个键值对作为一个关键字参数传递给函数

五、位置参数、默认参数、可变参数的混合使用

1、基本原则是:先位置参数,默认参数,包裹位置,包裹关键字(定义和调用都应遵循)

2、Python中 *args 和 **kwargs 的区别

先看个demo:

输出结果:

分析一下:可以看到,这两个是[Python]中的可变参数。 *args 表示任何多个无名参数,它是一个tuple; **kwargs 表示关键字参数,它是一个dict。并且同时使用 *args 和 **kwargs 时,必须 *args 参数列要在 **kwargs 前,否则会报语法错误!!!

还有个小应用场景:创建字典

其实python中就带有dict类,使用dict(a=1,b=2,c=3)即可创建一个字典了。

*args:

重点在*,后面的args相当于一个变量名,可以自己定义的。它的本质就是将标准调用剩下的值集中转变为元组。

从形参的角度:

从实参的角度:

从不同角度看**kwargs:

**kwargs与位置参数和默认参数混用:

超复杂混合参数混用记:

总结:

位置参数:

调用函数时所传参数的位置必须与定义函数时参数的位置相同

关键字参数:

使用关键字参数会指定参数值赋给哪个形参,调用时所传参数的位置可以任意

*位置参数:可接受任意数量的位置参数(元组);只能作为最后一个位置参数出现,其后参数均为关键字参数

**关键字参数:可接受任意数量的关键字参数(字典);只能作为最后一个参数出现

python函数调用的参数传递

python的函数参数传递是"引用传递(地址传递)"。

python中赋值语句的过程(x = 1):先申请一段内存分配给一个整型对象来存储数据1,然后让变量x去指向这个对象,实际上就是指向这段内存(这里有点和C语言中的指针类似)。

在Python中,会为每个层次生成一个符号表,里层能调用外层中的变量,而外层不能调用里层中的变量,并且当外层和里层有同名变量时,外层变量会被里层变量屏蔽掉。函数  调用  会为函数局部变量生成一个新的符号表。

局部变量:作用于该函数内部,一旦函数执行完成,该变量就被回收。

全局变量:它是在函数外部定义的,作用域是整个文件。全局变量可以直接在函数里面应用,但是如果要在函数内部改变全局变量,必须使用global关键字进行声明。

注意 :默认值在函数  定义  作用域被解析

在定义函数时,就已经执行力它的局部变量

python中不可变类型是共享内存地址的:把相同的两个不可变类型数据赋给两个不同变量a,b,a,b在内存中的地址是一样的。

python怎么查看函数有什么参数

在开发中我们可以借助于相关插件或使用Python内置函数"help()”来查看某个函数的参数说明,以查看内置函数sorted()为例:

函数参数包括:必选参数、默认参数、可选参数、关键字参数。

1、默认参数:放在必选参数之后,计算x平方的函数:

这样的话每次计算不同幂函数都要重写函数,非常麻烦,可使用以下代码计算:

默认参数最大好处就是降低调用函数的难度。

2、可变参数:就是传入的参数个数是可变的,可以是1个、2个到任意个,还可以是0个,在参数前面加上*就是可变参数。在函数内部,参数numbers接收得到的是一个tuple,调用该函数时,可以传入任意个参数,包括0个参数:

也可以类似可变参数,先组装一个dict,然后,把该dict转换为关键字参数传进去:

python 函数参数类型

python 的函数参数类型分为4种:

1.位置参数:调用函数时根据函数定义的参数位置来传递参数,位置参数也可以叫做必要参数,函数调用时必须要传的参数。

当参数满足函数必要参数传参的条件,函数能够正常执行:

add(1,2) #两个参数的顺序必须一一对应,且少一个参数都不可以

当我们运行上面的程序,输出:

当函数需要两个必要参数,但是调用函数只给了一个参数时,程序会抛出异常

add(1)

当我们运行上面的程序,输出:

当函数需要两个必要参数,但是调用函数只给了三个参数时,程序会抛出异常

add(1,2,3)

当我们运行上面的程序,输出

2.关键字参数:用于函数调用,通过“键-值”形式加以指定。可以让函数更加清晰、容易使用,同时也清除了参数的顺序需求。

add(1,2) # 这种方式传参,必须按顺序传参:x对应1,y对应:2

add(y=2,x=1) #以关健字方式传入参数(可以不按顺序)

正确的调用方式

add(x=1, y=2)

add(y=2, x=1)

add(1, y=2)

以上调用方式都是允许的,能够正常执行

错误的调用方式

add(x=1, 2)

add(y=2, 1)

以上调用都会抛出SyntaxError 异常

上面例子可以看出:有位置参数时,位置参数必须在关键字参数的前面,但关键字参数之间不存在先后顺序的

3.默认参数:用于定义函数,为参数提供默认值,调用函数时可传可不传该默认参数的值,所有位置参数必须出现在默认参数前,包括函数定义和调用,有多个默认参数时,调用的时候,既可以按顺序提供默认参数,也可以不按顺序提供部分默认参数。当不按顺序提供部分默认参数时,需要把参数名写上

默认参数的函数定义

上面示例第一个是正确的定义位置参数的方式,第二个是错误的,因为位置参数在前,默认参数在后

def add1(x=1,y) 的定义会抛出如下异常

默认参数的函数调用

注意:定义默认参数默认参数最好不要定义为可变对象,容易掉坑

不可变对象:该对象所指向的内存中的值不能被改变,int,string,float,tuple

可变对象,该对象所指向的内存中的值可以被改变,dict,list

这里只要理解一下这个概念就行或者自行百度,后续会写相关的专题文章讲解

举一个简单示例

4.可变参数区别:定义函数时,有时候我们不确定调用的时候会多少个参数,j就可以使用可变参数

可变参数主要有两类:

*args: (positional argument) 允许任意数量的可选位置参数(参数),将被分配给一个元组, 参数名前带*,args只是约定俗成的变量名,可以替换其他名称

**kwargs:(keyword argument) 允许任意数量的可选关键字参数,,将被分配给一个字典,参数名前带**,kwargs只是约定俗成的变量名,可以替换其他名称

*args 的用法

args 是用来传递一个非键值对的可变数量的参数列表给函数

语法是使用 符号的数量可变的参数; 按照惯例,通常是使用arg这个单词,args相当于一个变量名,可以自己定义的

在上面的程序中,我们使用* args作为一个可变长度参数列表传递给add()函数。 在函数中,我们有一个循环实现传递的参数计算和输出结果。

还可以直接传递列表或者数组的方式传递参数,以数组或者列表方式传递参数名前面加(*) 号

理解* * kwargs

**kwargs 允许你将不定长度的键值对, 作为参数传递给函数,这些关键字参数在函数内部自动组装为一个dict

下篇详细讲解 *args, **kwargs 的参数传递和使用敬请关注


网页题目:python函数动态参数 python函数的5种参数详解
网站网址:http://bzwzjz.com/article/hgjopi.html

其他资讯

Copyright © 2007-2020 广东宝晨空调科技有限公司 All Rights Reserved 粤ICP备2022107769号
友情链接: 成都网站设计 成都网站建设 专业网站建设 手机网站设计 定制网站设计 成都网站制作 成都网站设计 网站建设推广 梓潼网站设计 营销网站建设 成都网站建设 H5网站制作 企业网站设计 成都网站设计 重庆企业网站建设 成都企业网站建设 成都企业网站制作 网站建设 企业网站制作 成都网站建设 移动网站建设 成都网站制作