python中、函数定义可以不包括以下_python函数定义精讲
原标题:python函数定义精讲
在 Python 中,你也可以定义包含若干参数的函数。这里有三种可用的形式,也可以混合使用。
默认参数值
最常用的一种形式是为一个或多个参数指定默认值。这会创建一个可以使用比定义时允许的参数更少的参数调用的函数,例如
这个函数可以通过几种不同的方式调用:
只给出必要的参数:
ask_ok('Do you really want to quit?')
给出一个可选的参数:
ask_ok('OK to overwrite the file?', 2)
或者给出所有的参数:
ask_ok('OK to overwrite the file?', 2, 'Come on, only yes or no!')
这个例子还介绍了 in 关键字。它测定序列中是否包含某个确定的值。
默认值在函数 定义 作用域被解析,如下所示
将会输出 5 。
重要警告: 默认值只被赋值一次。这使得当默认值是可变对象时会有所不同,比如列表、字典或者大多数类的实例。例如,下面的函数在后续调用过程中会累积(前面)传给它的参数。小编为大家推荐一个学习交流群:308754087,群里有好多人了~大家遇到啥问题都可以在里面交流!是一个非常好的学习交流地方~欲进从速欧~各种PDF等你来下载,全部免费,只为帮助大家快速入门。
输出:
如果你不想让默认值在后续调用中累积,你可以像下面一样定义函数:
关键字参数
函数可以通过 关键字参数 的形式来调用,形如 keyword = value 。例如,以下的函 数:
接受一个必选参数 ( voltage ) 以及三个可选参数 ( state , action , 和 type )。可以用 以下的任一方法调用
不过以下几种调用是无效的:
在函数调用中,关键字的参数必须跟随在位置参数的后面。传递的所有关键字参数必须与函数接受的某个参数相匹配 (例如 actor 不是 parrot 函数的有效参数),它们的顺序并不重要。这也包括非可选参数(例如 parrot(voltage=1000) 也是有效 的)。任何参数都不可以多次赋值。下面的示例由于这种限制将失败
引入一个形如 **name 的参数时,它接收一个字典(参见 Mapping Types — dict ),该字典包含了所有未出现在形式参数列表中的关键字参数。这里可能还会组合使用一个形如 *name (下一小节详细介绍) 的形式参数,它接收一个元组(下一 节中会详细介绍),包含了所有没有出现在形式参数列表中的参数值( *name 必须 在 **name 之前出现)。 例如,我们这样定义一个函数:
它可以像这样调用
当然它会按如下内容打印:
注意在打印关键字参数之前,通过对关键字字典 keys() 方法的结果进行排序,生 成了关键字参数名的列表;如果不这样做,打印出来的参数的顺序是未定义的。
可变参数列表
最后,一个最不常用的选择是可以让函数调用可变个数的参数。这些参数被包装进一个元组(参见 元组和序列 )。在这些可变个数的参数之前,可以有零到多个普通的参数:
通常,这些 可变 参数是参数列表中的最后一个,因为它们将把所有的剩余输入参 数传递给函数。任何出现在 *args 后的参数是关键字参数,这意味着,他们只能被 用作关键字,而不是位置参数
参数列表的分拆
另有一种相反的情况: 当你要传递的参数已经是一个列表,但要调用的函数却接受分开一个个的参数值。这时候你要把已有的列表拆开来。例如内建函数 range() 需要要独立的 start,stop 参数。你可以在调用函数时加一个 * 操作符来自动把参数 列表拆开:
以同样的方式,可以使用 ** 操作符分拆关键字参数为字典:
Lambda 形式
出于实际需要,有几种通常在函数式编程语言例如 Lisp 中出现的功能加入到了Python。通过 lambda 关键字,可以创建短小的匿名函数。这里有一个函数返回它的两个参数的和: lambda a, b: a+b。 Lambda 形式可以用于任何需要的函数对象。出于语法限制,它们只能有一个单独的表达式。语义上讲,它们只是普通函数定义中的一个语法技巧。类似于嵌套函数定义,lambda 形式可以从外部作用域引用变量:
上面的示例使用 lambda 表达式返回一个函数。另一个用途是将一个小函数作为参数传递:
文档字符串
这里介绍的文档字符串的概念和格式。
第一行应该是关于对象用途的简介。简短起见,不用明确的陈述对象名或类型,因为它们可以从别的途径了解到(除非这个名字碰巧就是描述这个函数操作的动词)。这一行应该以大写字母开头,以句号结尾。
如果文档字符串有多行,第二行应该空出来,与接下来的详细描述明确分隔。接下来的文档应该有一或多段描述对象的调用约定、边界效应等。
Python 的解释器不会从多行的文档字符串中去除缩进,所以必要的时候应当自己清除缩进。这符合通常的习惯。第一行之后的第一个非空行决定了整个文档的缩进格式。(我们不用第一行是因为它通常紧靠着起始的引号,缩进格式显示的不清楚。)留白“相当于”是字符串的起始缩进。每一行都不应该有缩进,如果有缩进的话,所有的留白都应该清除掉。留白的长度应当等于扩展制表符的宽度(通常是8个空格)。
以下是一个多行文档字符串的示例
函数注解
函数注解 是关于用户自定义的函数的完全可选的、随意的元数据信息。无论 Python 本身或者标准库中都没有使用函数注解;本节只是描述了语法。第三方的项目是自由地为文档,类型检查,以及其它用途选择函数注解。
注解是以字典形式存储在函数的 __annotations__ 属性中,对函数的其它部分没有 任何影响。参数注解(Parameter annotations)是定义在参数名称的冒号后面,紧随着一个用来表示注解的值得表达式。返回注释(Return annotations)是定义在一个 ‐> 后面,紧随着一个表达式,在冒号与 ‐> 之间。下面的示例包含一个位置参数,一个关键字参数,和没有意义的返回值注释
责任编辑:
python中、函数定义可以不包括以下_python函数定义精讲相关推荐
- Python中lambda详解(包括内置函数map、reduce、filter、sorted、max)
文章目录 一.lambda是什么? 1.lambda语法 2.语法详解 二.lambda的使用 1.定义 2.调用 3.替换 4.作返回值 三.lambda作参数 1.map函数 2.reduce函数 ...
- python中标识符下划线用作开头_python python中那些双下划线开头的那些函数都是干啥用用的...
1.写在前面 今天遇到了__slots__,,所以我就想了解下python中那些双下划线开头的那些函数都是干啥用用的,翻到了下面这篇博客,看着很全面,我只了解其中的一部分,还不敢乱下定义. 其实如果足 ...
- Python中数组,列表,元组的区别、定义、功能
准确的来说,在python中是没有数组类型的,python中取而代之的是列表和元组.列表比元组好用,因为元组一旦定义就没法修改.而列表不仅可以和数组一样按索引访问,还有一堆的功能. 列表: (1)添加 ...
- python中那些双下划线开头的那些函数都是干啥用用的
1.写在前面 今天遇到了__slots__,,所以我就想了解下python中那些双下划线开头的那些函数都是干啥用用的,翻到了下面这篇博客,看着很全面,我只了解其中的一部分,还不敢乱下定义. 其实如果足 ...
- python属性名以两个下划线开头_python python中那些双下划线开头的那些函数都是干啥用用的...
1.写在前面 今天遇到了__slots__,,所以我就想了解下python中那些双下划线开头的那些函数都是干啥用用的,翻到了下面这篇博客,看着很全面,我只了解其中的一部分,还不敢乱下定义. 其实如果足 ...
- python中os.path.join()的循环用法_Python中.join()和os.path.join()两个函数的用法详解
Python中有.join()和os.path.join()两个函数,具体作用如下: . join(): 连接字符串数组.将字符串.元组.列表中的元素以指定的字符(分隔符)连接生成一个新的字符串 ...
- Python中通过索引名称提取数据loc()函数Python中通过行和列下标提取数据iloc()函数
[小白从小学Python.C.Java] [Python全国计算机等级考试] [Python数据分析考试必会题] ● 标题与摘要 Python中通过索引名称提取数据 loc()函数 Python中通过 ...
- Python中pandas库实现数据缺失值判断isnull()函数
[小白从小学Python.C.Java] [Python全国计算机等级考试] [Python数据分析考试必会题] ● 标题与摘要 Python中pandas库实现数据缺失值判断 isnull()函数 ...
- python中newfile是干嘛用的_python 文件操作方法
python中对文件.文件夹(文件操作函数)的操作需要涉及到os模块和shutil模块. 得到当前工作目录,即当前Python脚本工作的目录路径: os.getcwd() 返回指定目录下的所有文件和目 ...
最新文章
- 基于Google排名因素对Drupal进行SEO优化
- python进制转化大全
- SVN 图标和工具、wc.db学习
- 长白山特色产品谋定农民丰收节交易会 吉林蛟河农商互联
- rsync软件配置和使用教程
- 列存Delta表是个什么东东
- __attribute__((section(name))) study again
- NGINX下红黑树的删除(终章)附GIF
- python下列数据中不属于字符串的是_下列数据中,不属于字符串的是( )。 (6.0分)_学小易找答案...
- python比赛2020_2020LPL春季赛3月15日比赛数据的数据分析(Python)
- 偏导数,雅可比矩阵(jacobi matrix),黑塞矩阵(Hessian matrix)
- c++ Dxgi+FFmpeg 完成对截图屏幕,以及将屏幕数据保存为MP4格式,以完成录屏功能
- android opengl滤镜,Android OpenGL ES滤镜开发之美颜效果
- 工作一周年,带你认识杭州最好的电商公司
- 一元四次方程求解C++实现
- 数据分析方法和思维—RFM用户分群
- EAS BosType详解
- Tomcat7 与 maven
- MediaPlayer之音乐播放器完整解析
- ARM的 N、Z、C、V 标志位的解释