首页 > 编程知识 正文

实参可以是常量 变量或表达式,实参和形参的数据传递方式

时间:2023-05-04 04:07:09 阅读:155220 作者:4304

文章目录一、形参与实参介绍二、形参与实参具体使用(定义阶段、调用阶段) 2.1位置参数2.2关键字)实)参数2.3默认)行)参数2.4可变长度参数(*和(*(* ) )

一.形参和实参介绍

1、形参)在定义函数阶段定义的参数称为形参数,简称形参((相当于)变量名) )。

2、实参:在调用函数的阶段传递的值称为实参数,只是实参(相当于变量值) )。

3、关系:调用时实参的值为绑定给形参。 此绑定关系只能在函数体内上使用

4、实参与形参的绑定关系只在函数调用时有效,函数调用结束后接触绑定关系

5、实参实际上是一个值,什么形式都可以吗? 如下所示。

deffunc(x,y ) : #形参return x,yfunc ) 2,4 )实参#形一func ) 2,4 ) #形二a=2b=4func(a,b ) #形三func ) int )

位置参考: 在函数定义阶段是从左侧开始按顺序定义的“参考”

特征:必须被传递值。 多一个也不行,deffunc(x,y ) :print(x ) x,y )位置执行参考: 在函数使用阶段是从左边开始按顺序传送的值

特征: func (1,2 ) 2.2关键词)实)参数关键词实参)在函数定义阶段,以key=value的形式被传递

特征:在给某个形式命名并传递值的情况下,deffunc(x,y ) :print(x ) x (x ) x=1,y=2) func ) y=2,x=1) 2.3行)

特点:在调用阶段deffunc(3(3(x,y=2) :print (x ) x,y ) func )3) func ) x=3,y=4) 2.4可变长度的参数(*和* * * * * )

溢出用于接受位置实际参照或关键字实际参照2.4.1可变长度的位置参数溢出的位置实际参照(* ),溢出的位置实际参照由星变换为元组的形式,由后面的形状参照名(通常为http://) 使用DDS )作为参考的*args ) :print(x,y,args ) func (1,2,3,4,5,6 )结果#1) 3,4,5,6 ) 2,* (在执行中) args ) func ) 1,2,[ 3,4,5 ] )结果1 ) 3,4,4 )2.4.2可变长度的关键字参数是溢出的关键字参数(http://www.Sina.com/com ) 使用def func(x )、y、***kwargs作为形参的y=2,z=3,m=5,n=6)结果1 2 {'z': 3,' m': 5,' n': 6}# y ) :2,) z ) z':3} )结果:1)2) 3,**形参与参与使用def func(x ) x,y,**kwargs ),3333 )的' z':3,',*形参与' m': ) 2.5*与**混合使用的*args必须位于**kwargs左侧deffunc )、*args、**kwargs左侧的x=1,y=2)结果: (1,2

) # 错的func(1, 2,y=2, x=1) # 错的 位置形参必须在默认形参左边默认参数的值在定义阶段被赋值, 被赋予的是值的内存地址虽然默认值可以可以是任意类型, 但是不推荐为可变类型 # 示范一# 定义阶段m = 2def func(x, y=m): # y是2的内存地址print(x, y)# 调用阶段m=3333func(1) # 结果1, 2# 示范二m = [1]def func(x, y):print(x, y)# 调用阶段m.append(2)func(1) # 结果1,[1,2] 什么时候要位置, 什么时候要默默认:每次调用都需要一个新的值, 用位置形参, 如果大多数调用都不需要新值, 就定义为默认。函数的调用只跟函数本身有关, 不受外界代码影响 def func(x, l=None):if l is None:l=[]l.append(x)return lfunc(2)func(2, [1,2,3]) 2.7 命名关键字参数(了解) 在定义函数时, *后定义的参数特点:1、命名关键字参数必须按照key=value的形式传值应用场景:在定义函数的时候必须要按照key=value的形式传值 # 特点1def func(x, y, *, a, b): # 其中a、b就是命名关键字参数 print(x, y) print(a, b)func(1, 2, 11, 22) # 错误func(1, 2, a=11, b=22) # 正确 2.8 混合使用 形参如果全部使用的顺序应该是:位置参数,默认参数,*args, 命名关键字形参, **kwargs没有应用场景 def func(x, y=11, *args, z, **kwargs):print(x, y, args, z, kwargs) 实参如果全部使用的顺序应该是:位置,关键字 def func(x, y, z, a, b, c):print(x)print(y)print(z)print(a)print(b)print(c)func(1, y=2, *(1, 2), **{'b': 11, 'c':22}) # 错误func(1, *(1, 2), a=2, **{'b': 11, 'c':22}) # 正确 三、一种特殊的用法 def index_(x, y):print(x, y)def wrapper(*args, **kwargs): # args=(1,) kwargs={'y': 2}index(*args, **kwargs) # 原封不动的将wrapper传入index_# index_(*(1,), **{'y':2})# index_(1, y=2)wrapper(1, y=2) # 根据index_来变

相关连接(笔记来自于视频课程的归类整理):
[1]: https://www.bilibili.com/video/BV1QE41147hU?p=17
[2]: https://www.zhihu.com/column/c_1189883314197168128

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。