ITとことん の目次
Jython
■特長
java -jar jython.jar HelloWorld.py arg1 arg2 のようにして起動できる。
Pythonのソースコードの中から、Javaのライブラリを呼び出せる。
EclipseにJython用モジュールであるPyDevを組み込む。
(1) PyDevプラグインのdownload
Standalone版のjarをダウンロードし、jarを7zipなどで「ここに展開」を指定して展開する(展開しないと、後でなぜか失敗するので)。
(2) Eclipse起動
(3)[ヘルプ] - [新しいソフトウェアのインストール] - [作業] に、下記のURLを入力してEnterを押す。
・http://pydev.sourceforge.net/updates/
(4) PyDevというエントリが検索されるので、左のチェックボックスにチェックし、「次へ」ボタンをクリック。そのご文脈に沿って進むとPyDevのインストールが始まる。
(5) インストールが終わったら、Eclipseを再起動。
(6) [Window] - [Preferences]をクリックし、左メニューからPyDevを選択
(7) 左メニューからJython interpreterを選択し、右画面で[New]をクリック。
(8) インタプリタ名(Jython 2.7.1など)を入力、(1)でダウンロードしたjarを指定
(9) pythonpathに指定するフォルダを選べ、と表示がでるので、下記を選択
・Jython\Lib
・Jython\Lib\site-package
(10) [Apply]をクリックする。
■Jythonプロジェクトの作成
[ファイル] - [新規] - [その他] - [PyDev] - [PyDev Project]
Project Type = Jython
Interpreter = 2.7 (Jyton 2.7.1を使用しているため)
Create 'src' folder and add it to the PYTONPATH をチェック
「完了」をクリック。
■モジュールの作成
プロジェクトを右クリックして、「新規」- [PyDev Module]
エディターが開くので、下記のコードを入力。
---------------------------------
if __name__ == "__main__": print "Hello PyDev!"
---------------------------------
■実行
Ctrl + F11。 "Run As" 画面で、"Jthon Run" を選択。
Eclipseの設定
■eclipseの初期設定
プロジェクトを作成する前に下記の設定を行う。
(1) まずeclipseの起動
(a) eclipse起動時に表示されるworkspaceの場所の入力時は、
相対パスで「..\workspace」と入力すると良い。
(2)「Window」-「設定」でeclipseの基本設定
Java 8などデフォルトで使用したいJreバージョンをクリック
準拠レベルをJava 8などにする。
(c) 一般-ワークスペース
(d) 一般-外観-色とフォント
MSゴシックなどに設定する
(e) 一般-エディター-テキスト・エディター
「空白文字を表示」にチェックして全角空白を発見しやすくする。
(3) ブロジェクトの作成
好きなプロジェクトを選択する。Servletの場合は以下。
(a) ファイル-新規-その他-Web-動的Webプロジェクト
2038年問題
■Javaの場合
java.util.Dateクラスの getTime() メソッドは、1970/1/1 00:00:00(UTC)からの通しミリ秒数(つまり time_t * 1000)を返す。ただし、戻り値の型はlong(符号付き64bit)なので、このメソッド自体に2038年問題はない。
しかし、次のようなコードを書くと問題になる。
■Javaソース
--------------------------------------------------------
Date now = new Date();
long gettime;
int sec;
//gettime = now.getTime()した想定
gettime = (long)0x7fffffff * 1000; //単位はミリ秒
sec = (int)(gettime / 1000); //秒変換しintで管理
now.setTime((long)sec * 1000); //ミリ秒に戻してset
System.out.println(now);
//gettime = now.getTime()した想定
gettime = (long)0x80000000 * 1000; //単位はミリ秒
sec = (int)(gettime / 1000); //秒変換しintで管理
now.setTime((long)sec * 1000); //ミリ秒に戻してset
System.out.println(now);
--------------------------------------------------------
■実行結果
--------------------------------------------------------
Tue Jan 19 12:14:07 JST 2038 ・・・1秒後は1901年に戻る
Sat Dec 14 05:45:52 JST 1901
--------------------------------------------------------
Pythonのオブジェクト操作
■ソース
class TestClass :
def __init__(self, max) : ・・・ コンストラクタ
self.max = max ・・・ インスタンス変数に暫定最大値をセット
def teach(self, n) :
if n > self.max :
print('Big !!', n, ' > ', self.max)
self.max = n
else :
print('not Big.')
a = TestClass(2)
a.teach(3)
a.teach(1)
a.teach(6)
print('Max=', a.max) ・・・ インスタンス変数にアクセスできてしまう。
__maxのようにアンダースコアを2つ先頭に付加すると
クラスの外からアクセスできなくなる。
※コンストラクタを含むすべてのメソッドの第一引数は self でなければならない。
■実行結果
Big !! 3 > 2
not Big.
Big !! 6 > 3
Max= 6
■パッケージ
ファイルシステムでいうところのフォルダに相当(イコールではない)。
__init__.py という名前のファイルを持つフォルダがパッケージとなる。
__init__.pyモジュールには、importされたときに実行されるパッケージの初期化処理を書く。特に初期化処理がない場合は、空ファイルで良い。
---------------------------------------
■ITとことんのトップページ
┗■本ページ
Pythonの関数操作について
■一般的な関数
---------------------------------
def func01(arg1, arg2="です") : ・・・ arg2はデフォルトあり。
print('arg1=', arg1, arg2)
return 1
a=func01('abc')
a=func01('abc', 'だった')
---------------------------------
実行すると、
arg1= abc です
arg1= abc だった
と表示され、a=1 となる。
■可変長引数の関数
---------------------------------
def func01(*args) : ・・・ 引数の数が可変
i = 0
for arg in args :
print('args[', i, ']=', arg, sep='')
i += 1
func01('a', 'b', 'c')
---------------------------------
実行すると、
args[0]=a
args[1]=b
args[2]=c
となる。
■辞書を引数にとる関数
---------------------------------
def func01(**args) : ・・・ アスタリスクを2つ書く
for key, val in args.items() :
print(key, '=', val, sep='')
func01(a='abc', x='xyz')
---------------------------------
実行すると、
a=abc
x=xyz
となる。
■関数内関数
---------------------------------
def func(x,y) :
def inner(a,b) :
return a+b
return inner(x, y) * 1.1
ika = 80
tako = 120
print(func(ika, tako), '円になりまーす')
---------------------------------------
■ITとことんのトップページ
┗■本ページ







