python基础——函数参数
课上老师已经讲过函数(func)的参数(args)传递。
之前学习了根据位置传递对应的参数,下面会介绍其他参数传递方式。
之前的位置传参:
def f(a,b,c):
return a+b+c print(f(1,2,3))
在调用f时,1,2,3根据位置分别传递给了a,b,c。
关键字传递
有些情况下,用位置传递会感觉比较死板。关键字(key)传递是根据每个参数的名字传递参数。关键字并不用遵守位置的对应关系。依然沿用上面f的定义,更改调用方式:
print(f(c=3,b=2,a=1))
关键字传递可以和位置传递混用。但位置参数要出现在关键字参数之前:
print(f(1,c=3,b=2))
参数默认值
在定义函数的时候,使用形如a=19的方式,可以给参数赋予默认值(default)。如果该参数最终没有被传递值,将使用该默认值。
def f(a,b,c=10):
return a+b+c print(f(3,2))
print(f(3,2,1))
在第一次调用函数f时, 我们并没有足够的值,c没有被赋值,c将使用默认值10.
第二次调用函数的时候,c被赋值为1,不再使用默认值。
包裹传递
在定义函数时,我们有时候并不知道调用的时候会传递多少个参数。这时候,包裹(packing)位置参数,或者包裹关键字参数,来进行参数传递,会非常有用。
下面是包裹位置传递的例子:

def func(*name):
print type(name)
print name func(1,4,6)
func(5,6,7,1,2,3)

两次调用,尽管参数个数不同,都基于同一个func定义。在func的参数表中,所有的参数被name收集,根据位置合并成一个元组(tuple),这就是包裹位置传递。
为了提醒Python参数,name是包裹位置传递所用的元组名,在定义func时,在name前加*号。
下面是包裹关键字传递的例子:

def func(**dict):
print type(dict)
print dict func(a=1,b=9)
func(m=2,n=1,c=11)

与上面一个例子类似,dict是一个字典,收集所有的关键字,传递给函数func。为了提醒Python,参数dict是包裹关键字传递所用的字典,在dict前加**。
包裹传递的关键在于定义函数时,在相应元组或字典前加*或**。
解包裹
*和**,也可以在调用的时候使用,即解包裹, 下面为例:
def func(a,b,c):
print a,b,c args = (1,3,4)
func(*args)
在这个例子中,所谓的解包裹,就是在传递tuple时,让tuple的每一个元素对应一个位置参数。在调用func时使用*,是为了提醒Python:我想要把args拆成分散的三个元素,分别传递给a,b,c。(设想一下在调用func时,args前面没有*会是什么后果?)
相应的,也存在对词典的解包裹,使用相同的func定义,然后:
dict = {'a':1,'b':2,'c':3}
func(**dict)
在传递词典dict时,让词典的每个键值对作为一个关键字传递给func。
混合
在定义或者调用参数时,参数的几种传递方式可以混合。但在过程中要小心前后顺序。基本原则是,先位置,再关键字,再包裹位置,再包裹关键字,并且根据上面所说的原理细细分辨。
注:
注意定义时和调用时的区分。包裹和解包裹并不是相反操作,是两个相对独立的过程。
python基础——函数参数的更多相关文章
- Python基础-函数参数
		
Python基础-函数参数 写在前面 如非特别说明,下文均基于Python3 摘要 本文详细介绍了函数的各种形参类型,包括位置参数,默认参数值,关键字参数,任意参数列表,强制关键字参数:也介绍了调用函 ...
 - python基础——函数的参数
		
python基础——函数的参数 定义函数的时候,我们把参数的名字和位置确定下来,函数的接口定义就完成了.对于函数的调用者来说,只需要知道如何传递正确的参数,以及函数将返回什么样的值就够了,函数内部的复 ...
 - python基础—函数嵌套与闭包
		
python基础-函数嵌套与闭包 1.名称空间与作用域 1 名称空间分为: 1 内置名称空间 内置在解释器中的名称 2 全局名称空间 顶头写的名称 3 局部名称空间 2 找一个名称的查找顺序: ...
 - python基础—函数装饰器
		
python基础-函数装饰器 1.什么是装饰器 装饰器本质上是一个python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能. 装饰器的返回值是也是一个函数对象. 装饰器经常用于有切 ...
 - (转)python中函数参数中如果带有默认参数list的特殊情况
		
在python中函数参数中如果带有默认参数list遇到问题 先看一段代码 1 2 3 4 5 6 7 8 9 def f(x,l=[]): for i in range(x): ...
 - python基础,函数,面向对象,模块练习
		
---恢复内容开始--- python基础,函数,面向对象,模块练习 1,简述python中基本数据类型中表示False的数据有哪些? # [] {} () None 0 2,位和字节的关系? # ...
 - 速战速决 (3) - PHP: 函数基础, 函数参数, 函数返回值, 可变函数, 匿名函数, 闭包函数, 回调函数
		
[源码下载] 速战速决 (3) - PHP: 函数基础, 函数参数, 函数返回值, 可变函数, 匿名函数, 闭包函数, 回调函数 作者:webabcd 介绍速战速决 之 PHP 函数基础 函数参数 函 ...
 - python中函数参数的引用方式
		
值传递和引用传递时C++中的概念,在python中函数参数的传递是变量指向的对象的物理内存地址!!! python不允许程序员选择采用传值还是传引用.Python参数传递采用的肯定是“传对象引用”的方 ...
 - Python基础(函数,函数的定义,函数的调用,函数的参数,递归函数)
		
1.函数 我们知道圆的面积计算公式为: S = πr2 当我们知道半径r的值时,就可以根据公式计算出面积.假设我们需要计算3个不同大小的圆的面积: r1 = 12.34 r2 = 9.08 r3 = ...
 
随机推荐
- 网页中多一些常见效果之伸缩菜单(主要是学习js的书写方法)
			
效果如下图: 代码很简单,如下: <!doctype html> <html lang="en"> <head> <meta charse ...
 - 汇编里的IMPORT和EXPORT
			
IMPORT ,定义表示这是一个外部变量的标号,不是在本程序定义的EXPORT ,表示本程序里面用到的变量提供给其他模块调用的.以上两个在汇编和C语言混合编程的时候用到刚看到一篇不错的BLOG,解说C ...
 - STM32在程序运行过程中关闭定时器重新打开后定时器不工作的问题
			
问题:数码管显示程序放在定时TIM2中断函数里面扫描,想要实现在关闭某一功能的时候数码管不显示. 刚开始的想法是开关关闭,关闭定时器时钟:开关打开,打开定时器时钟:(但实验证明再次打开开关时定时器2却 ...
 - rxjs1
			
<li *ngFor="let fruit of fruitsList; let i = index;">{{i}}-{{fruit.name}}-{{fruit.pr ...
 - [na]整一下博客面貌--cnblog css定制
			
前言 之前觉得cnblog排版乱. 而csdn对word兼容性较好一些.所以就转到csdn了. 后来看到别人的cnblog排版挺好,如 等效果. 参考资料 http://www.cnblogs.com ...
 - Gradle build.gradle to Maven pom.xml ,终于找到你了。
			
尊重原创:https://blog.csdn.net/kevin_luan/article/details/50996109 根据build.gradle 生成maven pox.xml 1.将以下配 ...
 - 如何在Linux下统计高速网络中的流量
			
参考: http://www.geekfan.net/5558/ http://blog.jobbole.com/23638/ http://www.csdn.net/article/2014-03- ...
 - NGINX扩展
			
https://github.com/cuber/ngx_http_google_filter_module
 - string 的函数
			
string 有一个很好用到函数:substr(index). 去掉前index个字符.
 - java编写提升性能的代码
			
1.ConcurrentHashMap是Java 5中支持高并发.高吞吐量的线程安全HashMap实现,既兼顾安全,又保证高并发,HashMap的升级版本,建议使用. 2.List中的三种循环方法:迭 ...