百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

python中的函数(Python中的函数定义通过define关键字完成)

off999 2024-10-25 13:46 32 浏览 0 评论

前言

在 Python 中,函数是一等对象。编程语言理论家把“一等对象”定义为满 足下述条件的程序实体: 在运行时创建 能赋值给变量或数据结构中的元素,能作为参数传给函数,能作为函数的返回结果。即在 Python 中,所有东西都是一等对象。

函数的定义

python中定义函数使用关键字def,然后跟函数名与括号内的形参列表,例如如下所示:

def function_name(parameter_list):
    """doc string"
    // 具体逻辑

函数参数

  1. 默认值参数

在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中一切皆对象,我们可以把函数 赋值给变量、传给其他函数、存储在数据结构中,以及访问函数的属 性,供框架和一些工具使用。

相关推荐

现在哪个浏览器好用(现在哪种浏览器好用)

一、谷歌浏览器谷歌浏览器是公认最好用的,这个可以从市场占有率看出端倪,超过三分之二的用户使用谷歌浏览器。Chrome浏览器以简洁快速著称,不管是普通用户还是开发人员,chrome浏览器都是首选。Chr...

笔记本电脑怎么恢复出厂设置联想
  • 笔记本电脑怎么恢复出厂设置联想
  • 笔记本电脑怎么恢复出厂设置联想
  • 笔记本电脑怎么恢复出厂设置联想
  • 笔记本电脑怎么恢复出厂设置联想
win10系统还是win7系统好(是win10好还是win7好)

就我个人觉得win7系统和win10系统都挺好用的,主要看个人习惯,win10系统也推出了3年了,相信很多用户也已经尝试过win10系统,操作上没有什么很大的区别,就是界面有些不同,这就看个人喜欢了。...

重装系统u盘制作教程(重装系统u盘怎么制作)

以下是重装电脑系统的一般步骤:在正常可用的电脑上下载并安装一个制作启动U盘的工具,例如Rufus、WinToUSB等。使用该工具将操作系统安装文件写入U盘,并设置U盘为启动盘。将U盘插入需要重装系统的...

从win8装回win7系统(win8.1怎么装回win7)

重装电脑,而且您的【电脑系统没有完全崩溃】,那么可以用【【【硬盘安装系统的方法】】】来装系统,无需借助光盘或者u盘,简单快速。电脑硬盘安装系统的方法如下:1.到WIN7旗舰版基地去http://ww...

查看电脑硬件信息的4个技巧

1、点击下面任务栏中的windows图标或按键盘windows键打开开始菜单。2、在开始菜单中找到设置或settings,通常是右上角的齿轮按钮。3、然后在设置界面中找到system选项,点击进入。4...

老式电脑的显卡在哪里(老式电脑主机显卡在哪)

十年前的老电脑没必要了,换新吧,估计接口什么也都有限制了我看了下你这个是品牌电脑,代工板的应该是没有显卡插槽的,有的话也是AGP的,可以去淘片AGPATI9000系列的卡或者6200660...

word产品密钥2016(word产品密匙2016)

word2016激活密钥有两种类型:永久激活码和KMS期限激活密钥。其中,永久激活密钥可以使用批量授权版永久激活密钥进行激活,如所示;而KMS期限激活密钥需要使用KMS客户端密钥进行激活,如所示。另外...

如何选择电脑配置(如何选择电脑配置的高低)

选择电脑配置时,首先要考虑自己的需求和预算。确定用途(如游戏、办公、设计等),然后选择适合的处理器、内存、显卡、存储和显示器等。处理器要根据性能和功耗进行选择,内存要足够大以支持多任务处理,显卡要根据...

win10下方任务栏无反应(win10下方任务栏消失)

按ctrl+alt+delete键win10系统电脑中,按键盘上的ctrl+alt+delete键2点击任务管理器点击出现窗口选项中的“任务管理器”3点击重新启动打开管理器后,右击Windows资源管...

win11找不到wifi网络(win11找不到wifi网络图标)

原因:可能是缺少了无线网卡驱动。解决方法:1、打开开始菜单,在上方搜索并进入“设备管理器”。2、接着展开网络适配器,找到无线网卡设备,右键选中,点击“更新驱动程序”。3、最后选择“自动搜索驱动程序”,...

关闭win7自动更新(怎么关闭win7自动更新)
  • 关闭win7自动更新(怎么关闭win7自动更新)
  • 关闭win7自动更新(怎么关闭win7自动更新)
  • 关闭win7自动更新(怎么关闭win7自动更新)
  • 关闭win7自动更新(怎么关闭win7自动更新)
激活office2013密钥匙(office 2013 激活密钥)

这是KMS激活,180天以后需要重新激活。安装在其他路径的话改第二行,第二行的作用就是进入Office15所在目录,所以实际路径是什么就写什么。第三行是KMS服务器IP地址,你写的这个是俄罗斯服务器,...

电脑版本低如何更新为最新版本

首先说一点:2002年的电脑了,2002年的主板和现在出的部分硬件配不上,如果换主板的话就基本等于重新配置一台新的了;第二点就是非要硬性升级的话很多以前的硬件都不出产了,价格较高,真心不如重新弄一台新...

修理电脑(修理电脑一般多少钱)

故障一:电脑蓝屏电脑蓝屏算是常见的故障了,其中主要有四个原因。1.内存条接触不良打开机箱将内存条固定,同时对电脑进行除尘操作,这样的做法能够更好的保证电脑运行。若电脑仍然出现蓝屏,则可能是内存条的问题...

取消回复欢迎 发表评论: