python参数
来源:互联网 发布:拓扑算法数学建模 编辑:程序博客网 时间:2024/05/20 09:23
1.传递参数:
参数传递的关键: A.参数的传递是通过自动将对象赋值给本地变量名来实现的 B.在函数内部的参数名不会影响调用者 C.改变函数的可变对象参数的值会影响调用者参数传递的方式: 可变参数: 通过指针进行传递 不可边参数: 通过值进行传递 *:*对本地变量引用的可变对象进行原处修改时,会改变该 可变对象的值,当该对象的生命周期长于调用它的函数时,会影响到调用者* 避免参数传递过程中对可变对象的原处修改: 在需要共享对象时,对可变对象的原处修改是一个方便的机制,但是当不需要共享对象并且不希望对传入的参数的修改影响到原有的对象时,需要去创建可变对象的拷贝. 对象拷贝: 序列: obj = seq[:] copy.copy: obj2 = copy.copy(obj1) 将可变对象转化为不可变对象传入: ls1 = [1,2,3,4] func1(tuple(ls1))
2.参数的匹配模型:
位置匹配: 从左往右匹配关键字匹配:通过name=value进行匹配默认参数: 为没有传入值的参数设定默认值可变参数: 以*开头,收集任意多的参数可变参数解包: 传递任意多的基于位置或关键字的参数keyword-only参数: 参数必须按照名称传递可变参数解包: 调用者: >>> a = [1,2,3,4,5,6,7,8] >>> def func(*name): ... print(name) ... >>> func(*a) (1, 2, 3, 4, 5, 6, 7, 8) >>> func(a) ([1, 2, 3, 4, 5, 6, 7, 8],) *:*当以*a作为参数传递给函数时,会将列表a解包为位置参数传递给函数,而函数会将位置参数收集为一个元组 当直接将a传递给函数时,函数会将列表a作为整体对待*函数参数匹配表: 语法 位置 解释 func(value) 调用者 位置参数 func(name=value) 调用者 关键字参数 func(*sequence) 调用者 将序列解包为独立的值作为位置参数传递给函数 func(**dict) 调用者 将字典解包为独立的键值对,并将键值对作为位置参数传递给函数 def func(name) 函数 变量名或位置参数 def func(name=value) 函数 默认参数 匹配 def func(*name) 函数 匹配并收集所有非关键字参数,并封装为元组 def func(**name) 函数 匹配并收集所有关键字或以键值对传入的位置参数,并封装为字典 def func(*args,name) 函数 参数name必须作为关键字参数传递 def func(*,name=value) 函数 仅能传入关键字参数参数匹配模型的顺序: 函数调用: 位置参数 关键字参数 *sequence序列 **dict 函数头部: 任何一般参数 默认参数 *name 关键字参数 keyword-only **name python参数匹配检测机制: 1.通过位置分配非关键字参数 2.通过匹配变量名分配关键字参数 3.其它额外的非关键字参数匹配至*name元组中 4.其他额外的关键字参数匹配至**name字典中 5.用默认值分配给在头部未得到分配的参数 *:keyword-only参数只能出现在**args之前,不能出现在**之后,也可能包含在**args之中
3.自定义编写print函数:
import sys def myprint(*args,*kargs): sep = kargs.get('sep',' ' ') end = kargs.get('end', ' ') files = kargs.get('file',sys.stdout) output = "" first = True for i in args: output += ('' if first else sep) + str(i) first = False files.write(output+end) def myprint2(*args, end='\n', sep=' ',files=sys.stdout): output = "" first = True for i in args: output += ('' if first else sep) + str(i) first = False files.write(output + end) #将第一个函数改写,在出现多有参数的情况下抛出异常 def myprint3(*args, *kargs): sep = kargs.pop('sep',' ') end = kargs.pop('end','\n') files = kargs.pop('files',sys.stdout) output = "" first = True for i in args: output += ('' if first else sep) + str(i) first = False files.write(output + end)
4.函数和调用者之间交流结果的三种方式:
return global 共享对象
阅读全文
0 0
- python参数
- python 参数
- python参数
- [Python]Python函数参数中的*,**
- 【python】python参数中的星号*, **
- 【Python】Python获取命令行参数
- [python]python的命令行参数
- python函数参数
- python 命令行参数
- Python的动态参数
- python传参数方式
- python处理命令行参数
- Python的不定参数
- Python函数参数
- python函数星号参数
- python中的参数组
- Python的不定参数
- python中的变长参数
- 用 Object.create实现类式继承
- 获取jQuery对象 Uncaught ReferenceError: jQuery is not defined(…) 的解决办法
- 这是一个转型AI的励志故事,从非科班到拿下竞赛一等奖
- C和指针之动态内存分配之(编写calloc函数,函数内部使用malloc函数来获取内存)
- Hexo + GitHub搭建个人博客 --- Standard Edition
- python参数
- POJ3660---Cow Contest(Floyd,传递闭包,连通)
- Flink DataSet API 使用示范
- 判断一个链表是否是回文结构 Python 版
- Linux top命令的用法详细详解
- SpringCache实现原理及核心业务逻辑(一)
- Java容器类小结
- BFS+优先队列——迷宫最短路径——两种最优方法比较及详细图解
- 再见了,我深爱过的单片机------单片机带我入门软件, 也最能揭示硬件与软件的关系