bs.fukufuki

bookshelf of fukufuki 留学、英語、物語、よしなしごと

(抜書)Dive into Python3 第4章

文字列 - Dive Into Python 3 日本語版

リストから個々の要素を取り出すのとちょうど同じように、インデックス記法を使って文字列から個々の文字を取り出せる。 リストと同様に、文字列は+演算子で連結できる。

私はそろそろ「100本ノック」の準備運動ができる頃かもしれません

  1. 文字列の逆順 文字列"stressed"の文字を逆に(末尾から先頭に向かって)並べた文字列を得よ.
  2. 「パタトクカシーー」 「パタトクカシーー」という文字列の1,3,5,7文字目を取り出して連結した文字列を得よ.
  3. 「パトカー」+「タクシー」=「パタトクカシーー」 「パトカー」+「タクシー」の文字を先頭から交互に連結して文字列「パタトクカシーー」を得よ.

主にこの辺のことである。

追記0102とやってなんと03で詰まりました。タスケテ。できました(+=演算子を忘れていたのと、ifの条件文の文法間違えてました)

">>> import humansize

import sys '1MB = 1000{0.modules[humansize].SUFFIXES[1000][0]}'.format(sys) '1MB = 1000KB'"

 のところで、

sys.modules['humansize'].SUFFIXES[1000][0]は、si接尾語のリストの最初の要素'KB'だ。従って、例に出てきた{0.modules[humansize].SUFFIXES[1000][0]}という置換フィールドは、2文字の文字列KBで置換されることになる。

となっているのだが、ここで0にsysが代入されないのは何故だろうか(文法上、成立しないものが半自動的に弾かれているのか?)

>>>a_string = 'My alphabet starts where your alphabet ends.' >>>a_string[3:-3] 'alphabet starts where your alphabet en'

となっているのがよくわからなかったんだが……と打ちかけて、ピリオドをカウントし忘れていたことに気づいた。

bytesオブジェクトはイミュータブルだ。個々のバイトへ代入することはできない。もし個々のバイトを変更する必要があるときは、文字列スライスと結合演算子(これは文字列と同様に機能する)を使うこともできるし、bytesオブジェクトをbytearrayオブジェクトに変換することもできる。

Python3は、ソースコード(つまり.pyファイル)がutf-8エンコードされていると想定する。 ☞Python2では、.pyファイルのデフォルトの文字コードはasciiだった。Python3ではデフォルトの文字コードutf-8だ。 もしPythonのコードで異なる文字コードを使いたい場合は、文字コード宣言を各ファイルの先頭に書くことができる。

バイトリテラル構文について(参考): qiita.com

文字列に関しては、Python2と3とではいろいろと仕様変更があったようですね。

(抜書)Dive into Python3 第3章

os.chdir()関数は相対パスを受け取れる

相対パス

疑問点

list(humansize_dict.keys())

humansize_dict = {os.path.splitext(f)[0]:humansize.approximate_size(meta.st_size) \
... for f, meta in metadata_dict.items() if meta.st_size > 6000}

このへんの()表記がよくわからなかった。

Jupyter notebookのNotebookモードで

a_dict = {'a':2, 'b':2, 'c':3} {value:key for key, value in a_dict.items()} {2: 'b', 3: 'c'}

になったので、キー・値のセットは前から順に代入されているようだ。

{2**x for x in range(10)} ③ {32, 1, 2, 4, 8, 64, 128, 256, 16, 512}

の解説で

集合内包表記の入力が集合である必要はない。どんなシーケンスでも入力として受けとることができる。

とあったが、range()関数の戻り値は集合ではないということだろうか?

追記

ディレクトリ取得・移動について下記記事がわかりやすかった。 qiita.com

(抜書)Dive into Python3 第2章

ネイティブデータ型 - Dive Into Python 3 日本語版

浮動小数点数は小数第15位まで正確だ。

//演算子はひねくれた整数除算を行う。結果が正の数の場合は、整数への切り捨て(四捨五入ではない)とみなすことができるが、これについては注意が必要だ。 //演算子は常に整数を返すわけではない。分子や分母のどちらか一方でもfloatの場合は、なお結果を最も近い整数に丸めてくれるのだが、実際の戻り値はfloatで返される。 **演算子は「べき乗」を意味する。

分数について

分数を使うために、fractionsモジュールをインポートする。 分数を定義するには、Fractionオブジェクトを作って分子と分母を渡す。 分数をつかった普通の数学的演算ならなんでもできる。演算結果は新しいFractionオブジェクトとして返される。2 * (1/3) = (2/3) Fractionオブジェクトは自動的に約分される。(6/4) = (3/2)

リストについて

a_list[0] は a_list の最初の要素だ。

リストを定義したら、そのリストの任意の一部分を新しいリストとして取得できる。これはリストのスライスと呼ばれる。

スライスは、スライスインデックスの一方または両方が負の数でも動作する。これは次のように考えると良いかもしれない: リストを左から右へ読み、1つ目のスライスインデックスで欲しい最初の要素を指定し、2つ目のスライスインデックスは欲しくない最初の要素を指定する。戻り値はその間に含まれるすべてだ。

a_listを['a', 'b', 'mpilgrim', 'z', 'example']で定義したあと a_list[1:-1]の戻り値が['b', 'mpilgrim', 'z']となっているが、これは-1が’example’ということだろう。

両方のスライスインデックスが省略された場合は、リストのすべての要素が含まれる。しかし、これは元の a_list 変数とは異なる。これは、たまたますべて同じ要素を持った新しいリストなのだ。だから、a_list[:]はリストの完全なコピーを作るための簡易な方法として使える。

リストへの要素の追加

append()メソッドはリストの末尾に要素を1つ追加する

extend()メソッドは1つの引数としてリストをとり、引数として与えられたリストの各要素を元のリストへ追加する。 insert()メソッドは1つの要素をリストに挿入する。

リスト内検索

count()メソッドは指定された値がリストの中に何回出現するかを数える。

リストの中に特定の値があるかどうかを知りたいだけの場合は、count()メソッドよりもin演算子の方がわずかながら処理が早い。in演算子は、常にTrueまたはFalseを返す。リスト中にその値が何回現われるのかは教えてくれないのだ。

index()メソッドはリスト中で最初に出現したものだけを検出する。この例だと、'new'がリストの中に2回出現していて、a_list[2]とa_list[4]の2箇所に存在しているが、index()メソッドは1つ目のインデックスだけを返す。

リストの要素の削除

pop() method, del, etc.

タプル

タプルはイミュータブル(後述)なリストだ。いったん作成されたタプルは、どんな手段によっても変更できない。

リストと同様に、スライスすることもできる。リストをスライスすると新しいリストが得られるように、タプルをスライスすると新しいタプルが得られる。 新しいリストではなく新しいタプルなのね

タプルはリストに変換できるし、その逆もできる。組み込みのtuple()関数はリストを引数にとって、同じ要素を持ったタプルを返す。またlist()関数はタプルを引数にとってリストを返す。実質的には、tuple()はリストの凍結を行い、list()はタプルの解凍を行うと考えることができる。

リストから集合を作るには、set()関数を使えばよい

集合は順序づけされていない。

空の集合を作るには、set()を引数なしに呼び出せばいい。

集合は一意な値を詰めた袋だ。既にその集合に含まれている値を追加しようとしても、何も起こらない。例外も送出されない。本当に何も起こらないのだ。

is_it_true({False}) →出力結果:yes, it's true ちょっとおもしろい

(抜書)Dive into Python3 第1章

初めてのPythonプログラム - Dive Into Python 3 日本語版

Pythonでは、どんなものに対しても明示的にデータ型を指定することは決してない。代入した値に基づいて、Pythonが内部的にデータ型を追跡するのだ。

2番目の引数a_kilobyte_is_1024_bytesには、デフォルト値としてTrueが割り当てられている。これは、この引数がオプションだということを意味している。つまり、この関数は、この引数を与えなくとも呼び出すことができ、その場合には第二引数にTrueが渡されたものとPythonは解釈するのだ。

引数リストを左から右へ読んだときに名前付き引数が現れたら、それ以降の引数には必ず名前を付けなければならない

三重クォートは複数行文字列を表す。

Pythonではあらゆるものがオブジェクトであり、すべてのオブジェクトは属性とメソッドを持つことができる。すべての関数は組み込み属性のdocを持っており、これはその関数のソースコード上に定義されたdocstring を返す。sysモジュールは(他の属性に混じって)pathという属性を持つオブジェクトだ。その他も同じだ。

全てのオブジェクトがサブクラス化できるわけではないが、それを変数に代入することができ、関数の引数として渡すことができるという意味では、すべてがオブジェクトなのだ。

インデントは必ずしも4個のスペースである必要はなく、空白の数に一貫性がありさえすればよい。次にインデントされていない行が現れたら、それが関数の終了を示す印となる。

変数multipleの宣言はどこにも行なっておらず、単にmultipleに値を代入しているだけだ。これで問題ない。Pythonはそうできるようになっているのだ。

Pythonにおけるすべての名前: 変数名・関数名・クラス名・モジュール名・例外名では大文字と小文字が区別される。

まず、モジュールはオブジェクトであり、すべてのモジュールはnameという組み込みの属性を持っている。モジュールのnameの値は、そのモジュールをどのように使っているかに応じて決まる。そのモジュールを import した場合は、nameはモジュールのファイル名からディレクトリ名や拡張子を取り除いたものになる。

しかしモジュールは、スタンドアローンのプログラムとして直接実行することもできる。この場合にはnameは特別なデフォルト値の"main"になる。Pythonはこの if 文を評価し、その式が真だということを知り、ifのコードブロックを実行する。この例では、2つの値が表示される。

※題材にされているプログラムでは、モジュールがスタンドアロンのプログラムとして実行されているか確認するためにこのif name==main が用いられている。

多職種の協働っていうけれど

結局は感情的にこじれたりするのが主の、泥くさい問題だよね。 リフレクティブ・プロセスはじめとするナラティブ・アプローチは、自己開示という技術を通して、比較的ハードで統制的な仕組みづくりという方法から、越境的にソフトな感情の部分にアクセスできるのがアドバンテージなのかもしれないと思います。

リフレクティング: 会話についての会話という方法

リフレクティング: 会話についての会話という方法

ナラティヴからコミュニケーションへ-リフレクティング・プロセスの実践-

ナラティヴからコミュニケーションへ-リフレクティング・プロセスの実践-

この手の本は、異なる部署でのコミュニケーションに悩んでいるビジネスマンにこそオススメしたいのです。

医師の感情: 「平静の心」がゆれるとき

医師の感情: 「平静の心」がゆれるとき

医師の感情についてはこういう本があるのですが、多職種協働や異分野理解にまつわる(主にマイナスの)感情面について書いた本はないものでしょうか。*1 あったとして、異文化コミュニケーションでは常識だろう、というような内容が主になってしまうのでしょうが、ぜひ読みたい。

追記mitorizu.jp 学問分野間のコミュニケーションについて着実に取り組まれていて、「越境研究所」を運営されている中川瑛氏(Twitter: @salut_copain)のサイト「知の見取り図」に、異分野コミュニケーションについての良い連載がありましたので、載せておきます。サイト内で

文化は集団ごとに異なるため、異なる集団が交流するときには必ず文化的な違いに基づく誤解や摩擦が生じうる。このような問題のメカニズムを発見したり、それによる個人や集団の変化、その摩擦を緩和させるための方法を考えるのが異文化コミュニケーションという分野である。

これらの文脈を分野間の交流に置き換えて考えてみると、まさにこの連載で取り組みたいと考えている異分野コミュニケーションなのである。学問分野が異なれば、そこでのマナーや常識、認められる方法論や目的が大きく異なる。分野の外には違う分野があり、交流する際には往々にして誤解や摩擦が生じうる。

そのような問題のメカニズムを発見したり、それによる個人や集団の変化、その摩擦を緩和させるための方法を考えるのがまさに異分野コミュニケーションだとここでは考えたい。

と述べられているように、異分野コミュニケーションにおける感情の問題もまた、異文化コミュニケーションの文脈より理解をはじめるのが適切でしょう。個人的には、Workの社会学より至り、質的研究により感情を扱えるような「異分野コミュニケーションの社会学」の道があればそちらもぜひ見てみたいですが…。

*1:「Workの社会学」は英語圏に伝統があるといつかお聞きしたのに、まだ触れられていないな。

読書会の本のチョイスに悩んでいます

次の読書会の本を何にするか悩んでいる。 今読んでるのはこれ。

ニューロラカン: 脳とフロイト的無意識のリアル

ニューロラカン: 脳とフロイト的無意識のリアル

題名に反して(?)ラカンよりもフロイトの理解が進む本だったので重宝している*1が、そうするとフロイトを読み返したくなるのですよね。

フロイトを読む―年代順に紐解くフロイト著作

フロイトを読む―年代順に紐解くフロイト著作

というわけで、いつもレジュメを切ってくださっている先輩に上の本をおすすめしてみました。 どうなるかな。

*1:これは私がこれまで認知神経科学寄りの基礎知識や視点を持ちながらフロイトを読んでいたという特殊事情による(ため『ニューロラカン』は自分の先入観が言語化された上で高度に整理された本として勉強になっている)ので、万人にオススメはしません

VR関連書籍を買いました

VRについて知りたくなって、本を買いました。 暇な時間に少しずつ読もうと思っています。

・GOROman(近藤義仁)『ミライのつくり方2020-2045 僕がVRに賭けるわけ』星海社新書.

ミライのつくり方2020―2045 僕がVRに賭けるわけ (星海社新書)

ミライのつくり方2020―2045 僕がVRに賭けるわけ (星海社新書)

→読了。HMDを日本に持ってくる!というこの方の熱い想いがあったからこその今なのだろうな、と先人への感謝の念がわきました。

西川善司ほか『VRコンテンツ開発ガイド』

VRコンテンツ開発ガイド 2017

VRコンテンツ開発ガイド 2017

→冒頭読み進め中。HMDの技術的な点が解説されていて勉強になります。

キズナアイほか『ユリイカ2018年7月号 特集=バーチャルYouTuber

ユリイカ 2018年7月号 特集=バーチャルYouTuber

ユリイカ 2018年7月号 特集=バーチャルYouTuber

VR現象について、当事者の声も交えた論考集。

・Benjamin『Blender 3DCG モデリング・マスター』

Blender 3DCG モデリング・マスター

Blender 3DCG モデリング・マスター

VRを実際に遊ぶのに必要なスキル、モデリングフリーソフトで教えてくれる本です。Blenderはすごいよね。

一冊目『ミライのつくり方」はAmazon在庫切れが続いているのですが、『Blender』と『VRコンテンツ』はちょうどKindleでほぼ半額で買えるので、買うなら今ですよ(と宣伝しておく)。

ではでは。

大昔のギーク時代に、プログラミングもBlenderもやっとかなかったのが悔やまれるなあ…。 まあ、それやってたら医学部入ってないでしょ、と言われたらそれまでなのですが、そっちのほうが楽しかった気がする(注:これは放言です)。