python调用函数详解

news2024/12/27 12:43:29


一、定义函数与调用函数的顺序

函数被定义后,本身是不会自动执行的,只有在被调用后,函数才会被执行,得到相应的结果。但是在 Python 中我们要注意一个关键点,就是Python不允许前向引用,即在函数定义之前,不允许调用该函数。

例如:

print plus(1,2)
def plus(a,b):  
    return a+b  

运行结果为:

NameError: name 'plus' is not defined  

从报错结果可以看出,名字为plus的函数还没进行定义(虽然我们是在后面进行了定义)。所以当我们在调用函数时,一定要确定在调用之前进行了函数定义。

二、正确使用参数

我们要在调用函数时,需要正确调用函数的名称和参数

例如我们定义了一个加法函数:

def plus(a,b):  
    return a+b  

我们在调用plus()函数时,如果传入的参数类型不对,会报TypeError错误。而且有时我们传入的参数类型不是规定类型的话,就算调用函数运行结果没有报错,也会产生逻辑错误。

例如:

# 定义plus函数,作用是求两个正整数之和  
def plus(a,b):  
    return a+b
# 调用plus函数,参数类型为'1','2'  
print(plus('1','2'))  

输出结果:

12  

虽然上述例子的程序运行结果没有报错,但是结果却与我们的预期不符,因为我们的本意是调用plus()加粗样式函数实现两个整数的加法。但是如果我们传入的是字符串类型的数值时,结果就是两个字符串的拼接。所以这个例子告诉我们一定要注意传入参数的类型。当我们传入正常类型的参数时,传入的参数个数不一致时,也会报TypeError错误。

例如:

# 定义plus函数,作用是求两个正整数之和  
def plus(a,b):  
    return a+b
# 调用plus函数,参数为1,2,3  
print(plus(1,2,3))  

报错:

TypeError: plus() takes 2 positional arguments but 3 were given  

报错原因显示,因为plus()函数允许有且仅有2个参数,但是却在调用时传入了3个参数,所以程序报错。

三、函数与函数之间的调用

3.1 第一种情况 程序代码如下:

def x(f):  
    def y():  
        print(1)  
    return y
def f():  
    print(2)
x(f)  

运行结果:

无结果

分析:因为第9行中的x(f)中的f没有带括号,f只是一个普通的参数,所以程序只调用执行了x(f)函数,没有调用执行f()函数。x(f)函数中虽然也定义了y()函数,但是x(f)函数中没有调用执行y()函数,只是执行了return y。而y变量也没有值,所以整个程序的返回值就为无结果。

3.2 第二种情况 程序代码如下:

def x(f):  
    def y():  
        print(1)  
    return y
def f():  
    print(2)
x(f())  

运行结果:

2  

分析:因为第9行中的x(f())中的f()带括号,所以程序先调用执行f()函数,先输出2。然后2作为参数传入到x(f)函数中,程序开始调用执行x(f)函数。x(f)函数中虽然也定义了y()函数,但是x(f)函数中没有调用执行y()函数,只是执行了return y。而y变量也没有值,所以调用执行x(f)函数没有产生任何结果。因此该程序最终只输出了2。

3.3 第三种情况 程序代码如下:

def x(f):  
    def y():  
        print(1)  
    return y()
def f():  
    print(2)
x(f)  

运行结果:

1

分析:因为第9行中的x(f)中的f没有带括号,f只是一个普通的参数,所以程序只调用执行了x(f)函数,没有调用执行f()函数。x(f)函数中也定义了y()函数,并且返回是y()函数。因此程序调用执行了y()函数,输出结果是1。

3.4 第四种情况

def x(f):  
    def y():  
        print(1)  
    return y()
def f():  
    print(2)
x(f())

运行结果:

2  
1  

分析:因为第9行中的x(f())中的f()带括号,所以程序调用执行了f()函数,先输出2。然后2作为参数传入到x(f)函数中,程序开始调用执行x(f)函数。x(f)函数中也定义了y()函数,并且返回是y()函数。因此程序也调用执行了y()函数,也输出了1。最终该程序先后输出了2和1。

3.5 第五种情况 程序代码如下:

def x(f):  
    def y():  
        print(1)  
        print(f())  
    return y()
def f():  
    #print(2)  
    return 2
x(f)  

运行结果:

1  
2  

分析:因为第9行中的x(f)中的f没有带括号,f只是一个普通的参数,所以程序只是先调用执行了x(f)函数。在x(f)函数中也定义了y()函数,而且返回值是y()函数,所以程序会调用执行y()函数。在y()函数中先是执行print(1)语句,输出1,接着执行print(f())语句,所以程序在这时也会调用执行f()函数,输出2。最终该程序先后输出了1和2。

好了,今天就介绍到这儿,欢迎点赞收藏!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1019203.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LeetCode 面试题 04.09. 二叉搜索树序列

文章目录 一、题目二、C# 题解 一、题目 从左向右遍历一个数组,通过不断将其中的元素插入树中可以逐步地生成一棵二叉搜索树。 给定一个由不同节点组成的二叉搜索树 root,输出所有可能生成此树的数组。 点击此处跳转题目。 示例 1: 输入: root [2,1,3]…

商家收款码手续费收费标准

不管是微信还是支付宝,商户最低的收款手续费率可以达到0.2%费率。一般我们普通商户的收款费率一般在0.6左右,当然也有使用0.3的,也就是1万元的费率是30-60块钱,对于一些流水比较大的商家来说,确实很有必要把这个手续费…

为什么有了IP地址还需要MAC地址?

上午好,我的网工朋友。 今天想和你聊聊Mac地址。 到底啥是Mac地址?官方直译是媒体存取控制位址,是一个用来确认网络设备位置的位址。 在OSI模型中,第三层网络层负责IP地址,第二层数据链路层则负责MAC位址。 MAC地址…

【JavaEE】多线程(三)

多线程(三) 续上文,多线程(二),我们已经讲了 创建线程Thread的一些重要的属性和方法 那么接下来,我们继续来体会了解多线程吧~ 文章目录 多线程(三)线程启动 startsta…

微信小程序如何跳转到tabBar页面、如何携带参数过去

文章目录 一、跳转链接时,不能使用navigator标签、 wx.navigateTo、wx.redirectTo方法跳转页面问题解决:1、wx.switchTab(Object object)2、wx.reLaunch(Object object) 二、不能用常规的方式给tabBar的页面传递参数问题解决:1、用前面提到的…

聚观早报 | 联发科天玑9300跑分曝光;OPPO A2 Pro开启预售

【聚观365】9月18日消息 联发科天玑9300跑分曝光 OPPO A2 Pro开启预售 哪吒汽车泰国累计交付破1万台 小米13T系列最新渲染图出炉 酷派手机新品通过工信部入网 联发科天玑9300跑分曝光 今年上半年,联发科推出了天玑9200移动平台,截至目前已有多款机…

二蛋赠书三期:《C#入门经典(第9版)》

文章目录 前言活动规则参与方式本期赠送书籍介绍作者介绍内容简介读者对象获奖名单 结语 前言 大家好!我是二蛋,一个热爱技术、乐于分享的工程师。在过去的几年里,我一直通过各种渠道与大家分享技术知识和经验。我深知,每一位技术…

Apache httpd 安全漏洞处理-升级httpd版本

文章目录 前言一、现状二、使用codeit库升级Apache1. 安装epel-release2. 下载codeit的repo文件3. 查看版本信息4. 更新httpd版本后确认版本5. 重启httpd服务 总结 前言 手上有台zabbix-server服务器,用了httpd的服务支撑,漏扫时发现有很多的Apache htt…

具体项目下解决Echarts多端同步开发和维护的问题

具体问题场景 PC端和移动端需要同时上线图表功能(没有多余工时) 之后的版本迭代(功能、样式、配置等)默认双端同步,开发人员只希望维护一套代码 Echarts在移动端有部分功能不兼容不支持 Echarts在移动端的坑 ① 移动端…

AI与医疗保健:革命性技术如何拯救生命

文章目录 引言AI的应用领域1. 影像识别2. 疾病诊断3. 药物研发4. 个性化治疗 AI技术1. 机器学习2. 深度学习3. 自然语言处理4. 基因组学 实际案例1. Google Health的深度学习模型2. IBM Watson for Oncology3. PathAI的病理学分析 道德和隐私考虑结论 🎉欢迎来到AIG…

振弦采集仪和传感器在岩土工程中安装方法的关键要点

振弦采集仪和传感器在岩土工程中安装方法的关键要点 振弦采集仪和传感器在岩土工程中的安装方法是岩土工程中非常关键的过程。其安装质量的好坏直接影响实验数据的准确性,进而影响工程设计和施工效果。因此,在实际工作中,如何正确的安装振弦…

0基础学习VR全景平台篇 第100篇:美团酒店丨平台上传全景全流程

目前美团平台已经具备VR全景图在美团App客户端的展示能力,但目前E-Booking暂未开通上传通道,若商家您有全景图且有意愿上传至平台,需要签署授权书,并依照规定的格式要求发送邮件申请,由平台代为人工上传。具体规则和要…

一款非常容易上手的报表工具,简单操作实现BI炫酷界面数据展示,驱动支持众多不同类型的数据库,可视化神器,免开源了

一款非常容易上手的报表工具,简单操作实现BI炫酷界面数据展示,驱动支持众多不同类型的数据库,可视化神器,免开源了。 在互联网数据大爆炸的这几年,各类数据处理、数据可视化的需求使得 GitHub 上诞生了一大批高质量的…

循环神经网络——上篇【深度学习】【PyTorch】【d2l】

文章目录 6、循环神经网络6.1、序列模型6.1.1、序列模型6.1.2、条件概率建模6.1.2、代码实现 6.2、文本预处理6.2.1、理论部分6.2.2、代码实现 6.3、语言模型和数据集 6、循环神经网络 6.1、序列模型 6.1.1、序列模型 序列模型主要用于处理具有时序结构的数据, *…

OA 电子审批流程是什么?

公司中,最最最常见也是最最最多的就是——各种审批。 我当年第一次实习,在一家国企的行政部门,我们部门领导那个时候最主要的工作就是“打通流程”,咱也不知道他在打通什么流程,反正这个很重要就是了。 结果&#xf…

docker swarm集群

集群构建 不包含在任何 Swarm 中的 Docker 节点,称为运行于单引擎(Single-Engine)模式。一旦被加入 Swarm 集群,则切换为 Swarm 模式。第一步我们要做的就是初始化 Swarm。 初始化swarm集群 将本机作为manager节点 docker swar…

小谈设计模式(4)—单一职责原则

小谈设计模式(4)—单一职责原则 专栏介绍专栏地址专栏介绍 单一职责原则核心思想职责的划分单一变化原则高内聚性低耦合性核心总结 举例图书类(Book)用户类(User)图书管理类(Library&#xff09…

强信创,高实用:SuperMap开发者线上训练营9月25日起航

当前,信创工作全面开展,从细分领域延展至所有领域,自主GIS技术也迈入新的发展阶段。2023年9月25日至9月27日,北京超图软件股份有限公司、917书院GIS学堂将主办以“强信创、高实用”为主题的SuperMap开发者训练营(以下简…

路由器ip地址设置

当你使用路由器时,你可以按照以下步骤设置路由器的IP地址。这样可以确保你的网络连接正常并允许其他设备连接到你的路由器。 **步骤一:登录路由器管理界面** 首先,你需要登录到路由器的管理界面。打开你的浏览器,并输入路由器的…

【校招VIP】java语言考点之switch和default

考点介绍: switch、default是 校招Java岗位面试时常考的关键字组合之一。 java语言考点之switch和default-相关题目及解析内容可点击文章末尾链接查看! 一、考点试题 1、switch语句能否作用在byte上,能否作用在long上,能否作用…