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--基础学习(五)参数位置传递、关键字传递、包裹传递及解包裹的更多相关文章

  1. Python基础学习五

    Python基础学习五 迭代 for x in 变量: 其中变量可以是字符串.列表.字典.集合. 当迭代字典时,通过字典的内置函数value()可以迭代出值:通过字典的内置函数items()可以迭代出 ...

  2. Python基础学习五 内置模块

    time 模块 1 >>> import time 2 >>> time.time() 3 1491064723.808669 4 >>> # t ...

  3. 【Python基础学习五】列表,元祖,字典

    1.列表(list) 列表是Python的一种内置数据类型,list是一种有序的集合,可以随时添加和删除其中的元素,就像动态数组一样.获取list中的元素用角标获取,角标可以使用正角标,也可以使用负角 ...

  4. Python基础学习五 内置函数

    1.函数补充: 1)函数返回值return可以有多个 2)补充示例: nums = [0,1,2,3,4,5,6,7,8] #如何将list里面的元素变为字符串类型 new_nums = [str(x ...

  5. python基础学习10

    python基础学习 内容概要 文件内光标的移动 文件数据修改 函数简介 函数语法结构 内容详情 文件内光标的移动 with open(r'路径','r',encoding='utf8') as f: ...

  6. python基础——函数的参数

    python基础——函数的参数 定义函数的时候,我们把参数的名字和位置确定下来,函数的接口定义就完成了.对于函数的调用者来说,只需要知道如何传递正确的参数,以及函数将返回什么样的值就够了,函数内部的复 ...

  7. (一)python基础学习

    根据廖雪峰老师的python教程写一些学习总结! Python基础学习 1.使用list和tuple (1)list Python内置的一种数据类型是列表:list.list是一种有序的集合,可以随时 ...

  8. Day1 Python基础学习

    一.编程语言分类 1.简介 机器语言:站在计算机的角度,说计算机能听懂的语言,那就是直接用二进制编程,直接操作硬件 汇编语言:站在计算机的角度,简写的英文标识符取代二进制去编写程序,本质仍然是直接操作 ...

  9. Day1 Python基础学习——概述、基本数据类型、流程控制

    一.Python基础学习 一.编程语言分类 1.简介 机器语言:站在计算机的角度,说计算机能听懂的语言,那就是直接用二进制编程,直接操作硬件 汇编语言:站在计算机的角度,简写的英文标识符取代二进制去编 ...

  10. Python基础学习总结(六)

    8.函数 函数是带名字的代码块,用于完成具体的工作.def函数定义,指出函数名.定义函数的时候,我们把参数的名字和位置确定下来,函数的接口定义就完成了.对于函数的调用者来说,只需要知道如何传递正确的参 ...

随机推荐

  1. LCS问题

    最长公共子序列问题 1.这里pre数组表示回溯的方式,状态转移方程!!! #include <iostream> #include <algorithm> #include & ...

  2. HTML5全局属性和事件详解

    属性: HTML5属性能够赋给标签元素含义和语境,下面的全局属性可用于任何 HTML5 元素. 属性 描述 contenteditable 规定是否允许用户编辑内容. contextmenu 规定元素 ...

  3. CUDA程序设计(一)

    为什么需要GPU 几年前我启动并主导了一个项目,当时还在谷歌,这个项目叫谷歌大脑.该项目利用谷歌的计算基础设施来构建神经网络. 规模大概比之前的神经网络扩大了一百倍,我们的方法是用约一千台电脑.这确实 ...

  4. 使用 zssh 进行 Zmodem 文件传输

    Zmodem 最早是设计用来在串行连接(uart.rs232.rs485)上进行数据传输的,比如,在 minicom 下,我们就可以方便的用 Zmodem (说 sz .rz 可能大家更熟悉)传输文件 ...

  5. Day1-python基础1

    本次学习内容 Python介绍 发展史 版本选择 install 第一个程序hello world 字符编码及注释 变量 用户输入 表达式if...else 一.Python介绍 1)Python由来 ...

  6. PostgreSQL Apt Repository

    PostgreSQL Apt Repository If the version included in your version of Ubuntu is not the one you want, ...

  7. java.lang.NoClassDefFoundError:org/apache/commons/lang/exception/NestableRuntimeException错误的解决

    java.lang.NoClassDefFoundError 是运行时jvm找不到对应类.这种情况是少包的导致的.根据提示语添加对应的jar包就可以. 感叹一下:maven真是一个伟大的东西,在包的依 ...

  8. SDL 1.2.15 issue

    SDL 1.2.15中,对于X11的函数,默认采用动态加载的方式 但相应的X11函数名在SDL中并没有重新命名(SDL2中都添加了前缀X11_) 这样在SDL与其他库混合静态编译链接时,X11的函数就 ...

  9. 调试使用windows堆程序遇到的问题

    今天测试我的api hook demo,中间有个单向链表,我对他进行遍历的时候,通过判断链表当前元素是否为NULL(即0)来进行循环控制,在cmd下正常运行,输出的是:,struct addr is ...

  10. UI第十一节——UIActivityIndicatorView

    - (void)viewDidLoad {    [super viewDidLoad];        // 创建一个UIActivityIndicatorView,大小是固定的    UIActi ...