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とことんのトップページ
┗■本ページ
「Pythonについて調べたこと」の目次
Python基本文法
pythonの基本文法をまとめる。
■コメント
行頭に#
■変数の型
・数字
a=5
・文字
a="n" ・・・ 'n' でもOK
・リスト
a=[1, 3, 5]
・タプル
a=(1, 3, 5)
・辞書
a={'key1', 'value1', 'key2': 'value2'}
・ブール
a=True ・・・ 先頭は大文字で。
a=False ・・・ 先頭は大文字で。
・未定義
a = None
■行末のセミコロン
a=123 でも
a=123; でも、どちらでもOK。
■標準入出力
・a = int(input('何個必要ですか :')) ※入力された文字をint()で数字変換。
・print(a * 2)
■文字列操作
a="abcdefg"
a[3] ・・・ 'd'
a[3:5] ・・・ 'de' a[3]からa[5-1]まで。
a[3:] ・・・ 'defg'
a[:3] ・・・ 'abc'
a[-1] ・・・ 'g'
len(a) ・・・ 7文字 len関数
a.split('d') ・・・ ['abc', 'efg']
':'.join(a) ・・・ 'a:b:c:d:e:f:g'
':'.join(['aaa', 'bbb']) ・・・ 'aaa:bbb'
''.join(['aaa', 'bbb']) ・・・ 'aaabbb'
a.replace('bc','xx') ・・・ 'axxdefg'
'xxx{}{}yyy'.format(123,"abc") ・・・ 'xxx123abcyyy'
'こん' + 'にちは' ・・・ 'こんにちは'
a.startswith('a') ・・・ aで始まっていれば True
a.endswith('a') ・・・ aで終わっていれば True
a.find('s') ・・・ 's' の出現位置
a.count('.') ・・・ '.' の出現回数
a.isalnum() ・・・ すべて英数字ならTrue
a.upper() ・・・ 英小文字を英大文字へ
a.lower() ・・・ 英大文字を英小文字へ
■数字
a=10 ・・・ 整数
a=10.56 ・・・ 小数
a=10+20 ・・・ 加
a=20-10 ・・・ 減
a=20*30 ・・・ 乗
a=30/15 ・・・ 除
a=2**6 ・・・ べき乗(2の6乗=64)
a =6%4 ・・・ 剰余(あまり2)
import random
x = random.randint(1, 10)
■制御構造
if 条件式 :
処理1
elif 条件2 :
処理2
else :
処理3
条件 and 条件
条件 or 条件
if a == 0:
if a==True: ・・・ if a: でも良い
if (a>3):
if (a != 3):
if a%3 == 1: ・・・ 剰余
for x in range(繰り返し回数)
処理
while 条件式 :
繰り返す処理
■リスト操作 ・・・ [ ]で括る。
a = [1, 3, 5, 7, 9]
max(a) ・・・ 最大の要素
min(a) ・・・ 最小の要素
a.pop() ・・・ 9が取り出される。a = [1, 3, 5, 7] になる
a.append(10) ・・ リスト末尾に追加。a = [1, 3, 5, 7, 10] になる
a.len() ・・・ リストの要素数 5
b = ['a', 'b', 'c']
a.extend(b) ・・・ aは、[1, 3, 5, 7, 10, 'a', 'b', 'c'] になる a += b でも可
a = [1, 3, 5]
a.insert(2, 4) ・・・ 2番目の要素に4を挿入。aは [1, 3, 4, 5] になる
del a[2] ・・・ 2番目の要素を削除。aは [1, 3, 5] になる
a = [3, 1, 3, 5]
a.remove(3) ・・・ 最初に見つかった3という値を削除する。aは [1, 3, 5] になる
a.count(3) ・・・ 3という要素が何個含まれるか。2
a.sort() ・・・ 昇順にソートする。[1, 3, 3, 5]になる
a.sort(reverse=True) ・・・ 降順にソートする。[5, 3, 3, 1]になる
a = [1, 3, 5]
a.index(5) ・・・ 最初に見つかった位置。5
a in 3 ・・・ aのリスト中に3含む場合はTrue
a=[1,3,5] ; b=[10,30,50] ; c=[100,300,500]
x,y,z = zip(a,b,c) ・・・ zip()で行・列変換。結果はタプルになる。
xは(1,10,100) yは(3,30,300) zは(5,50,500)
TUPLE=(1,3,5)
v=list(TUPLE) ・・・ list(引数)で引数(この例ではタプル)をリストに変換。[1, 3, 5]
keys=['a', 'b', 'c']
values=[1, 3, 5]
dict(zip(keys, values)) ・・・ {'a': 1, 'b': 3, 'c': 5}
■タプル ・・・ ( ) で括る。
Read Onlyの配列。定数として使うことが多い。慣例的に大文字で書く。
A = (1, 3,5)
A.extend(7) ・・・ エラーになる。
■辞書 ・・・ { } で括る。連想配列みたいなもの。
a = {'a':1, 'b':2, 'c':3]
a['b'] = 5 ・・・ 辞書のキー値を書き換え。a = {'a':1, 'b':5, 'c':3]
a['d'] = 4 ・・・ 辞書に追加。a = {'a':1, 'b':5, 'c':3, 'd':4}
for key in a:
print(key, end="/") ・・・ a/b/c/d
for val in a.values():
print(val, end="/") ・・・ 1/5/3/4
for key, val in a.items():
print(key, val, sep="=", end="/") ・・・ a=1/b=5/c=3/d=4/
a = ['ab', 'cd']
dict(a) ・・・ {'a': 'b', 'c': 'd'} リストから辞書を作成
a = [['a', 'b'], ['c', 'd']]
dict(a) ・・・ {'a': 'b', 'c': 'd'} リストから辞書を作成
x={'a':'b', 'c':'d'}
y={'e': 'f', 'g': 'h'}
x.update(y) ・・ 辞書xに辞書yを連結。xは{'a': 'b', 'c': 'd', 'e': 'f', 'g': 'h'}になる
z = y ・・・ yオブジェクトの参照を代入。同一オブジェクトを2つの変数が指す
z = y.copy() ・・・ yの値のコピーを生成し代入。zとyは別オブジェクトを指す
del y['e'] ・・・ 辞書から該当する要素を削除
y.clear() ・・・ 辞書を初期化
---------------------------------------
■ITとことんのトップページ
┗■Pythonのトップページ
┗■本ページ