「Pythonのf-Stringsマジック:すべてのコーダーが知るべき5つのゲームチェンジングなトリック」

「Pythonのf-Stringsマジック:5つのゲームチェンジングなトリックをすべてのコーダーが知るべき」

Pythonを使用している場合、おそらく古い format() メソッドを使うのをやめ、Python 3.6で導入されたより簡潔でメンテナンスしやすいf-Stringsに切り替えているでしょう。しかし、それ以上のこともあります。

Python 3.8以降では、デバッグ、日付時刻オブジェクトのフォーマット、浮動小数点数のフォーマットなど、便利なf-stringの機能がいくつかあります。このチュートリアルでこれらの使用例を探ってみましょう。

注意: コード例を実行するには、Python 3.8以降のバージョンがインストールされている必要があります。

1. デバッグしやすくなる

コーディング中に、変数の値が予想どおりのものであるかを確認するためにprint()ステートメントを使用することがあります。f-stringsでは、変数名とその値を含めて簡単にデバッグすることができます。

次の例を考えてみましょう。

 length = 4.5breadth = 7.5height = 9.0print(f'{length=}, {breadth=}, {height=}') 

これは次のように出力されます:

 出力 >>> length=4.5, breadth=7.5, height=9.0 

この機能は、デバッグ中に変数の状態を理解するために特に役立ちます。ただし、本番コードでは必要なログレベルでログ設定を行うべきです。

2. 浮動小数点数と日付のきれいなフォーマット

Pythonで浮動小数点数や日付時刻オブジェクトを表示する場合、次のようなことをする必要があります。

  • 小数点以下の桁数を固定して浮動小数点数をフォーマットする
  • 日付を特定の一貫した形式でフォーマットする

f-stringsを使えば、要件に応じて浮動小数点数や日付を簡単にフォーマットすることができます。

この例では、price変数を{price:.2f}と指定して小数点以下2桁で表示するようにフォーマットします。

 price = 1299.500print(f'Price: ${price:.2f}') 

 出力 >>> Price: $1299.50 

日付時刻オブジェクトをフォーマットするには、通常strftime()メソッドを使用しますが、f-stringsでも同様に行うことができます。以下に例を示します:

 from datetime import datetimecurrent_time = datetime.now()print(f'Current date and time: {current_time:%Y-%m-%d %H:%M:%S}') 

 出力 >>> Current date and time: 2023-10-12 15:25:08 

日付と浮動小数点数のフォーマットを含むシンプルな例をコード化してみましょう:

 price = 1299.500purchase_date = datetime(2023, 10, 12, 15, 30)print(f'Product purchased for ${price:.2f} on {purchase_date:%B %d, %Y at %H:%M}') 

 出力 >>>Product purchased for $1299.50 on October 12, 2023 at 15:30 

3. 数値の基数変換

f-stringsは、数値データ型の基数変換をサポートしており、数値を別の基数で表示するために個別の基数変換関数やラムダを記述する必要はありません。

10進数の42のバイナリと16進数の値を出力するには、以下に示すようにf文字列を使用することができます:

num = 42print(f'10進数 {num}、バイナリ: {num:b}、16進数: {num:x}')

 

出力 >>>10進数 42、バイナリ: 101010、16進数: 2a

 

見ての通り、これはバイナリや16進数など、異なる基数で数字を出力する必要がある場合に役立ちます。10進数から8進数への変換のための別の例を見てみましょう:

num = 25print(f'10進数 {num}、8進数: {num:o}')

 

出力 >>> 10進数 25、8進数: 31

 

覚えていてください、Oct 31 = Dec 25ですか? はい、「開発者はなぜハロウィンをクリスマスと混同するのか?」のミームに触発された例です。

 

4. 便利なASCIIとreprの変換

 

f文字列内で!aおよび!r変換フラグを使用すると、ASCIIおよびrepr文字列として文字列をフォーマットすることができます。

文字列をそのASCII表記に変換する必要がある場合は、次のようにして!aフラグを使用できます:

emoji = "🙂" print(f'絵文字のASCII表現:{emoji!a}')

 

出力 >>> 絵文字のASCII表現:'\U0001f642'

 

任意のオブジェクトのreprにアクセスするには、!rフラグを使用したf文字列を使用できます:

from dataclasses import dataclass@dataclassclass Point3D:    x: float = 0.0  y: float = 0.0  z: float = 0.0point = Point3D(0.5, 2.5, 1.5)print(f'3Dポイントのrepr:{point!r}')

 

Pythonのデータクラスは、__repr__のデフォルト実装が付属しているため、明示的に記述する必要はありません。

出力 >>> 3Dポイントのrepr:Point3D(x=0.5, y=2.5, z=1.5)

 

5. LLMプロンプトテンプレートのフォーマット

 

LlamaやGPT-4などの大規模な言語モデルを使用する場合、f文字列はプロンプトテンプレートを作成するのに役立ちます。

ハードコーディングされたプロンプト文字列の代わりに、再利用可能で組み合わせ可能なプロンプトテンプレートをf文字列を使用して作成できます。必要に応じて変数、質問、または文脈を挿入できます。

LangChainなどのフレームワークを使用している場合は、フレームワークのPromptTemplate機能を使用できます。しかし、そうでなくても、常にf文字列ベースのプロンプトテンプレートを使用することができます。

プロンプトは次のようにシンプルにすることもできます:

prompt_1 = "Stephen Kingのベストセラーの上位5冊を教えてください。"

 

または、少し柔軟性のあるもの(それでも非常にシンプルです):

num = 5author = 'Stephen King'prompt_2 = f"{author}のベストセラーの上位{num}冊を教えてください。"

 

場合によっては、プロンプトに文脈といくつかの例を提供することが役立ちます。

次の例を考えてみてください:

# contextuser_context = "パリへの旅行を計画しています。情報が必要です。"# examplesfew_shot_examples = [    {       "query": "パリの人気の観光名所はどこですか?",     "answer": "エッフェル塔、ルーブル美術館、ノートルダム大聖堂などが人気の名所です。",    },  {       "query": "11月のパリの天気はどのようですか?",       "answer": "11月には、パリは涼しく湿った気候で、気温は10〜15°C程度です。", },]# questionuser_question = "パリのおすすめのレストランを教えてもらえますか?"

こちらはf-stringsを使用した再利用可能なプロンプトテンプレートです。どんなコンテキスト、例、クエリのユースケースにも使用できます:

# Constructing the Prompt using a multiline stringprompt = f'''Context: {user_context}Examples:'''for example in few_shot_examples:   prompt += f'''Question:  {example['query']}\nAnswer: {example['answer']}\n'''prompt += f'''Query: {user_question}'''print(prompt)

以下がこの例のプロンプトです:

Output >>>Context: 私はパリへの旅行を計画しています。情報が必要です。Examples:Question: パリの人気のある観光スポットは何ですか?Answer: エッフェル塔、ルーヴル美術館、ノートルダム大聖堂などが人気の観光名所です。Question: 11月のパリの天気はどうですか?Answer: 11月には、パリは涼しく湿った天候で、気温は約10〜15℃です。Query: パリでオススメのレストランはありますか?

まとめ

以上がまとめです。いくつかのPythonのf-stringの機能がプログラマーのツールボックスに追加できたことを願っています。Pythonの学習に興味がある場合は、私たちの Pythonマスタリーのための無料の書籍5冊をご覧ください。Happy learning!

[Bala Priya C](https://twitter.com/balawc27)は、インドからの開発者兼技術ライターです。彼女は数学、プログラミング、データサイエンス、コンテンツ作成の交差点で働くのが好きです。彼女の関心と専門知識はDevOps、データサイエンス、自然言語処理などです。彼女は読書、執筆、コーディング、コーヒーを楽しんでいます!現在、彼女はチュートリアル、ハウツーガイド、意見記事などを執筆することにより、開発者コミュニティとの知識共有と学習を行っています。

We will continue to update VoAGI; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

人工知能

スコット・スティーブンソン、スペルブックの共同創設者兼CEO- インタビューシリーズ

スコット・スティーブンソンは、Spellbookの共同創設者兼CEOであり、OpenAIのGPT-4および他の大規模な言語モデル(LLM)に基...

人工知能

ムーバブルインクのCEO兼共同創設者であるヴィヴェク・シャルマ氏についてのインタビュー・シリーズ

ビヴェクは2010年にムーバブルインクを共同設立し、急速な成長を遂げながら、600人以上の従業員を擁し、世界有数の革新的なブ...

人工知能

Aaron Lee、Smith.aiの共同設立者兼CEO - インタビューシリーズ

アーロン・リーさんは、Smith.aiの共同創業者兼CEOであり、AIと人間の知性を組み合わせて、24時間365日の顧客エンゲージメン...

人工知能

「Ntropyの共同創設者兼CEO、ナレ・ヴァルダニアンについて - インタビューシリーズ」

「Ntropyの共同創設者兼CEOであるナレ・ヴァルダニアンは、超人的な精度で100ミリ秒以下で金融取引を解析することを可能にす...

人工知能

キャルレールの最高製品責任者、ライアン・ジョンソンへのインタビューシリーズ

ライアンは、初期のスタートアップからフォーチュン100の組織まで、多様なテクノロジーと製品開発のリーダーシップ経験を15年...

人工知能

「サティスファイラボのCEO兼共同創設者、ドニー・ホワイト- インタビューシリーズ」

2016年に設立されたSatisfi Labsは、会話型AI企業のリーディングカンパニーです早期の成功は、ニューヨーク・メッツ、メイシ...