Python3笔记027 - 6.2 参数传递
第6章 函数
6.2 参数传递
在理解形参和实参的基础上,理解位置参数、关键字参数、可变参数这三种情形,以及这三种的混合情形。
6.2.1 形式参数和实际参数
形式参数:在定义函数时,函数名后面括号中的参数称为“形式参数”,简称“形参”
# 定义plus函数, a和b是形参
def plus(a, b):
result = a - b
return result
实际参数:在调用一个函数时,函数名后面括号中的参数为“实际参数”,简称“实参”
# 调用plus函数,4和3是实参
result1 = plus(4, 3)
print(result1)
6.2.2 位置参数
调用函数时,实参的数量和位置必须和定义函数时形参的数量和位置是一致的;
'''
定义函数时,定义了两个参数a和b。调用函数时,传入两个实参3和4,完全满足函数调用时参数要求。
'''
# 定义plus函数
def plus(a, b):
result = a - b
return result
# 调用plus函数,传入2个参数,正常
result1 = plus(4, 3)
print(result1)
output:1
# 调用plus函数时传入1个实参,报错
result1 = plus(4)
print(result1)
output:
TypeError: plus() missing 1 required positional argument: 'b'
# 调用plus函数时传入3个实参,报错
result1 = plus(4, 3, 5)
print(result1)
output:
TypeError: plus() takes 2 positional arguments but 3 were given
6.2.3 关键字参数
关键字参数是指使用形式参数的名字来确定输入的参数值。通过这种方式指定实际参数时,不再需要与形式参数的位置完全一致,只要将参数名写正确即可。
'''
调用函数时,传入实参(b=3, a=4),可不与函数定义时的参数位置一致。
'''
# 定义plus函数
def plus(a, b):
result = a - b
return result
# 调用plus函数
result1 = plus(b=3, a=4)
print(result1)
output:1
6.2.4 定义函数时为形式参数设置默认值,称之为缺省参数
调用函数时,如果没有传入某个参数将抛出异常,则要求在定义时函数时,直接指定形式参数的默认值,当没有传入参数时, 则直接使用定义函数时设置的默认值。缺省参数必须写在函数形参的末尾
def functionname(...,[parameter1 = defaultvalue1]):
[functionbody]
# 在定义函数时,指定默认的形式参数必须在所有参数的最后,否则将产生语法错误
'''
定义函数时,形参设置默认值,调用函数时,有缺省参数可不传参,函数使用默认值处理。
'''
# 定义plus函数
def plus(a, b=1):
result = a - b
return result
# 调用plus函数
result1 = plus(a=4)
print(result1)
output:1
另外,使用可变对象作为函数参数的默认值时,多次调用可能会导致异常的情况。
def f(b=[]): # NO!
print(b)
return b
ret = f(1)
ret.append(1)
ret.append(2)
# 当再调用f(1)时,预计打印为 []
f(1)
# 但是却为 [1,2]
解决上面的问题,最好使用None作为可变对象的默认值,再加上必要的检查代码。
def f(a,b=None): # NO!
if b==None:
b = []
print(b)
return b
ret = f(1,2)
ret.append(1)
ret.append(2)
# 当再调用f(1)时,预计打印为 []
f(1)
output:
[]
[]
定义函数时,为形式参数设置默认值要牢记一点:默认参数必须指向不可变对象。
6.2.5 可变参数
函数定义时,可定义可变参数,即传入函数中的实际参数可以是任意个。
1、*parameter
这种形式表示接收任意多个实际参数并将其放到一个元组中。
'''
定义函数时,定义形参为*args。调用函数时,可传任意个参数,函数将实参添加到一个元组中。
'''
def avg(*args):
print(args)
print(type(args))
total = 0
for i in args:
total += i
return total / len(args)
print('平均分是:', avg(60, 70, 80, 90, 100))
output:
(60, 70, 80, 90, 100)
<class 'tuple'>
平均分是: 80.0
2、**parameter
这种形式表示接收任意多个类似关键字参数一样显示赋值的实际参数并将其放到一个字典中。
'''
定义函数时,定义形参为**kwargs。调用函数时,传入关键参数形式,函数将实参添加到一个字典中。
'''
def avg(**kwargs):
print(kwargs)
print(type(kwargs))
total = 0
for i in kwargs.values():
total += i
return total / len(kwargs)
print('平均分是:', avg(a=60, b=70, c=80, d=90, e=100))
output:
{'a': 60, 'b': 70, 'c': 80, 'd': 90, 'e': 100}
<class 'dict'>
平均分是: 80.0
3、*parameter和**parameter组合
# 万能传参,args在前,kwargs在后。
def function_print(*args,**kwargs): # 传递不定长参数,即参数个数不固定
print(args)
print(kwargs)
function_print()
function_print(1,True,"string",(1,),{"list1"},{"月份":7},Tuesday="星期二")
output:
()
{}
(1, True, 'string', (1,), {'list1'}, {'月份': 7})
{'Tuesday': '星期二'}
Python3笔记027 - 6.2 参数传递的更多相关文章
- python3笔记目录大纲汇总
篇一.python3基础知识和语句 python3笔记一:python基础知识 python3笔记二:进制转换与原码反码补码 python3笔记三:运算符与表达式 python3笔记四:if语句 py ...
- Spring Boot 学习笔记(六) 整合 RESTful 参数传递
Spring Boot 学习笔记 源码地址 Spring Boot 学习笔记(一) hello world Spring Boot 学习笔记(二) 整合 log4j2 Spring Boot 学习笔记 ...
- Python学习笔记7-把函数当参数传递、指定可变参数
把函数当参数传递 # 函数参数传递 # 面向对象编程就是把对象传来传去 # 面向函数编程就是把函数传来传去 def mytest(num): return num * 2 # # 不光可以传递变量,还 ...
- 小甲鱼Python3笔记
000-愉快的开始 入门容易,学习难,代码量少. 跨平台: Windows, Mac OS, Linux, UNIX. 应用领域: 操作系统 WEB 3D动画 企业应用 云计算等等. 001-我和Py ...
- 廖雪峰Python3笔记
主要复习过一遍 简介 略 安装 略 *** 第一个Python程序 第一行的注释: # _*_ coding: utf-8 _*_ #!/usr/bin/env python3 print() 可以接 ...
- Python3笔记——常用技术点汇总
目录 · 概况 · 安装 · 基础 · 基础语法 · 数据类型 · 变量 · 常量 · 字符编码 · 字符串格式化 · list · tuple · dict · set · if语句 · for语句 ...
- python3笔记(二)Python语言基础
缩进 要求严格的代码缩进是python语法的一大特色,就像C语言家族(C.C++.Java等等)中的花括号一样重要,在大多数场合还非常有必要.在很多代码规范里面也都有要求代码书写按照一定的规则进行换行 ...
- python3笔记(一)初识Python
基础资料 什么是Python? Python官方网站 安装Python python的优点 完成同一个任务,C语言要写1000行代码,Java只需要写100行,而Python可能只要20行. pyth ...
- Python3 笔记
Ubuntu18.04 Python3环境 默认python3已经安装了, 可能是安装其他应用的时候因为依赖关系安装的. 安装pip3, 先sudo apt update 一下, apt-cache ...
随机推荐
- mysql中的四种常用的引擎
MySQL常用的引擎有:InnoDB存储引擎.MyISAM存储引擎.MEMORY存储引擎.Archive存储引擎 InnoDB存储引擎 InnoDB是事务型数据库的首选引擎,支持事务安全表(ACID) ...
- Edge浏览器现已支持Tampermonkey(油猴)
Tampermonkey,Greasemonkey,这种扩展可以让我们的浏览器自动运行我们自己定义的脚本,然后就出现了相关网站(比如https://greasyfork.org/zh-CN)让大家在上 ...
- Cookie和localStorage的查询、设置、修改及删除
感谢:链接(视频讲解很详细) cookie:是一种字符串表示的数据,用于在本地记录用户的基本信息(账号,密码等),具有时限性. 数据的具体内容: (图源上文视频链接) localStorage:与co ...
- 链式前向星存树图和遍历它的两种方法【dfs、bfs】
目录 一.链式前向星存图 二.两种遍历方法 一.链式前向星存图:(n个点,n-1条边) 链式前向星把上面的树图存下来,输入: 9 ///代表要存进去n个点 1 2 ///下面是n-1条边,每条边连接两 ...
- postman查看打印
原文:https://www.jianshu.com/p/f165a99245e3 1.再postman中每个请求的 Pre-request Script和Tests中都可以写代码2.也可将值打印到C ...
- Elasticsearch原理入门
这是一篇拼接贴,我是缝合怪 项目中用到了es,使用方法是挺简单的,封装了基本api以后,把查询条件封装一下传给client执行就可,但是光使用比较肤浅,研究一下原理和本质,更利于以后开发使用 扫盲贴 ...
- cb10a_c++_顺序容器的操作3关系运算符
cb10a_c++_cb09a_c++_顺序容器的操作3 2 顺序容器的操作3 3 关系运算符 4 所有的容器类型都可以使用 5 比较的容器必须具有相同的容器类型,double不能与int作比较 6 ...
- web scraper无法解决爬虫问题?通通可以交给python!
今天一位粉丝的需求所涉及的问题值得和大家分享分享~~~ 背景问题 是这样的,他看了公号里的关于web scraper的系列文章后,希望用它来爬取一个网站搜索关键词后的文章标题和链接,如下图 按照教程, ...
- 004.OpenShift命令及故障排查
一 CLI访问OpenShift资源 1.1 资源操作 OCP将OpenShift集群中的为由主节点管理的对象统称为资源,如:node.service.pod.project.deployment.u ...
- Java并发编程-深入Java同步器AQS原理与应用-线程锁必备知识点
并发编程中我们常会看到AQS这个词,很多朋友都不知道是什么东东,博主经过翻阅一些资料终于了解了,直接进入主题. 简单介绍 AQS是AbstractQueuedSynchronizer类的缩写,这个不用 ...