tag:crieit.net,2005:https://crieit.net/users/jlmercury/feed mkataoka73の投稿 - Crieit Crieitでユーザーmkataoka73による最近の投稿 2021-05-15T10:54:38+09:00 https://crieit.net/users/jlmercury/feed tag:crieit.net,2005:PublicArticle/17129 2021-05-15T10:54:38+09:00 2021-05-15T10:54:38+09:00 https://crieit.net/posts/Elixir-3-Elixir Elixir学習日記3: Elixir、最初の一歩 <h2 id="背景"><a href="#%E8%83%8C%E6%99%AF">背景</a></h2> <p>Elixirの入門書を読んでいる。</p> <h2 id="学んだこと"><a href="#%E5%AD%A6%E3%82%93%E3%81%A0%E3%81%93%E3%81%A8">学んだこと</a></h2> <ul> <li><code>iex</code>でElixirのREPL(Read-Eval Print Loop)に入れる。</li> </ul> <p><a href="https://crieit.now.sh/upload_images/20363b2be8aecfaff854ef1ca344f249609f22d8a9d78.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/20363b2be8aecfaff854ef1ca344f249609f22d8a9d78.png?mw=700" alt="image.png" /></a></p> <ul> <li>Elixirにおいて変数に代入するというのは、名前に一時的に値を縛りつけること。(Binding)</li> <li>Cのような手続き型の言語においては、変数に実体的な値が代入されている。これを破壊的代入という。</li> <li><p>Elixirにおいてはそのような形ではなく、名前に値を参照させている。上の例では、<code>n</code>に<code>1</code>を参照させている。のであって、この場合、<code>n</code>に<code>1</code>が入っているという箱のイメージは実態とずれていることになるのかな?</p></li> <li><p>「Elixirでは値はイミュータブル」という宣言があったけれど(書籍中)、これは値の再代入が不可能であるという意味ではないようす。上の例(画像)では<code>n</code>に<code>1</code>を代入したあと<code>2</code>を代入してもエラーになっていない。</p></li> <li>これこそは、上の、「変数に実質的な値を代入しているのではなく、参照先を指定しているだけ」ということの現れではないかな。と思った。</li> <li>しかしその場合、データの<code>2</code>はどこに存在し続けているのだろう???????</li> <li>2が空中にぽっかり浮いていて、その2を名前が随時参照する...ということかしら????? それはおかしい...気がする。....</li> </ul> <h3 id="関数、モジュール"><a href="#%E9%96%A2%E6%95%B0%E3%80%81%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB">関数、モジュール</a></h3> <ul> <li>引用。</li> </ul> <blockquote> <p>コンピュータプログラミングにおいて、プログラムの断片をひとつのまとまりとしてとらえたものを一般に「サブルーチン」と呼びます。このサブルーチンを具体的にどう呼ぶかは言語によって異なります。RubyやJavaのようなオブジェクト指向言語ではメソッド(method)と呼ばれることが多いのですが(例外もあります)、Erlang、Haskell、Elixirのような関数型言語では関数(function)と呼ばれます。PHPのように関数とメソッドを使い分ける言語もあります。また、プロシージャ(procedure)という用語を用いる言語もあります(Pascalなど)。</p> <p>Tsutomu Kuroda. Elixir/Phoenix Primer Volume 1 Third Edition: The first step (OIAX BOOKS) (Japanese Edition) (Kindle の位置No.723-727). Coregenik. Kindle 版.</p> </blockquote> <h4 id="気になったこと"><a href="#%E6%B0%97%E3%81%AB%E3%81%AA%E3%81%A3%E3%81%9F%E3%81%93%E3%81%A8">気になったこと</a></h4> <ul> <li><strong>JavaScriptはどこにはいるの???</strong></li> <li>サブルーチンっていう言葉の意味を初めて知った(ちゃんと見た)気がして嬉しい。</li> <li>Rubyでも、Pythonでも「関数」っていう呼び名はある気がするけど、それは便宜上みたいなこと?</li> <li>実際にはRubyでは全てがオブジェクトっていうのは見たことあって、それは例えば、 <code>puts</code>をいきなり書いたとしても、</li> </ul> <pre><code class="ruby">puts('hello!') </code></pre> <ul> <li>これは実は何かしらのグローバルオブジェクトにメッセージを送っているという意味になるのだよ、ということをどこかで見た気がする。</li> <li>実行時にその見えないグローバルオブジェクトに渡されているのだよ、と。</li> <li>これはやっぱり、object orientedな言語においては、何らかのオブジェクトが常にいて、そいつにメッセージを送っているというのに対し、関数型言語ではそうではないということなのかしら。</li> <li><em>method</em>という言葉は、「a particular form of procedure for accomplishing or approaching something, especially a systematic or established one」(New Oxford American Dictionary)なので、establised、つまりもともとすでに出来上がっているもの(オブジェクトに対し設定されているもの)という意味が強いと理解している。functionはそれではないので...ということか。</li> <li>A function, or a method? That is the question...な感じ</li> </ul> <h4 id="Elixirのモジュールは名前空間です"><a href="#Elixir%E3%81%AE%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB%E3%81%AF%E5%90%8D%E5%89%8D%E7%A9%BA%E9%96%93%E3%81%A7%E3%81%99">Elixirのモジュールは名前空間です</a></h4> <p>引用2。</p> <blockquote> <p>IOはモジュール(module)の名前です。Elixirのモジュールは関数の入れ物(名前空間)です。</p> <p>Tsutomu Kuroda. Elixir/Phoenix Primer Volume 1 Third Edition: The first step (OIAX BOOKS) (Japanese Edition) (Kindle の位置No.729-730). Coregenik. Kindle 版.</p> </blockquote> <p>名前空間ってそういう意味だったのかあ〜〜〜〜〜〜〜〜〜〜。</p> <blockquote> <p>次のように関数の引数は括弧で囲まなくても構いません。</p> </blockquote> <pre><code>IO.puts n </code></pre> <blockquote> <p>しかし、原則として関数の引数は括弧で囲むことが推奨されています。<br /> Tsutomu Kuroda. Elixir/Phoenix Primer Volume 1 Third Edition: The first step (OIAX BOOKS) (Japanese Edition) (Kindle の位置No.732-735). Coregenik. Kindle 版.</p> </blockquote> <ul> <li>Rubyライクに括弧を省略していいことになっているけど、マナー的には囲うのが一般的だよ。と。</li> </ul> <h3 id="その他学んだこと"><a href="#%E3%81%9D%E3%81%AE%E4%BB%96%E5%AD%A6%E3%82%93%E3%81%A0%E3%81%93%E3%81%A8">その他学んだこと</a></h3> <ul> <li>コメントは<code>#</code>で。(octothorpe, またのなを pound, hash, mesh, とも。)</li> <li>行全体をコメントに。後ろにつければ行末のコメントはできるけど、<strong>複数行に跨がるコメントのシステムはElixirには存在しない</strong>とのこと。これも驚いた。</li> <li>文末のセミコロンはつけてもいいけど、普通は付けずに1行1センテンスで書くよ、とのこと。</li> </ul> <p>次回は4章、基本データ型。</p> <p>だんだんプログラミングっぽくなってきて嬉しいじゃないの。</p> <p>使っている本:<a target="_blank" rel="nofollow noopener" href="https://www.amazon.co.jp/dp/B01N2K6UBZ/ref=cm_sw_r_tw_dp_EB27FXF19FJT6365276W">Elixir/Phoenix 初級① 第3版: はじめの一歩 (OIAX BOOKS) 黒田 努 </a></p> mkataoka73 tag:crieit.net,2005:PublicArticle/17121 2021-05-14T11:54:29+09:00 2021-05-14T11:54:29+09:00 https://crieit.net/posts/Elixir-3-OTP Elixir学習日記3: OTPって何? <p>Elixirについての学習日記です。今回はOTPという用語について整理してみたいと思います。</p> <h2 id="背景"><a href="#%E8%83%8C%E6%99%AF">背景</a></h2> <p>Elixirについて学んでいる。</p> <h2 id="学んだこと"><a href="#%E5%AD%A6%E3%82%93%E3%81%A0%E3%81%93%E3%81%A8">学んだこと</a></h2> <p>OTPって何?ということを理解するには、正しい文脈のなかに置くのがよさそう。言葉を単独で理解するより、それを適切な文脈のなかに置くことで、理解が進むということが多いと思います。</p> <p>とはいえ、まずは著者の引用をみてみましょう。</p> <blockquote> <p>OTPは“OpenTelecomPlatform”の略です。かつては電信電話サービスと関係があったので“telecom”という単語が含まれています。ひとことで言えば、OTPとはErlangの標準のツール類とライブラリ群の集合体です。Erlang業界の用語法では、Erlangは言語仕様そのものであり、OTPがなければ何もできません。OTPにはErlangのコンパイラやインタプリタも含まれます。</p> <p>Tsutomu Kuroda. Elixir/Phoenix Primer Volume 1 Third Edition: The first step (OIAX BOOKS) (Japanese Edition) (Kindle の位置No.362-365). Coregenik. Kindle 版.</p> </blockquote> <p><strong>Open Telecom Platform</strong> (<strong>OTP</strong>) とは、Erlangの標準のツール群とライブラリ群の集合体、とありますね。</p> <p>「OTPには、Erlangのコンパイラやインタプリタも含まれる」と書いてあるので、確かにそれがなければ何もできなさそうです。</p> <p>ErlangとOTPの関係は、言語仕様と、それが動くための仕組み、と覚えておくといいのかもしれないですね。</p> mkataoka73 tag:crieit.net,2005:PublicArticle/17102 2021-05-13T12:14:26+09:00 2021-05-13T12:23:12+09:00 https://crieit.net/posts/Elixir-2-Elixir-Erlang Elixir学習日記2: ElixirとErlang <p>Elixirの勉強を進めている。</p> <h2 id="学んだこと"><a href="#%E5%AD%A6%E3%82%93%E3%81%A0%E3%81%93%E3%81%A8">学んだこと</a></h2> <ul> <li>Elixirのファイルの拡張子は<code>.exs</code>。</li> <li>Atomなどのエディタで普通に書いて、ターミナルから実行できる。ただし、実行環境にはDockerが必要(?)</li> <li>実行環境は、Dockerという仮想環境構築ソフトで用意する。 <ul> <li>Dockerというのは、仮想環境を用意してくれるアプリケーション。けっこう容量が大きい。</li> <li>たとえば、Macで開発しているのに、Windows上で動くか?とかいうのを試すことができる。</li> <li>JavaがJava Virtual Machineという仮想マシン上で動くように、Elixirは—内部的には—BEAMという仮想マシンの上で実行される。 <ul> <li>現代的なプログラム言語は、実はそれぞれに専用の仮想マシンを持っていることが多い。</li> <li>例えば、Rubyもそれ専用のバーチャルマシン(YARVという)の上で解釈され、実行されている。</li> </ul></li> <li>BEAMは、もともとはErlangというプログラミング言語のために開発された実行環境。</li> <li>ErlangとElixirは違う言語だけれど、ElixirのプログラムもBEAM上で実行可能。</li> <li>似たような関係に、JavaとKotlinがある。言語は違うが、同じ環境の上で実行可能。</li> <li><code>.exs</code>ファイルを実行すると、BEAM上で実行できるバイトコードに変換され、BEAMが解釈することでプログラムが実行可能になる。</li> <li>このように、ElixirはErlangと深い関係にある。</li> <li>ElixirのコンパイラがErlangで開発されている。など。</li> </ul></li> </ul> <h3 id="Erlangについて"><a href="#Erlang%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6">Erlangについて</a></h3> <ul> <li>Erlangの発表は1986年(Java、Rubyは1995年)。</li> <li>Erlangの名前の由来はスウェーデンの数学者Agner Erlangに由来。</li> <li>最近では<a target="_blank" rel="nofollow noopener" href="https://eh-career.com/engineerhub/entry/2019/08/01/103000#堅牢さと並行性を兼ね備えたErlang">任天堂のゲーム開発にも導入されている</a>様子。</li> </ul> <h2 id="Elixirを実行してみる"><a href="#Elixir%E3%82%92%E5%AE%9F%E8%A1%8C%E3%81%97%E3%81%A6%E3%81%BF%E3%82%8B">Elixirを実行してみる</a></h2> <h3 id="hello, world!"><a href="#hello%2C+world%21">hello, world!</a></h3> <p>Elixirで、標準出力に'hello, world!'を出力してみましょう。<br /> こんなプログラムを用意します。</p> <pre><code class="elixir"># ~/elixir_study/hello.exs IO.puts('hello, world!') </code></pre> <p><a href="https://crieit.now.sh/upload_images/20363b2be8aecfaff854ef1ca344f249609c98e6ee373.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/20363b2be8aecfaff854ef1ca344f249609c98e6ee373.png?mw=700" alt="image.png" /></a></p> <p>ファイルが保存してあるディレクトリに移動し、ターミナルで以下を実行します。</p> <pre><code class="bash">elixir hello.exs </code></pre> <p><a href="https://crieit.now.sh/upload_images/20363b2be8aecfaff854ef1ca344f249609c97d12da7e.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/20363b2be8aecfaff854ef1ca344f249609c97d12da7e.png?mw=700" alt="image.png" /></a></p> <p>実行できました!</p> <h3 id="所感"><a href="#%E6%89%80%E6%84%9F">所感</a></h3> <p><code>elixir hello.exc</code>を実行してから'hello, world!'が表示されるまで、結構時間がかかる(1秒未満だけど0.7秒くらい?)ので、仮想マシンで実行しているのだな〜、コンパイルしているのだな〜という感じがする。</p> <h3 id="次は?"><a href="#%E6%AC%A1%E3%81%AF%3F">次は?</a></h3> <p>引き続きどんなことができるのか学習していきます。</p> mkataoka73 tag:crieit.net,2005:PublicArticle/17074 2021-05-09T12:25:16+09:00 2021-05-09T12:31:46+09:00 https://crieit.net/posts/Ruby-6097561cc0513 「メソッド」と「メッセージ」はどう違うのか <h2 id="要約"><a href="#%E8%A6%81%E7%B4%84">要約</a></h2> <p>プログラミング基礎用語である「メッセージ」と「メソッド」の違いについて、書籍で説明している箇所を見つけたのでメモ。</p> <h2 id="「メソッド」と「メッセージ」"><a href="#%E3%80%8C%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89%E3%80%8D%E3%81%A8%E3%80%8C%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E3%80%8D">「メソッド」と「メッセージ」</a></h2> <p>プログラミングで、<code>foo.bar</code>の<code>.bar</code>のことを、オブジェクトに対する「メソッド」と呼でいる文章と「メッセージ」と呼んでいる文章の2種類をときどき見かけます。どうして用語法が違うのだろう?</p> <h2 id="なぜ用語を二つに分けるのか"><a href="#%E3%81%AA%E3%81%9C%E7%94%A8%E8%AA%9E%E3%82%92%E4%BA%8C%E3%81%A4%E3%81%AB%E5%88%86%E3%81%91%E3%82%8B%E3%81%AE%E3%81%8B">なぜ用語を二つに分けるのか</a></h2> <blockquote> <p>Why bother saying both “sending the message ‘to_i’” and “calling the method to_i”? Why have two ways of describing the same operation? Because they aren’t quite the same. Most of the time, you send a message to a receiving object, and the object executes the corresponding method. But sometimes, there is no corresponding method. You can put anything to the right of the dot, and there’s no guarantee that the receiver will have a method that matches the message you send.</p> <p><a target="_blank" rel="nofollow noopener" href="https://livebook.manning.com/book/the-well-grounded-rubyist/chapter-1/51"><em>The Well-Grounded Rubyist</em>, Chapter 1.1.4 Method calls, messages, and Ruby objects</a></p> </blockquote> <h3 id="「メソッド」と「メッセージ」は厳密には同じではない"><a href="#%E3%80%8C%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89%E3%80%8D%E3%81%A8%E3%80%8C%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E3%80%8D%E3%81%AF%E5%8E%B3%E5%AF%86%E3%81%AB%E3%81%AF%E5%90%8C%E3%81%98%E3%81%A7%E3%81%AF%E3%81%AA%E3%81%84">「メソッド」と「メッセージ」は厳密には同じではない</a></h3> <p>詳しくみます。</p> <blockquote> <p>Why bother saying both “sending the message ‘to_i’” and “calling the method to_i”? Why have two ways of describing the same operation? Because they aren’t quite the same.</p> </blockquote> <p>なぜに「メッセージを送る」とか「メソッドを呼ぶ」とか別の言い方、表現をするのか?それは、厳密にはその二つが同じじゃないからである。と言っています。</p> <blockquote> <p>Most of the time, you send a message to a receiving object, and the object executes the corresponding method. But sometimes, there is no corresponding method. You can put anything to the right of the dot, and there’s no guarantee that the receiver will have a method that matches the message you send.</p> </blockquote> <p>多くの場合、受信する側のオブジェクトに「メッセージ」を送ることで、そのメッセージを受信したオブジェクトが、対応するメソッドを実行する。</p> <p>が、メッセージには(原理的に)なんでも書いていいので、受け取ったメッセージに対応するメソッドが存在しないという場合がある。</p> <h3 id="メソッドが存在するか否か"><a href="#%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89%E3%81%8C%E5%AD%98%E5%9C%A8%E3%81%99%E3%82%8B%E3%81%8B%E5%90%A6%E3%81%8B">メソッドが存在するか否か</a></h3> <p>以下の例を考えます。</p> <pre><code class="ruby"># Person.rb class Person def initialize(name) @name = name end def greet puts "Hello! My name is #{@name}." end end bob = Person.new("Bob") bob.greet # "Hello! My name is Bob." </code></pre> <p>この例の最後の行では、オブジェクト<code>bob</code>はメッセージ<code>greet</code>を受け取り、「了解っす!対応するメソッドを実行しまっす!」といって、自身に定義されている<code>greet</code>メソッドをきちんと実行できました。</p> <p>ここで、この<code>bob</code>くんに<code>stand_up</code>というメッセージを送ったとします。</p> <pre><code class="ruby"># Person.rb class Person def initialize(name) @name = name end def greet puts "Hello! My name is #{@name}." end end bob = Person.new("Bob") bob.stand_up # NoMethodError </code></pre> <p><code>bob.stand_up</code>を実行しようとすると、NoMethodErrorが発生します。これは、次のように解釈できるでしょう。</p> <ol> <li>オブジェクト(インスタンス)として生成された<code>bob</code>は<em>メッセージ</em>を受け取ることができる。</li> <li><code>bob</code>は<code>stand_up</code>という<em>メッセージ</em>を受け取り、実行しようとする。すなわち、<code>stand_up</code>という名前のデータにアクセスしようとする。</li> <li>自分のアクセスできるデータのなかに<code>stand_up</code>は見つからなかったので、NoMethodErrorを返す。</li> </ol> <p>擬人化するならば、このように言えるでしょうか。<code>bob</code>君としては、「先輩!<code>stand_up</code>しろっていわれたのでやろうとしましたが、自分はそのやり方を知らなかったみたいす!」。</p> <p>以上をまとめると、メッセージとメソッドの違いについては、次のようにまとめることができます。</p> <ul> <li>メッセージ:オブジェクトに対する指示。対象のオブジェクトが、その指示を実行できるかどうかはわからない。</li> <li>メソッド:オブジェクトが持っている関数。</li> </ul> mkataoka73 tag:crieit.net,2005:PublicArticle/17060 2021-05-05T12:10:53+09:00 2021-05-06T12:12:19+09:00 https://crieit.net/posts/1-60920cbda3813 『統計学を哲学する』読書ノート連載 <p>Python学習の一環として、<a target="_blank" rel="nofollow noopener" href="https://www.hanmoto.com/bd/isbn/9784815810030">『統計学を哲学する』</a>という本を買いました。</p> <p><img src="https://www.hanmoto.com/bd/img/9784815810030_600.jpg" alt="統計学を哲学する" style="height: 200px"/></p> <blockquote> 本書はその名の通り、「統計学を哲学する」ための本である。〔...〕その目論見を一言で表すとしたら、「データサイエンティストのための哲学入門、かつ哲学者のためのデータサイエンス入門」である。ここで「データサイエンス」とは、〔...〕データに基づいて推論や判断を行う科学的/実践的活動全般を意図している。しかしそのような経験的かつ実務的な学問が、机上の空論の代名詞とみなされているような哲学といかにして関係するのか。〔...〕 </blockquote> <h2 id="統計学を学ぶ理由"><a href="#%E7%B5%B1%E8%A8%88%E5%AD%A6%E3%82%92%E5%AD%A6%E3%81%B6%E7%90%86%E7%94%B1">統計学を学ぶ理由</a></h2> <p>発売当初からなんとなく気になっていたのですが、Pythonプログラミングを学ぶにあたって、ふたたび興味が出てきました。</p> <p>個人的になのですが、2021年にPythonをやるということは、機械学習・AI・深層学習(Deep Learning)を学ぶとほとんど同義なのでは?と思っているのですが、流行りのものをやりたい、理解したい、というのも大きな動機です。</p> <p>自分は出身が文学部で、大学のときそれなりに時間を使って人文系(哲学)の本を読んできたので、その辺りからならむしろとっつきやすいかな?とか思ったりしたこともあります。</p> <p>仕事に関連するところでは、Pythonを使って、英語や日本語の文章のテーマ分析や、出現単語頻度の分析をしてみたいというのが前からあって、自然言語処理という分野になるのかなと思い、前に一度チュートリアル書を買ってみたのですが、Pythonの文法が分からなくて前に進めなくなった、という経緯があります。そこで、</p> <ul> <li>Pythonの文法をしっかり理解する</li> <li>AI, 機械学習, Deep Learning, 強化学習...etc というAI周りの用語・概念を正確に理解する</li> <li>自然言語処理についての概念を押さえる</li> <li>必要な数学的な知識を習得する</li> </ul> <p>この四つをきちんと同時に押さえ、やれることを理解したい、適切に開発ができるようになりたい。</p> <p>書いてみるとやること多いなーと圧倒されそうになるのですが、頑張ってみたいと思います。</p> <h2 id="どのように進めるか"><a href="#%E3%81%A9%E3%81%AE%E3%82%88%E3%81%86%E3%81%AB%E9%80%B2%E3%82%81%E3%82%8B%E3%81%8B">どのように進めるか</a></h2> <p>自分でやるのだからペースの宣言などはいらなそうなものですが、ひとりでやるからこそ、最初にある程度目標みたいなものを宣言しておかないとやる気がなくなりそうなので、進め方を宣言しておきたいと思います。</p> <p>基本的に、買っては読み飽き...を繰り返す人間なので、こういうチャレンジな本を読み切るときの習慣みたいなものも確立していきたい。</p> <p>ページ数は229が全体の結びにかえてのページになっているので、そこまでの大著ではなく一人で読み切れる範囲の本。(おそらく)</p> <p>章立てを転載するとこんな感じ。</p> <blockquote> <p>序 章 統計学を哲学する?<br /> 1 本書のねらい<br /> 2 本書の構成</p> <p>第1章 現代統計学のパラダイム<br /> 1 記述統計<br /> 2 推測統計</p> <p>第2章 ベイズ統計<br /> 1 ベイズ統計の意味論<br /> 2 ベイズ推定<br /> 3 ベイズ統計の哲学的側面</p> <p>第3章 古典統計<br /> 1 頻度主義の意味論<br /> 2 検定の考え方<br /> 3 古典統計の哲学的側面</p> <p>第4章 モデル選択と深層学習<br /> 1 最尤法とモデル適合<br /> 2 モデル選択<br /> 3 深層学習<br /> 4 深層学習の哲学的含意</p> <p>第5章 因果推論<br /> 1 規則説と回帰分析<br /> 2 反事実条件アプローチ<br /> 3 構造的因果モデル<br /> 4 統計的因果推論の哲学的含意</p> <p>終 章 統計学の存在論・意味論・認識論<br /> 1 統計学の存在論<br /> 2 統計学の意味論<br /> 3 統計学の認識論<br /> 4 結びにかえて</p> </blockquote> <p>理想的には1ヶ月...とかと言いたいところだけど、言語(Python)の方の習得も同時にやるつもりなので、どんなに早くても3ヶ月、長ければ半年くらいかな。と思っています。</p> <p>で、1週間で1部(章の下のまとまり)を目安に、読んで思ったこと、まとめようと思ったことをここに書いていく...というような形を想定しています。</p> <p>同時進行で、個人的に知り合いの人とやっているオンライン読書会があるので、そちらともリンクさせて発表できるのが理想...だけど、欲張りは禁物かな。スライドつくるとかいうと、訳わからんくなりそうだし。</p> <p>いま5月1日現在で、序章は読み終わっているので、とりあえずそこをまとめるのが目標。</p> <p>1章から、わりと数式とかが出てきて慣れていないわたしはやはり挫折しそうになるので、前に進むために理解を言語化していくというのがこのノートの役割になると思っています。</p> <h2 id="質問を受け付けています"><a href="#%E8%B3%AA%E5%95%8F%E3%82%92%E5%8F%97%E3%81%91%E4%BB%98%E3%81%91%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99">質問を受け付けています</a></h2> <p>せっかくオンラインに公開するので、質問とか受け付けられたらいいかなーとも思っています。<br /> 投稿に関する不明確なところとか、気になるところとか、あったら何でも聞いてもらえたらと思います。ちゃんと答えられる保証はないですが、いただいた感想とか質問があったら、記事の中で応答したり、コメントにレスする形で答えられたらと思っています。</p> <p>お付き合いいただければ幸いです。</p> mkataoka73 tag:crieit.net,2005:PublicArticle/17058 2021-05-04T19:55:55+09:00 2021-05-05T10:24:13+09:00 https://crieit.net/posts/type type()関数で型のチェック <p>JSの<code>typeof</code>演算子や、Rubyの<code>.class</code>メソッド(※)のように、あるデータの型?クラス?を調べたいときは、Pythonでは <code>type()</code> 関数を使う。</p> <p>※ Rubyの<code>.class</code>メソッド:<br /> Rubyでは引数を囲う<code>()</code>を省略することができ、引数がない場合は省略するのが一般的なので、<code>.class</code><em>メソッド</em> と書いています。JSやPythonに慣れていると<em>プロパティ</em>の誤記かな?と思われるかもしれません。実際、括弧を省略したメソッドと純粋なプロパティとの間にどんな差異があるか自分自身わかっていないのですが、<a target="_blank" rel="nofollow noopener" href="https://docs.ruby-lang.org/ja/latest/class/Object.html#I_CLASS">公式にもメソッドとして記載があるので</a>、メソッドと表記しました。</p> <pre><code class="bash"># Python 3.6.5 Repl >>> type(23) <class 'int'> >>> type('hoge') <class 'str'> >>> type(True) <class 'bool'> </code></pre> <p><code>type()</code>関数の返り値のtypeは<code>type</code>になるみたい。</p> <pre><code class="bash">>>> type(type(23)) <class 'type'> </code></pre> mkataoka73