pythonでの数値型というのはどのようなものがあるのでしょうか?
Javaでプリミティブなら int, fload , double, longなどがありますが・・・
参照型であれば、Integerというのもあったでしょうか?
pythonでStringを数値を表す型へ変換する場合、
参照型に変換されるのでしょうか?
変換する対象の文字列が数値を表していない場合、
なんらかのexceptionを raiseするのでしょうか?
↓
Pythonでは数値型として以下の種類があります。
Javaのプリミティブ型や参照型と比較すると、
Pythonではすべてがオブジェクトとして扱われます。
---
### **Pythonの数値型**
1. **int**
- 整数を表す型です。
- サイズに制限がなく、非常に大きな値も扱えます
(Javaの`int`や`long`のように範囲制限がありません)。
2. **float**
- 浮動小数点数を表す型です。
- Javaの`float`や`double`に相当しますが、
通常の精度はC言語の`double`と同程度(64ビット)です。
3. **complex**
- 複素数を表す型です。実数部分と虚数部分を持ちます。
- 例: `3 + 4j`
---
### **文字列から数値型への変換**
Pythonで文字列を数値に変換するには、以下の関数を使用します:
1. **整数に変換: `int()`**
- 例: `int("123")` → `123`
- 変換対象の文字列が数値でない場合、`ValueError`を発生させます。
- 例:
```python
int("abc")
# ValueError: invalid literal for int() with base 10: 'abc'
```
2. **浮動小数点数に変換: `float()`**
- 例: `float("123.45")` → `123.45`
- 変換対象の文字列が数値でない場合、`ValueError`を発生させます。
- 例:
```python
float("abc")
# ValueError: could not convert string to float: 'abc'
```
3. **複素数に変換: `complex()`**
- 例: `complex("1+2j")` → `(1+2j)`
- 不適切な形式の場合、`ValueError`を発生させます。
---
### **Pythonの数値型とJavaの違い**
- **プリミティブ型がない**:
- Javaでは`int`はプリミティブ型、
`Integer`は参照型として区別されますが、
Pythonではすべてがオブジェクトとして扱われます。
- 例: `123`は`int`型のオブジェクトです。
- **型変換がシームレス**:
- Pythonでは`int`と`float`の間での演算や型変換がシームレスに行われます。
- 例:
```python
a = 10 # int型
b = 3.14 # float型
c = a + b # cはfloat型で13.14
```
---
### **文字列変換時の例外処理**
数値変換時に例外を適切に処理するには、
`try`/`except`を使います。
#### **例: 整数変換**
```python
def convert_to_int(s):
try:
return int(s)
except ValueError:
print(f"変換できません: {s}")
return None
# 123
print(convert_to_int("123"))
# 変換できません: abc → None
print(convert_to_int("abc"))
```
#### **例: 浮動小数点数変換**
```python
def convert_to_float(s):
try:
return float(s)
except ValueError:
print(f"変換できません: {s}")
return None
# 123.45
print(convert_to_float("123.45"))
# 変換できません: xyz → None
print(convert_to_float("xyz"))
```
---
### **補足: 変換前のチェック**
数値変換前に文字列が数値を表しているか確認するには、
`str.isdigit()`や正規表現を使用します。
#### **整数の場合**
```python
s = "123"
if s.isdigit():
# 123
print(int(s))
else:
print("数値ではありません")
```
#### **浮動小数点数の場合(正規表現を使用)**
```python
import re
def is_float(s):
return bool(re.match(r"^-?\d+(\.\d+)?$", s))
s = "123.45"
if is_float(s):
print(float(s)) # 123.45
else:
print("浮動小数点数ではありません")
```
---
Pythonでは例外処理を活用しながら柔軟に型変換を行うことができます。
数値型の違いに慣れると、
Javaよりもシンプルに感じられるかもしれません!
コメント
コメントを投稿