2009年8月22日土曜日

文字列のフォーマット(数字編)

Phthonにおける文字列のフォーマットはJavaのMessageFormatと比べるとだいぶ様子が異なります。

例)Python
  • フォーマットを文字列で定義します。
  • %に続けてフォーマットコードを記述すると、そこに文字列がバインドされます。たとえば"%s"(文字列)、"%d"(10進数整数)など。一覧はコチラをご覧ください。
  • 数字の精度を指定する場合は"%[符号][ゼロ埋めするか][整数桁数].[浮動小数桁数]f"と定義します。
  • バインドする値は"%"で区切って指定します。

FORM = "%02.3f" # 符号なし、ゼロ埋めあり、整数2桁、小数3桁
x = float(1)
y = float(3)

print FORM % (x / y) # 値のバインド
出力)
> 00.333
例)Java
型が厳密な故にMessageFormat#format()メソッドの引数をObject型にしなければならないのが煩わしいですね。

final MessageFormat FORM = new MessageFormat("{0, number, ##.##}");
float x = (float)1;
float y = (float)3;
Object[] args = {new Float(x / y)};
System.out.println(FORM.format(args));

2009年8月13日木曜日

日本語のリテラル定義

Pythonインタプリタの内部コードはJava同様ユニコードです。ですが、日本語をリテラルとして定義する場合、Javaでは他のASCII文字列との区別を意識しませんがPythonにおいてはユニコードで扱うことを明示する必要があります。

例)Python


name = u"山田太郎"


例)Java


String name = "山田太郎";

2009年8月12日水曜日

ソースファイルの文字コード

Pythonをスクリプトファイルとして実行する場合は当然ソースファイルを用意します。Pythonはスクリプト言語ですのでJavaのようにコンパイルという作業はありません。そのためスクリプトファイルの先頭でソースファイルの文字コードを指定することにより、インタプリタへ通知します。

例)Python
1行目が文字コード宣言になります。

# -*- coding: utf-8 -*-
'''
Created on 2009/05/19

@author: hogehoge
'''
from google.appengine.ext import db
from datetime import date

例)Java
Javaのの場合はコンパイル時に"-encoding"オプションを指定することによりソースファイルの文字コードを指定し、ハードコーディングされたマルチバイト文字の文字化けを回避できます。

> javac -encoding utf-8 hogehoge.java

2009年8月3日月曜日

importとモジュールと関数と

Pythonにおけるimportを理解するためには、まずJavaとは異なる下記を理解する必要があります。
  • モジュール・・・クラスや関数が定義されているファイルのこと。

  • 関数、クラス・・・モジュール内に定義されている関数、クラス。

  • パッケージ・・・モジュール(≒ファイル)が配置されているディレクトリパス。

キーワードimportは単体で指定する場合と、キーワードfromとペアで指定する場合により指定するものが変わります。
単体で指定する場合は「モジュール」を指定し、fromとペアの場合は「関数」または「クラス」を指定します。

例)Python

import re # モジュールをインポート
from datetime import date # datetimeモジュールからdateクラスをインポート
from calendar import * # Java同様ワイルドカードも使える
from math import sin, cos, tan # 複数関数を指定

print re.split('\W+', 'Words, words, words.')
print date.today()
print firstweek() # calendarモジュールの関数

例)Java

import java.util.regex.*;
import java.util.Date;
import java.util.Calendar;

モジュールという仕組みがあるので、importしかないJavaに比べるとちょっとややこしいですが、慣れればね。