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

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

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

相关推荐

2010激活密钥(microsoft2010激活密钥)
2010激活密钥(microsoft2010激活密钥)

步骤/方式1officeprofessionalplus2010:(office专业版)6QFdx-pYH2G-ppYFd-C7RJM-BBKQ8Bdd3G-xM7FB-Bd2HM-YK63V-VQFdKVYBBJ-TRJpB-QFQ...

2025-11-19 04:03 off999

联想官方刷新bios工具(联想电脑刷新bios)

刷新BIOS需要使用联想的官方网站或授权维修中心来进行操作。以下是一些基本步骤:1.访问联想的官方网站,找到BIOS更新程序并下载。在下载过程中,请确保选择与您计算机型号匹配的版本。2.将下载的B...

苹果ios14系统下载(苹果ios14.1下载)
苹果ios14系统下载(苹果ios14.1下载)

1方法一步骤/方式一打开Appstore。步骤/方式二在搜索栏点击搜索框。步骤/方式三搜索并点击需要下载的软件。步骤/方式四点击获取。步骤/方式五最后验证ID密码即可。1.在应用商店搜索你要下载的应用名称。2.点击下载按钮,如果要求登...

2025-11-19 03:03 off999

office2010怎么免费永久激活密钥

用这个试试,一个KMS激活工具可以激活2010到2019的Office自家的目前用的就是这个microsoft6477.moe/1716.html直接使用这个Microsoftoffice2010...

类似爱加速的国内ip(类似爱加速的app)
类似爱加速的国内ip(类似爱加速的app)

推荐“V8盒子”。这一款免费无广告的模拟器,不同于其它软件盒子,而是类似于X8沙箱,满足游戏多开,画中画,悬浮球操作,熄屏后台运行等多功能的沙箱盒子.支持一键root,一键安装xposed框架,能在安卓/苹果手机上运行多个安卓/ios虚拟系...

2025-11-19 02:03 off999

阿里旺旺手机客户端(阿里旺旺手机app)

手机淘宝的旺旺在打开商品后,会看到左下角有个旺旺的图标,点击就可以联系了。  阿里旺旺是将原先的淘宝旺旺与阿里巴巴贸易通整合在一起的一个新品牌。它是淘宝和阿里巴巴为商人量身定做的免费网上商务沟通软件,...

最纯净的pe装机工具(pe工具哪个纯净)

U盘装系统步骤:1.制作U盘启动盘。这里推荐大白菜U盘启动盘制作工具,在网上一搜便是。2.U盘启动盘做好了,我们还需要一个GHOST文件,可以从网上下载一个ghost版的XP/WIN7/WIN8系统,...

装一个erp系统多少钱(wms仓库管理软件)

现在主流有客户端ERP和云端ERP两种客户端通常一次买断,价格在万元左右,但是还有隐性费用,你需要支付服务器、数据管理员,此外如果系统需要更新维护,你还需要支付另外一笔不菲的费用。云端ERP:优势...

cad2014序列号和密钥永久(autocad2014序列号和密钥)

1在cad2014中修改标注样式后,需要将其保存2单击“样式管理器”按钮,在弹出的窗口中选择修改后的标注样式,然后单击“设置为当前”按钮,再单击“保存当前样式”按钮,将其保存为新的样式名称3为了...

qq修改密保手机号(qq修改密保手机号是什么意思)

QQ更改绑定的手机号码操作步骤如下:1、打开手机主界面,找到“QQ”软件点击打开。2、输入正确的QQ账户和密码登录到qq主界面。3、点击左上角的头像“图片”,进入到个人中心界面。4、进入到个人中心界面...

dell笔记本客服电话(dell笔记本客服电话人工服务)

戴尔中国的官方网站http://www.dell.com/zh-cn。通过这个网站购买的都没有问题;有问题也可以进入官网联系售后客服,也可以拔打dell电脑说明书上的售后热线,都可以为你解决的。还是建...

联想乐商店app官方下载(联想乐商店在哪下载)

您好!很遗憾!若是您的手机联想乐商店和联想游戏中心只能有流量,建议您核实是否乐安全有限制wifi上网,核实您所使用的wifi是否本身有限制。若还是无效,可清除缓存数据;备份资料恢复出厂设置尝试。欢迎您...

fat32u盘(FAT32u盘多少钱一个)
  • fat32u盘(FAT32u盘多少钱一个)
  • fat32u盘(FAT32u盘多少钱一个)
  • fat32u盘(FAT32u盘多少钱一个)
  • fat32u盘(FAT32u盘多少钱一个)
不用拉网线的路由器是真的吗

是真的不插卡不拉线有线就有网,这11个字其实就涵盖了无线路由器的特点,无线路由器免插卡、不用拉网线,完全摆脱了之前家用路由器和网线捆绑的模式,有电就有网,其实说的就是无线路由器的使用操作简单,通电就可...

微信恢复好友怎么弄回来(vx好友恢复)
  • 微信恢复好友怎么弄回来(vx好友恢复)
  • 微信恢复好友怎么弄回来(vx好友恢复)
  • 微信恢复好友怎么弄回来(vx好友恢复)
  • 微信恢复好友怎么弄回来(vx好友恢复)

取消回复欢迎 发表评论: