目次
再帰関数
 匿名函数
函数属性
 内置函数
 文档化代码
本文小结
ホームページ バックエンド開発 Python チュートリアル Python プログラミング: 再帰的および匿名関数、関数属性、およびドキュメント文字列 (関数補足)

Python プログラミング: 再帰的および匿名関数、関数属性、およびドキュメント文字列 (関数補足)

Apr 12, 2023 pm 11:22 PM
python 言語 再帰関数

この記事は簡潔に説明されており、理解を深めるためにコードで補足されています。

再帰関数

関数がそれ自体を呼び出して最終結果を生成する場合、そのような関数は再帰的と呼ばれます。再帰関数は、コードの記述が容易になるため、場合によっては便利です。アルゴリズムによっては、再帰パラダイムを使用して非常に簡単に記述できるものもあれば、そうでないものもあります。反復的に書き換えることができない再帰関数はありません。言い換えれば、すべての再帰関数はループを通じて反復的に実装できるため、通常、目前の状況に基づいて最適なアプローチを選択するのはプログラマの責任です。

再帰関数の本体は通常 2 つの部分で構成されます。1 つの部分の戻り値はそれ自体への後続の呼び出しに依存し、もう 1 つの部分の戻り値はそれ以降のそれ自体への呼び出しには依存しません (基本ケースまたは再帰と呼ばれます)。境界)。

理解のための参考例として、階乗関数 N を見てみましょう! 再帰の 2 つの部分は次のとおりです: 基本的なケース (境界、再帰を終了するために使用されます) は、N が 0 または 1 の場合です。の場合、関数は 1 を返します。これ以上の計算は必要ありません。一方、一般的な自己呼び出しの場合、N! によって返される生成結果は次のとおりです:

1 * 2 * ... * (N-1) * N
ログイン後にコピー

よく考えると、N! は次のように書くことができます: N!= (N - 1) !*N 。実際の例として、次の階乗表現を見てください:

5! = 1 * 2 * 3 * 4 * 5 = (1 * 2 * 3 * 4) * 5 = 4! * 5
ログイン後にコピー

これを関数実装に変換してみましょう:

# 阶乘递归函数实现
def factorial(n):
if n in (0, 1): # 递归边界
return 1
return factorial(n - 1) * n # 递归调用
ログイン後にコピー

マスターやヒーローは、アルゴリズムを作成するときによくこれを使用します。再帰関数、再帰関数を書くのはとても楽しいです。演習として、再帰的および反復的手法を使用していくつかの簡単な問題を解決してみてください。フィボナッチ数などを計算することをお勧めします。あなたも試してみてください。

匿名函数

还有一种函数是匿名函数(Anonymous functions)。这些函数在Python中称为lambda(兰姆达),其通常在使用具有自己完整定义名称的函数有些多余时而使用,此时所需要的只是一个快速、简单的一行程序来完成这项工作。

假设我们想要一个列表,所有N的某个值,是5的倍数的数字。为此,我们可以使用filter()函数,它需要一个函数和一个可迭代对象作为输入。返回值是一个过滤器对象,当你遍历它时,会从输入可迭代对象中生成元素,所需的参数函数会为其返回True。如果不使用匿名函数,我们可能会这样做:

def isMultipleOfFive(n):
return not n % 5

def getMultiplesOfFive(n):
return list(filter(isMultipleOfFive, range(n)))
ログイン後にコピー

注意我们如何使用isMultipleOfFive()来过滤前n个自然数。这似乎有点过分——任务及其很简单,我们不需要为其他任何事情保留isMultipleOfFive()函数。此时,我们就可用lambda函数来重写它:

# lambda过滤
def getMultiplesOfFive(n):
 return list(filter(lambda k: not k % 5, range(n)))
ログイン後にコピー

逻辑是完全相同的,但是过滤函数现在是个lambda函数,显然,Lambda更简单。

定义Lambda函数非常简单,它遵循以下形式:

funcName = lambda [parameter_list]: expression

其返回的是一个函数对象,相当于:

def func_ name([parameter_list]):return expression

参数列表以逗号分隔。

注意,可选参数是方括号括起来的部分,是通用语法的表示形式,即文中的方括号部分是可选的,根据实际需要提供,

我们再来看另外两个等价函数的例子,以两种形式定义:

# lambda说明
# 示例 1: 两数相加
def adder(a, b):
return a + b
# 等价于:
adder_lambda = lambda a, b: a + b

# 示例 2: 字符串转大写
def to_upper(s):
return s.upper()
# 等价于:
to_upper_lambda = lambda s: s.upper()
ログイン後にコピー

前面的例子非常简单。第一个函数将两个数字相加,第二个函数生成字符串的大写版本。注意,我们将lambda表达式返回的内容赋值给一个名称(adder_lambda, to_upper_lambda),但是当按照filter()示例中的方式使用lambda时,就不需要这样做了——不需要把匿名函数赋给变量。

函数属性

Python中每个函数都是一个完整的对。因此,它有许多属性。其中一些是特殊的,可以以内省的方式在运行时检查函数对象。下面的示例,展示了它们的一部分以及如何为示例函数显示它们的值:

# 函数属性
def multiplication(a, b=1):
"""返回a乘以b的结构. """
return a * b

if __name__ == "__main__":
special_attributes = [
"__doc__", "__name__", "__qualname__", "__module__",
"__defaults__", "__code__", "__globals__", "__dict__",
"__closure__", "__annotations__", "__kwdefaults__",
]
for attribute in special_attributes:
print(attribute, '->', getattr(multiplication, attribute))
ログイン後にコピー

我们使用内置的getattr()函数来获取这些属性的值。getattr(obj, attribute)等价于obj.attribute,当我们需要在运行时动态地获取属性时,就从变量中获取属性的名称(如本例中所示),此时它就会派上用场。

运行这个脚本会得到类似如下输出:

# ヒント:

再帰関数を作成するときは、ネストの数を常に考慮してください。限界があるからです。詳細については、sys.getrecursionlimit() および sys.setrecursionlimit() を確認してください。

__doc__ -> 返回a乘以b的结果.

__name__ -> multiplication

__qualname__ -> multiplication

__module__ -> __main__

__defaults__ -> (1,)

__code__ -> <……>

__globals__ -> {…略…}

__dict__ -> {}

__closure__ -> None

__annotations__ -> {}

__kwdefaults__ -> None

这里省略了__globals__属性的值,内容太多。这个属性的含义可以在Python数据模型文档页面(或自带帮助文档中)的可调用类型部分找到:

​https://www.php.cn/link/032abcd424b4312e7087f434ef1c0094​

再次提醒:如果你想查看对象的所有属性,只需调用dir(object_name),将得到其所有属性的列表。

内置函数

Python自带很多内置函数。它们可以在任何地方使用,你可以通过dir(__builtins__)来查看builtins模块,或通过访问官方Python文档来获得它们的列表。这里就不一一介绍了。在前面的学习过程中,我们已经见过其中的一些,如any、bin、bool、divmod、filter、float、getattr、id、int、len、list、min、print、set、tuple、type和zip等,但还有更多,建议你至少应该阅读一次。熟悉它们,尝试它们,为它们每个编写一小段代码,并确保您随时可以使用它们,以便在需要时使用它们。

可在官方文档中找到这个内置函数列表:https://docs.python.org/3/library/functions.html 。

文档化代码

我们非常喜欢不需要文档的代码。当我们正确地编程、选择正确的名称、并注意细节时,代码应该是不言自明的,几乎不需要文档。不过,有时注释非常有用,添加一些文档化描述也是如此。你可以在Python的PEP 257规范——文档字符串约定中找到Python的文档指南:

​https://www.php.cn/link/da40657c9fece7e48d30af42d31d4350​

但在这里还是会向你展示基本原理。Python的文档中包含字符串,这些字符串被恰当地称为文档字符串(docstrings)。任何对象都可以被文档化来加以描述记录,可以使用单行或多行文档字符串。单行程序非常简单。不是为函数提供另外的签名,而应该声明或描述函数的目的。请看下面的示例:

# 简单的文档化代码
def square(n):
"""功能:返回数字n的平方。 """
return n ** 2

def get_username(userid):
"""功能:返回给定id的用户名称。 """
return db.get(user_id=userid).username
ログイン後にコピー

使用三重双引号字符串可以在以后轻松展开或扩展文档内容。

使用以句号结尾的句子,不要在前后留下空行。

多行注释的结构与此类似。应该用一行代码简单地说明对象的主旨,然后是更详细的描述。

作为多行文档化的一个例子,我们在下面的例子中使用Sphinx表示法记录了一个虚构的connect()函数及文档化描述:

# 多行文档化代码
def connect(host, port, user, password):
"""功能:连接数据库并返回连接对象.
使用如下参数直接连接 PostgreSQL数据库.
:param host: 主机 IP.
:param port: 端口.
:param user: 连接用户名.
:param password: 连接密码.
:return: 连接对象.
"""
# 函数主体...
return connection
ログイン後にコピー

提示:

Sphinx是用于创建Python文档的最广泛使用的工具之一——事实上,官方Python文档就是用它编写的。绝对值得花点时间去看看。

内置函数help()用于即时交互使用的,它就使用对象的文档字符串为对象创建文档页面来展示对象的用法。基本用法如下:

def square(n):
"""功能:返回数字n的平方。 """
return n ** 2

help(square)
Help on function square in module __main__:

square(n)
功能:返回数字n的平方。
ログイン後にコピー

首先明确或定义一个对象或函数(包括已有的对象或函数),然后使用内置help函数,并把对象或函数做help的参数,该函数就会返回相应对象的说明文档了。就这么简单。

本文小结

本文主要基于Python语言的一大特色——函数来拓展的一些相关编程知识,包括递归函数(重点是有限性和边界性)、lambda函数(简洁性和临时性)以及函数的属性以及如何实现函数的文档化描述等。

以上がPython プログラミング: 再帰的および匿名関数、関数属性、およびドキュメント文字列 (関数補足)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PHPおよびPython:コードの例と比較 PHPおよびPython:コードの例と比較 Apr 15, 2025 am 12:07 AM

PHPとPythonには独自の利点と短所があり、選択はプロジェクトのニーズと個人的な好みに依存します。 1.PHPは、大規模なWebアプリケーションの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンスと機械学習の分野を支配しています。

CentosでPytorchモデルを訓練する方法 CentosでPytorchモデルを訓練する方法 Apr 14, 2025 pm 03:03 PM

CentOSシステムでのPytorchモデルの効率的なトレーニングには手順が必要であり、この記事では詳細なガイドが提供されます。 1。環境の準備:Pythonおよび依存関係のインストール:Centosシステムは通常Pythonをプリインストールしますが、バージョンは古い場合があります。 YumまたはDNFを使用してPython 3をインストールし、PIP:sudoyumupdatepython3(またはsudodnfupdatepython3)、pip3install-upgradepipをアップグレードすることをお勧めします。 cuda and cudnn(GPU加速):nvidiagpuを使用する場合は、cudatoolをインストールする必要があります

Dockerの原則の詳細な説明 Dockerの原則の詳細な説明 Apr 14, 2025 pm 11:57 PM

DockerはLinuxカーネル機能を使用して、効率的で孤立したアプリケーションランニング環境を提供します。その作業原則は次のとおりです。1。ミラーは、アプリケーションを実行するために必要なすべてを含む読み取り専用テンプレートとして使用されます。 2。ユニオンファイルシステム(UnionFS)は、違いを保存するだけで、スペースを節約し、高速化する複数のファイルシステムをスタックします。 3.デーモンはミラーとコンテナを管理し、クライアントはそれらをインタラクションに使用します。 4。名前空間とcgroupsは、コンテナの分離とリソースの制限を実装します。 5.複数のネットワークモードは、コンテナの相互接続をサポートします。これらのコア概念を理解することによってのみ、Dockerをよりよく利用できます。

CentosのPytorchのGPUサポートはどのようにサポートされていますか CentosのPytorchのGPUサポートはどのようにサポートされていますか Apr 14, 2025 pm 06:48 PM

Pytorch GPUアクセラレーションを有効にすることで、CentOSシステムでは、PytorchのCUDA、CUDNN、およびGPUバージョンのインストールが必要です。次の手順では、プロセスをガイドします。CUDAおよびCUDNNのインストールでは、CUDAバージョンの互換性が決定されます。NVIDIA-SMIコマンドを使用して、NVIDIAグラフィックスカードでサポートされているCUDAバージョンを表示します。たとえば、MX450グラフィックカードはCUDA11.1以上をサポートする場合があります。 cudatoolkitのダウンロードとインストール:nvidiacudatoolkitの公式Webサイトにアクセスし、グラフィックカードでサポートされている最高のCUDAバージョンに従って、対応するバージョンをダウンロードしてインストールします。 cudnnライブラリをインストールする:

Python vs. JavaScript:コミュニティ、ライブラリ、リソース Python vs. JavaScript:コミュニティ、ライブラリ、リソース Apr 15, 2025 am 12:16 AM

PythonとJavaScriptには、コミュニティ、ライブラリ、リソースの観点から、独自の利点と短所があります。 1)Pythonコミュニティはフレンドリーで初心者に適していますが、フロントエンドの開発リソースはJavaScriptほど豊富ではありません。 2)Pythonはデータサイエンスおよび機械学習ライブラリで強力ですが、JavaScriptはフロントエンド開発ライブラリとフレームワークで優れています。 3)どちらも豊富な学習リソースを持っていますが、Pythonは公式文書から始めるのに適していますが、JavaScriptはMDNWebDocsにより優れています。選択は、プロジェクトのニーズと個人的な関心に基づいている必要があります。

Centosの下でPytorchバージョンを選択する方法 Centosの下でPytorchバージョンを選択する方法 Apr 14, 2025 pm 02:51 PM

CentOSでPytorchバージョンを選択する場合、次の重要な要素を考慮する必要があります。1。CUDAバージョンの互換性GPUサポート:NVIDIA GPUを使用してGPU加速度を活用したい場合は、対応するCUDAバージョンをサポートするPytorchを選択する必要があります。 NVIDIA-SMIコマンドを実行することでサポートされているCUDAバージョンを表示できます。 CPUバージョン:GPUをお持ちでない場合、またはGPUを使用したくない場合は、PytorchのCPUバージョンを選択できます。 2。PythonバージョンPytorch

CentosでPytorchを使用してデータ前処理を行う方法 CentosでPytorchを使用してデータ前処理を行う方法 Apr 14, 2025 pm 02:15 PM

CentOSシステムのPytorchデータを効率的に処理するには、次の手順が必要です。依存関係のインストール:システムを最初に更新し、Python3とPIPをインストールします。仮想環境構成(推奨):Condaを使用して、新しい仮想環境を作成およびアクティブにします。例:Condacreate-N

NginxをCentosにインストールする方法 NginxをCentosにインストールする方法 Apr 14, 2025 pm 08:06 PM

NGINXのインストールをインストールするには、次の手順に従う必要があります。開発ツール、PCRE-Devel、OpenSSL-Develなどの依存関係のインストール。 nginxソースコードパッケージをダウンロードし、それを解凍してコンパイルしてインストールし、/usr/local/nginxとしてインストールパスを指定します。 nginxユーザーとユーザーグループを作成し、アクセス許可を設定します。構成ファイルnginx.confを変更し、リスニングポートとドメイン名/IPアドレスを構成します。 nginxサービスを開始します。依存関係の問題、ポート競合、構成ファイルエラーなど、一般的なエラーに注意する必要があります。パフォーマンスの最適化は、キャッシュをオンにしたり、ワーカープロセスの数を調整するなど、特定の状況に応じて調整する必要があります。

See all articles