python--基础学习(五)参数位置传递、关键字传递、包裹传递及解包裹
python系列均基于python3.4环境
1、位置传递和关键字传递
- 代码示例
 
#位置传递
def fun(a,b,c):
print("a: {0}, b: {1}, c: {2}".format(a,b,c)) fun(1,2,3) #参数传递,位置传递
fun(c=3,a=1,b=2) #关键字传递,位置可以打乱
fun(1,c=3,b=2,) #关键字传递和位置传递混合,位置参数需要在关键字参数之前
- 运行结果
 
a: 1, b: 2, c: 3
a: 1, b: 2, c: 3
a: 1, b: 2, c: 3
- 结果分析:
 
(1)关键字传递是根据每个参数的名字传递参数。关键字并不用遵守位置的对应关系。
(2)关键字传递可以和位置传递混用。但位置参数要出现在关键字参数之前。
- 代码示例2:参数默认值
 
def fun2(a,b,c=100):
print("a: {0}, b: {1}, c: {2}".format(a,b,c)) fun2(1,2) #传递2个值,c没有被赋值,所以c将使用默认值
fun2(1,2,3) #c被赋值为1,将不使用默认值
- 运行结果
 
a: 1, b: 2, c: 100
a: 1, b: 2, c: 3
- 结果分析:
 
(1)如果该参数最终没有被传递值,将使用该默认值。
2、包裹位置传递
- 代码示例
 
def func(*name):
print(type(name))
print(name) func(1,2,3)
func(5,6,7,1,2,3)
- 运行结果
 
<class 'tuple'>
(1, 2, 3)
<class 'tuple'>
(5, 6, 7, 1, 2, 3)
- 结果分析:
 
(1)两次调用,尽管参数个数不同,都基于同一个func定义。在func的参数表中,所有的参数被name收集,根据位置合并成一个元组(tuple)。
(2)name是包裹位置传递所用的元组名,在定义func时,在name前加*号。
3、包裹关键字传递
- 代码示例
 
def func(**dict):
print(type(dict))
print(dict) func(a=1,b=9)
func(m=2,n=1,c=11)
- 运行结果
 
<class 'dict'>
{'b': 9, 'a': 1}
<class 'dict'>
{'n': 1, 'm': 2, 'c': 11}
- 结果分析
 
(1)dict是一个字典,收集所有的关键字,传递给函数func。参数dict是包裹关键字传递所用的字典,在dict前加**。
4、解包裹(包裹和解包裹并不是相反操作,是两个相对独立的过程。)
- 代码示例
 
#解包裹
def func(a,b,c):
print(a,b,c) args = (1,2,3)
func(*args) dict = {'a':1,'b':2,'c':3}
func(**dict)
- 运行结果
 
1 2 3
1 2 3
- 结果分析:
 
(1)*和**,也可以在解包裹的时使用。
(2)在传递tuple时,让tuple的每一个元素对应一个位置参数。在调用func时使用*,把args拆成分散的三个元素,分别传递给a,b,c。
(3)在传递词典dict时,让词典的每个键值对作为一个关键字传递给func。
5、结论
- 在定义或者调用参数时,参数的几种传递方式可以混合。基本原则是,先位置,再关键字,再包裹位置,再包裹关键字。
 
6、附:学习参考
python--基础学习(五)参数位置传递、关键字传递、包裹传递及解包裹的更多相关文章
- Python基础学习五
		
Python基础学习五 迭代 for x in 变量: 其中变量可以是字符串.列表.字典.集合. 当迭代字典时,通过字典的内置函数value()可以迭代出值:通过字典的内置函数items()可以迭代出 ...
 - Python基础学习五 内置模块
		
time 模块 1 >>> import time 2 >>> time.time() 3 1491064723.808669 4 >>> # t ...
 - 【Python基础学习五】列表,元祖,字典
		
1.列表(list) 列表是Python的一种内置数据类型,list是一种有序的集合,可以随时添加和删除其中的元素,就像动态数组一样.获取list中的元素用角标获取,角标可以使用正角标,也可以使用负角 ...
 - Python基础学习五 内置函数
		
1.函数补充: 1)函数返回值return可以有多个 2)补充示例: nums = [0,1,2,3,4,5,6,7,8] #如何将list里面的元素变为字符串类型 new_nums = [str(x ...
 - python基础学习10
		
python基础学习 内容概要 文件内光标的移动 文件数据修改 函数简介 函数语法结构 内容详情 文件内光标的移动 with open(r'路径','r',encoding='utf8') as f: ...
 - python基础——函数的参数
		
python基础——函数的参数 定义函数的时候,我们把参数的名字和位置确定下来,函数的接口定义就完成了.对于函数的调用者来说,只需要知道如何传递正确的参数,以及函数将返回什么样的值就够了,函数内部的复 ...
 - (一)python基础学习
		
根据廖雪峰老师的python教程写一些学习总结! Python基础学习 1.使用list和tuple (1)list Python内置的一种数据类型是列表:list.list是一种有序的集合,可以随时 ...
 - Day1 Python基础学习
		
一.编程语言分类 1.简介 机器语言:站在计算机的角度,说计算机能听懂的语言,那就是直接用二进制编程,直接操作硬件 汇编语言:站在计算机的角度,简写的英文标识符取代二进制去编写程序,本质仍然是直接操作 ...
 - Day1 Python基础学习——概述、基本数据类型、流程控制
		
一.Python基础学习 一.编程语言分类 1.简介 机器语言:站在计算机的角度,说计算机能听懂的语言,那就是直接用二进制编程,直接操作硬件 汇编语言:站在计算机的角度,简写的英文标识符取代二进制去编 ...
 - Python基础学习总结(六)
		
8.函数 函数是带名字的代码块,用于完成具体的工作.def函数定义,指出函数名.定义函数的时候,我们把参数的名字和位置确定下来,函数的接口定义就完成了.对于函数的调用者来说,只需要知道如何传递正确的参 ...
 
随机推荐
- LCS问题
			
最长公共子序列问题 1.这里pre数组表示回溯的方式,状态转移方程!!! #include <iostream> #include <algorithm> #include & ...
 - HTML5全局属性和事件详解
			
属性: HTML5属性能够赋给标签元素含义和语境,下面的全局属性可用于任何 HTML5 元素. 属性 描述 contenteditable 规定是否允许用户编辑内容. contextmenu 规定元素 ...
 - CUDA程序设计(一)
			
为什么需要GPU 几年前我启动并主导了一个项目,当时还在谷歌,这个项目叫谷歌大脑.该项目利用谷歌的计算基础设施来构建神经网络. 规模大概比之前的神经网络扩大了一百倍,我们的方法是用约一千台电脑.这确实 ...
 - 使用 zssh 进行 Zmodem 文件传输
			
Zmodem 最早是设计用来在串行连接(uart.rs232.rs485)上进行数据传输的,比如,在 minicom 下,我们就可以方便的用 Zmodem (说 sz .rz 可能大家更熟悉)传输文件 ...
 - Day1-python基础1
			
本次学习内容 Python介绍 发展史 版本选择 install 第一个程序hello world 字符编码及注释 变量 用户输入 表达式if...else 一.Python介绍 1)Python由来 ...
 - PostgreSQL Apt Repository
			
PostgreSQL Apt Repository If the version included in your version of Ubuntu is not the one you want, ...
 - java.lang.NoClassDefFoundError:org/apache/commons/lang/exception/NestableRuntimeException错误的解决
			
java.lang.NoClassDefFoundError 是运行时jvm找不到对应类.这种情况是少包的导致的.根据提示语添加对应的jar包就可以. 感叹一下:maven真是一个伟大的东西,在包的依 ...
 - SDL 1.2.15 issue
			
SDL 1.2.15中,对于X11的函数,默认采用动态加载的方式 但相应的X11函数名在SDL中并没有重新命名(SDL2中都添加了前缀X11_) 这样在SDL与其他库混合静态编译链接时,X11的函数就 ...
 - 调试使用windows堆程序遇到的问题
			
今天测试我的api hook demo,中间有个单向链表,我对他进行遍历的时候,通过判断链表当前元素是否为NULL(即0)来进行循环控制,在cmd下正常运行,输出的是:,struct addr is ...
 - UI第十一节——UIActivityIndicatorView
			
- (void)viewDidLoad { [super viewDidLoad]; // 创建一个UIActivityIndicatorView,大小是固定的 UIActi ...