鉴于函数定义中可能包含多个形参变量,因此函数调用中也可能包含多个实参变量。向函数传递实参变量给形参变量的方式有很多,可使用位置参数,这要求实参变量的顺序与形参变量的顺序相同;也可使用关键字参数,都由变量名和值组成,简称名称-值对;还可使用列表(元组)和字典

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基础】函数-参数形式的更多相关文章

  1. Python基础-函数参数

    Python基础-函数参数 写在前面 如非特别说明,下文均基于Python3 摘要 本文详细介绍了函数的各种形参类型,包括位置参数,默认参数值,关键字参数,任意参数列表,强制关键字参数:也介绍了调用函 ...

  2. python基础——函数参数

    课上老师已经讲过函数(func)的参数(args)传递. 之前学习了根据位置传递对应的参数,下面会介绍其他参数传递方式. 之前的位置传参: def f(a,b,c): return a+b+c pri ...

  3. python基础——函数的参数

    python基础——函数的参数 定义函数的时候,我们把参数的名字和位置确定下来,函数的接口定义就完成了.对于函数的调用者来说,只需要知道如何传递正确的参数,以及函数将返回什么样的值就够了,函数内部的复 ...

  4. python基础—函数装饰器

    python基础-函数装饰器 1.什么是装饰器 装饰器本质上是一个python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能. 装饰器的返回值是也是一个函数对象. 装饰器经常用于有切 ...

  5. python基础,函数,面向对象,模块练习

    ---恢复内容开始--- python基础,函数,面向对象,模块练习 1,简述python中基本数据类型中表示False的数据有哪些? #  [] {} () None 0 2,位和字节的关系? # ...

  6. python 中函数参数传递形式

    python中函数参数的传递是通过赋值来传递的.函数参数的使用又有俩个方面值得注意:1.函数参数是如何定义的 2.在调用函数的过程中参数是如何被解析 先看第一个问题,在python中函数参数的定义主要 ...

  7. python基础—函数嵌套与闭包

    python基础-函数嵌套与闭包 1.名称空间与作用域 1 名称空间分为: 1 内置名称空间   内置在解释器中的名称 2 全局名称空间   顶头写的名称 3 局部名称空间 2 找一个名称的查找顺序: ...

  8. (转)python中函数参数中如果带有默认参数list的特殊情况

    在python中函数参数中如果带有默认参数list遇到问题 先看一段代码 1 2 3 4 5 6 7 8 9 def f(x,l=[]):     for i in range(x):         ...

  9. 速战速决 (3) - PHP: 函数基础, 函数参数, 函数返回值, 可变函数, 匿名函数, 闭包函数, 回调函数

    [源码下载] 速战速决 (3) - PHP: 函数基础, 函数参数, 函数返回值, 可变函数, 匿名函数, 闭包函数, 回调函数 作者:webabcd 介绍速战速决 之 PHP 函数基础 函数参数 函 ...

  10. python中函数参数的引用方式

    值传递和引用传递时C++中的概念,在python中函数参数的传递是变量指向的对象的物理内存地址!!! python不允许程序员选择采用传值还是传引用.Python参数传递采用的肯定是“传对象引用”的方 ...

随机推荐

  1. SHA-256 简介及 C# 和 js 实现【加密知多少系列】

    〇.简介 SHA-256 是 SHA-2 下细分出的一种算法.截止目前(2023-03)未出现"碰撞"案例,被视为是绝对安全的加密算法之一. SHA-2(安全散列算法 2:Secu ...

  2. 机器学习算法(八):基于BP神经网络的乳腺癌的分类预测

    机器学习算法(八):基于BP神经网络的乳腺癌的分类预测 1.算法简介和应用 1.1 算法简介 BP(Back Propagation)网络是1986年由Rumelhart和McCelland为首的科学 ...

  3. GET 和 POST 到底有什么区别?

    HTTP最早被用来做浏览器与服务器之间交互HTML和表单的通讯协议:后来又被被广泛的扩充到接口格式的定义上.所以在讨论GET和POST区别的时候,需要现确定下到底是浏览器使用的GET/POST还是用H ...

  4. python模拟鼠标键盘操作

    前言 1 懒人,工作中可以模拟真人操作,不用自己点击 2游戏人员  这是做模拟外挂的必备知识,不管手机还是电脑游戏,尤其副本 准备模块 代码如下: 实现了一个最简单的输入密码,enter进入的登录过程 ...

  5. MordernC++之左值(引用)与右值(引用)

    左值与右值 C++中左值与右值的概念是从C中继承而来,一种简单的定义是左值能够出现再表达式的左边或者右边,而右值只能出现在表达式的右边. int a = 5; // a是左值,5是右值 int b = ...

  6. 全网最详细中英文ChatGPT-GPT-4示例文档-智能多功能学习机从0到1快速入门——官网推荐的48种最佳应用场景(附python/node.js/curl命令源代码,小白也能学)

    目录 Introduce 简介 setting 设置 Prompt 提示 Sample response 回复样本 API request 接口请求 python接口请求示例 node.js接口请求示 ...

  7. Nvidia Tensor Core初探

    1 背景 在基于深度学习卷积网络的图像处理领域,作为计算密集型的卷积算子一直都是工程优化的重点,而卷积计算一般转化为矩阵乘运算,所以优化矩阵乘运算自然成为深度学习框架最为关心的优化方向之一.鉴于此,N ...

  8. 【Vue项目】尚品汇(六)ShopCar组件开发 购物车模块

    4 购物车 4.1 购物车商品数量控制 Detail\index.vue <div class="cartWrap"> <div class="cont ...

  9. Django相关配置信息

    Django相关配置信息 1.配置数据库mysql 1.1 setting.py中配置信息 DATABASES = { 'default': { 'ENGINE': 'django.db.backen ...

  10. 关于Validation的方法使用

    acceptance验证 acceptance 是 Rails 中的一个验证器(validator),用于验证一个布尔类型的属性是否被接受.在表单中,通常会有一些复选框或单选按钮,用户需要勾选或选择才 ...