3.3。 Pythonの非公式な紹介
次の例では、入力と出力はプロンプトの有無によって区別されます( >>> および…):例を繰り返すには、プロンプトの後にすべてを入力する必要があります。プロンプトが表示されたとき。 プロンプトで始まらない行は、インタプリタから出力されます。 例では、行自体の2番目のプロンプトは、空白行を入力する必要があることを意味することに注意してください。 これは、複数行のコマンドを終了するために使用されます。
このマニュアルの例の多くは、インタラクティブプロンプトで入力されたものであっても、コメントが含まれています。 Pythonのコメントは、ハッシュ文字#
で始まり、物理行の終わりまで続きます。 コメントは、行の先頭または空白またはコードの後に表示される場合がありますが、文字列リテラル内には表示されません。 文字列リテラル内のハッシュ文字は単なるハッシュ文字です。 コメントはコードを明確にするためのものであり、Pythonによって解釈されないため、例を入力するときにコメントを省略できます。
いくつかの例:
3.1。 電卓としてのPythonの使用
いくつかの簡単なPythonコマンドを試してみましょう。 インタプリタを起動し、プライマリプロンプト>>>
を待ちます。 (長くはかからないはずです。)
3.1.1。 数字
インタプリタは単純な計算機として機能します。式を入力すると、値が書き込まれます。 式の構文は単純です。演算子+
、-
、*
、および/
は、他のほとんどの言語(PascalやCなど)と同じように機能します。 括弧(()
)はグループ化に使用できます。 例えば:
整数(例: 2
、4
、20
)のタイプは int で、小数部分があります(例: 5.0
、1.6
)のタイプは float です。 数値型については、チュートリアルの後半で詳しく説明します。
除算(/
)演算の戻りタイプは、そのオペランドによって異なります。 両方のオペランドの型が int の場合、フロア分割が実行され、 int が返されます。 いずれかのオペランドが float の場合、古典的な除算が実行され、 float が返されます。 //
演算子は、オペランドが何であれ、フロア分割を行うためにも提供されています。 余りは%
演算子で計算できます。
Pythonでは、**
演算子を使用して累乗 1 を計算できます。
等号(=
)は、変数に値を割り当てるために使用されます。 その後、次のインタラクティブプロンプトの前に結果は表示されません。
変数が「定義」されていない(値が割り当てられている)場合、それを使用しようとするとエラーが発生します。
浮動小数点は完全にサポートされています。 混合型オペランドを持つ演算子は、整数オペランドを浮動小数点に変換します。
インタラクティブモードでは、最後に出力された式が変数_
に割り当てられます。 これは、Pythonを卓上計算機として使用している場合、次のように計算を続行する方がやや簡単であることを意味します。
この変数は、ユーザーが読み取り専用として扱う必要があります。 値を明示的に割り当てないでください。同じ名前の独立したローカル変数を作成して、組み込み変数をその魔法の動作でマスクします。
Pythonは、 int と float に加えて、 Decimal や Fraction などの他のタイプの数値をサポートしています。 Pythonには、複素数のサポートも組み込まれており、j
またはJ
サフィックスを使用して虚数部を示します(例: 3+5j
)。
3.1.2。 文字列
Pythonは、数値の他に、いくつかの方法で表現できる文字列を操作することもできます。 それらは一重引用符('...'
)または二重引用符("..."
)で囲むことができ、同じ結果 2 になります。 \
は、引用符をエスケープするために使用できます。
対話型インタプリタでは、出力文字列は引用符で囲まれ、特殊文字は円記号でエスケープされます。 これは入力とは異なって見える場合がありますが(囲んでいる引用符は変更される可能性があります)、2つの文字列は同等です。 文字列に一重引用符が含まれ、二重引用符が含まれていない場合、文字列は二重引用符で囲まれます。それ以外の場合は、一重引用符で囲まれます。 print ステートメントは、囲んでいる引用符を省略し、エスケープ文字と特殊文字を出力することにより、より読みやすい出力を生成します。
\
で始まる文字を特殊文字として解釈したくない場合は、最初の引用符の前にr
を追加して、生の文字列を使用できます。
文字列リテラルは複数行にまたがることができます。 1つの方法は、"""..."""
または...
の三重引用符を使用することです。 行末は自動的に文字列に含まれますが、行末に\
を追加することでこれを防ぐことができます。 次の例:
次の出力を生成します(最初の改行は含まれていないことに注意してください)。
文字列は、+
演算子を使用して連結(接着)し、*
を使用して繰り返すことができます。
2つ以上の文字列リテラル(つまり 引用符で囲まれたもの)が隣り合っていると、自動的に連結されます。
この機能は、長い文字列を分割する場合に特に便利です。
ただし、これは2つのリテラルでのみ機能し、変数や式では機能しません。
変数または変数とリテラルを連結する場合は、+
を使用します。
文字列にはインデックス(添え字)を付けることができ、最初の文字のインデックスは0です。 個別の文字タイプはありません。 文字は単にサイズ1の文字列です。
インデックスは、右からカウントを開始するために、負の数にすることもできます。
-0は0と同じであるため、負のインデックスは-1から始まることに注意してください。
インデックス作成に加えて、スライスもサポートされています。 インデックスは個々の文字を取得するために使用されますが、スライスを使用すると、サブストリングを取得できます。
開始が常に含まれ、終了が常に除外されることに注意してください。 これにより、s[:i] + s[i:]
が常にs
と等しくなるようになります。
スライスインデックスには便利なデフォルトがあります。 省略された最初のインデックスはデフォルトでゼロになり、省略された2番目のインデックスはデフォルトでスライスされる文字列のサイズになります。
スライスがどのように機能するかを覚える1つの方法は、インデックスを文字間を指し、最初の文字の左端に0の番号が付けられていると考えることです。 次に、 n 文字の文字列の最後の文字の右端に、インデックス n があります。次に例を示します。
数字の最初の行は、文字列内のインデックス0〜6の位置を示します。 2行目は、対応する負のインデックスを示します。 i から j までのスライスは、それぞれ i と j のラベルが付いたエッジ間のすべての文字で構成されます。
非負のインデックスの場合、スライスの長さは、両方が範囲内にある場合、インデックスの差です。 たとえば、word[1:3]
の長さは2です。
大きすぎるインデックスを使用しようとすると、エラーが発生します。
ただし、範囲外のスライスインデックスは、スライスに使用すると適切に処理されます。
Python文字列は変更できません— 不変です。 したがって、文字列内のインデックス付きの位置に割り当てると、エラーが発生します。
別の文字列が必要な場合は、新しい文字列を作成する必要があります。
組み込み関数 len()は、文字列の長さを返します。
も参照してください
- シーケンスタイプ— str、unicode、list、tuple、bytearray、buffer、xrange
- 文字列、および次のセクションで説明するUnicode文字列は、シーケンスタイプの例であり、そのようなタイプでサポートされる一般的な操作をサポートします。
- 文字列メソッド
- 文字列とUnicode文字列はどちらも、基本的な変換と検索のための多数のメソッドをサポートしています。
- フォーマット文字列構文
- str.format()を使用した文字列フォーマットに関する情報。
- 文字列フォーマット操作
- 文字列とUnicode文字列が
%
演算子の左側のオペランドである場合に呼び出される古いフォーマット操作については、ここで詳しく説明します。
3.1.3。 Unicode文字列
Python 2.0以降、プログラマーはテキストデータを格納するための新しいデータ型であるUnicodeオブジェクトを利用できます。 Unicodeデータの保存と操作に使用でき( http://www.unicode.org/ を参照)、既存の文字列オブジェクトと適切に統合され、必要に応じて自動変換を提供します。
Unicodeには、現代および古代のテキストで使用されるすべてのスクリプトのすべての文字に1つの順序を提供するという利点があります。 以前は、スクリプト文字に使用できる序数は256しかありませんでした。 テキストは通常、序数をスクリプト文字にマップするコードページにバインドされていました。 これは、特にソフトウェアの国際化(通常、i18n
— 'i'
+18文字+ 'n'
と表記)に関して非常に混乱を招きます。 Unicodeは、すべてのスクリプトに対して1つのコードページを定義することにより、これらの問題を解決します。
PythonでUnicode文字列を作成するのは、通常の文字列を作成するのと同じくらい簡単です。
引用符の前にある小さな'u'
は、Unicode文字列が作成されることになっていることを示します。 文字列に特殊文字を含める場合は、Python Unicode-Escape エンコーディングを使用して行うことができます。 次の例は、その方法を示しています。
エスケープシーケンス\u0020
は、指定された位置に順序値0x0020(スペース文字)のUnicode文字を挿入することを示します。
他の文字は、それぞれの序数値を直接Unicode序数として使用して解釈されます。 多くの西欧諸国で使用されている標準のLatin-1エンコーディングのリテラル文字列がある場合、Unicodeの下位256文字がLatin-1の256文字と同じであると便利です。
専門家のために、通常の文字列の場合と同じようにrawモードもあります。 Pythonで Raw-Unicode-Escape エンコーディングを使用するには、開始引用符の前に「ur」を付ける必要があります。 小さい「u」の前に円記号の数が不均一な場合にのみ、上記の\uXXXX
変換が適用されます。
rawモードは、正規表現で必要になる可能性があるように、多くの円記号を入力する必要がある場合に最も役立ちます。
これらの標準エンコーディングとは別に、Pythonは、既知のエンコーディングに基づいてUnicode文字列を作成する他の方法のセット全体を提供します。
組み込み関数 unicode()は、登録されているすべてのUnicodeコーデック(COderおよびDECoder)へのアクセスを提供します。 これらのコーデックが変換できるよく知られたエンコーディングには、 Latin-1 、 ASCII 、 UTF-8 、および UTF-16 があります。 ]。 後者の2つは、各Unicode文字を1つ以上のバイトに格納する可変長エンコーディングです。 デフォルトのエンコーディングは通常ASCIIに設定されており、0〜127の範囲の文字を通過させ、他の文字をエラーで拒否します。 Unicode文字列が印刷、ファイルへの書き込み、または str()で変換される場合、変換はこのデフォルトのエンコーディングを使用して行われます。
特定のエンコーディングを使用してUnicode文字列を8ビット文字列に変換するために、Unicodeオブジェクトは、エンコーディングの名前という1つの引数を取るencode()
メソッドを提供します。 エンコーディングには小文字の名前を使用することをお勧めします。
特定のエンコーディングのデータがあり、それに対応するUnicode文字列を生成する場合は、2番目の引数としてエンコーディング名を指定して unicode()関数を使用できます。
3.1.4。 リスト
Pythonは、他の値をグループ化するために使用される化合物データ型をいくつか知っています。 最も用途が広いのは list です。これは、角括弧で囲まれたコンマ区切りの値(項目)のリストとして記述できます。 リストには異なるタイプのアイテムが含まれる場合がありますが、通常、アイテムはすべて同じタイプです。
文字列(および他のすべての組み込みシーケンスタイプ)と同様に、リストにはインデックスを付けてスライスすることができます。
すべてのスライス操作は、要求された要素を含む新しいリストを返します。 これは、次のスライスがリストの新しい(浅い)コピーを返すことを意味します。
リストは、連結などの操作もサポートします。
不変である文字列とは異なり、リストは可変タイプです。 それらのコンテンツを変更することが可能です:
append()
method を使用して、リストの最後に新しいアイテムを追加することもできます(メソッドについては後で詳しく説明します)。
スライスへの割り当ても可能であり、これによりリストのサイズを変更したり、リストを完全にクリアしたりすることもできます。
組み込み関数 len()は、リストにも適用されます。
次に、リストをネストする(他のリストを含むリストを作成する)ことができます。
3.2。 プログラミングへの第一歩
もちろん、Pythonを使用して、2つと2つを足し合わせるよりも複雑なタスクを実行できます。 たとえば、 Fibonacci シリーズの最初のサブシーケンスを次のように記述できます。
この例では、いくつかの新機能を紹介します。
最初の行には複数の割り当てが含まれています。変数
a
とb
は同時に新しい値0と1を取得します。 最後の行では、これが再び使用されており、割り当てが行われる前に、右側の式がすべて最初に評価されることを示しています。 右側の式は、左から右に評価されます。while ループは、条件(ここでは
b < 10
)が真である限り実行されます。 Pythonでは、Cと同様に、ゼロ以外の整数値はすべてtrueです。 ゼロは偽です。 条件は、文字列またはリスト値、実際には任意のシーケンスにすることもできます。 長さがゼロ以外のものはすべて真であり、空のシーケンスは偽です。 この例で使用されているテストは、単純な比較です。 標準の比較演算子は、Cと同じように記述されています:<
(より小さい)、>
(より大きい)、==
(等しい)、 [X139X ](以下)、>=
(以上)、!=
(等しくない)。ループの body はインデントです。インデントはPythonのステートメントのグループ化方法です。 インタラクティブプロンプトで、インデントされた行ごとにタブまたはスペースを入力する必要があります。 実際には、テキストエディタを使用してPython用のより複雑な入力を準備します。 すべてのまともなテキストエディタには、自動インデント機能があります。 複合ステートメントを対話形式で入力する場合は、完了を示すために空白行を続ける必要があります(パーサーは最後の行をいつ入力したかを推測できないため)。 基本ブロック内の各行は、同じ量だけインデントする必要があることに注意してください。
print ステートメントは、指定された式の値を書き込みます。 複数の式や文字列を処理する方法が、(電卓の例で前に行ったように)書きたい式を書くこととは異なります。 文字列は引用符なしで印刷され、アイテム間にスペースが挿入されるため、次のように適切にフォーマットできます。
末尾のコンマは、出力後の改行を回避します。
最後の行が完了していなかった場合、インタープリターは次のプロンプトを出力する前に改行を挿入することに注意してください。
脚注
- 1
**
は-
よりも優先されるため、-3**2
は-(3**2)
として解釈され、結果として-9
になります。 これを回避して9
を取得するには、(-3)**2
を使用できます。- 2
- 他の言語とは異なり、
\n
などの特殊文字は、一重引用符('...'
)と二重引用符("..."
)の両方で同じ意味を持ちます。 2つの違いは、一重引用符内で"
をエスケープする必要がないことです(ただし、\'
をエスケープする必要があります)。その逆も同様です。