• 検索結果がありません。

B演習(言語処理系演習)第一回

N/A
N/A
Protected

Academic year: 2021

シェア "B演習(言語処理系演習)第一回"

Copied!
35
0
0

読み込み中.... (全文を見る)

全文

(1)

B演習(言語処理系演習)

第1回

田浦

演習HP: http://www.logos.ic.i.u-tokyo.ac.jp/lectures/enshu2008/

(2)

今日の予定

 Pythonの紹介  Mini-Python (課題処理系)の仕様  今週の課題 • 班分け • サーバへのログイン, SSH公開鍵認証設定 • Subversion • Pythonの練習

(3)

Pythonの紹介

 オブジェクト指向スクリプト言語 • www.python.org • www.python.jp (日本語サイト) • https://sourceforge.jp/projects/pythonjp/files (各種 フォーマットでのマニュアル類)

(4)

起動方法

 シェルで対話的  ファイルの実行  emacsで対話的

(5)

主なデータ型

 スカラー: 整数,浮動小数点数,None  関数  文字列  入れ物系: リスト,タプル,辞書  オブジェクト  メソッド

(6)

主な式

 リテラル (1, 3.5, “hello”, etc.)  リスト表現,タプル表現,辞書表現 (後述)  算術 (+, *, &, |, etc.)  比較 (<, >, <=, >=, ==, is, etc.)  添え字表記 (a[i])  オブジェクトの属性参照 (a.f)  呼び出し (f(x, y, z))

(7)

主な文(1) 単純文

 式文  代入  pass 何もしない  del 入れ物から要素を除去  print 式の値の表示

 return, break, continue  global 後述

 import ライブラリの輸入利用宣言  raise 例外発生

(8)

主な文(2) 複文

 if  while  for  try  関数定義 (def)  クラス定義(class)

(9)

特徴的事項の説明

 入れ物(リスト,タプル,辞書)および文字列  関数定義  for文  字下げ規則および文法の癖  オブジェクト  ライブラリの利用  同等性比較  変数のスコープ  クラスの定義

(10)

文字列・入れ物の文法(1)

 文字列 : Cと同じ • 例: “hello”  リスト : [ 式, 式, … ] • 例: [] [1] [ 1, 2, 3 ] [ “hello”, 1 ] [ [1,2], [3], 0, “w” ]  タプル : (式, 式, …) • 例: () (1, ) (1, 2, 3) (“hello”, 1) ((1, 2), [3], 0, “w”) • 注: (1)はタプルではなく,1と同じ

(11)

文字列・入れ物の表記(2)

 辞書 : { 式 : 式, 式 : 式, … }

• 例 : {} { 0 : “Sunday”, 1 : “Monday” } { “Sunday” : 0, “Monday” : 1 }

(12)

文字列・入れ物の要素参照

E1[E2] (E1, E2は式) • E1 : 入れ物 • E2 : 整数 (E1 が文字列,リスト,タプルの場合) • E2 : hashableな値 (E1 が辞書の場合) • hashableな値 = 辞書やリストを含まない値 • ○ : 1, “hello”, (1, 2, 3) • × : [1, 2], (1, [2, 3]), { “a” : 1 }

(13)

文字列の場合の注意

 Pythonに「文字型」はなく,「長さ1の文字列」 で代用する  文字の要素を参照すると,長さ1の文字列 • “hello”[2] “l” • “l”[0]  “l”

(14)

文字列・入れ物の要素書き換え

E1[E2] = E3del E1[E2]  詳しくはチュートリアル参照  辞書およびリストにのみ適用可能  タプル・文字列は変更できない(immutable)

(15)

文字列・入れ物の要素数

(16)

Sequenceの連接・繰り返し

 Sequence = 文字列,リスト,タプル  + による連接, * による繰り返し

• “hello” + “ world” “hello world” • “ha” * 3  “hahaha”

• (1, 2, 3) + (4, 5, 6)  (1, 2, 3, 4, 5, 6) • (1, 2) * 3  (1, 2, 1, 2, 1, 2)

(17)

辞書に特有の操作

E.keys() : キーのリスト E.values() : 値のリスト

(18)

よく使うリスト関係の関数

 l.append(x) • リスト l の末尾に要素xを加える  range(a, b) • リスト [a, a + 1, …, b – 1] を作る • for文(後述)とともに多用される  例: • for i in range(0, n): print i

(19)

文字列への値の埋め込み

 Cのprintfに似ているが違う  E1 % E2

 “I bought %s” % “car” “I bought car”

 “I bought %s on %s/%s/%s” % (“car”, 2005, 10, 5)  “I bought car on 2005/10/5”

(20)

関数定義(def)

 def f (x, y, …):  文の並び   例: def f (x, y): return x + y  文法規則では,関数定義は通常の文であり, 文の現れるところならどこに現れても良いが, 多くはtoplevelにのみ現れる

(21)

for文

for x in sequence:  文の並び  • sequenceの各要素を順にxにbindして 文の並び を実行  C風に書けば以下の文に対応 S = sequence; n = len(S); for (i = 0; i < n; i++) { x = S[i];  文の並び  }

(22)

字下げ規則と文法の癖

 Python文法の一貫した特長

• 字下げの深さによってif/for/while/関数定義の終 わりを認識する

(23)

例1

 if x: print x print y print z  def f(x): print x print y print z if文のbody if文の外 関数定義のbody 関数定義の外

(24)

例2

 if x: if y: if z: print 1 else: print 2 このelseに対応するifは?

(25)

ライブラリの利用

 import モジュール名 • モジュールを輸入する(そのモジュールで定義さ れている関数名などにモジュール名.名前アクセ スできるようになる)  例 • import string x = string.atoi(“35”)  どのようなモジュールがあるか?  ライブラリ リファレンス

(26)

頻出モジュール

 string, sys, os, re, math, random, time

 ライブラリリファレンス2.1 「組み込み関数」も 参照

 socket, select, threading (本格的システムプロ グラミング)

(27)

オブジェクト

 Javaのオブジェクトと概念としてはほとんど同 じ  要素へのアクセス: E.フィールド名  メソッド呼び出し: E.メソッド名(E1, E2, …)  注: 辞書やリストなどはオブジェクト • d.keys(), l.append() などはメソッド呼び出し

(28)

変数のスコープ規則

(古いPythonおよびmini-Pythonの仕様)

 ローカル(関数内でのみ有効)とグローバルの 2種類 • トップレベル(関数定義の外)でx = 1  グローバ ル変数xが生まれる • 関数内で x = 1  その呼び出し中にのみ有効な ローカル変数xが生まれる • 他の呼び出し内のx, グローバル変数のxとは別物 • ただしその関数の実行中に,global x という文が 実行されていたらそれはグローバル変数xへの代 入とみなされる

(29)

変数の参照

 関数の実行中にxへの参照が現れたら • その関数呼び出し内でローカル変数xが生まれて いたらそれを参照 • なければグローバル変数xを参照 • それもなければエラー

(30)

x = “global” def f(): print x x = “f” print x g() print x def g(): print x x = “g” h() print x def h(): global x x = “h”

(31)

注: 新しい(現在の)Pythonの仕様

 関数定義の中に関数定義を書ける. 内側の 関数中の変数参照は, 「内側から外側へ」見 ていく規則  def f(x): def g(y): def h(z): return x + y + z return h return g

(32)

同等性比較

 == 値の比較  is 同一のオブジェクトであるか否かの判定  例 • a = [1, 2, 3] • b = [1, 2, 3] • a == b  true • a is b  false

(33)

クラスの定義

 class クラス名: メソッド定義1 … メソッド定義n  メソッド定義の文法は関数定義と同じ

(34)

例 : カウンタ

 class counter: def __init__(self): self.x = 0 def add(self, dx): self.x = self.x + dx  c = counter() c.add(3) /* Javaでは… */ class counter { int x; counter() { x = 0; } void add(int dx) { x += dx } }

(35)

メソッド定義時の注意

 メソッドの第一引数がJavaで言うところの

this” オブジェクト(Pythonの慣習では “self” という変数名を使うが,名前は自由)  メソッド内で自分のフィールドやメソッドを使う 際も,self.f, self.m(x, y, z)のように,オブジェ クトへの参照を明示的に書く  コンストラクタ : __init__ という名前のメソッド として定義する

参照

関連したドキュメント

ことの確認を実施するため,2019 年度,2020

卒論の 使用言語 選考要件. 志望者への

国際地域理解入門B 国際学入門 日本経済基礎 Japanese Economy 基礎演習A 基礎演習B 国際移民論 研究演習Ⅰ 研究演習Ⅱ 卒業論文

授業は行っていません。このため、井口担当の 3 年生の研究演習は、2022 年度春学期に 2 コマ行います。また、井口担当の 4 年生の研究演習は、 2023 年秋学期に 2

使用言語 日本語 選考要件. 登録届を提出するまでに個別面談を受けてください。留学中で直接面談 できない場合は Skype か

卒論の 使用言語 選考要件

(6) 管理者研修:夏に、 「中長期計画策定」の演習/年度末の 3 月は、 「管理者の役割につ