機械す。
まぁ、北斗ネタはおいといて。
<キーワード引数>
> まあそうかもしれないっすけど、キーワード引数なんかはずいぶんと前から
> 望まれているけど、いまだに実装されていないわけで。
> #まあ技術的なものでないところでの問題が主なんでしょうが
キーワード引数は便利だと思うけど、コードが見難くなるとか
いう理由があるのかなぁ?(そうは思わないけど)
<リターン>
> 最後に評価された式の値がサブルーチン(メソッド/関数)の戻り値になるのは
> 多分Perl由来です。そのPerlはどこから持ってきたのか、はたまたPerl起源
> なのかまでは知りませんが。
あ、Perlもそうだっけ?(完全に忘れてるな……)
でも逆の議論もあって、例えばPythonで手続きっぽい関数を書く時は、
PythonではNoneを返すことで外にいらん値を出すのを抑制してるのだけ
ど、Rubyでそうすると、逆にreturn null(だっけ?)と書かなければ
ならないわけで。
何でも値を返さなきゃならない、というなら、
> > <輸入/れぎゅらーえくすぷれっしょん>
Pythonに正規表現リテラルが無いのは、多分Pythonの哲学でしょうね。
しかも、旧式のregex モジュールが組み込みだったのに、reに分離したのは、
一つは、正規表現の更新に対して、本体のアップデートの対応でなく、できる
かぎりモジュールレベルでの変更で対応したい、ということなのだろうと思い
ます。
加えて、やろうと思えば、モジュールの拡張なんて、Pythonを或る程度弄っ
た人間には簡単にできますしね(効率はともかく)
<指自>
> > ちなみに、メソッドの第一引数にselfを書かなければならないのが、
> > 面倒、という意味でしょうね(自分自身を参照するならthisつけるの
> > で同じわけだし……)
>
> そんなに面倒ですかねえ?
> そんなに面倒ならエディタに自動で入れさせれば(笑)
あまりクローズアップされないけど、PythonとRubyの関数/メソッドの
扱いは、完全に別物です。
Rubyでは関数は全てメソッドで、メソッドは要するにメッセージです。
メッセージ、というのは要するに、オペレータ(演算子)扱いですよね。
これに対し、Pythonは、関数もメソッドも全て「オブジェクト」です。
※私の知る限り、Schemeくらいしか類似のシステムは無いですね。
これは、Pythonとしてのポリシーとしては、演算子をむやみに増やさないという
ところも関係しているかもしれません。
そして、関数もメソッドも基本的には関数オブジェクトなのですが、独立した
関数と、クラス/インスタンスに属する関数、という差です。
※スタティックメソッドという、クラスに「入ってるだけ」のただの関数も
ありますけど……
で、メソッドの有利な点はクラス/インスタンス名前空間を参照できることで、
その有利な点を「明示的に」表してるのが、セルフポインタであるメソッド
第一引数、通例selfと名付けられるモノなのですわ。
で、まぁ、ご存知の方はご存知の通り、メソッドの呼び出しには二通りあります。
class A:
def mes0(self, n):
self. n = n
return self
上のようなクラスがあり、a = A()でインスタンスを作ったとすると、メソッド
mes0を呼び出す方法としては……
a.mes(10)
という方法と、
A.mes(a, 10)
という方法が両方できます(というか、後者の略記法が前者と思った方がいい
かも……)
方法論として正しいとか、便利かは別として、多分必要以上に「仕組みがわかり
やすい」のがPythonの特徴だったりします(前回使った「情報公開言語」ってのが
結構ハマるかな?)
> > global.value ?
>
> まあ雰囲気としてはそれですが、globalってのは名前がよくないですね。
>
> class ほげ(Object):
> foo = Math.random()
> def ふが():
> bar = foo + 1 #←ここで見ているfooは? あ、class の selfか(自爆)
>
> っていう事態を想定して言ってましたので。
>
> これは自分の外側にあるという意味ではよりglobalに近くはありますが、
> globalではないですよね。
まぁPythonでは、レキシカルスコープが装備されて以降、
import random
foo = random.random()
class Hoge:
foo = random.random()
def fuga0(self):
self.bar = foo + 1 # クラス変数かグローバル変数
def fuga1(self):
global foo
self.bar = foo + 1 # グローバル変数を明示
def fuga2(self):
global foo
self.bar = Hoge.foo + 1 # クラス変数を明示
ってな感じで使い分けてます。
あんまり、簡単ではないかもしれません。
/機械伯爵/