Python函数(函数定义、函数调用)用法详解

news2025/3/1 11:11:24

Python 中函数的应用非常广泛,前面章节中我们已经接触过多个函数,比如 input() 、print()、range()、len() 函数等等,这些都是 Python 的内置函数,可以直接使用。

除了可以直接使用的内置函数外,Python 还支持自定义函数,即将一段有规律的、可重复使用的代码定义成函数,从而达到一次编写、多次调用的目的。

举个例子,前面学习了 len() 函数,通过它我们可以直接获得一个字符串的长度。我们不妨设想一下,如果没有 len() 函数,要想获取一个字符串的长度,该如何实现呢?请看下面的代码:

n=0
for c in"http://csdn.net/python/":
   n = n +1
print(n)

程序执行结果为:

30

要知道,获取一个字符串长度是常用的功能,一个程序中就可能用到很多次,如果每次都写这样一段重复的代码,不但费时费力、容易出错,而且交给别人时也很麻烦。

所以 Python 提供了一个功能,即允许我们将常用的代码以固定的格式封装(包装)成一个独立的模块,只要知道这个模块的名字就可以重复使用它,这个模块就叫做函数(Function)。

比如,在程序中定义了一段代码,这段代码用于实现一个特定的功能。问题来了,如果下次需要实现同样的功能,难道要把前面定义的代码复制一次?如果这样做实在太傻了,这意味着每次当程序需要实现该功能时,都要将前面定义的代码复制一次。正确的做法是,将实现特定功能的代码定义成一个函数,每次当程序需要实现该功能时,只要执行(调用)该函数即可。

其实,函数的本质就是一段有特定功能、可以重复使用的代码,这段代码已经被提前编写好了,并且为其起一个“好听”的名字。在后续编写程序过程中,如果需要同样的功能,直接通过起好的名字就可以调用这段代码。

下面演示了如何将我们自己实现的 len() 函数封装成一个函数:

#自定义 len() 函数
defmy_len(str):
    length =0
for c in str:
       length = length +1
return length
#调用自定义的 my_len() 函数
length =my_len("http://csdn.net/python/")
print(length)

#再次调用 my_len() 函数
length =my_len("http://csdn.net/shell/")
print(length)

程序执行结果为:

30
29

如果读者接触过其他编程语言中的函数,以上对于函数的描述,肯定不会陌生。但需要注意的一点是,和其他编程语言中函数相同的是,Python 函数支持接收多个( ≥0 )参数,不同之处在于,Python 函数还支持返回多个( ≥0 )值。

比如,上面程序中,我们自己封装的 my_len(str) 函数,在定义此函数时,我们为其设置了 1 个 str 参数,同时该函数经过内部处理,会返回给我们 1 个 length 值。

通过分析 my_len() 函数这个实例不难看出,函数的使用大致分为 2 步,分别是定义函数和调用函数。接下来一一为读者进行详细的讲解。

Python函数的定义

定义函数,也就是创建一个函数,可以理解为创建一个具有某些用途的工具。定义函数需要用 def 关键字实现,具体的语法格式如下:

def 函数名(参数列表):
//实现特定功能的多行代码
[return [返回值]]

其中,用 [] 括起来的为可选择部分,即可以使用,也可以省略。

此格式中,各部分参数的含义如下:

  • 函数名:其实就是一个符合 Python 语法的标识符,但不建议读者使用 a、b、c 这类简单的标识符作为函数名,函数名最好能够体现出该函数的功能(如上面的 my_len,即表示我们自定义的 len() 函数)。

  • 形参列表:设置该函数可以接收多少个参数,多个参数之间用逗号( , )分隔。

  • [return [返回值] ]:整体作为函数的可选参参数,用于设置该函数的返回值。也就是说,一个函数,可以用返回值,也可以没有返回值,是否需要根据实际情况而定。

注意,在创建函数时,即使函数不需要参数,也必须保留一对空的“()”,否则 Python 解释器将提示“invaild syntax”错误。另外,如果想定义一个没有任何功能的空函数,可以使用 pass 语句作为占位符。

例如,下面定义了 2 个函数:

#定义个空函数,没有实际意义
defpass_dis():
pass
#定义一个比较字符串大小的函数
defstr_max(str1,str2):
    str = str1 if str1 > str2 else str2
return str
虽然 Python 语言允许定义个空函数,但空函数本身并没有实际意义。

另外值得一提的是,函数中的 return 语句可以直接返回一个表达式的值,例如修改上面的 str_max() 函数:

defstr_max(str1,str2):
return str1 if str1 > str2 else str2

该函数的功能,和上面的 str_max() 函数是完全一样的,只是省略了创建 str 变量,因此函数代码更加简洁。

Python函数的调用

调用函数也就是执行函数。如果把创建的函数理解为一个具有某种用途的工具,那么调用函数就相当于使用该工具。

函数调用的基本语法格式如下所示:

[返回值] = 函数名([形参值])

其中,函数名即指的是要调用的函数的名称;形参值指的是当初创建函数时要求传入的各个形参的值。如果该函数有返回值,我们可以通过一个变量来接收该值,当然也可以不接受。

需要注意的是,创建函数有多少个形参,那么调用时就需要传入多少个值,且顺序必须和创建函数时一致。即便该函数没有参数,函数名后的小括号也不能省略。

例如,我们可以调用上面创建的 pass_dis() 和 str_max() 函数:首先,对于调用空函数来说,由于函数本身并不包含任何有价值的执行代码,也没有返回值,应该调用空函数不会有任何效果。

其次,对于上面程序中调用 str_max() 函数,由于当初定义该函数为其设置了 2 个参数,因此这里在调用该参数,就必须传入 2 个参数。同时,由于该函数内部还使用了 return 语句,因此我们可以使用 strmax 变量来接收该函数的返回值。

因此,程序执行结果为:

http://csdn.net/shell

为函数提供说明文档

前面章节讲过,通过调用 Python 的 help() 内置函数或者 __doc__ 属性,我们可以查看某个函数的使用说明文档。事实上,无论是 Python 提供给我们的函数,还是自定义的函数,其说明文档都需要设计该函数的程序员自己编写。

其实,函数的说明文档,本质就是一段字符串,只不过作为说明文档,字符串的放置位置是有讲究的,函数的说明文档通常位于函数内部、所有代码的最前面。

以上面程序中的 str_max() 函数为例,下面演示了如何为其设置说明文档:

#定义一个比较字符串大小的函数
defstr_max(str1,str2):
    '''
    比较 2 个字符串的大小
    '''
    str = str1 if str1 > str2 else str2
return str
help(str_max)
#print(str_max.__doc__)

程序执行结果为:

Help on function str_max in module __main__:

str_max(str1, str2)
比较 2 个字符串的大小

上面程序中,还可以使用 __doc__ 属性来获取 str_max() 函数的说明文档,即使用最后一行的输出语句,其输出结果为:

比较 2 个字符串的大小

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

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

相关文章

LeetCode刷题模版:201 - 210

目录 简介201. 数字范围按位与202. 快乐数203. 移除链表元素204. 计数质数205. 同构字符串206. 反转链表207. 课程表【未实现】208. 实现 Trie (前缀树)209. 长度最小的子数组210. 课程表 II【未实现】结语简介 Hello! 非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您…

LeetCode[1319]连通网络的操作次数

难度:中等题目:用以太网线缆将 n台计算机连接成一个网络,计算机的编号从 0到 n-1。线缆用 connections表示,其中 connections[i] [a, b]连接了计算机 a和 b。网络中的任何一台计算机都可以通过网络直接或者间接访问同一个网络中其…

(十六)异步编程

CompletableFuture在Java8中推出,Java8中的异步编程就是依靠此类。几种任务接口四种任务无参数有一个参数有两个参数无返回值RunnableConsumerBiConsumer有返回值SupplierFunctionBiFunctionCompletionStage接口这个类中定义的许多能够链式调用的方法和组合方法时是…

Unity3DVR开发—— XRInteractionToolkit(PicoNeo3)

目录 一、开发前的准备 二、基础配置 三、Pico项目配置 四、添加基础功能 一、开发前的准备 1、为了方便开发,先在Pico开发者平台里下载预览工具 Pico开发者平台https://developer-global.pico-interactive.com/sdk?deviceId1&platformId1&itemId17 2、…

【哈希表】关于哈希表,你该了解这些!

【哈希表】理论基础1 哈希表2 哈希函数3 哈希碰撞3.1 拉链法3.2 线性探测法4 常见的三种哈希结构5 总结1 哈希表 哈希表 Hash table (一些书籍翻译为散列表) 哈希表是根据关键码的值而直接进行访问的数据结构。 直白来讲其实数组就是一张哈希表。 哈希表…

用1行Python代码识别增值税发票,YYDS

大家好,这里是程序员晚枫。 录入发票是一件繁琐的工作,如果可以自动识别并且录入系统,那可真是太好了。 今天我们就来学习一下,如何自动识别增值税发票并且录入系统~ 识别发票 识别发票的代码最简单,只需要1行代码…

CSS的总结

从HTML被发明开始,样式就以各种形式存在。不同的浏览器结合它们各自的样式语言为用户提供页面效果的控制。最初的HTML只包含很少的显示属性。 随着HTML的成长,为了满足页面设计者的要求,HTML添加了很多显示功能。但是随着这些功能的增加&…

ISIS的路由器级别level-1、level-2、level-1-2,报文格式

2.1.0 ISIS的路由器级别level-1、level-2、level-1-2,报文格式 通过该文章了解ISIS的路由器级别类型、级别之间建立的邻接关系、各级别的作用、ISIS报文的结构。 ISIS路由器级别 Level-1 level-1路由器又称L1路由器,是一种ISIS区域内部路由&#xff0c…

6、运算符

目录 一、赋值运算符 二、算数运算符 三、自增和自减运算符 四、比较运算符 五、逻辑运算符 六、位运算符 1. “按位与”运算 2. “按位或”运算 3. “按位取反”运算 4. “按位异或”运算 5. 移位操作 七、三元运算符 八、运算符优先级 一、赋值运算符 赋值运算…

[Android开发基础1] 五大常用界面布局

文章目录 一、线性布局 二、相对布局 三、帧布局 四、表格布局 五、约束布局 总结 一、线性布局 线性布局(LinearLayout)主要以水平或垂直方式来显示界面中的控件。当控件水平排列时,显示顺序依次为从左到右,当控件垂直排列时…

29/365 java 网络通信 IP InetAddress

1.网络通信: 如何定位到一台主机? IP地址 定位主机, 端口号定位到具体的应用程序 如何在主机之间通信(传输数据)? 网络通信协议 2.IP地址分类 IPv4: 32位 IPv6地址:128位 IPv6地址使用以冒号…

初学python100例-案例37 合并排序列表 少儿编程python编程实例讲解

目录 python合并排序列表 一、题目要求 1、编程实现 2、输入输出

C语言形参和实参的区别

如果把函数比喻成一台机器,那么参数就是原材料,返回值就是最终产品;从一定程度上讲,函数的作用就是根据不同的参数产生不同的返回值。这一节我们先来讲解C语言函数的参数,下一节再讲解C语言函数的返回值。C语言函数的参…

浅谈多任务学习

目录 一、前言及定义 二、多任务学习(MTL)的两种方法 2.1 参数的硬共享机制(hard parameter sharing) 2.2 参数的软共享机制(soft parameter sharing) 三、多任务学习模型 3.1 MT-DNN 3.2 ERNIE 2.0…

数学建模学习笔记(9)多元线性回归分析(非常详细)

多元线性回归分析1.回归分析的地位、任务和分类2.数据的分类3.对线性的理解、系数的解释和内生性4.取对数预处理、虚拟变量和交互效应5.使用Stata进行多元线性回归分析6.异方差7.多重共线性8.逐步回归法1.回归分析的地位、任务和分类 回归分析的地位:数据分析中最基…

cclow 面试心得

开源ccflow学习的一些心得目录概述需求:设计思路实现思路分析1.心得参考资料和推荐阅读Survive by day and develop by night. talk for import biz , show your perfect code,full busy,skip hardness,make a better result,wait for change,challenge …

JavaEE-文件和IO(一)

目录一、文件1.1 认识文件1.2 树型结构组织和目录1.3 文件路径二、Java中操作文件2.1 文件系统相关的操作一、文件 1.1 认识文件 平时说的文件一般都是指存储再硬盘上的普通文件,形如txt,jpg,MP4,rar等这些文件都可以认为是普通…

Java集合常见面试题(四)

Map 接口 HashMap 的底层实现 JDK1.8 之前 JDK1.8 之前 HashMap 底层是 数组和链表 结合在一起使用也就是 链表散列,数组是 HashMap 的主体,链表则是主要为了解决哈希冲突而存在的。 HashMap 通过 key 的 hashcode 经过扰动函数(hash函数&…

JAVA基础知识08集合基础

目录 1. 集合 1.1 什么是集合? 1.2 ArrayList 1.2.1 ArrayList 长度可变原理 1.2.2 集合和数组的使用选择 1.2.3 ArrayList 集合常用成员方法 1. 集合 1.1 什么是集合? 集合是一种容器,用来装数据的,类似于数组。 其长度可…

线段树的懒标记与应用

目录 一、前言 二、Lazy-tag技术 1、update() 中的lazy-tag 三、例题 1、区间修改、区间查询(lanqiaoOJ 1133) 一、前言 本文主要讲了线段树的Lazy-tag技术和一道例题,建议自己要多练习线段树的题目。 二、Lazy-tag技术 背景&#xf…