python中函数的参数传递

栏目: Python · 发布时间: 5年前

内容简介:1、形参:即形式参数,它是在定义函数名和函数体时使用的参数,目的是接收调用该函数传递参数。在sum函数中a和b就是形参。第四行10和20就是实参当调用函数时传入的参数位置是和定义函数的参数位置相对应,当使用位置参数传递时,调用韩式传入的参数数量要和定义函数参数的数量相同,否则程序会出错。这也是函数默认的传递方式

1、形参:即形式参数,它是在定义函数名和函数体时使用的参数,目的是接收调用该函数传递参数。 2、实参: 即实际参数,它是在调用时传递给函数的参数,传递给被调用函数的值。实参可以是常量、变量、表达式、函数等,但无论是哪种类型,在进行函数调用时必须具有确定的值,这些值会传递给形参。

下面用一段代码具体说明形参和实参

def sum(a,b):
    retutn a+b
    
sum(10,20)

复制代码

在sum函数中a和b就是形参。第四行10和20就是实参

函数传递方式如下

1、位置参数传递

当调用函数时传入的参数位置是和定义函数的参数位置相对应,当使用位置参数传递时,调用韩式传入的参数数量要和定义函数参数的数量相同,否则程序会出错。这也是函数默认的传递方式 观察如下代码 fun_01:

def fun_01(a,b,c):
    return a,b,c

print(fun_01(1,2,3))
复制代码

运行结果:

(1,2,3)
复制代码

fun_02:

def fun_02(a,b,c):
    return c,b,a

print(fun_01(1,2,3))
复制代码

运行结果:

(3,2,1)
复制代码

上面两个函数在定义时参数名是一样的,并且在调用时传入的参数也是一样的,但返回的结果却不同。这是由于当函数调用时,传入的参数位置和定义的函数参数位置相对应,当调用函数传入参数那一刻,函数的参数值就已经确定了,至于输出结果的顺序是由于return返回值的顺序决定的。

2、关键字参数传递

假设某个函数的参数非常复杂,为了不让程序出错,我们可以把参数的名称和值绑定在一起,使用参数名提供的参数叫作关键字参数 观察如下代码 fun_01:

def connect(url,port):
    return 'url is %s,and port is %s'%(url,port)

print(connect(url='www.baidu.com',port='80'))
复制代码

运行结果:

url is www.baidu.com,and port is 80
复制代码

注:

  1. 使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为 python 解释器能够用参数名匹配参数值
  2. 关键字参数可以和位置参数混合使用,但位置参数必须要出现在关键字参数之前

3、参数默认值

在定义函数时,可以给参数赋予默认值,如果该参数最终没有被传递值,将使用该默认值 观察如下代码

def sum(a,b,c=20):
    retutn a+b+c
    
sum(10,20)

复制代码

运行结果:

50
复制代码

注:参数c使用了默认值

4、可变参数

在python中函数可以定义可变参数,即传入函数的参数是可变的 语法格式如下:

def functionname([formal_args,]*args,**kwargs):
    function_sutite
    return [expression]
复制代码

说明:在上述格式中,以星号(*)开始的变量args会存放所有的未命名的变量参数,args为元组;以**开始的变量kwargs会存放命名参数,即形如key=value的参数,kwargs为字典。 观察如下代码

def test(*args,**kwargs):
   print(args)
   print(kwargs)
test(1,2,3,a=4,b=5)
复制代码

运行结果:

(1,2,3)
{'a':4,'b':5}
复制代码

注:如果*和**参数混合使用,那么传入的顺序必须和声明的顺序一致,如果调用函数时没有指定参数,那么它就是一个空的元组或者空的字典 对*和**总结:

  • 使用*可以将未命名的参数打包成元组类型

  • 使用**可以将命名的参数打包成字典类型

5、解包裹

所谓解包裹就是在调用函数时使用*和**。但是解包裹课可变参数传递并不是相反的操作,他们是两个独立的过程

观察如下代码

*解元组类型

def test(a,b,c):
   print(a,b,c)

args=(1,2,3)
test(*args)
复制代码

运行结果:

1 2 3
复制代码

**解字典类型

def test(a,b,c):
   print(a,b,c)

kwargs=('a':1,'b':2,'c':3)
test(**kwargs)
复制代码

运行结果:

1 2 3
复制代码

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

深入浅出数据分析

深入浅出数据分析

Michael Milton / 李芳 / 电子工业出版社 / 2009 / 88.00元

《深入浅出数据分析》以类似“章回小说”的活泼形式,生动地向读者展现优秀的数据分析人员应知应会的技术:数据分析基本步骤、实验方法、最优化方法、假设检验方法、贝叶斯统计方法、主观概率法、启发法、直方图法、回归法、误差处理、相关数据库、数据整理技巧;正文以后,意犹未尽地以三篇附录介绍数据分析十大要务、R工具及ToolPak工具,在充分展现目标知识以外,为读者搭建了走向深入研究的桥梁。 本书构思跌宕......一起来看看 《深入浅出数据分析》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

MD5 加密
MD5 加密

MD5 加密工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器