Python で分数型をサポートする方法の詳細な説明 (標準ライブラリの分数モジュールを使用)
最近仕事で分数処理に遭遇し、関連情報を検索したところ、Fraction クラスを使用して実装できることがわかりました。そこで、次の記事では主に、Python で分数型をサポートするための標準ライブラリの分数モジュールの使用に関する関連情報を紹介します。この記事ではコードの紹介が非常に詳細に行われているので、必要な場合は参考にしてください。
はじめに
分数を扱う必要はあまりないかもしれませんが、その場合は、Python の Fraction クラスが大いに役立ちます。この記事では、Python で分数型をサポートできるようにするための標準ライブラリの分数モジュールの使用法について詳しく説明し、参考と学習のために共有します。以下では多くを説明しません。詳細な紹介を見てみましょう。 :
fractionsモジュール
fractionsモジュールは、分数型のサポートを提供します。
Fraction クラス
このクラスは、Fraction モジュールのコアであり、numbers.Rational
クラスを継承し、このクラスのすべてのメソッドを実装します。 numbers.Rational
类并且实现了该类所有的方法。
构造函数并不复杂:
class fractions.Fraction(numerator=0, denominator=1) class fractions.Fraction(int|float|str|Decimal|Fraction)
可以同时提供分子(numerator)和分母(denominator)给构造函数用于实例化Fraction类,但两者必须同时是int类型或者numbers.Rational
类型,否则会抛出类型错误。当分母为0,初始化的时候会导致抛出异常ZeropisionError。
而如果只提供一个参数,则可以用上述五种类型进行初始化。当使用字符串进行初始化时,fractions模块使用内置的正则表达式进行匹配。而使用浮点数或者Decimal进行初始化时,fractions模块会在内部调用as_integer_ratio()
。
下面的代码示例来自官方文档,展示了各种实例化Fraction的方式:
>>> from fractions import Fraction >>> Fraction(16, -10) Fraction(-8, 5) >>> Fraction(123) Fraction(123, 1) >>> Fraction() Fraction(0, 1) >>> Fraction('3/7') Fraction(3, 7) >>> Fraction(' -3/7 ') Fraction(-3, 7) >>> Fraction('1.414213 \t\n') Fraction(1414213, 1000000) >>> Fraction('-.125') Fraction(-1, 8) >>> Fraction('7e-6') Fraction(7, 1000000) >>> Fraction(2.25) Fraction(9, 4) >>> Fraction(1.1) Fraction(2476979795053773, 2251799813685248) >>> from decimal import Decimal >>> Fraction(Decimal('1.1')) Fraction(11, 10)
限制分母
fractions.Fraction.limit_denominator(max_denominator=1000000)
有时候将浮点数或者Decimal作为Fraction实例的初始化数据可能会遇到舍入误差的问题,如上面调用Fraction(1.1)
时不返回Fraction(11, 10)
的例子。这时Fraction类提供了一个实例方法limit_denominator()
用于减小这种误差。这个方法本来是为了通过限制分母来得到一个近似值,但是在出现舍入误差的时候反倒使得结果更加精确了,如下面的例子:
>>> from fractions import Fraction >>> Fraction(1.1) Fraction(2476979795053773, 2251799813685248) >>> Fraction(1.1).limit_denominator() Fraction(11, 10)
将Fraction用于算术运算、关系运算和其他多种操作
上面提到,Fraction类继承了numbers.Rational
类并且实现了该类所有的方法。所以Fraction类事实上通过重载很多特殊函数,使得其实例可以直接用于多种算术运算。
不仅支持算术运算,Fraction类同时也支持关系运算、pickle模块、copy模块和哈希值的计算。
>>> from fractions import Fraction >>> x = Fraction(1, 2) >>> y = Fraction(1, 3) >>> x + y Fraction(5, 6) >>> x - y Fraction(1, 6) >>> x * y Fraction(1, 6) >>> x / y Fraction(3, 2) >>> x ** 2 Fraction(1, 4) >>> -x Fraction(-1, 2) >>> abs(x) Fraction(1, 2) >>> round(x) 0 >>> import math >>> math.floor(x) 0 >>> math.ceil(x) 1 >>> x == y False >>> x > y True
其他函数
fractions.Fraction.from_float(flt) fractions.Fraction.from_decimal(dec)
在Python3.2之前,Fraction类不支持通过将浮点数和Decimal传入构造方法来获得实例。而是提供了上面两个类方法,通过调用类方法的方式来产生实例,目前版本(Python 3.6.1)这两个类方法仍然存在。
fractions.gcd(a, b)
用于计算最大公约数。这个函数在Python3.5之后就废弃了,官方建议使用math.gcd()
rrreeeFraction クラスをインスタンス化するためにコンストラクターに分子と分母の両方を指定できますが、両方とも次の型である必要があります。 int または numbers.Rational
を同時に指定しないと、型エラーがスローされます。分母が 0 の場合、初期化中に例外 ZeropisionError がスローされます。 そして、パラメータが 1 つだけ指定されている場合は、上記の 5 つのタイプで初期化できます。文字列で初期化される場合、分数モジュールは組み込みの正規表現マッチングを使用します。浮動小数点数または Decimal で初期化する場合、分数モジュールは内部で as_integer_ratio()
を呼び出します。
🎜rrreee🎜🎜🎜制限分母🎜🎜🎜🎜fractions。 Fraction.limit_denominator(max_denominator=1000000)
🎜🎜Fraction インスタンスの初期化データとして浮動小数点数または Decimal を使用すると、Fraction(1.1) の呼び出しなど、丸め誤差の問題が発生する場合があります
code> が使用されている場合は、Fraction(11, 10)
を返します。現時点では、このエラーを軽減するために、Fraction クラスはインスタンス メソッド limit_denominator()
を提供します。このメソッドは元々、分母を制限して近似値を取得することを目的としていましたが、丸め誤差が発生すると、次の例に示すように、実際には結果がより正確になります: 🎜
🎜rrreee 🎜 will Fraction は算術演算、関係演算、その他のさまざまな演算に使用されます。前述したように、Fraction クラスは numbers.Rational
クラスを継承し、このクラスのすべてのメソッドを実装します。したがって、Fraction クラスは実際に多くの特殊関数をオーバーロードし、そのインスタンスをさまざまな算術演算に直接使用できるようにします。 🎜🎜Fraction クラスは算術演算をサポートするだけでなく、リレーショナル演算、pickle モジュール、コピー モジュール、ハッシュ値の計算もサポートします。 🎜
🎜rrreee🎜🎜🎜その他の関数🎜🎜🎜
🎜rrreee🎜 Python3.2 より前、Fraction クラスは受け渡しをサポートしていませんでした。浮動小数点数と Decimal がコンストラクターに渡されて、インスタンスが取得されます。代わりに、上記の 2 つのクラス メソッドは、クラス メソッドを呼び出すことでインスタンスを生成するために提供されており、現在のバージョン (Python 3.6.1) にも存在します。 🎜
🎜rrreee🎜 は最大公約数を計算するために使用されます。この関数は Python 3.5 以降では非推奨となり、公式では math.gcd()
を使用することが推奨されています。 🎜🎜🎜🎜まとめ🎜🎜🎜🎜 まとめるものが無い…Pythonは便利すぎるとしか言いようがない…ちなみにこのブログ、実は私がずっと掘っていた穴です。以前ソースコードの一部を理解していなかったので、まだ投稿していません。笑、次の標準ライブラリ学習シリーズは引き続き更新されます。 🎜
以上がPython で分数型をサポートする方法の詳細な説明 (標準ライブラリの分数モジュールを使用)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック









Pythonは、Web開発、データサイエンス、機械学習、自動化、スクリプトの分野で広く使用されています。 1)Web開発では、DjangoおよびFlask Frameworksが開発プロセスを簡素化します。 2)データサイエンスと機械学習の分野では、Numpy、Pandas、Scikit-Learn、Tensorflowライブラリが強力なサポートを提供します。 3)自動化とスクリプトの観点から、Pythonは自動テストやシステム管理などのタスクに適しています。

2時間以内にPythonの基本的なプログラミングの概念とスキルを学ぶことができます。 1.変数とデータ型、2。マスターコントロールフロー(条件付きステートメントとループ)、3。機能の定義と使用を理解する4。

Hash値として保存されているため、Navicatを介してMongoDBパスワードを直接表示することは不可能です。紛失したパスワードを取得する方法:1。パスワードのリセット。 2。構成ファイルを確認します(ハッシュ値が含まれる場合があります)。 3.コードを確認します(パスワードをハードコードできます)。

データの専門家として、さまざまなソースから大量のデータを処理する必要があります。これは、データ管理と分析に課題をもたらす可能性があります。幸いなことに、AWS GlueとAmazon Athenaの2つのAWSサービスが役立ちます。

Redisサーバーを起動する手順には、以下が含まれます。オペレーティングシステムに従ってRedisをインストールします。 Redis-Server(Linux/Macos)またはRedis-Server.exe(Windows)を介してRedisサービスを開始します。 Redis-Cli ping(Linux/macos)またはRedis-Cli.exePing(Windows)コマンドを使用して、サービスステータスを確認します。 Redis-Cli、Python、node.jsなどのRedisクライアントを使用して、サーバーにアクセスします。

Redisのキューを読むには、キュー名を取得し、LPOPコマンドを使用して要素を読み、空のキューを処理する必要があります。特定の手順は次のとおりです。キュー名を取得します:「キュー:キュー」などの「キュー:」のプレフィックスで名前を付けます。 LPOPコマンドを使用します。キューのヘッドから要素を排出し、LPOP Queue:My-Queueなどの値を返します。空のキューの処理:キューが空の場合、LPOPはnilを返し、要素を読む前にキューが存在するかどうかを確認できます。

質問:Redisサーバーバージョンを表示する方法は?コマンドラインツールRedis-Cli-versionを使用して、接続されたサーバーのバージョンを表示します。 Info Serverコマンドを使用して、サーバーの内部バージョンを表示し、情報を解析および返信する必要があります。クラスター環境では、各ノードのバージョンの一貫性を確認し、スクリプトを使用して自動的にチェックできます。スクリプトを使用して、Pythonスクリプトとの接続やバージョン情報の印刷など、表示バージョンを自動化します。

NAVICATのパスワードセキュリティは、対称暗号化、パスワード強度、セキュリティ対策の組み合わせに依存しています。特定の測定には、SSL接続の使用(データベースサーバーが証明書をサポートして正しく構成することを条件)、NAVICATの定期的な更新、より安全なメソッド(SSHトンネルなど)を使用し、アクセス権を制限し、最も重要なことは、パスワードを記録しないことです。
