我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Python中的函数参数传递问题

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Python中的函数参数传递问题

一、前言

在调用函数时,大多数情况下,主调函数和被调函用之间有数据传递关系,这就是有参数的函数形式。

函数参数的作用是传递数据给函数使用,函数利用接收的数据进行具体的操作处理。

函数参数在定义函数时放在函数名称后面的一对小括号中,如图所示:

二、了解形式参数和实际参数

在使用函数时,经常会用到形式参数(形参)和实际参数(实参)。

两者都叫做参数二者之间的区别先通过形式参数和实际参数的作用来进行讲解,再通过比喻进行理解。

1.通过作用理解

形式传参和实际参数在作用上的区别如下:

  • 形式传参:在定义函数时,函数名后面括号中的参数为“形式参数”,也称形参。
  • 实际参数:在调用一个函数时,函数名后面括号中的参数为“实际参数”。也就是将函数的调用者提供给函数的参数称为实际参数,也称为实参。

根据实参的类型不同,可以分为将实参的值传递个形参,和将实参的引用传递给形参两种情况。

  • 当实参为不可变对象时,进行的是值传递
  • 当实参为可变对象时,进行的是引用传递

值传递和引用传递的基本区别:

  • 进行值传递后,改变形参的值,实参的值不变
  • 进行引用传递后,改变形参的值,实参的值也一同改变

实例:

# 定义函数
def demo(obj):
    print("原值:", obj)
    obj += obj


# 调用函数
print("==========值传递==========")
mot = "唯有在被追赶的时候,你才能真正地奔跑"
print("函数调用前:", mot)
demo(mot)  # 采用不可变对象-字符串
print("函数调用后:", mot)

print("==========引用传递==========")
list1 = ["小白", "小名", "小红"]
print("函数调用前:", list1)
demo(list1)  # 采用可变对象-列表
print("函数调用后:", list1)

运行结果如下:

2.通过比喻来理解形参和实参

函数定义时参数列表中的参数就是形参,而函数调用时传递进来的参数就是实参,就像剧本选主角一样,剧本的角色相对于形参,而演角色的演员就相对于实参。

三、位置参数

位置参数也称必备参数,必须按照正确的顺序传到函数中。即调用时的数量和位置必须和定义时是一样的。

1.数量必须与定义时一致

在调用函数时,指定的实参数量必须与形参一致,否则将抛出TypeError异常,提示缺少必要的位置参数。

例如:定义一个函数def fun_bmi(person, height, weight),该函数中有3个参数,但调用时只传两个参数,如下代码所示:

def fun_bmi(person, height, weight):
    """
    功能:根据身高和体重计算BMI指数
    :param person: 姓名
    :param height: 身高,单位:米
    :param weight: 体重,单位:千克
    """
    print(person + "的身高:" + str(height) + "米\t 体重:" + str(weight) + "千克")
    bmi = weight / (height * height)  # 用于计算BMI指数,公式为“体重/身高的平方”
    print(person + "的BMI指数为:" + str(bmi))

    # 判断身材是否合理
    if bmi < 18.5:
        print("您的体重过轻")
    if 18.5 <= bmi < 24.9:
        print("正常范围,注意保持")
    if 24.9 <= bmi < 29.9:
        print("您的体重过重")
    if bmi > 29.9:
        print("肥胖")


fun_bmi("路人甲", 183)

运行结果如下:

如上图所示,抛出TypeError,具体意思是“fun_bmi()方法缺少一个必要的位置参数weight”。

2.位置必须与定义时一致

在调用函数时,指定的实参位置与形参的位置一致,否则将产生一下两个结果:

  • 抛出TypeError异常产
  • 生结果与预期不符的问题

抛出异常的情况主要是因为在调用函数时,如果指定的实参与形参的位置不一致,但是他们的类型一致,那么就不会抛出异常,而是产生结果与预期不符的问题。

例如,下列代码:

def fun_bmi(person, height, weight):
    """
    功能:根据身高和体重计算BMI指数
    :param person: 姓名
    :param height: 身高,单位:米
    :param weight: 体重,单位:千克
    """
    print(person + "的身高:" + str(height) + "米\t 体重:" + str(weight) + "千克")
    bmi = weight / (height * height)  # 用于计算BMI指数,公式为“体重/身高的平方”
    print(person + "的BMI指数为:" + str(bmi))

    # 判断身材是否合理
    if bmi < 18.5:
        print("您的体重过轻")
    if 18.5 <= bmi < 24.9:
        print("正常范围,注意保持")
    if 24.9 <= bmi < 29.9:
        print("您的体重过重")
    if bmi > 29.9:
        print("肥胖")
        
fun_bmi("路人甲", 60, 183)

运行结果如下:


 

函数调用后,没有抛出异常,但是从结果看,产生结果与预期结果不一致。

四、关键字参数

关键字传参是指使用形参的名字来确定输入的参数。通过该方式指定实参时,不需要与形参位置一致,只要参数名称写正确即可。

例如:调用def fun_bmi(person, height, weight)函数,通过关键字传参,代码如下:

fun_bmi(height=1.83, weight=60, person="路人甲")

调用函数,将显示如下结果:

从上面结果可以看出,虽然指定实际传参时,顺序与函数定义时不一致,但是运行结果与预期结果是一致的。

五、为参数设置默认值

调用函数时,如果没有指定某个参数将抛出异常,即在定义函数时,直接指定形式参数的默认值。

这样,当没有传入参数时,则直接使用定义函数时设置的默认值。

语法格式如下:

def functionname(...,[parameter1 = defaultvalue1]):[functionbody]

参数说明:

  • functionname:函数名称,在调用时使用
  • parameter1 = defaultvalue1:可选参数,用于指定向函数中传递的出纳室,并且为该参数设置默认值为defaultvalue1
  • functionbody:可选参数,用于指定函数体,即该函数被调用后,要执行的功能代码

注意:在定义函数时,指定默认的形参必须在所有参数的最后,否则将产生语法错误。

使用可变对象作为函数参数的默认值时,多次调用可能会导致意料之外的情况,例如,编写一个名称为demo()的函数,并为其设置一个带默认值的参数,代码如下:

def demo(obj=[]):
    print("obj的值:", obj)
    obj.append(1)

调用demo()函数,代码如下:

demo() # 调用函数

将显示以下结果:

连续两次调用,并不指定实际参数,代码如下:

demo() # 调用函数
demo() # 调用函数

将显示以下结果:


从上面结果看,这显然不是我们想要的结果,为了防止出现这种情况,最好使用Nome作为可变对象的默认值,这时还需要代码检查。修改后的代码如下:

def demo(obj=None):  # 定义一个函数
    if obj == None:  # 判断是否为空
        obj = []
    print("obj的值:", obj)  # 输出obj值
    obj.append(1)  # 连续调用并输出

这时在连续两次调用函数demo()函数,将显示以下运行结果:

六、可变参数

定义可变参,主要有两个形式:

  • *parameter
  • **parameter

1.*parameter

这种形式表示接收任意多个实际参数并将放到一个元组中。例如,定义一个函数,让其可以接收任意多个实际参数,代码如下:

def printplayer(*name):  # 定义输出我喜欢的NBA球员的函数
    print("\n我喜欢的NBA球员有:")
    for item in name:
        print(item)  # 输出球员名称

调用3次上面的函数,分别指定不同个数的实际参数,代码如下:

printplayer("小红")
printplayer("小红", "小白")
printplayer("小红", "小白", "小明")

执行结果如下:

2.**parameter

这个形式表示接收任意多个显式赋值的实际参数,并将其放到一个字典中。例如,定义一个函数,让其可以接收任意多个显式赋值的实际参数,代码如下:

def printsign(**sign):  # 定义输出姓名和绰号的函数
    print()  # 输出一个空行
    for key, value in sign.items():  # 遍历字典
        print("[" + key + "]的绰号是:" + value)  # 输出组合获得信息

调用两次printsign()函数,代码如下:

printsign(小红="妖精", 小明="大聪明")
printsign(小白="菜鸡", 小李="不高兴", 小张="没头脑")

执行结果如下:


如果想要使用一个已经存在的字典作为函数的可变参数,可以在字典的名称前加“**”。例如下面代码:

dict1 = {"小白": "菜鸡", "小李": "不高兴", "小张": "没头脑"}  # 定义一个字典
printsign(**dict1)  # 通过字典指定函数的可变参

执行结果如下:

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Python中的函数参数传递问题

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python中的函数参数传递问题

这篇文章主要介绍了Python中的函数参数传递问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-01-04

浅谈Python中函数的参数传递

1.普通的参数传递>>> def add(a,b): return a+b >>> print add(1,2) 3 >>> print add('abc','123') abc1232.参数个数可选,参数有默认值的传递>>> def
2022-06-04

Python中怎么传递函数参数

今天就跟大家聊聊有关Python中怎么传递函数参数,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。函数参数的使用又有俩个方面值得注意:>>> def printpa(**a): ..
2023-06-17

Python中函数参数如何传递

这篇文章主要介绍了Python中函数参数如何传递,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。函数参数如何传递key-value方式传递参数:下面是非常常见的传递方式,参数名
2023-06-25

golang函数中的参数传递

golang 函数的参数传递采用传值传递机制,对值类型参数的修改不影响实际参数,而对引用类型参数的修改会影响实际参数;指针参数允许间接访问并修改实际参数。GoLang 函数中的参数传递简介在 GoLang 中,参数传递遵循传值传递机制。
golang函数中的参数传递
2024-04-28

Python 函数作为参数传递

#map()的功能是将函数对象依次作用于表的每一个元素,每次作用的结果储存于返回的表re中。#map通过读入的函数(这里是lambda函数)来操作数据def test_func_map():    re = map((lambda x: x
2023-01-31

Python函数参数传递机制

最近在写代码的过程中,发现Python参数传递不是很明白。Python确实很灵活,但是灵活的后果就是要花更多的时间去研究。废话不多说,始めましょう!!!Python参数传递有一下几种方式:1:位置参数Fun(arg1,arg2,...)2:
2023-01-31

golang函数的参数传递

Go 函数的参数传递在 Go 中,函数通过值传递或引用传递传递参数。了解这两种传递方式之间的差异对于优化代码性能和避免意外行为至关重要。值传递当以值传递方式传递参数时,函数会收到参数值的副本。这意味着对参数值的任何修改都不会影响函数外
golang函数的参数传递
2024-04-20

java 函数的参数传递

The Java programming language always uses call by value. That means that the method gets a copy of all parameter values.
2023-06-03

python函数中如何传递参数位置

今天就跟大家聊聊有关python函数中如何传递参数位置,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1、说明调用函数时,默认按位置顺序将对应的实参传递给形参,将第一个实参分配给第一个
2023-06-15

php函数间的参数传递(值传递/引用传递)

函数间的参数传递包括值传递和引用传递,详细示例接下来为大家详细介绍下,感兴趣的朋友不要错过
2022-11-15

python中函数传递参数的方式有哪些

本篇文章为大家展示了python中函数传递参数的方式有哪些,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。python可以做什么Python是一种编程语言,内置了许多有效的工具,Python几乎无所不
2023-06-14

python函数的四种参数传递方式

python中函数传递参数有四种形式fun1(a,b,c)fun2(a=1,b=2,c=3)fun3(*args)fun4(**kargs) 四种中最常见是前两种,基本上一般点的教程都会涉及,后两种一般很少单独出现,常用在混合模式中第一种
2023-01-30

Python中函数参数传递方法有哪些

这篇文章主要介绍“Python中函数参数传递方法有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Python中函数参数传递方法有哪些”文章能帮助大家解决问题。定义和传递参数parameters
2023-07-06

深入理解python中函数传递参数是值传递还是引用传递

目前网络上大部分博客的结论都是这样的: Python不允许程序员选择采用传值还是传 引用。Python参数传递采用的肯定是“传对象引用”的方式。实际上,这种方式相当于传值和传引用的一种综合。如果函数收到的是一个可变对象(比如字典 或者列表)
2022-06-04

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录