Python函数参数传递

article/2025/8/22 15:11:33

Python函数参数传递

  • 一、前言
  • 二、了解形式参数和实际参数
    • 1.通过作用理解
    • 2.通过比喻来理解形参和实参
  • 三、位置参数
    • 1.数量必须与定义时一致
    • 2.位置必须与定义时一致
  • 四、关键字参数
  • 五、为参数设置默认值
  • 六、可变参数
    • 1.*parameter
    • 2.**parameter


一、前言

  在调用函数时,大多数情况下,主调函数和被调函用之间有数据传递关系,这就是有参数的函数形式。函数参数的作用是传递数据给函数使用,函数利用接收的数据进行具体的操作处理。

  函数参数在定义函数时放在函数名称后面的一对小括号中,如图所示:
在这里插入图片描述


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

  在使用函数时,经常会用到形式参数(形参)和实际参数(实参)。两者都叫做参数二者之间的区别先通过形式参数和实际参数的作用来进行讲解,再通过比喻进行理解。


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)  # 通过字典指定函数的可变参

  执行结果如下:
在这里插入图片描述



http://chatgpt.dhexx.cn/article/YMpDFTVb.shtml

相关文章

计算机毕业论文外文翻译是什么,毕业论文的外文翻译是什么

毕业论文的外文翻译是什么 此栏目涵盖有关于外文翻译和毕业论文的范例,免费给你学论文的外文翻译是什么提供有关参考资料。 摘要&#xff1a;文章从成人学生知识基础、指导教师、写作过程监控等方面&#xff0c;分析了成人高校学生在毕业论文写作中存在的伪造、抄袭、专业水平低…

关于android的外文论文,毕业论文外文翻译-Android开发

毕业论文外文翻译-Android开发 (11页) 本资源提供全文预览&#xff0c;点击全文预览即可全文预览,如果喜欢文档就下载吧&#xff0c;查找使用更方便哦&#xff01; 9.90 积分 毕业设计(论文)外文翻译 毕业 论文题目 基于 Android 手机通讯录的设计与实现 作 者 姓 名 所学专业…

在哪能查到英文论文?

不论是撰写英文论文还是引用外文文献&#xff0c;写论文的过程中想必缺不了检索合适的英文论文这个步骤&#xff0c;在本篇内容里&#xff0c;不仅教会你如何查到英文论文&#xff0c;还要教会你怎么样快速找到合适的英文论文&#xff01;听起来是不是令人心驰神往&#xff0c;…

计算机毕业论文外文译文,计算机毕业论文外文文献译文

计算机毕业论文外文文献译文 外文文献原文What is ASP.NET? ASP.NET is a programming framework built on the common language runtime that can be used on a server to build powerful Web applications. ASP.NET offers several important advantages over previous Web…

如果想要直到一篇外文论文的质量

首先在CCF A类中寻找 然后view这篇论文&#xff0c;然后点击这篇论文所属的期刊名称2处 就可以看到引用得分和影响因子了&#xff0c;3处 文献鸟自动推送&#xff1a;https://www.storkapp.me/main.php 文献鸟使用的教学视频&#xff1a;https://www.bilibili.com/video/BV1tf4…

关于php的外文论文,php毕业设计外文翻译--通过PHP访问MySQL(适用于毕业论文外文翻译+中英文对照).doc...

[摘要]PAGE 原文&#xff1a;? ? Getting PHP to Talk to MySQl Now that you’re comfortable using the MySQL client tools to manipulate data in the database, you can begin using PHP to display and modify data from the database. PHP has standard functions for…

都有哪些查找和下载英文文献的方法?

很多朋友在查找文献的时候&#xff0c;都不知道该从哪里找&#xff0c;也不知道从哪里下载&#xff0c;怎么下载&#xff0c;尤其是想要查找英文文献。其实查询和下载英文文献无非以下三种方式&#xff1a; 选择一些比较权威&#xff0c;内容丰富&#xff0c;基本覆盖所有学科…

面向对象实现游戏聊天中的敏感词屏蔽功能,将敏感词汇用星号***替换

import java.util.Scanner;//新建一个类 public class Replace {// 定义一个字符串String commons;// 建一个替换的方法public void replace() { //控制台输入Scanner sc new Scanner(System.in);// 提示输出&#xff08;为方便功能实现&#xff0c;此处提示内定的敏感词汇&am…

腾讯敏感词汇大全_腾讯数平精准推荐 | OCR技术之识别篇

腾讯数平精准推荐(Tencent-DPPR)团队一直致力于实时精准推荐、海量大数据挖掘等领域的技术研发与落地。 在社交广告推荐领域,团队自研的深度在线点击率预估算法及全流程实时推荐系统,持续多年提升社交广告点击率。图像作为当前社交广告最重要的展示形式,文字识别、物体识别等…

小程序中关于敏感词汇检测

小程序审核增加敏感词汇校验&#xff0c;避免违法违规而被停用服务或者投诉。 本文例子引用的百度AI开发者提供的API&#xff1a; 链接位置&#xff1a;https://console.bce.baidu.com/ai/#/ai/ocr/overview/index 创建应用后生成应用对应的id和key 应用到小程序中,&#xff…

Python 如何检测敏感词汇

设计思路&#xff1a;根据敏感词库文件筛选&#xff0c;查看输入的文本中是否包含敏感词汇。从而过滤出相关的敏感词。 【阅读全文】 导入应用相关的模块。 import os import logging import sys导入UI界面相关的模块。 from PyQt5.QtWidgets import QApplication,QWidget,…

敏感词汇工具类sensitive word的使用及详解

简述&#xff1a; 1.平时工作中&#xff0c;只要涉及到用户可以自由发言&#xff08;博客、文档、论坛&#xff09;&#xff0c;就要考虑内容的敏感性处理,sensitive word工具是一个快速的敏感词过滤工具,基于 DFA 算法实现的高性能敏感词工具&#xff08;mirrors / houbb / s…

Python敏感词汇检测

只要思想不滑坡&#xff0c;办法总比困难多 昨天在写练习题的时候写到这点特别迷&#xff0c;一直绕不过这个弯&#xff0c;最后也算是成功实现吧&#xff0c;记录一下&#xff0c;防止下次再绕的出不来。 之前访问的的Github镜像站一直触发滥用检测机制&#xff0c;着实很烦…

敏感词汇检测

1、今天做测试的时候抓到一个数据包&#xff0c;发现一个txt文件&#xff08;CensorWords.b7e4bfb.txt&#xff09;&#xff0c;第一眼反应以为是系统被入侵了&#xff0c;被入侵者传了个txt到服务器上面&#xff0c;后面发现不对啊&#xff0c;攻击的话也不应该上传这种txt&am…

利用Python做简单的数据可视化

import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns from pylab import mpl # 正常显示中文标签 mpl.rcParams[font.sans-serif] [KaiTi] # 正常显示负号 mpl.rcParams[axes.unicode_minus] Falseimport warnings warnings.filt…

Python做风险控制|找出形成环状投资的公司

大家好&#xff0c;我是小小明。 今天我将带大家利用python找到关系数据的环。先说下需求和背景&#xff1a; 需求描述 某投资机构需要考虑各公司的投资风险&#xff0c;手上一份各公司投资方向的数据&#xff0c;主要字段是投资者和被投资者。 而有部分公司并不是真的投资…

如何用Python做好友管理系统

--------------------------------------------------------总代码在最下面----------------------------------------------------------- &#xff08;1&#xff09;好友管理系统中不仅需要保存好友名称&#xff0c;还需要保存分组以及分组中的好友&#xff0c;因此&#xf…

怎么用python做网站?

python做网站方法步骤&#xff1a; 1、导入django包 可直接在pycharm下载&#xff0c;或者pip/easy_install Django是一个开放源代码的Web应用框架&#xff0c;由Python写成。采用了MTV的框架模式&#xff0c;即模型M&#xff0c;视图V和模版T。它最初是被开发来用于管理劳伦…

用python做一个简单GUI小软件

用python做一个简单软件 前言 这是一个课设&#xff0c;用python做一个扫描王软件 我主要做的GUI部分&#xff0c;记录分享一下。也是第一次用python做小软件&#xff0c;python的方便果然是名不虚传 遇到问题 1.python版本 下载了python3.7的编译器 由于最终软件要在wi…