ITとことん の目次

IT関連技術について、とことん調査するブログです。

 

目次

 

■言語系

■OS系

■DB系

■Web系

■AI・自然言語処理

 

 ■その他

 

 

 

 

 

 

 

Jython

■特長

PythonJavaによる実装。

java  -jar  jython.jar  HelloWorld.py  arg1  arg2  のようにして起動できる。

Pythonソースコードの中から、Javaのライブラリを呼び出せる。

 

Eclipse + PyDevプラグインのインストール

 EclipseJython用モジュールであるPyDevを組み込む。

(1) PyDevプラグインのdownload

 Downloads | Jython

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の基本設定

 (a) Java-インストール済のJRE

  Java 8などデフォルトで使用したいJreバージョンをクリック

 (b) Javaコンパイラ

  準拠レベルをJava 8などにする。

 (c) 一般-ワークスペース

  文字コードUTF-8にする。

 (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のトップページ

 ┗■本ページ

 

 

 

 

 

 

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について調べたこと」の目次

 

 

---------------------------------------
ITとことんのトップページ
┗■本ページ

 

 

 

 

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のトップページ
 ┗■本ページ