Python进阶04函数的参数对应

我们已经接触过函数(function)的参数(arguments)传递。当时我们根据位置,传递对应的参数。我们将接触更多的

参数传递方式。

回忆一下位置传递:

def f(a,b,c):

  return a+b+c

print(f(1,2,3))

在调用f时,1,2,3 根据位置分别传递了 a,b,c

关键字传递

有些情况下,用位置传递会感觉比较死板。关键字(keyword)传递是根据每个参数的名字传递参数。关键字并不用遵守

位置的对应关系,依然沿用上面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前加**

包裹传递的关键在与定义函数时,在相应的元组或字典前加*或**。

解包裹

*和** ,也可以在调用的时候使用,即解包裹(unpacking),下面为例:

def func(a,b,c):

  print a,b,c

args = (1,3,4)

func(*args)

在这个例子中,所谓的解包裹,就是在传递tuple时,让tuple的每一个元素对应一个位置参数。在调用func时使用*,

是为了提醒Python:我想要把args拆成分散的三个元素,分别传递给a,b,c

相应的,也存在对词典的解包裹,使用相同的func定义,然后:

dict = { ‘a‘:1,‘b‘:2,‘c‘"3}

func(**dict)

在传递词典dict时,让词典的每个键值对作为一个关键字传递给func.

混合

在定义或者调用参数时,参数的几种传递方式可以混合。但在过程中要小心前后顺序。基本原则是,先位置,在关键字,

在包裹位置,在包裹关键字,并且根据上面所说的原理细细分辨

注意:请注意定义时和调用时的区分。包裹和解包裹并不是相反操作,是两个相对独立的过程。

原文地址:https://www.cnblogs.com/simadongyang/p/8228498.html

时间: 2024-10-11 22:27:24

Python进阶04函数的参数对应的相关文章

Python进阶04 函数的参数对应

Python进阶04 函数的参数对应 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 我们已经接触过函数(function)的参数(arguments)传递.当时我们根据位置,传递对应的参数.我们将接触更多的参数传递方式. 回忆一下位置传递: def f(a,b,c): return a+b+c print(f(1,2,3)) 在调用f时,1,2,3根据位置分别传递给了a,b,c. 关键字传递 有些情况下,用位置传递会感觉比较

python 复习 4-1 函数、参数、返回值、递归

函数 完成特定功能的一个语句组,这个语句组可以作为一个单位使用,并且给它组语句取一个名子,即函数名 可以通过函数名在程序不同地方多次执行,即函数调用 预定义函数(可以直接使用) 自定义函数(自编写的) 函数的定义: def 函数句([参数列表]): //定义 ``` def hello (): print(hello world) #### 函数的调用: - 函数名([参数列表]) //调用 hello() #### 函数的参数: 形式参数和实际参数 - 在定义函数时,函数名后面的括号中的变量名

python基础之函数(动态参数,注释,名称空间,第一类对象及使用和函数嵌套)

函数的动态参数 1.函数的动态参数 位置参数,默认参数 动态参数的作用 *args ? 1.能够接受不固定长度参数 ? 2.位置参数过多时可以使用动态参数 动态参数的用法: def func(*c): #形参位置上的 * 是聚会 print(*c) #函数体中的 * 就是打散 #func(1,2,3,4,5,6,7,8,9,0) **def eat(a,b,*args): #位置参数,动态位置参数** print(a,b,args) #结果:面条 包子 ('饺子', '馅饼', '馒头') pr

python学习 04 函数参数

1.参数可以传递元组,但是要加* 2.参数可以传递字典,但是要加**

Python进阶07 函数对象

作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 秉承着一切皆对象的理念,我们再次回头来看函数(function).函数也是一个对象,具有属性(可以使用dir()查询).作为对象,它还可以赋值给其它对象名,或者作为参数传递. lambda函数 在展开之前,我们先提一下lambda函数.可以利用lambda函数的语法,定义函数.lambda例子如下: func = lambda x,y: x + yprint func(3,4)

python中定义函数和参数的传递问题

作者:達聞西链接:https://zhuanlan.zhihu.com/p/24162430来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 5.2.4 函数.生成器和类 还是从几个例子看起: def say_hello(): print('Hello!') def greetings(x='Good morning!'): print(x) say_hello() # Hello! greetings() # Good morning! greetings("Wh

Python 进阶 之 函数对象

Python的世界里,万物皆对象,函数当然也是: 首先要定义一个函数: def add(a,b): print a+b 其次定义一个字典来引用该函数: dic = {"add":add} 使用该对象: dic["add"](2,3) 结果: >>> def add(a,b): ... print a+b ... >>> dic = {"add":add} >>> dic["add&q

python学习:函数传参数

#!/usr/bin/python import sys def isNum(s): for i in s: if i in '0123456789': pass else: print "%s is not a number" %s sys.exit() else: print "%s is a number" %s isNum(sys.argv[1]) //函数判断是否为数字 执行结果: python 12.py aa aa is not a number [[

python笔记04函数

加了星号(*)的变量args会存放所有未命名的变量参数,args为元组:而加**的变量kwargs会存放命名参数,即形如key=value的参数, kwargs为字典. >>> def fun(a, b, *args, **kwargs): ... """可变参数演示示例""" ... print "a =", a ... print "b =", b ... print "ar