Python

2021/01/14

みんなのPython勉強会#65の感想~社会変革の鍵はIT技術者にあるのかもしれない

みんなのPython勉強会#65に初参加してみて、内容がとても良かった。
自分もPythonが理解できるようになったので、その意義がすごく理解できる。
社会変革の鍵はIT技術者にあるのかもしれない、と思った。
結論のないラフなメモ書き。

【参考】
みんなのPython勉強会#65 - connpass

セミナー参加ログ》みんなのPython勉強会#65 2021/1/13(水) 19:00?21:00(オンライン開催) - acokikoy's notes

【1】Pythonのビジネス、データサイエンティストの話、LT、そしてシビテックまで、幅広いテーマでとても興味深かった。
その中で、シビテックの話がとても興味を引いた。

シビテックは、プログラマが市民の立場で、政府や公共機関に出てくる問題をITで解決すること、と理解している。
関さんは、Coder fo japanというOSSコミュニティで活動されている。
東京のコロナ感染のWebサイト構築で一躍有名になった。

都内の最新感染動向 | 東京都 新型コロナウイルス感染症対策サイト

また、台湾のIT大臣のオードリーさんがGithubにプルリクを送ったことでも注目された。

ソフトウェアの政治的影響力とは何だろうか: プログラマの思索

関さんの話によると、日本では、2011年の東日本大震災の時にシビテックに関わるプログラマが増えて注目を浴びたらしい。
さらに、昨今のコロナ感染状況の期間で、関さんのいるSlackメンバーは、約4倍以上の人数に増えた、とのこと。
つまり、社会の危機的状況が、プログラマをシビテックに関与しようというモチベーションを与えているわけだ。

では、なぜそんな状況でプログラマは、シビテックに関わろうとするのか?
理由は色々あるだろう。
たぶん、人間としての生存本能が現れるのではないだろうか。

こういうOSSコミュニティは、IT技術者にとって、とてもメリットがある場だ。
理由は、自分とは違うバックグラウンドを持つ技術者と関係ができて、技術力もアップするし、視野も広がる。
講演では、東京のコロナ感染のWebサイトでは、色盲の人に優しいアクセシビリティを考えるべき、というプルリクもあって、非常に勉強になった、とのこと。

【2】講演後の質疑応答で気になったのは、シビテックが欧米と日本でどのような特徴の違いがあるのか、という話。

関さんによると、欧米人は自分の意見を持って自己主張する。
政府はこういう政策を取るべき、こういう行動を取るべき、とか。
一方、日本人は、自己主張しない代わりに、応援するタイプが多い。
良い政策があれば、それを後押しするように活動する。
言い換えれば、日本人はリーダーシップがなく、受け身の人が多いのだろう。

また、米国では行政府の人はリボルビングドア(回転ドア)なので、OSSコミュニティの人の中に、行政府に所属して働いた経験を持つ人が多い。
すると、行政の事情に詳しいので、行政のニーズをよく知っていたり、行政の人間関係や法律上の壁などの事情をよく知っている。
ゆえに、シビテックではそういう人たちと組むことで、より効果の出せるIT技術による解決策を提示できる。

一方、日本では、OSSコミュニティに行政に関係する人が少ないので、行政と連携しにくい。
プログラマもそういう行政の裏事情を知らないので、連携しづらい面がある。
しかし、東京の副都知事にヤフー経験者の人が入ったおかげで、東京ではシビテックが盛んになってきた、と。

また、行政はITに詳しくないので、ITに詳しい技術者やOSSコミュニティと関わりたいニーズはある。
特に最近は、デジタル庁を設立する話も出たし、農林水産省や経済産業省もIT技術者を募集する広告を見かけるようになってきた。
こういう危機的な状況だからこそ、IT技術者が求められているのだろう。

社会変革の鍵の一つに、IT技術者も含まれている。

【3】そういう講演を聞きながら、今のコロナ感染対策が難しい理由も素人ながら何となく想像できるようになってきた。
その理由は、コロナ感染という問題が影響する範囲が広すぎて、数多くの分野の専門家を集結させて、一貫した方針を打ち出す必要があるのに、どれが正解か分からないので対策を取るのが難しいからだろう。

たとえば、コロナ感染の新規感染者を予測し、政策に合わせてその精度を次々に手早く変更していくには、西浦先生のような疫学の専門家が必要だし、感染などの医療に詳しい医学者が必要。
しかし、彼らだけで問題を解決できるわけではない。

たとえば、ロックダウンにより経済的に困っている人たちへ給付する政策を実行して、人々にどういうインセンティブを持たせれば効果が上がるか、という行動経済学とか、財政出動とその効果を測定するには、マクロ経済学とか、そういう経済学の専門家も必要。
そして、そういう経済政策や医療政策を実行するための正統性を確保するために、新しい法律を整備する法律家も必要。

たとえば、コロナ感染者が増加している状況で、コロナ感染者をスマホで追跡・隔離したり、検査した情報をクラウドの基盤に蓄積したり、刻一刻と変わる情報をWebサイトで収集・公開したり、各人に適切な給付金を配布するための一連の仕組みをWebシステムで構築したりするには、専門のIT技術者が多数必要になる。

つまり、それぞれの分野で一流の人を集めて、彼らを的確にアサインし、振ってくる問題をさばいていくことが求められる。
そういうことを実施する時、トップが全ての分野に精通して理解できるのは難しいだろう。
トップは全ての分野に精通した専門家ではないのだから。

では、そういうチームを編成して、問題を一つずつ解決していくことを成し遂げるには、何が必要なのだろう??
専門家でもないリーダーには、どんなスキルが求められるのだろうか?
どんなリーダーシップを発揮したら、問題となる状況を解決できるのだろうか?

何故ファシリテーションが流行しているのか?: プログラマの思索

| | コメント (0)

2021/01/11

Pythonデータ分析試験、Python基礎エンジニア試験に合格した感想~Pythonの機械学習や深層学習が目指すのは因果推論ではないか

Pythonデータ分析試験、Python基礎エンジニア試験に無事に合格できた。
感想をラフなメモ。

【参考】
Pythonデータ分析試験 | 一般社団法人Pythonエンジニア育成推進協会

Python基礎試験 | 一般社団法人Pythonエンジニア育成推進協会

【1】Python基礎エンジニア試験は簡単だったが、Pythonデータ分析試験は難しかった。

Python基礎エンジニア試験は、RubyやJavaを知っていれば、それら言語のライブラリを比較しながら理解すれば良かった。
Pythonは確かに書きやすい。
Rubyのように異音同義語のようなAPIはないし、文法も簡素だし、Tabのインデントだけでプログラミングできるので、手に馴染む。

しかし、Pythonデータ分析試験では、Numpy・Pandas・MatplotLib・sklearnの割とたくさんのAPIを覚える必要があるし、統計学や線形代数の数学の知識、分類・回帰・次元削減・クラスタリングなどの機械学習の知識も必要になるので、Python以外の知識習得に手間取った。
統計検定2級、G検定も取得していたので、それらの知識に慣れているから1ヶ月で十分だろう、と思ったが、実際は2ヶ月以上習得にかかった。
まだまだ、Pythonのセンスが足りないので勉強すべきと分かった。

なお、Python基礎エンジニア試験の教科書「Pythonチュートリアル 第3版」、Pythonデータ分析試験の教科書「Pythonによるあたらしいデータ分析の教科書」は持っておいた方がいい。
このAPIはどうだったけ?と振り返る時に、辞書代わりになる。

【2】Python基礎エンジニア試験、Pythonデータ分析試験で良かったのは、Web上の模擬問題が充実していること。

PRIME STUDY(プライム・スタディ) ? Python試験とPHP試験の無料模擬試験サイト

G検定、Python、Rubyの模擬テスト | DIVE INTO EXAM

上記のWeb問題を5~10回転ぐらいやって100%得点できてから受験したので、そんなに緊張感はなかった。
特に、PRIME STUDYの問題の方が確かに難しかったけれど、出題内容は「Pythonによるあたらしいデータ分析の教科書」と全く同じなので、理解に役立った。

【3】Pythonデータ分析試験、Python基礎エンジニア試験を良かったことは、3つある。

【3-1】プログラミングはブロックを組み立てる感覚が大切、と改めて感じたこと。

Python 初心者だから、Numpy、Pandas、Matplotlib、sklearnのAPIでつまづいてるけど、機械学習は面白い。
教師ありデータなら、train_test_splitして、機械学習のモデルにfitで学習させて、scoreで評価し、最後にpredictで予測する。
実際は、そういうデータの前処理に大量のロジックを組み込むわけだが。

すると、1行でもロジックというブロックが崩れると、プログラムは意図通りに動かなくなる。
ちょうど、積み木の途中で1個のブロックが崩れると、全てが崩れてしまうみたいな感じ。
プログラミングはとても繊細な作業。

プログラミングが書けるかどうかは、そういうセンスに依存する所も大きいと思う。

「60%の人間はプログラミングの素質がない」記事のリンク: プログラマの思索

【3-2】プログラミングは書くだけでなく、開発環境も大事、と改めて感じたこと。

Pythonが良いのは、Anacondaで一通りのライブラリが揃い、ライブラリのバージョンごとに依存した開発環境を別々に保持できること。
一方、RubyならGemのバージョン依存にすごく手間取るし、Ruby初心者はRailsの環境構築ですぐにつまずいてしまう悲しさがあると思う。

また、PyCharmという開発環境がとても良い。
コード補完できて、デバッグもできるので、プログラミングにストレスがない。
一方、コンソール画面で対話形式でPythonをプログラミングできるよ、ブラウザ上でJupytorNotebookでグラフも書けるよ、と言われても、やっぱりコード補完できないのは辛い。

僕は、IntelliJの有償ライセンスを購入したので、JupytorNotebook上でもコード補完もデバッグもできて、ああ、こういう風に動いてるのか、とか、初心者レベルからの気づきがあった。
プログラミング初心者はこういうつまらないレベルでつまずいて、先に行けなくなるから。

DockerやAnsibleの考え方もそこに通じているのではないか、と思う。

【3-3】Pythonを通じて、最先端の技術に簡単にたどり着けること。

線形代数や微積分、統計学の数学の知識は、それがなくても、Pythonを書きながら慣れていけばいい。
Numpyのブロードキャストやユニバーサルファンクションに慣れれば、自然に線形代数は理解できるはず。
統計量の計算、データの前処理となる分散正規化、ヒストグラムで表示する前処理となる層化抽出法、などは、PandasやMatplotLib、sklearnに慣れれば、理解できるはず。
sklearnのSGDライブラリを使いこなせれば、微積分の考え方も分かるはず。
もちろん、「ゼロから始めるディープラーニング」のサンプルプログラムを動かしながら慣れていけば、ディープラーニングだけでなく、微分における極小値や最小値の違い、鞍点のイメージも理解できるはず。

つまり、Pythonの機械学習ライブラリを使いこなせるようになれば、自然に、統計学・線形代数・微積分の知識も身につくはずだ。
紙と鉛筆で計算することも大事だが、プログラミングでは、要は動かしてナンボの世界だから。

そして、今のIT技術の最先端に一度到達できれば、他の分野でも、初心者レベルから今の自分のレベルまでに到達するにはどれくらいの道のりが必要なのか、そこから先にはどんな課題が控えているのか、を想像できるようになる。
そうすれば、すごく楽しくなる。

おかげで、Pythonの機械学習や深層学習の本が読めるようになってきたので、乱読できるのがすごく楽しい。
まずは「Pythonではじめる機械学習 ―scikit-learnで学ぶ特徴量エンジニアリングと機械学習の基礎」から読み始めていて、今頃になって、そういう意味だったのか、とか色々気づきがあった。

【4】Pythonの機械学習や深層学習ライブラリを覚えた後で、やりたいことは、目の前の問題事象に対し、原因とその予測を見つける因果推論ではないか。

100件以上のデータがあれば、分類モデルや回帰モデルで簡単にモデルを試せて、やりたい問題が解けるのに感激した。
最終的にやりたいのは、目の前の問題やイベントに対して、誰も見つけなかった因果関係の発掘だよな、と思う。

Python でプログラムを書ければ、誰でも新しい因果関係を発見して、経験則と言う法則を作り出せる。
たとえば、行動経済学や公共経済学であれば、こういう政策を政府が提示した場合、国民の消費活動や企業の生産活動はどう予測されるか、などの問題も、スマホやWebで収集した大量データをクラウド上に集めて、機械学習や深層学習のエンジンでモデルを学習させれば、その結果を予測することもできる。
つまり、回帰分析のように、予測したい目的変数に対し、有意な説明変数を見つけることで、単に相関関係を見つけるだけででなく、AならばBとなる、といった因果推論まで提示できるはず。

経済学は信頼性革命や構造推定により大きく変貌している: プログラマの思索

機械学習で反実仮想や自然実験が作れる: プログラマの思索

IT企業が経済学者を雇い始めた理由が面白い: プログラマの思索

社会現象や人間の心理に対し、こういう因果推論を経験則、法則として数多く見出すことができれば、それらは一つの規範を示す。
つまり、哲学の言う、ザイン(である・存在)ではなく、ゾルレン(かくあるべし・規範)を学問として提示できるはず。
最終的には、全ての文系学問の出てくる諸問題は、統計確率論を基盤としたPythonの機械学習や深層学習で実装されたモデルから導かれる規範を樹形図のように整理するだけで、自然科学の中の一つの学問分野に収斂されるのではないだろうか。

こういう技術が直近10年で当たり前になったのもすごいし、こういう技術を知らずに、今までの知識や技術に固執するのも一つのリスクだな、と思う。

| | コメント (0)

2020/12/06

Pandas Cheat Sheetのリンク

Pandas Cheat Sheetを見つけたのでメモ。
他にも、Numpyとか色々あるので参考にする。
最初はこういうシートがあると参考になる

【参考1】
Pandas Cheat Sheet

Pandas Cheat Sheet(PDF)



【参考2】
(Cheat Sheet) Matplotlib: Plotting in Python - DataCamp

NumPy Cheat Sheet: Data Analysis in Python - DataCamp

Python For Data Science - A Cheat Sheet For Beginners - DataCamp

SciPy Cheat Sheet: Linear Algebra in Python - DataCamp

Pandas Cheat Sheet for Data Science in Python - DataCamp

Scikit-Learn Cheat Sheet: Python Machine Learning - DataCamp

Collecting Data Science Cheat Sheets | by Karlijn Willems | Towards Data Science

探せば色々あるね。
MatplotLibとかNumpyのチートシートも役立つ。

【参考3】
データサイエンスや機械学習のチートシートを最も効率的に収集する方法 - Qiita

FavioVazquez/ds-cheatsheets: List of Data Science Cheatsheets to rule the world

最初からここを探せばよかったかもしれない。
Pythonのデータ分析ライブラリ以外にも、RやSQL、Keras、ggplot2とか色々ある。

こういうチートシートは辞書代わりに使いたい。
こういう事がやりたい、という問題意識がある時に、どんな手法で実現できるか、ということを手早く知りたいから。


| | コメント (0)

2020/11/22

ゆるふわPandasチートシートのリンク

Pandasを色々触っている時に、Pandasのチートシートを見つけたのでメモ。

ゆるふわPandasチートシート - Qiita

pandasのDataFrameのデータ操作をよくわすれるので、よく使用する操作を自分のためにまとめた - Qiita

やっぱり初めてのライブラリを触っている時はAPIを知らないので、そこを一つずつ覚えて使いこなすのが割と面倒。
こういうチートシートがあれば、触りながら感覚を身に付けられる。

経験者になれば、こういうチートシートは全て頭に入っているだろうが、初心者から駆け上がる時にとても役立つ。
ちょうど、英会話で中学生の初歩から英単語を覚えているのと同じ感覚に似てる。

Pandasを使いながら、SQLを代用できないか、R言語だとどれくらい違うのか、色々遊んでみたい。


| | コメント (0)

2020/08/14

NumPyを図解で理解する

NumPyを図解で理解する記事がわかりやすかったのでメモ。
ラフなメモ書き。

【参考】
【初心者向け】図解でわかるNumPyとデータ表現|Saya|note

線形代数とは、そもそも何なのか?
考え方は2つある。

一つは複数個の連立方程式を1個の数式で表す手段。
解は、逆行列で計算することになる。

もう一つは、座標変換を計算するための手段。
複数回、回転させた場合は、固有値を使って計算する。

行列やベクトルの計算が必要になるのは、電磁気学や量子力学のように、場(field)で複数個の微分方程式を一つの方程式でまとめて表現するために必要だから。

分かれば当たり前だが、高校生の頃は何のために行列計算するのか分かっていなかった。
そういう意味では、日本の高校の物理や数学は中途半端。
微分方程式で物理を習得しないので、小学生の鶴亀算みたいに、大量の物理の公式を覚えて解くだけになってしまう。

PythonのNumpyに初めて触れて、実際に色々触ってみて良かったのは、ループ処理せずとも一つの処理で簡単に計算できることだ。
ベクトル内で足し込む処理だけでなく、全項目が正値か判定する処理すら1行で書ける。
これにより、シグモイド関数に当てはめることが出きる、とか。

この記事の後半では、Word2Vecの簡単な解説もある。

高校数学をPythonで計算して理解する、という方法も今の時代ではありえる。
手計算も大事だが、プログラミングできれば、いくらでも応用できるメリットもある。

| | コメント (0)

2020/05/27

Python と R の違いのリンク

PythonとR言語の違いについて興味を持ったのでメモ。

【参考1】
Python と R の違い・関数の対応表 ? Python でデータサイエンス

基本ライブラリやデータ分析に関する処理の違いをコードベースで書いてくれているので読みやすい。

Python と R の違い (データフレーム編)
Python と R の違い (数学関数・データ整形加工編)
Python と R の違い (日付・時間の処理)
Python と R の違い (データ可視化・グラフ作成編)
Python と R の違い (決定木分析)
Python と R の違い (サポートベクターマシン)
Python と R の違い (ナイーブベイズ分類器)
Python と R の違い (ランダムフォレスト法)
Python と R の違い (線形回帰による予測)
Python と R の違い (k-NN 法による分類器)

PythonとR言語のコードを比較しながら読んでいると、まるで、ロゼッタストーンを発見した時に、古代エジプト語とアルファベットを比較したような感覚に似ているのかな、と空想したりする。
つまり、同じ内容を表現する時に、全く違う言語で表現したら、見た目が全く違う、みたいな感じ。

【参考2】
PythonとRのコマンド比較表 - Qiita

データフレーム、プロット、リスト、計算、処理などの観点でコード比較している。
Numpy、Pandas、Matplotlibに相当するRのライブラリは自分でも整理してみる。

【参考3】
R vs Python:データ解析を比較 | POSTD

実際にデータ分析したいことについて、PythonとRで比較している。
Pythonは、scikit-learnみたいにライブラリを使いまくるイメージかな。

一方、Rの方がPythonよりも行数を短く書ける場合もあるみたい。
この辺りは、自分で書いてみて理解する。

Haruhiko OkumuraさんはTwitterを使っています 「https://t.co/fxE6ETowKd Rで書けば5行だ df = read.csv('...') plot(df$costs, df$profit) r = lm(profit ~ costs, data=df) summary(r) abline(r)」 / Twitter

【参考4】
「データ分析をやるならRとPythonのどちらを使うべき?」への個人的な回答 - 渋谷駅前で働くデータサイエンティストのブログ

このブログを読むと、試行錯誤しながらデータ分析するならR言語、機械学習や深層学習ならPython、という使い分けなのかな。

ちょっとずつ書いてみると違いが分かり始めて面白い。


| | コメント (0)

2020/05/10

PythonとRubyの違い

PythonとRubyの違いの記事が参考になったのでメモ。

【参考1】
PythonとRubyの違い | Qrunch(クランチ)

記事の内容は同意する。
個人的感想では、Pythonの方がより実用的な気はする。

実際、Javaはelse if、Rubyはelsifだが、Pythonはelsifと一番短い。
Pythonは予約語も一番少ない。
from モジュール import 関数で書くと、モジュールやオブジェクトは意識しなくていいので、関数っぽく書ける。

【参考2】
【Ruby】PythonプログラマーがRubyを触って感じたこと - 歩いたら休め

Pythonプログラマから見ると
「Rubyはオブジェクト指向にこだわりすぎている」
「変な記号がいっぱいある」
「ブロック(ラムダ式)が強力すぎる」
であるらしい。
確かに、変な記号は多すぎるので最初は慣れるのに時間はかかる。

下記のアドバイスも参考になった。

(引用開始)
逆に、RubyのプログラマーがPythonを勉強したいなら、以下の3点を押さえておけば、ちゃんとしたプログラムが書けると思います。

リスト内包表記
ジェネレーター(遅延評価)
ふつうに定義した関数がオブジェクトであること
(引用終了)

【参考3】
Rubyのリファクタリングでイケてないコードを美しいオブジェクト指向設計のコードへ改良するための方法 - Qiita

Python のリファクタリングでイケてないコードを別に美しいオブジェクト指向設計ではない普通のコードにする方法 - Qiita

個人的感想では、Rubyのリファクタリング例はとても綺麗で参考になる。
Rubyの威力を見せつけられる感じ。

一方、Pythonの例はもう少し意義が感じにくかった。
もっといい例があるのかも知れない。

| | コメント (0)

乱立したPythonのオライリー本のリスト

Python本が読みたいと思っていたら、オライリーの本が大量に出版されていたので、下記の記事をメモ。

オライリーのPython & 機械学習本が渋滞気味なので整理してみた - Deutschina's Tech Diary

自分が読みたい本をリストアップしておく。

NumPy、Pandas、MatPlotLibを一通り勉強する時の本。

DeepLearningの構造を最初から理解する。

「scikit-learnとTensorFlowによる実践機械学習」は今読んでるけど、機械学習が今までのアルゴリズムと何が違うのか、網羅的に書かれていてとても役立つ。

これもいつか読みたい。


| | コメント (0)

2020/04/30

PyCharmやVSCodeでjupyter notebookを使用する方法

Pythonの開発環境では、Pycharmが使いやすい。
デバッグやリファクタリング、色やキー操作の細かな設定が優れている。

しかし、PycharmのCommunity版では、ipynbファイルは素のJsonファイルで表示されてしまって使いにくい。
調べてみたら、下記のやり方で、Pycharmからjupyter notebookを起動してブラウザ上で表示できるようになる。

PyCharmでjupyter notebookを使用する方法(Windows10) - Qiita

一方、VSCodeでjupyter notebookを使用するには、Pythonエクステンションを入れるだけ。
ブラウザ上のでjupyter notebookではなく、VSCode上でipynbファイルが自動変換されて表示されるので便利。

VS Code でPython,Jupyter を動かす - Qiita

jupyter notebookを使いたい場合、PycharmCommunityよりもVSCodeが手に馴染んでいい感じ。

| | コメント (0)

2020/04/25

Pythonのリスト内包表記のメモ

Pythonのリスト内包表記についてメモ。
Python初心者なので間違っていたら後で直す。

【参考】
pythonの内包表記を少し詳しく - Qiita

リスト内包表記の活用と悪用 - Qiita

Pythonリスト内包表記の使い方 | note.nkmk.me

Pythonのリスト内包表記はチューリング完全だから純LISPだって実装できる - Qiita

Pythonの習得を始めたところ、Rubyと微妙に異なる点でいくつかハマった。
個人的には過去の記事が参考になった。

【Ruby】PythonプログラマーがRubyを触って感じたこと - 歩いたら休め

(引用開始)
逆に、RubyのプログラマーがPythonを勉強したいなら、以下の3点を押さえておけば、ちゃんとしたプログラムが書けると思います。

リスト内包表記
ジェネレーター(遅延評価)
ふつうに定義した関数がオブジェクトであること
(引用終了)

確かに、リスト内包表記が一番難しく感じた。
個人的には、
[str(i) for i in [1, 2, 3]]
と書くよりも
list(map(str, [1, 2, 3]))
の方が読みやすいし理解しやすい。

[i for i in [1, 2, 3] if i % 2]
よりも
list(filter(lambda x: x % 2, [1, 2, 3]))
の方がカッコよく感じていた。

しかし、mapやfilterよりもリスト内包表記の方が高速らしいので、リスト内包表記を使うべきなのだろう。

実際、Pythonのリスト内包表記は奥が深い。
Pythonのリスト内包表記はチューリング完全だから純LISPだって実装できる - Qiita記事が面白かった。

(引用開始)
Pythonにはリスト内包表記というとても便利なものがあります。
どれくらい便利かというと、チューリング完全です。
(引用終了)

最初の印象は、for文を使いまくって手続きっぽいな、Rubyのブロックみたいに書ければ綺麗なのに、と思っていたが、Pythonはリスト内包表記があるから関数型言語の側面もあるのだ、と感じた。

Pythonで色々書いてみた気づきは色々ある。
Pythonのmap, filter, reduceは、Rubyのmap(collect), select(find_all), reduce(inject)と同じだが、文字・リスト・ハッシュ(辞書)のメソッド名が微妙に異なっている。
例えば、PythonはList.remove(要素)、RubyはArray.delete(要素)。
例えば、PythonはList.extend(要素)、RubyはArray.push(要素)。

Rubyのクロージャはブロックで簡単に書ける一方、Pythonのクロージャは、関数内関数を使う。
その時、関数内関数の外側の変数は参照できるが、更新したい時は、nonlocal宣言が必要。
その点は、何となくPerlに似ている。

Rubyではインスタンスメソッド、クラスメソッド(特異メソッド)が単純に書けるが、Pythonでは、インスタンスメソッドの第1引数にselfを明示したり、クラスメソッドにはアノテーションを付けて第1引数にclsを明示する。
その点は、Pythonは機械語により近い感じがする。

Pythonは多重継承をサポートしている部分は驚いた。
JavaもRubyも、ほとんどのプログラミング言語も多重継承はないから。
Rubyなら継承チェーンは必ずツリー構造なので、メソッド探索は単純だが、Pythonで多重継承ができるとなると、いわゆる菱形継承が問題になってくる。
どうやって解決しているのか、調べてみる。

| | コメント (0)