python函数定义及调用-Python函数(函数定义、函数调用)用法详解
Python 中函数的应用非常广泛,前面章节中我们已经接触过多个函数,比如 input() 、print()、range()、len() 函数等等,这些都是 Python 的内置函数,可以直接使用。
除了可以直接使用的内置函数外,Python 还支持自定义函数,即将一段有规律的、可重复使用的代码定义成函数,从而达到一次编写、多次调用的目的。
举个例子,前面学习了 len() 函数,通过它我们可以直接获得一个字符串的长度。我们不妨设想一下,如果没有 len() 函数,要想获取一个字符串的长度,该如何实现呢?请看下面的代码:
n=0
for c in "http://c.biancheng.net/python/":
n = n + 1
print(n)
程序执行结果为:
30
要知道,获取一个字符串长度是常用的功能,一个程序中就可能用到很多次,如果每次都写这样一段重复的代码,不但费时费力、容易出错,而且交给别人时也很麻烦。
所以 Python 提供了一个功能,即允许我们将常用的代码以固定的格式封装(包装)成一个独立的模块,只要知道这个模块的名字就可以重复使用它,这个模块就叫做函数(Function)。
比如,在程序中定义了一段代码,这段代码用于实现一个特定的功能。问题来了,如果下次需要实现同样的功能,难道要把前面定义的代码复制一次?如果这样做实在太傻了,这意味着每次当程序需要实现该功能时,都要将前面定义的代码复制一次。正确的做法是,将实现特定功能的代码定义成一个函数,每次当程序需要实现该功能时,只要执行(调用)该函数即可。
其实,函数的本质就是一段有特定功能、可以重复使用的代码,这段代码已经被提前编写好了,并且为其起一个"好听”的名字。在后续编写程序过程中,如果需要同样的功能,直接通过起好的名字就可以调用这段代码。
下面演示了如何将我们自己实现的 len() 函数封装成一个函数:
#自定义 len() 函数
def my_len(str):
length = 0
for c in str:
length = length + 1
return length
#调用自定义的 my_len() 函数
length = my_len("http://c.biancheng.net/python/")
print(length)
#再次调用 my_len() 函数
length = my_len("http://c.biancheng.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 个函数:
#定义个空函数,没有实际意义
def pass_dis():
pass
#定义一个比较字符串大小的函数
def str_max(str1,str2):
str = str1 if str1 > str2 else str2
return str
虽然 Python 语言允许定义个空函数,但空函数本身并没有实际意义。
另外值得一提的是,函数中的 return 语句可以直接返回一个表达式的值,例如修改上面的 str_max() 函数:
def str_max(str1,str2):
return str1 if str1 > str2 else str2
该函数的功能,和上面的 str_max() 函数是完全一样的,只是省略了创建 str 变量,因此函数代码更加简洁。
Python函数的调用
调用函数也就是执行函数。如果把创建的函数理解为一个具有某种用途的工具,那么调用函数就相当于使用该工具。
函数调用的基本语法格式如下所示:
[返回值] = 函数名([形参值])
其中,函数名即指的是要调用的函数的名称;形参值指的是当初创建函数时要求传入的各个形参的值。如果该函数有返回值,我们可以通过一个变量来接收该值,当然也可以不接受。
需要注意的是,创建函数有多少个形参,那么调用时就需要传入多少个值,且顺序必须和创建函数时一致。即便该函数没有参数,函数名后的小括号也不能省略。
例如,我们可以调用上面创建的 pass_dis() 和 str_max() 函数:
pass_dis()
strmax = str_max("http://c.biancheng.net/python","http://c.biancheng.net/shell");
print(strmax)
首先,对于调用空函数来说,由于函数本身并不包含任何有价值的执行代码,也没有返回值,应该调用空函数不会有任何效果。
其次,对于上面程序中调用 str_max() 函数,由于当初定义该函数为其设置了 2 个参数,因此这里在调用该参数,就必须传入 2 个参数。同时,由于该函数内部还使用了 return 语句,因此我们可以使用 strmax 变量来接收该函数的返回值。
因此,程序执行结果为:
http://c.biancheng.net/shell
为函数提供说明文档
前面章节讲过,通过调用 Python 的 help() 内置函数或者 __doc__ 属性,我们可以查看某个函数的使用说明文档。事实上,无论是 Python 提供给我们的函数,还是自定义的函数,其说明文档都需要设计该函数的程序员自己编写。
其实,函数的说明文档,本质就是一段字符串,只不过作为说明文档,字符串的放置位置是有讲究的,函数的说明文档通常位于函数内部、所有代码的最前面。
以上面程序中的 str_max() 函数为例,下面演示了如何为其设置说明文档:
#定义一个比较字符串大小的函数
def str_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 个字符串的大小
python函数定义及调用-Python函数(函数定义、函数调用)用法详解相关推荐
- python中global和def_Python中 Global和Nonlocal的用法详解
nonlocal 和 global 也很容易混淆.简单记录下自己的理解. 解释 global 总之一句话,作用域是全局的,就是会修改这个变量对应地址的值. global 语句是一个声明,它适用于整个当 ...
- python内存池_python内存监控工具memory_profiler和guppy的用法详解
python内存监控工具memory_profiler和guppy的用法详解 发布时间:2020-08-21 19:44:58 来源:脚本之家 阅读:123 python2.7在内存管理上相比pyth ...
- python 多进程 调用模块内函数_python--多进程的用法详解实例
想让python实现多进程(multiprocessing),我们要先区分不同的操作系统的不同之处. Linux操作系统下提供了一个fork()系统调用,普通函数调用一次返回一次,fork()调用一次 ...
- MYSQL中对时间的处理函数(DATE_FORMAT(),DATE_ADD() / DATE_SUB(),DATEDIFF(),NIX_TIMESTAMP(),FROM_UNIXTIME())用法详解
1.DATE_FORMAT()函数 DATE_FORMAT函数格式化日期,是处理日期最常用的一个函数. SELECT DATE_FORMAT(date,format); #date 日期,一般是NOW ...
- python中sys模块有什么用_Python sys模块用法详解
sys 模块代表了 Python 解释器,主要用于获取和 Python 解释器相关的信息. 在 Python 的交互式解释器中先导入 sys 模块,然后输入 [e for e in dir(sys) ...
- python方向键控制角色_Python控制鼠标和键盘-PyAutoGUI用法详解
PyAutoGUI--让所有GUI都自动化 安装代码:pip install pyautogui 1.简介 1.1 目的 PyAutoGUI是一个纯Python的GUI自动化工具,其目的是可以用程序自 ...
- python xpath语法-Python爬虫基础之XPath语法与lxml库的用法详解
前言 本来打算写的标题是XPath语法,但是想了一下Python中的解析库lxml,使用的是Xpath语法,同样也是效率比较高的解析方法,所以就写成了XPath语法和lxml库的用法 XPath 即为 ...
- python中IO库中StringIO方法和BytesIO方法用法详解
有时候数据读写不一定是文件,也可以在内存中读写.StringIO顾名思义就是在内存中读写str. Python在内存中读写数据,用到的模块是StringIO和BytesIO. getvalue()方法 ...
- python网络抓包工具_抓包工具 Charles 用法详解
前言 抓包工具第一篇文章我们讲过,主要有 Charles 和 Fiddler,关于 Fiddler 抓包 APP 的,我之前写过一篇文章:Fiddler抓包APP教程,Fiddler 抓包 App 请 ...
- html 调用tcpdump,Linux tcpdump命令的用法详解(内容较多)
tcpdump命令,即:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具. tcpdump可以将网络中传送的数据包的"头&qu ...
最新文章
- Python使用pandas设置数据列中float数据类型的有效小数位数、抑制科学计数法
- 【NLP】一文速览 | 对话生成预训练模型
- 转 从红帽、GitHub和Docker看开源商业模式的进阶
- 豆瓣源的使用CSDN的文章编辑
- 大数据学习笔记26:MR案例——双重排序(先按月份升序,再按利润降序)
- linux neo4j weget,关于在linux中安装neo4j的步骤
- Recover through incarnations: RMAN-20208
- 深入浅出mysql csdn_《深入浅出MySQL:数据库开发、优化与管理维护
- 无线键盘RK61使用说明
- java自动违例设计,Java违例控制,java违例
- 12306采用Pivotal GemFire分布式解决方案 解决尖峰高流量并发问题
- Android 收缩控件,展开,收缩
- Linux镜像下载大全
- 三花集金花茶“茶族皇后”不仅貌美,还有丰富的营养价值
- Arduino项目——三路抢答器的设计
- 产品经理深入浅出学习笔记
- 《MATLAB智能算法30个案例》:第1章 谢菲尔德大学的MATLAB遗传算法工具箱
- 电子科技大学计算机硕士平均薪水,电子科技大学的本科生月薪平均超过十万?他的毕业生就业咋样...
- 虚拟磁带库VTL在实践中的优势
- 利用flask解析海康摄像头视频