python中的函数(Python中的函数定义通过define关键字完成)
off999 2024-10-25 13:46 15 浏览 0 评论
前言
在 Python 中,函数是一等对象。编程语言理论家把“一等对象”定义为满 足下述条件的程序实体: 在运行时创建 能赋值给变量或数据结构中的元素,能作为参数传给函数,能作为函数的返回结果。即在 Python 中,所有东西都是一等对象。
函数的定义
python中定义函数使用关键字def,然后跟函数名与括号内的形参列表,例如如下所示:
def function_name(parameter_list):
"""doc string"
// 具体逻辑
函数参数
- 默认值参数
在python当中我们可以为函数的参数指定默认值,这样在调用函数时,可以使用比定义时更少的参数。
def print_name(name="tom"):
print(f"my name is {name}")
print_name() // 调用时不传递参数
print_name(name="jack") // 调用时传递参数,并覆盖默认值
我们需要记住的是默认参数的值只会计算一次,但是如果参数类型是可变类型时,就会产生意想不到的结果了,例如下面的例子
当参数类型为不可变对象时:
num = 5
def print_number(arg=num):
print(arg)
num = 6
print_number(num) // 输出结果为5
当参数类型为可变对象时,例如参数类型为列表,函数会累积后续调用时传递的参数,具体代码例子如下所示:
>>> def print_list(a, L=[]):
... L.append(a)
... return L
...
>>> print(print_list(1))
[1]
>>> print(print_list(2))
[1, 2]
>>> print(print_list(3))
[1, 2, 3]
>>>
如果不想在后续调用之间共享默认值时,我们应该将默认值设置为None,具体如下所示:
>>> def pf(a, L=None):
... if L is None:
... L = []
... L.append(a)
... return L
...
>>> print(pf(1))
[1]
>>> print(pf(2))
[2]
>>> print(pf(3))
[3]
>>>
2. 关键字参数
关键字参数是指在函数调用中前面带有标识符(例如name=)或者作为包含在前面带有**的字典里的值传入的参数。例如下面所示:
def complete(shell=True, prefx="/"):
...
函数调用时,关键字参数必须跟在位置参数后面。所有传递的关键字参数都必须匹配一个函数接受的参数,关键字参数的顺序并不重要。
3. 位置参数
位置参数是指可出现于参数列表的开头以及斜杠(/)或者作为前面带有星号(*)的可迭代对象里的元素被传入。例如下面所示:
def complete(name, /, age, *):
...
4. 特殊参数
默认情况下,参数可以按位置或显式关键字传递给 Python 函数。为了让代码易读、高效,最好限制参数的传递方式,这样,开发者只需查看函数定义,即可确定参数项是仅按位置,按位置或关键字,还是仅按关键字传递。
例如下面的函数:
def complete(name, age, /, position_keyword, *, keyword):
...
其中name和age只能是位置参数,position_keyword可以是位置参数也可以是关键字参数,keyword只能是关键字参数。/和*是可选的。这些符号表明形参如何把参数值传递给函数:位置、位置或关键字、关键字。关键字形参也叫作命名形参。
- 位置或关键字参数:函数定义中未使用正斜杠(/ )和x星号(*)时,参数可以按位置或关键字传递给函数。
- 仅位置参数:仅限位置 时,形参的顺序很重要,且这些形参不能用关键字传递。仅限位置形参应放在(/ ) 正斜杠前。正斜杠(/ )用于在逻辑上分割仅限位置形参与其它形参。如果函数定义中没有 (/ ),则表示没有仅限位置形参。正斜杠(/ ) 后可以是 位置或关键字 或 仅限关键字 形参。
- 仅限关键字参数:把形参标记为仅限关键字,表明必须以关键字参数形式传递该形参,应在参数列表中第一个仅限关键字形参前添加星号(*)。
Lambda 表达式
lambda关键字用于创建小巧的匿名函数。Lambda 函数可用于任何需要函数对象的地方。在语法上,匿名函数只能是单个表达式。在语义上,它只是常规函数定义的语法糖。与嵌套函数定义一样,lambda 函数可以引用包含作用域中的变量。
>>> def make_incrementor(n):
... return lambda x: x + n
...
>>> f = make_incrementor(55)
>>> f(0)
55
高阶函数
接受函数为参数,或者把函数作为结果返回的函数是高阶函数。在函数式语言通常会提供 map、filter 和 reduce 三个高阶函数(有时 使用不同的名称)。在 Python 3 中,map 和 filter 还是内置函数,但是由于引入了列表推导和生成器表达式,它们变得没那么重要了。
- map函数
map 函数,它接收两个参数,第一个参数是一个函数对象(当然也可以是一个lambda表达式), 第二个参数是一个序列。返回的是一个可迭代的map对象
>>> mp = map(lambda x: x * x, [1, 2, 3, 4, 5])
>>> mp
<map object at 0x7f34c9eceda0>
>>> for item in mp:
... print(item)
...
1
4
9
16
25
- filter函数
filter 函数,和 map 函数相似。同样也是接收两个参数,一个函数对象或者是一个lambda 表达式和一个序列。它会遍历后面序列中每一个元素,并将其做为参数传入lambda表达式中,当表达式返回 True,则元素会被 保留下来,当表达式返回 False ,则元素会被丢弃。返回的是一个经过过滤操作的可迭代的filter对象。
>>> fl = filter(lambda x: x < 0, range(-3, 3))
>>> fl
<filter object at 0x7f34c9ece860>
>>> for item in fl:
... print(item)
...
-3
-2
-1
- reduce函数
reduce 函数,也是类似的。它的作用是先对序列中的第 1,2 个元素进行操作,得到的结果再与第 三个数据用 函数对象或者lambda表达式运算,将其得到的结果再与第四个元素进行运算,以此类推下去直到后面 没有元素了。返回函数对象或lambda最终运行的结果。
>>> from functools import reduce
>>> rd = reduce(lambda x, y: x + y, [1, 2, 3, 4, 5, 6])
>>> rd
21
>>>
函数注解
函数注解是可选的,用户可以自定义函数类型的元数据完整信息(其实就是指定函数参数的类型,作为动态语言有点多此一举了)标注以字典的形式存放在函数的__annotations__属性中,并且不会影响函数的任何其他部分。 形参标注的定义方式是在形参名后加冒号,后面跟一个表达式,该表达式会被求值为标注的值。 返回值标注的定义方式是加组合符号->,后面跟一个表达式,该标注位于形参列表和表示def语句结束的冒号之间。具体如下所示:
def complete(shell: bool = True, command: str = "") -> bool:
...
小结
在python中一切皆对象,我们可以把函数 赋值给变量、传给其他函数、存储在数据结构中,以及访问函数的属 性,供框架和一些工具使用。
相关推荐
- 实战:用 Python+Flask+Echarts 构建电商实时数据大屏
-
在电商运营中,实时掌握销售趋势、用户行为等核心数据是决策的关键。本文将从实战角度,详解如何用Python+Flask+Echarts技术栈,快速搭建一个支持实时更新、多维度可视化的电商数据大屏,帮...
- DeepSeek完全使用手册:从新手到高手的2000字实操指南
-
一、工具定位与核心功能矩阵(200字)DeepSeek是一款专注于深度推理的强大AI助手,其功能丰富多样,可归纳为4大能力象限:plaintext差异化优势:DeepSeek支持最长达16Ktok...
- Python绘制可爱的图表 cutecharts
-
一个很酷的python手绘样式可视化包——可爱的图表cutecharts。Cutecharts非常适合为图表提供更个性化的触感。Cutecharts与常规的Matplotlib和Seabo...
- 第十二章:Python与数据处理和可视化
-
12.1使用pandas进行数据处理12.1.1理论知识pandas是Python中最常用的数据处理库之一,它提供了高效的数据结构和数据分析工具。pandas的核心数据结构是Serie...
- 5分钟就能做一个Excel动态图表,你确定不学学?(纯gif教学)
-
本文说明下图是一个比较酷炫的Excel动态图表,最难的部分就是用到了一个复选框控件。其实这个控件我很早就见过,但是不会用呀!望洋兴叹。这次呢,我也是借着这个文章为大家讲述一下这个控件的使用。本文没有...
- Python数据可视化:从Pandas基础到Seaborn高级应用
-
数据可视化是数据分析中不可或缺的一环,它能帮助我们直观理解数据模式和趋势。本文将全面介绍Python中最常用的三种可视化方法。Pandas内置绘图功能Pandas基于Matplotlib提供了简洁的绘...
- 如何使用 Python 将图表写入 Excel
-
将Python生成的图表写入Excel文件是数据分析和可视化中常见的需求。Python提供了多种库(如matplotlib、openpyxl和xlsxwriter)来实现这一功能。本文...
- Excel 图表制作太痛苦?用 Python 生成动态交互图表
-
做个动态图表花了3小时?你该换方法了!上周帮销售部做季度汇报图表,Excel操作把我整崩溃了——插入折线图后发现数据源选错,重新选择又得调格式想做动态筛选图表,捣鼓"开发工具"...
- Python Matplotlib 入门教程:可视化数据的基石
-
一、简介Matplotlib是Python中最流行的数据可视化库,提供从简单折线图到复杂3D图形的完整解决方案。其核心优势在于:o灵活性强:支持像素级样式控制o兼容性好:与NumPy、Pa...
- 20种Python数据可视化绘图 直接复制可用
-
本文介绍20种python数据绘图方法,可直接用于科研绘图或汇报用图。1.折线图(LinePlot)-描述数据随时间或其他变量的变化。importmatplotlib.pyplotasp...
- Python os模块完全指南:轻松玩转文件管理与系统操作
-
Pythonos模块完全指南:轻松玩转文件管理与系统操作os模块是Python与操作系统对话的"瑞士军刀",学会它能让你轻松管理文件、操控路径、获取系统信息。本教程通过场景化案例+...
- Python中h5py与netCDF4模块在Anaconda环境的下载与安装
-
本文介绍基于Anaconda环境,下载并安装Python中h5py与netCDF4这两个模块的方法。h5py与netCDF4这两个模块是与遥感图像处理、地学分析等GIS操作息息相关的模块,应用...
- python中的模块、库、包有什么区别?
-
一文带你分清Python模块、包和库。一、模块Python模块(Module),是一个Python文件,以.py结尾,包含了Python对象定义和Python语句。模块能定义函数,类和变...
- centos7 下面使用源码编译的方式安装python3.11
-
centos7下面使用源码编译的方式安装python3.11,步骤如下:cd/root#只是将python3.11的安装包下载到/root目录下wgethttps://www.python.o...
- Python其实很简单 第十四章 模块
-
模块是一组程序代码,可以是别人已经写好的,也可以是自己编写的,但都是已经存在的,在编程时直接使用就可以了。模块机制的最大好处就是程序员不再编写重复的代码,而直接利用已有的成果,这样就能将更多的精力投入...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python面向对象编程 (60)
- python 代码加密 (65)
- python串口编程 (77)
- python封装 (57)
- python读取文件夹下所有文件 (59)
- java调用python脚本 (56)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)