【python基础】函数-参数形式
鉴于函数定义中可能包含多个形参变量,因此函数调用中也可能包含多个实参变量。向函数传递实参变量给形参变量的方式有很多,可使用位置参数,这要求实参变量的顺序与形参变量的顺序相同;也可使用关键字参数,都由变量名和值组成,简称名称-值对;还可使用列表(元组)和字典。
1.位置参数
调用函数时,Python必须将函数调用中的每个实参变量都关联到函数声明中的一个形参变量上。为此,最简单的关联方式是基于形参变量与实参变量的位置顺序。这种关联方式被称为位置参数。
其语法逻辑如下所示:

我们假设一个输出人的爱好信息函数,编写程序如下所示:

通过这个函数的声明可以发现,它需要一个人的姓名和爱好。调用print_hobby函数时,需要按位置顺序提供一个人的姓名和爱好。字符串变量的文本内容'张三'传递给函数声明中形参变量name,字符串变量的文本内容'足球'传递给函数声明中形参变量hobby,然后print_hobby函数就可以利用形参变量name和hobby去实现功能,这里实现的功能很简单,就是输出拼接字符串信息。
1.1多次调用
我们可以再进行第二次调用看是否是按照实参变量与形参变量的位置顺序来进行传递的,编写程序如下所示:

通过输出结果发现是我们所设想的输出结果。
在函数中,可根据需要使用任意数量的位置参数,Python将按位置顺序从前到后将函数调用中的实参变量关联到函数声明中相应的形参变量,完成数据信息的传递
1.2位置参数的顺序很重要
使用位置参数来调用函数时,如果实参变量的顺序不正确,结果会出乎我们的意料,比如我们把第一个实参变量位置填写爱好信息,第二个实参变量位置填写姓名信息,编写程序如下所示:

通过上面的输出结果我们发现显然不是我们想要的结果,所以一定要在函数调用时,按照形参变量的位置顺序,编写对实参变量的位置顺序,不然就会发生错误。
2.关键字参数
之前我们接触过字典的键值对,现在我们再学习一个关系对,名称-值对。关键字参数是传递给函数的名称-值对。我们直接在函数调用时将名称和值关联起来,因此向函数传递实参变量时不会混淆。用关键字参数的时候无须考虑函数调用中的实参变量的位置顺序。
我们还是以人名和爱好两个信息来举例,编写程序如下所示:

我们可以发现通过关键字参数,即使改变了实参变量的位置顺序,输出结果还是我们之前所设想的,所以,关键字参数的顺序无关紧要,因为Python知道各个实参变量的值该存储到哪个形参变量中,但是使用关键字参数时,务必准确地指定函数定义中的形参变量名。
3.默认值
编写函数时,可给每个形参变量指定默认值。在调用函数中给形参变量提供实参变量的值时,Python将使用指定的实参变量的值;否则,将使用形参变量的默认值。因此,给形参变量指定默认值后,可在函数调用中省略相应的实参变量。使用默认值可简化函数调用,比如,经过我们大量收集人的爱好,发现爱好音乐的人比较多,我们可以将音乐作为默认值,编写程序如下所示:

我们可以发现,当我们按照位置参数的方式进行实参变量值传递的时候,hobby的值由'篮球'变为了'足球',输出结果上爱好是足球,当我们不传递第二个实参变量值的时候,hobby因为没有接收到新值,所以使用了默认值'篮球',输出结果上爱好是篮球。
虽然我们的部分形参变量使用了默认值,在上面的程序中,name还是第一个位置参数,hobby还是第二个位置参数,如果我们改成print_hobby(hobby='篮球',name):这样会发生什么,编写程序如下所示:

运行后发现,提示错误,该错误显示没有默认值的参数后面应该跟随有默认值的参数。也就是说明了,在形参变量有默认值的情况下,有默认值的形参变量在后面,没有默认值的形参变量在前面,如果是多个形参变量,一部分为有默认值的形参变量,一部分为没有默认值的形参变量,那么我们要先列出没有默认值的形参变量,再列出有默认值的形参变量。这让Python依然能够正确地解读位置参数。比如我们再构造两个形参变量,一个调查时间time,一个调查者people,调查时间我们默认是'2023-01-01',编写程序如下所示:

我们一旦将有默认值的提前到没有默认值的前面,或者没有默认值的放在有默认值的后面,将在运行时产生错误,编写程序如下所示:

4.传递任意数量参数
4.1任意数量参数
有时候,我们预先不知道函数需要接受多少个实参变量,但是Python允许函数从调用语句中收集任意数量的实参变量。因为爱好可以只有一个,也可以有很多,所以数量是不一定的,我们可以通过任意数量参数来解决,其语法格式:def 函数名(形参变量名):
编写程序如下所示:

通过输出结果我们可以看出,我们把实参变量值传递给形参变量hobby的过程中,经过号的作用,hobby变成了元组,通过元组的形式来接收多个实参变量值,既然是元组接收,我们可以遍历该元组,编写程序如下所示:

通过对输出结果的观察是符合我们设想的。
总而言之,在不知道函数具体收到多少个实参变量值的时候,我们可以采取将形参变量在左上角加上*号的方式。
4.2结合使用位置参数和任意数量参数
如果要让函数接受不同类型的实参变量,必须在函数声明中将接纳任意数量参数的形参变量放在最后,Python先匹配位置参数和关键字参数,再将余下的实参变量都收集到最后一个形参变量中。
比如我们在之前的程序中,加入人名,函数声明时,人名形参变量name,必须放在任意数量形参变量的前面,函数调用时先写人名实参变量,然后再写任意数量实参变量,编写程序如下所示:

基于上述函数声明,Python将第一个实参变量值'张三'传递到形参变量name,并将其他的实参变量值都存储在元组hobby中
4.3任意数量的关键字参数
有时候,需要接受任意数量的实参变量,但预先不知道传递给函数的会是什么样的信息。在这种情况下可将函数的形参变量编写成能够接受任意数量的关键字参数。比如一个人的信息简介,我们知道名字是必须的,但是我们不知道他会提供什么其他的信息,我们可以使用任意数量的关键字参数,编写程序如下所示:

函数print_info的声明要求提供姓名,同时允许用户根据需要提供任意数量的关键字参数,也就是名称-值对。
形参变量**other中的两个星号让Python创建一个名为other的空字典,并将收到的所有名称-值对都封装到这个字典中。在函数中可以向访问其他字典那样访问other中的名称-值对。
总而言之,编写函数时,可以以各种方式混合使用位置参数、关键字参数和任意数量参数。
【python基础】函数-参数形式的更多相关文章
- Python基础-函数参数
Python基础-函数参数 写在前面 如非特别说明,下文均基于Python3 摘要 本文详细介绍了函数的各种形参类型,包括位置参数,默认参数值,关键字参数,任意参数列表,强制关键字参数:也介绍了调用函 ...
- python基础——函数参数
课上老师已经讲过函数(func)的参数(args)传递. 之前学习了根据位置传递对应的参数,下面会介绍其他参数传递方式. 之前的位置传参: def f(a,b,c): return a+b+c pri ...
- python基础——函数的参数
python基础——函数的参数 定义函数的时候,我们把参数的名字和位置确定下来,函数的接口定义就完成了.对于函数的调用者来说,只需要知道如何传递正确的参数,以及函数将返回什么样的值就够了,函数内部的复 ...
- python基础—函数装饰器
python基础-函数装饰器 1.什么是装饰器 装饰器本质上是一个python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能. 装饰器的返回值是也是一个函数对象. 装饰器经常用于有切 ...
- python基础,函数,面向对象,模块练习
---恢复内容开始--- python基础,函数,面向对象,模块练习 1,简述python中基本数据类型中表示False的数据有哪些? # [] {} () None 0 2,位和字节的关系? # ...
- python 中函数参数传递形式
python中函数参数的传递是通过赋值来传递的.函数参数的使用又有俩个方面值得注意:1.函数参数是如何定义的 2.在调用函数的过程中参数是如何被解析 先看第一个问题,在python中函数参数的定义主要 ...
- python基础—函数嵌套与闭包
python基础-函数嵌套与闭包 1.名称空间与作用域 1 名称空间分为: 1 内置名称空间 内置在解释器中的名称 2 全局名称空间 顶头写的名称 3 局部名称空间 2 找一个名称的查找顺序: ...
- (转)python中函数参数中如果带有默认参数list的特殊情况
在python中函数参数中如果带有默认参数list遇到问题 先看一段代码 1 2 3 4 5 6 7 8 9 def f(x,l=[]): for i in range(x): ...
- 速战速决 (3) - PHP: 函数基础, 函数参数, 函数返回值, 可变函数, 匿名函数, 闭包函数, 回调函数
[源码下载] 速战速决 (3) - PHP: 函数基础, 函数参数, 函数返回值, 可变函数, 匿名函数, 闭包函数, 回调函数 作者:webabcd 介绍速战速决 之 PHP 函数基础 函数参数 函 ...
- python中函数参数的引用方式
值传递和引用传递时C++中的概念,在python中函数参数的传递是变量指向的对象的物理内存地址!!! python不允许程序员选择采用传值还是传引用.Python参数传递采用的肯定是“传对象引用”的方 ...
随机推荐
- 汽车制造工艺 2.5D 可视化组态监控 | 图扑软件
前言 随着世界经济的不断发展,汽车作为一个如今随处可见的物体,从大体上概括是由四大部分组成:发动机.底盘.车身.电气系统.看似简单的几个名词组件,其内部却是由无数的细小零件构成,一辆汽车更是由上万个微 ...
- js面试题学习整理
1. 异步操作有哪些? 回调函数,事件监听,promise,ajax,async,setTimeout,Generator 2. Promise是什么? Promise是异步编程的一种解决方案. 从语 ...
- VUE-生命周期/请求数据
使用方法 --- 4个before,4个ed,创造,装载,更新,销毁 初始化阶段 beforeCreate(){} // 准备怀孕 created(){} // 怀上了 *************** ...
- Redis的自增也能实现滑动窗口限流?
限流是大家开发之路上一定会遇到的需求.比如:限制一定时间内,接口请求请求频率:一定时间内用户发言.评论次数等等,类似于滑动窗口算法.这里分享一份拿来即用的代码,一起看看如何利用常见的 Redis 实现 ...
- LabVIEW Actor Framwork (2)________ 边学边做server&client
回顾下初始需求: 现在要做一个类似聊天的demo,一个server端,若干个client端:首先是server启动,通过server可以打开若干个client端,然后每个client可以独立给serv ...
- List嵌套排序并取第一个对象
using Newtonsoft.Json;using 嵌套List排序; //示例listvar exampleString = "{\"code\":1,\" ...
- Python_15 ddt驱动与日志
一.查缺补漏 1. 在测试报告中添加注释,写在类名下面就行,方法名下面,三引号 2. 直接import ddt引用的时候需要ddt.ddt, ddt.data, ddt.unpack from ddt ...
- pyhton内置函数
内置函数 1.type(变量名)-> class 查看变量的数据类型 2.print(self, *args, sep=' ', end='\n', file=None) sep:指定多个参数以 ...
- Django, urls的参数name的demo
Django的路由变化 遇到需要修改路由的需求,特别记录一下 项目开始 django-admin startproject sandboxOA. # 外部文件夹可以改变名字, '.'的意思是上一级不需 ...
- 2023-05-12:存在一个由 n 个节点组成的无向连通图,图中的节点按从 0 到 n - 1 编号, 给你一个数组 graph 表示这个图, 其中,graph[i] 是一个列表,由所有与节点 i
2023-05-12:存在一个由 n 个节点组成的无向连通图,图中的节点按从 0 到 n - 1 编号, 给你一个数组 graph 表示这个图, 其中,graph[i] 是一个列表,由所有与节点 i ...