文字列と式

32.3. 文字列と式

文字列 #

文字列と、その連結という操作を導入します。 Pythonでは、文字を ' single quote (または " double quote) で囲んだものを、文字または文字列として扱います。 文字列は、+ 演算子で連結することができます。

('a' + 'b') + 'c'
'abc'
\(\underbrace{\underbrace{(\texttt{'a'+ 'b'})}_{\texttt{'ab'}}\texttt{ + 'c'}}_{\texttt{'abc'}}\)
('Madam' + 'Im') + 'Adam'
MadamImAdam
\(\underbrace{\underbrace{(\texttt{'Madam' + 'Im'})}_{\texttt{'MadamIm'}}\texttt{ + 'Adam'}}_{\texttt{'MadamImAdam'}}\)

式の定義を文字(列)を含むように拡張しました

(1) 原始式 (atom)
  • 数そのもの (e.g., 3, 5, 3.1415)
  • 定数 (e.g., math.pi, math.e)
  • [New!] 文字列そのもの (‘a’, “a”, ‘hello’, ‘X’, ‘99’)
    (評価した値は自分自身)
(2) 式と演算子の適切な組合せ
  • 数の演算 e.g., (3+5), (1+(2+3))
  • [New!] 文字列の演算
    e.g., ('hello'+'world')
(3) 関数
e.g., math.floor(3.14), add(1+2, 3)
\(\text{`}\) backquote は、似て非なる文字なので、注意してください

文字列を返す (評価すると文字列になるような) 関数を作成することもできます。 関数の作成方法は、数の関数で紹介した基本パターンと同じです。

def greetings(name):
    return 'Hello, ' + name + '-san!'
greetings('Komakkero')
'Hello, Komakkero-san!'
greetings('May')
'Hello, May-san!'

#

+ 演算子の動作が数と文字で異なることから分かるように、Pythonでは数と文字を区別して扱っています。 この区別を (type) と呼びます。

式は、型 (かた, type) を持ちます。 演算子の意味 ( \(\approx\) 動作) は型毎に定義されます。 詳細は割愛しますが type(式) により、Python に型を尋ねることができます。

これまで紹介した式の型を確認してみましょう。intfloat が数、str が文字列の意味です。

type(3)
int
入力 応答
type(3) int
type(3+5) int
type(3.1415) float
type('abc') str

型と演算子が合わないと エラー TypeError になります。 例えば、加算は数と文字列両方に対して定義されていますが、減算は数のみです。

5 - 3
2
'5' - '3'
TypeError: unsupported operand type(s) for -: 'str' and 'str'
exercise
('hello!' * 3) を Python はどう評価するでしょうか。まず結果を自分で予想し、次にColabで確認してみましょう。
  • Hello!
  • 3
  • TypeError
  • その他

型変換 #

int(文字列) として、文字列が整数を表すときに、対応する数を得ることができます。

int('2')
2
int('5') - int('3')
2

int(文字列, N) として N進数を10進数に変換する機能も便利です。

int('a', 16)
10
int('10', 16)
16
int('ff', 16)
255
int('111', 2)
7

数から文字列から作ることもできます。10進数表現の文字列を得るときは str, 2, 8, 16進数表現の文字列を得るときはそれぞれ bin, oct, hex を使います。

str(255)
255
bin(255)
0b11111111
hex(255)
0xff

0b0x は、2進数や16進数の目印です。

2, 8, 16進数と 10進数の対応については前の章の説明を参照してください。

12.3. bit列と2進数

式と評価 文字列と式 ベクトルの計算と関数の図示