政安晨:示例演绎Python的函数与获取帮助的方法

调用函数和定义我们自己的函数,并使用Python内置的文档,是成为一位Pythoner的开始。

通过我的上篇文章,相信您已经看过并使用了print和abs等函数。但是Python还有许多其他函数,并且定义自己的函数是Python编程的重要部分。

在本课程中,你将学习更多关于使用和定义函数的知识。

获取帮助信息

你在上一篇教程中看到了abs函数,但如果你忘记了它做什么怎么办?

help()函数可能是你能学到的最重要的Python函数。如果你记得如何使用help(),你就掌握了理解大多数其他函数的关键。

以下是一个示例:

help(round)

执行如下(Python 3.11.7):

这里,help()会显示两件事情:

1.该函数round(number, ndigits=None)实现的头部注释信息。

这信息里告诉我们round()接受一个我们可以描述为number的参数。此外,我们可以选择性地提供一个独立的参数,可以描述为ndigits。

2. 该函数所做的功能的简要英文描述。

常见问题:当你查找一个函数时,记得传入的是函数本身的名称,而不是调用该函数的结果。

如果我们在调用函数round()上使用help会发生什么?解开下面单元格的输出以查看结果。

help(round(-2.01))

刚刚显示的完整的详细信息见下面:

Help on int object:class int(object)|  int([x]) -> integer|  int(x, base=10) -> integer|  |  Convert a number or string to an integer, or return 0 if no arguments|  are given.  If x is a number, return x.__int__().  For floating point|  numbers, this truncates towards zero.|  |  If x is not a number or if base is given, then x must be a string,|  bytes, or bytearray instance representing an integer literal in the|  given base.  The literal can be preceded by '+' or '-' and be surrounded|  by whitespace.  The base defaults to 10.  Valid bases are 0 and 2-36.|  Base 0 means to interpret the base from the string as an integer literal.|  >>> int('0b100', base=0)|  4|  |  Built-in subclasses:|      bool|  |  Methods defined here:|  |  __abs__(self, /)|      abs(self)|  |  __add__(self, value, /)|      Return self+value.|  |  __and__(self, value, /)|      Return self&value.|  |  __bool__(self, /)|      True if self else False|  |  __ceil__(...)|      Ceiling of an Integral returns itself.|  |  __divmod__(self, value, /)|      Return divmod(self, value).|  |  __eq__(self, value, /)|      Return self==value.|  |  __float__(self, /)|      float(self)|  |  __floor__(...)|      Flooring an Integral returns itself.|  |  __floordiv__(self, value, /)|      Return self//value.|  |  __format__(self, format_spec, /)|      Default object formatter.|  |  __ge__(self, value, /)|      Return self>=value.|  |  __getattribute__(self, name, /)|      Return getattr(self, name).|  |  __getnewargs__(self, /)|  |  __gt__(self, value, /)|      Return self>value.|  |  __hash__(self, /)|      Return hash(self).|  |  __index__(self, /)|      Return self converted to an integer, if self is suitable for use as an index into a list.|  |  __int__(self, /)|      int(self)|  |  __invert__(self, /)|      ~self|  |  __le__(self, value, /)|      Return self<=value.|  |  __lshift__(self, value, /)|      Return self<<value.|  |  __lt__(self, value, /)|      Return self<value.|  |  __mod__(self, value, /)|      Return self%value.|  |  __mul__(self, value, /)|      Return self*value.|  |  __ne__(self, value, /)|      Return self!=value.|  |  __neg__(self, /)|      -self|  |  __or__(self, value, /)|      Return self|value.|  |  __pos__(self, /)|      +self|  |  __pow__(self, value, mod=None, /)|      Return pow(self, value, mod).|  |  __radd__(self, value, /)|      Return value+self.|  |  __rand__(self, value, /)|      Return value&self.|  |  __rdivmod__(self, value, /)|      Return divmod(value, self).|  |  __repr__(self, /)|      Return repr(self).|  |  __rfloordiv__(self, value, /)|      Return value//self.|  |  __rlshift__(self, value, /)|      Return value<<self.|  |  __rmod__(self, value, /)|      Return value%self.|  |  __rmul__(self, value, /)|      Return value*self.|  |  __ror__(self, value, /)|      Return value|self.|  |  __round__(...)|      Rounding an Integral returns itself.|      |      Rounding with an ndigits argument also returns an integer.|  |  __rpow__(self, value, mod=None, /)|      Return pow(value, self, mod).|  |  __rrshift__(self, value, /)|      Return value>>self.|  |  __rshift__(self, value, /)|      Return self>>value.|  |  __rsub__(self, value, /)|      Return value-self.|  |  __rtruediv__(self, value, /)|      Return value/self.|  |  __rxor__(self, value, /)|      Return value^self.|  |  __sizeof__(self, /)|      Returns size in memory, in bytes.|  |  __sub__(self, value, /)|      Return self-value.|  |  __truediv__(self, value, /)|      Return self/value.|  |  __trunc__(...)|      Truncating an Integral returns itself.|  |  __xor__(self, value, /)|      Return self^value.|  |  as_integer_ratio(self, /)|      Return integer ratio.|      |      Return a pair of integers, whose ratio is exactly equal to the original int|      and with a positive denominator.|      |      >>> (10).as_integer_ratio()|      (10, 1)|      >>> (-10).as_integer_ratio()|      (-10, 1)|      >>> (0).as_integer_ratio()|      (0, 1)|  |  bit_count(self, /)|      Number of ones in the binary representation of the absolute value of self.|      |      Also known as the population count.|      |      >>> bin(13)|      '0b1101'|      >>> (13).bit_count()|      3|  |  bit_length(self, /)|      Number of bits necessary to represent self in binary.|      |      >>> bin(37)|      '0b100101'|      >>> (37).bit_length()|      6|  |  conjugate(...)|      Returns self, the complex conjugate of any int.|  |  to_bytes(self, /, length=1, byteorder='big', *, signed=False)|      Return an array of bytes representing an integer.|      |      length|        Length of bytes object to use.  An OverflowError is raised if the|        integer is not representable with the given number of bytes.  Default|        is length 1.|      byteorder|        The byte order used to represent the integer.  If byteorder is 'big',|        the most significant byte is at the beginning of the byte array.  If|        byteorder is 'little', the most significant byte is at the end of the|        byte array.  To request the native byte order of the host system, use|        `sys.byteorder' as the byte order value.  Default is to use 'big'.|      signed|        Determines whether two's complement is used to represent the integer.|        If signed is False and a negative integer is given, an OverflowError|        is raised.|  |  ----------------------------------------------------------------------|  Class methods defined here:|  |  from_bytes(bytes, byteorder='big', *, signed=False) from builtins.type|      Return the integer represented by the given array of bytes.|      |      bytes|        Holds the array of bytes to convert.  The argument must either|        support the buffer protocol or be an iterable object producing bytes.|        Bytes and bytearray are examples of built-in objects that support the|        buffer protocol.|      byteorder|        The byte order used to represent the integer.  If byteorder is 'big',|        the most significant byte is at the beginning of the byte array.  If|        byteorder is 'little', the most significant byte is at the end of the|        byte array.  To request the native byte order of the host system, use|        `sys.byteorder' as the byte order value.  Default is to use 'big'.|      signed|        Indicates whether two's complement is used to represent the integer.|  |  ----------------------------------------------------------------------|  Static methods defined here:|  |  __new__(*args, **kwargs) from builtins.type|      Create and return a new object.  See help(type) for accurate signature.|  |  ----------------------------------------------------------------------|  Data descriptors defined here:|  |  denominator|      the denominator of a rational number in lowest terms|  |  imag|      the imaginary part of a complex number|  |  numerator|      the numerator of a rational number in lowest terms|  |  real|      the real part of a complex number

我的天呐,好多啊。大家看到了吧,上述结果说明了一件我们平时忽略的事情:

Python从内到外评估表达式。

首先它计算round(-2.01)的值,然后提供关于该表达式输出的帮助。

事实证明Python对整数有很多要说!在我们稍后讨论Python中的对象,方法和属性之后,上面的帮助输出将更有意义。

round是一个非常简单的函数,有一个简短的文档字符串。当处理更复杂,可配置的函数(如print)时,帮助功能更加突出。

如果下面的输出看起来难以理解,请不要担心…现在只是看看是否能从这个帮助中找到任何新信息。

help(print)

如果你在寻找的话,你可能会发现print函数可以接受一个叫做sep的参数,它描述了我们在打印其他参数时放在它们之间的内容。

定义函数

内置函数非常好用,很多情况下,需要定义自己的函数,以下是一个简单的例子。

def least_difference(a, b, c):diff1 = abs(a - b)diff2 = abs(b - c)diff3 = abs(a - c)return min(diff1, diff2, diff3)

咱们创建了一个名为least_difference的函数,它接受三个参数a、b和c。

函数定义以使用def关键字引入的标头开头。冒号后的缩进代码块在调用函数时运行。

return是与函数唯一相关的另一个关键字。

当Python遇到return语句时,它立即退出函数,并将右侧的值传递给调用上下文。

从源代码中清楚least_difference()的功能吗?如果我们不确定,我们可以在几个示例上尝试它:

print(least_difference(1, 10, 100),least_difference(1, 10, 10),least_difference(5, 6, 7), # Python allows trailing commas in argument lists. How nice is that?
)

以下是执行:

或者也许help()函数可以告诉我们一些关于它的信息。

help(least_difference)

可以看到帮助信息中展示的是刚才咱们定义的函数:

        Python不足以智能地阅读我的代码并将其转化为优美的英文描述。然而,当我编写一个函数时,我可以在所谓的文档字符串中提供描述。当咱们添加了这个描述,就可以在帮助信息中被看到啦。

        Docstrings是一种在程序代码中文档化函数、模块和类的方法。它是由开发者编写的字符串,用于描述代码的功能、输入参数、返回值等信息。这些文档字符串可以被Python解释器读取,并在交互式环境中使用help()函数查看。同时,它们也可以被一些工具自动生成的文档或IDE使用,以提供代码的说明和提示。Docstrings一般放在函数、类或模块的开头,在三个引号之间编写。常见的Docstrings格式有多种,比如Google风格、reStructuredText风格和numpy风格等。

def least_difference(a, b, c):"""Return the smallest difference between any two numbersamong a, b and c.>>> least_difference(1, 5, -5)4"""diff1 = abs(a - b)diff2 = abs(b - c)diff3 = abs(a - c)return min(diff1, diff2, diff3)

docstring是一个用三引号括起来的字符串(可以跨多行),紧跟在函数的头部之后。当我们对一个函数调用help()时,它会显示出docstring。

help(least_difference)

备注:

文档字符串的最后两行是一个示例函数调用和结果。

(>>>是对Python交互式shell中使用的命令提示符的引用。)

Python不会运行示例调用-它只是为了读者的方便而存在。在函数的文档字符串中包含一个或多个示例调用的惯例远非普遍遵守,但它可以非常有效地帮助人们理解您的函数。

好的程序员会使用文档字符串,除非他们预计在使用后不久就会丢弃代码(这种情况很少见)。所以,你也应该开始编写文档字符串!

没有返回值的函数

如果我们在函数中没有包含return关键字会发生什么?

Python允许我们定义这样的函数。调用它们的结果是特殊的值None。

(这类似于其他语言中的“null”概念。)

没有return语句,least_difference函数就毫无意义,但是具有副作用的函数可能在不返回任何内容的情况下执行一些有用的操作。

我们已经看到了两个例子:print()和help()不返回任何内容。我们只是为了它们的执行作用(在屏幕上输出一些文本)而调用它们。其他有用的仅靠执行作用的例子包括写入文件或修改输入。

mystery = print()
print(mystery)

默认参数

当我们调用help(print)时,我们发现print函数有几个可选参数。例如,我们可以为sep指定一个值,在我们打印的参数之间放入一些特殊的字符串:

print(1, 2, 3, sep=' < ')

但是如果我们不指定一个值,sep会被视为具有默认值' '(一个空格)。

print(1, 2, 3)

给我们定义的函数添加具有默认值的可选参数其实非常简单:

def greet(who="Colin"):print("Hello,", who)greet()
greet(who="Kaggle")
# (In this case, we don't need to specify the name of the argument, because it's unambiguous.)
greet("world")

函数调用

这里有一些很强大的东西,尽管一开始可能感觉很抽象。你可以将函数作为参数传递给其他函数。一些示例可能会更加清楚:

def mult_by_five(x):return 5 * xdef call(fn, arg):"""Call fn on arg"""return fn(arg)def squared_call(fn, arg):"""Call fn on the result of calling fn on arg"""return fn(fn(arg))print(call(mult_by_five, 1),squared_call(mult_by_five, 1), sep='\n', # '\n' is the newline character - it starts a new line
)

可以操作其他函数的函数被称为“高阶函数”。你可能不会立即编写自己的高阶函数。但Python内置了一些高阶函数,你可能会发现调用它们很有用。

下面是一个有趣的例子,使用了max函数。

默认情况下,max返回其参数中的最大值。但是如果我们使用可选的key参数传入一个函数,它将返回使key(x)(也被称为'argmax')最大化的参数x。

def mod_5(x):"""Return the remainder of x after dividing by 5"""return x % 5print('Which number is biggest?',max(100, 51, 14),'Which number is the biggest modulo 5?',max(100, 51, 14, key=mod_5),sep='\n',
)

轮到你啦

函数在Python编程中打开了一个全新的世界。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/253770.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

由亚马逊云科技 Graviton4 驱动的全新内存优化型实例 Amazon EC2 实例(R8g),现已开放预览

下一代 Amazon Elastic Compute CloudAmazon EC2) 实例的预览版现已公开 提供。全新的 R8g 实例 搭载新式 Graviton4 处理器&#xff0c;其性价比远超任何现有的内存优化实例。对于要求较高的内存密集型工作负载&#xff0c;R8g 实例是不二之选&#xff1a;大数据分析、高性能数…

Linux操作系统基础(一):操作系统概述

文章目录 操作系统概述 一、计算机分类 二、计算机组成 三、操作系统概述 四、操作系统分类 操作系统概述 一、计算机分类 计算机一般分为个人计算机&#xff08;笔记、台式机&#xff09;与 企业级服务器&#xff08;1U、2U、机柜、塔式、刀片&#xff09;两种形式。 二…

PyTorch深度学习实战(23)——从零开始实现SSD目标检测

PyTorch深度学习实战&#xff08;23&#xff09;——从零开始实现SSD目标检测 0. 前言1. SSD 目标检测模型1.1 SSD 网络架构1.2 利用不同网络层执行边界框和类别预测1.3 不同网络层中默认框的尺寸和宽高比1.4 数据准备1.5 模型训练 2. 实现 SSD 目标检测2.1 SSD300 架构2.2 Mul…

前端JavaScript篇之对JSON的理解

目录 对JSON的理解JSON.stringify 和 JSON.parse 方法JSON.stringify 和 JSON.parse 区别JSON.stringify 和 JSON.parse 注意事项总结 对JSON的理解 JSON&#xff08;JavaScript Object Notation&#xff09;是一种轻量级的数据交换格式&#xff0c;它以易读易写的文本形式表示…

Vue前端框架--Vue工程项目问题总结{脚手架 Vue-cli}

Vue脚手架部署问题总结 我所遇到的一共两大问题 只有先执行npm install之后 才能run serve 否则会报错 vue-cli-serve不是内部或者外部的命令&#xff0c;也不是可运行的程序或者批处理文件的错误 1. 运行npm install会报错 2. 运行npm run serve报错 nodejs官网为 https://no…

ERP 系统架构的设计与实践总结

企业资源计划&#xff08;ERP&#xff09;系统是一种集成多个业务功能的综合性软件解决方案。在设计和实践 ERP 系统架构时&#xff0c;需要考虑诸多因素&#xff0c;以确保系统能够满足企业的需求&#xff0c;并提供高效、可靠、安全的服务。本文将介绍一些关键的设计原则和实…

03-抓包_封包_协议_APP_小程序_PC应用_WEB应用

抓包_封包_协议_APP_小程序_PC应用_WEB应用 一、参考工具二、演示案例&#xff1a;2.1、WEB应用站点操作数据抓包-浏览器审查查看元素网络监听2.2、APP&小程序&PC抓包HTTP/S数据-Charles&Fiddler&Burpsuite2.3、程序进程&网络接口&其他协议抓包-WireSh…

LabVIEW双光子荧光显微成像系统开发

双光子显微成像是一种高级荧光显微技术&#xff0c;广泛用于生物学和医学研究&#xff0c;尤其是用于活体组织的深层成像。在双光子成像过程中&#xff0c;振镜&#xff08;Galvo镜&#xff09;扮演了非常关键的角色&#xff0c;它负责精确控制激光束在样本上的扫描路径。以下是…

贪心算法篇

“靠漫步&#xff0c;将生趣填饱~” 贪心算法简介&#xff1f; 贪心算法&#xff08;Greedy Algorithm&#xff09;&#xff0c;也称为贪婪算法&#xff0c;是一种在解决问题时采取贪心策略的方法。其基本原理是很简单的&#xff1a; “在每个决策点上都选择当下看似最好的选项…

専攻春节钜惠

専攻春节钜惠 大家好&#xff0c;新春佳节到来之际&#xff0c;为了答谢大家多年来的支持厚爱&#xff0c;也为了更广泛的推广VBA应用&#xff0c;“VBA语言専攻”在春节期间再次推出钜惠活动&#xff0c;时间2月9日到2月17日&#xff08;大年三十到正月初八&#xff09; 1 &…

一个基于 .NET 7 + Vue.js 的前后端分离的通用后台管理系统框架 - DncZeus

前言 今天给大家推荐一个基于.NET 7 Vue.js(iview-admin) 的前后端分离的通用后台权限(页面访问、操作按钮控制)管理系统框架&#xff1a;DncZeus。 官方项目简介 DncZeus是一个基于 .NET 7 Vue.js 的前后端分离的通用后台管理系统框架。后端使用.NET 7 Entity Framework…

6-3、T型加减速单片机程序【51单片机+L298N步进电机系列教程】

↑↑↑点击上方【目录】&#xff0c;查看本系列全部文章 摘要&#xff1a;根据前两节内容&#xff0c;已完成所有计算工作&#xff0c;本节内容介绍具体单片机程序流程及代码 一、程序流程图 根据前两节文章内容可知&#xff0c;T型加减速的关键内容是运动类型的判断以及定时…

第5节、S曲线加减速转动【51单片机+L298N步进电机系列教程】

↑↑↑点击上方【目录】&#xff0c;查看本系列全部文章 摘要&#xff1a;本节介绍步进电机S曲线相关内容&#xff0c;总共分四个小节讨论步进电机S曲线相关内容 5-1、S曲线加减速简介   根据上节内容&#xff0c;步进电机每一段的速度可以任意设置&#xff0c;但是每一段的…

单片机学习笔记---中断系统(含外部中断)

目录 中断介绍 中断优先级 中断嵌套 中断技术的优点 中断的结构 中断请求源 中断优先级 5个基本中断内部的结构 INT0和INT1 T0和T1 串口 中断寄存器 IE TCON 中断优先级列表 中断号 中断响应的条件 代码编写实例分析 外部中断硬件电路分析 这一节我们主要是…

视频上传 - 断点续传那点事

在上一篇文章中&#xff0c;我们讲解了分片上传的实现方式。在讲解断点续传之前&#xff0c;我要把上篇文章中留下的问题讲解一下。读过上一篇文章的小伙伴们都知道&#xff0c;对于分片上传来说&#xff0c;它的传输方式分为2种&#xff0c;一种是按顺序传输&#xff0c;一种是…

GPT-1, GPT-2, GPT-3, GPT-3.5, GPT-4论文内容解读

目录 1 ChatGPT概述1.1 what is chatGPT1.2 How does ChatGPT work1.3 The applications of ChatGPT1.3 The limitations of ChatGPT 2 算法原理2.1 GPT-12.1.1 Unsupervised pre-training2.1.2 Supervised fine-tuning2.1.3 语料2.1.4 分析 2.2 GPT-22.3 GPT-32.4 InstructGPT…

【操作系统】MacOS虚拟内存统计指标

目录 命令及其结果 参数解读 有趣的实验 在 macOS 系统中&#xff0c;虚拟内存统计指标提供了对系统内存使用情况和虚拟内存操作的重要洞察。通过分析这些指标&#xff0c;我们可以更好地了解系统的性能状况和内存管理情况。 命令及其结果 >>> vm_stat Mach Virtu…

常见云计算服务模式( IaaS基础架构即服务、PaaS平台即服务、SaaS软件即服务)

常见云计算服务模式 &#xff08; IaaS基础架构即服务、PaaS平台即服务、SaaS软件即服务&#xff09; 零、00时光宝盒 世界并不完美&#xff0c;面对很多事情我们都很无奈甚至悲哀&#xff0c;但生活总要继续下去&#xff0c;不止是为了自己。抱怨没有用&#xff0c;顾影自怜也…

51单片机之LED灯模块篇

御风以翔 破浪以飏 &#x1f3a5;个人主页 &#x1f525;个人专栏 目录 点亮一盏LED灯 LED的组成原理 LED的硬件模型 点亮一盏LED灯的程序设计 LED灯闪烁 LED流水灯 独立按键控制LED灯亮灭 独立按键的组成原理 独立按键的硬件模型 独立按键控制LED灯状态 按键的抖动 独立按键…

Python(SQLite)executescript用法

SQLite 数据库模块的游标对象还包含了一个 executescript() 方法&#xff0c;这不是一个标准的 API 方法&#xff0c;这意味着在其他数据库 API 模块中可能没有这个方法。但是这个方法却很实用&#xff0c;它可以执行一段 SQL 脚本。 例如&#xff0c;如下程序使用 executescr…