前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >14.程序编程进阶:函数的参数

14.程序编程进阶:函数的参数

作者头像
大牧莫邪
发布2018-08-27 16:41:58
4400
发布2018-08-27 16:41:58
举报
文章被收录于专栏:我和PYTHON有个约会

接上一讲,这节我们专门介绍python函数的参数处理

本节主要内容

  • 函数的形式参数和实际参数
  • 函数的参数定义规则
  • 函数参数的默认值
  • 函数的可变参数
  • 函数的关键字参数
  • 函数的命名关键字参数
1.3. 函数的参数
1.3.1 函数的形式参数和实际参数

函数的参数主要会涉及到两个概念:形式参数、实际参数

  • 形式参数:其实就是定义函数时,函数括号中的变量,形式参数的意义是当前函数如果要被调用执行,就必须让函数接收括号中定好的参数才能正常执行,就是形式上需要这些数据才能执行函数,所以称为形式参数
  • 实际参数:实际参数是我们在通过函数名称调用函数时,在括号中传递的真实数据;实际传递给函数用于执行的数据,称为实际参数 形式参数和实际参数的具体关系如下图所示:

形式参数和实际参数的关系

1.3.2. 函数的参数定义规则

函数通过def进行定义,用于执行一个功能,一个函数,可以需要参数,也可以不需要参数。 类似我们现实生活,执行一个功能就是做一件事情,做这件事情需要的资源就是参数,去做一件事情,有些需要资源,有些是不需要资源的。

所以! 规则1:如果我们的程序中出现了一部分功能代码重复执行,就需要封装一个函数来减少代码的重复量 规则2:根据代码执行是否需要其他额外的数据,需要额外的几个数据就定义几个参数,不需要额外的数据就不定义参数 规则3:实际参数可以传递任意对象(python中一切皆对象)

1.3.3. 函数参数默认值

某些时候,我们可以给函数的参数定义默认值,这样函数在调用过程中,如果某些参数没有传递,就直接使用默认值来执行函数代码了,函数默认参数确定比较简单,直接在形式参数上赋值就可以

代码语言:javascript
复制
# 重新定义函数,给参数设置默认值5
def getCircleArea(pi=3.1415, radius=5) :
    a = pi * (radius ** 2);
    return a;

# 调用函数计算圆面积,不传递参数,使用默认值
a1 = getCircleArea();
# 调用函数,传递参数进行计算
a2 = getCircleArea(3.14, 3);
# 调用函数,给第二个参数传递数据进行计算
a3 = getCircleArea(radius=8);
1.3.4. 函数的可变参数

在某些情况下, 函数的参数个数不是确定的,这样在常规定义函数时就木有办法进行形式参数的定义了。 python提供了一种可变参数,可以完美的解决这个问题 可变参数,是在形式参数前面加一个*符号作为标识

代码语言:javascript
复制
# 定义一个函数,用于打印多个数据
def printMsg(*msgs) :
    for x in msgs:
        print(x);

printMsg("tom");
printMsg("tom", "jerry");
printMsg("tom", "jerry", "shuke");
# 以上三个函数调用,都是可以正常执行的

注意,在某些特殊情况下,函数的可变参数放在了固定参数的前面;此时函数的调用就需要通过变量名称指定数据了(这个也成为命名关键字参数,后面的内容中有单独介绍)

代码语言:javascript
复制
# 可变参数msgs放在固定参数name的前面了
def printMsg(*msgs, name) :
  print (name);
  print(msgs);
  for x in msgs:
      print("-->" + x);
# 普通调用,出现错误
# 函数中的参数都被可变参数接收了,name就木有可以接收的数据了
printMsg("tom", "jerry");
# 必须如下方式调用才可以;指定name参数传递数据
printMsg("tom", "jerry", name="shuke");

可变参数是将传入函数的多个参数,自动封装成了一个tuple字典,也就是一组数据来使用。 上面的可变参数*msgs在函数中打印的结果如下:

代码语言:javascript
复制
print (msgs);
执行结果:("tom", "jerry")
1.3.5. 特殊的用法:关键字参数

将传递给函数的参数,解析成dict字典的形式,也就是key:value键值对的形式,这就是关键字参数的意义,更加方便可变参数的操作 关键字参数,使用两个**符号来声明关键字参数

代码语言:javascript
复制
def printMsg(**msgs) :
    print(msgs);

printMsg(name="jerry", age=18);
函数中打印结果:{name:"jerry", age:18}

注意,关键字参数,还可以指定只能传递什么样的名称为参数名称,就是命名关键字参数。命名关键字参数通过*符号作为分隔符号,符号后面的参数就是命名关键字参数

代码语言:javascript
复制
# 定义具有命名关键字的参数
def printMsg(name, age, *, province, city):
    print(name, age, province, city);
# 调用时需要传递具体的参数
printMsg("tom", 18, province="HN", city="ZZ");

另外一种情况,就是在可变参数的后面,添加的参数都是命名关键字参数,这里的命名关键字参数就不需要*符号分隔了

代码语言:javascript
复制
# 下面的函数,province和city两个参数是放在可变参数*args后面的
# 就是制定的命名关键字参数,在前面可变参数部分有提到
def printMsg(name, age, *args, province, city):
    函数中的执行代码
# 此时函数的调用如下
printMsg("tom", 19, "tom is a cat", province="HZ", city="ZZ");

扩展:函数中的参数,根据传递的参数的顺序、参数类型的不同,会有各种不同的组合方式,如传递[字符串、字符串]、[字符串、字符串...]、[字符串、数值..]、[数值、函数...]等等各种各样的情况,但是我们有了可变参数*args和命名关键字参数**kw之流的出现,让函数参数的接收变得比较简单。 我们可以通过(*args, **kw)的形式来接收任何形式的参数

本节内容主要介绍python中的函数参数问题,下一节继续介绍函数的返回值处理


本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017.05.16 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.3. 函数的参数
    • 1.3.1 函数的形式参数和实际参数
      • 1.3.2. 函数的参数定义规则
        • 1.3.3. 函数参数默认值
          • 1.3.4. 函数的可变参数
            • 1.3.5. 特殊的用法:关键字参数
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档