當前位置:編程學習大全網 - 編程語言 - 如何讓Python支持分數類型(利用標準庫fractions模塊)的方法詳解

如何讓Python支持分數類型(利用標準庫fractions模塊)的方法詳解

最近在工作中遇到了分數處理,查找相關的資料發現可以利用Fraction類來實現,所以下面這篇文章主要給大家介紹了關於利用標準庫fractions模塊讓Python支持分數類型的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下。

前言

妳可能不需要經常處理分數,但當妳需要時,Python的Fraction類會給妳很大的幫助。本文將給大家詳細介紹關於利用標準庫fractions模塊讓Python支持分數類型的相關內容,分享出來供大家參考學習,下面話不多說了,來壹起看看詳細的介紹:

fractions模塊

fractions模塊提供了分數類型的支持。

Fraction類

該類是fractions模塊的核心,它繼承了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

')

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() 。

總結

沒啥要總結的?只能說Python太方便了?對了,這篇博客其實也是個挖了挺久的坑了,之前裏面有壹部分源碼沒看懂所以壹直沒發上來。哈哈,後面這個標準庫學習的系列還是會壹直更下去的!

  • 上一篇:ClassIn視頻如何錄制
  • 下一篇:Android遊戲開發大全的目錄
  • copyright 2024編程學習大全網