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

本节主要内容

函数的形式参数和实际参数

函数的参数定义规则

函数参数的默认值

函数的可变参数

函数的关键字参数

函数的命名关键字参数

1.3. 函数的参数

1.3.1 函数的形式参数和实际参数

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

形式参数:其实就是定义函数时,函数括号中的变量,形式参数的意义是当前函数如果要被调用执行,就必须让函数接收括号中定好的参数才能正常执行,就是形式上需要这些数据才能执行函数,所以称为形式参数

实际参数:实际参数是我们在通过函数名称调用函数时,在括号中传递的真实数据;实际传递给函数用于执行的数据,称为实际参数

形式参数和实际参数的具体关系如下图所示:

1.3.2. 函数的参数定义规则

函数通过def进行定义,用于执行一个功能,一个函数,可以需要参数,也可以不需要参数。

类似我们现实生活,执行一个功能就是做一件事情,做这件事情需要的资源就是参数,去做一件事情,有些需要资源,有些是不需要资源的。

所以!

规则1:如果我们的程序中出现了一部分功能代码重复执行,就需要封装一个函数来减少代码的重复量

规则2:根据代码执行是否需要其他额外的数据,需要额外的几个数据就定义几个参数,不需要额外的数据就不定义参数

规则3:实际参数可以传递任意对象(python中一切皆对象)

1.3.3. 函数参数默认值

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

# 重新定义函数,给参数设置默认值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提供了一种可变参数,可以完美的解决这个问题

可变参数,是在形式参数前面加一个*符号作为标识

# 定义一个函数,用于打印多个数据

def printMsg(*msgs) :

for x in msgs:

print(x);

printMsg("tom");

printMsg("tom", "jerry");

printMsg("tom", "jerry", "shuke");

# 以上三个函数调用,都是可以正常执行的

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

可变参数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`在函数中打印的结果如下:

print (msgs);

执行结果:("tom", "jerry")

######1.3.5. 特殊的用法:关键字参数

将传递给函数的参数,解析成dict字典的形式,也就是key:value键值对的形式,这就是关键字参数的意义,更加方便可变参数的操作

关键字参数,使用两个\*\*符号来声明关键字参数

def printMsg(**msgs) :

print(msgs);

printMsg(name="jerry", age=18);

函数中打印结果:{name:"jerry", age:18}

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

定义具有命名关键字的参数

def printMsg(name, age, *, province, city):

print(name, age, province, city);

调用时需要传递具体的参数

printMsg("tom", 18, province="HN", city="ZZ");

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

下面的函数,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中的函数参数问题,下一节继续介绍函数的返回值处理

---

![大牧莫邪.png](http://upload-images.jianshu.io/upload_images/5988045-cc086acf5134c20e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

python函数的参数可以接收哪些类型的数据_python强势来袭-0015-函数中的参数-送礼开始...相关推荐

  1. python函数的参数可以接收哪些类型的数据_Python参数类型以及实现isOdd函数,isNum函数,multi函数,isPrime函数...

    Python参数类型以及实现isOdd函数,isNum函数,multi函数,isPrime函数 一.Python参数类型 形参:定义函数时的参数变量. 实参:调用函数时使用的参数变量. 参数传递的过程 ...

  2. C语言学习之用函数处理,而且用指针类型的数据作函数参数,对输入的两个整数按大小顺序输出

    对输入的两个整数按大小顺序输出.用函数处理,而且用指针类型的数据作函数参数. int main(){void swap(int *p1,int *p2);//声明swap函数 int a,b;int ...

  3. python基础语法中处理一组数据所使用的类型有哪些_python基本数据预处理语法函数(2)...

    1.字符串格式化方法format的用法: < ^ > #分别为左对齐.居中.右对齐 '{:>18,.2f}'.format(70305084.0) #:冒号+空白填充+右对齐+固定宽 ...

  4. python使用什么函数接收用户输入的数据_python 3.x:调用和执行函数的用户输入...

    有许多类似的问题,但没有一个答案解决了我的问题. 我定义了几个解析大型数据集的函数.首先,我调用数据,然后将数据(在.txt中表示为行和列)组织到列表中,我将为各个数据条目编制索引.在此之后,我建立了 ...

  5. python中所有元素必须为相同类型的数据_Python之常用数据类型详解

    tuple 元组 1 #定义 2 temp = (2, ) #规范定义,单个元素的元组 3 tem = 2, #可行,但不规范定义 4 tep = () #空元组 5 6 tp = (1, 'ss', ...

  6. python列表高级操作_python强势来袭-0019-列表循环高级操作

    在前面的课程中,我们已经学习了循环和函数的基本操作,这节内容主要针对循环和函数在项目使用过程中的一些更加有使用价值的操作进行分析和讲解 本节内容: 循环部分 列表构建器 列表动态构建器 循环操作序列对 ...

  7. oracle 执行带参数的sql语句_当用EXECUTE IMMEDIATE执行SQL语句中的参数个数也是动态的?用什么方法实现?...

    当用EXECUTE IMMEDIATE执行SQL语句中的参数个数也是动态的?用什么方法实现? 描述详细一点就是:在要执行的SQL语句中所用到(: parameter)这种参数的个数,因具体条件不同,而 ...

  8. python操作csv文件第7行开始的数据_Python教程-Python读写CSV文件

    前言 本教程学习在Python中使用CSV文件.CSV(逗号分隔值)格式是在电子表格和数据库中使用的非常流行的导入和导出格式.Python语言包含该模块,该模块具有用于读取和写入CSV格式的数据的类. ...

  9. list可以存放python中任意类型的数据_Python中常见的数据类型小结

    Python提供多种数据类型来存放数据项集合,主要包括序列(列表list和元组tuple),映射(如字典dict),集合(set),下面对这几种一一介绍: 一 序列 1.列表list 列表是一种有序的 ...

最新文章

  1. ORB-SLAM2从理论到代码实现(三):ORB特征提取和匹配理论和代码详解
  2. 学术 | DeepMind最新研究:使用更简单的环境就能检测AI是否安全
  3. 钉钉日志范文100篇_看图写话范文328:暑假旅行(4篇)
  4. 修正 IE 的双倍页边距 bug
  5. 未付服务网关限流作用
  6. 前端学习(3278):循环 遍历
  7. LC-BLSTM结构快速解读
  8. python字母变成数字怎么办_在Python中将字母转换为数字
  9. A*B Problem(洛谷-P1303)
  10. 【C语言】文件操作及输入输出格式(文件常用的库函数)
  11. python beautifulsoup报错bs4 FeatureNotFound Couldnot find a tree builder with the features
  12. erlang四大behaviour之四-supervisor(转载)
  13. 2019西北工业大学程序设计创新实践基地春季选拔赛(重现赛) CEGHI 题解
  14. 次世代3D游戏建模高效技巧,高薪不会跑!
  15. OA办公自动化系统设计方案
  16. 什么是monitor
  17. 两平面平行但不重合的条件是_____怎样证明平行
  18. mysql时间串工具_时间戳_时间戳转换工具_阿波罗查询
  19. 数位dp真·浅谈 By cellur925
  20. 微型计算机常见接口设备,微型计算机的外部设备和内部设备各有哪些?

热门文章

  1. Android笔记 解析xml文件demo
  2. 深度学习经典算法 | 蚁群算法解析
  3. java awt 边距_Java Swing - 使用Line Border在TextArea上设置边距
  4. html 给照片添加圆角属性,CSS3新增属性(背景图、边框背景、圆角)
  5. mysql面向对象例子_PHP 面向对象实例:获取数据库用户数据
  6. Java基础04 编译与反编译
  7. pytorch 学习率代码_DL知识拾贝(Pytorch)(五):如何调整学习率
  8. java 云笔记本_java版云笔记(五)
  9. 【NLP】毕业设计学习笔记(三):bert_bi-lstm代码解读
  10. Typora+PicGo+SMMS、github、gitee实现Typora图片上传到图床