イケてるところ
インデント:
インデントするとブロックになって省力化できるところなど。
(Ruby みたいにやたら end を書いたりしなくていい)
for i in range(3):
print(i)
(でも1行目のコロン ":" が本来要るのか?という小さな疑問は後述。。)
その他のイケてるところ:
たくさんありすぎて書ききれない。
イケてないところ
変数のスコープ
ブロック内でグローバル変数が気軽に使えてしまうという、
小さな親切が余計なお世話。
間違って使っても叱ってくれなくて、気づかずにハマる。
q=1
def foo(p):
print(q)
foo(2)
=> 1
ブロック外でグローバル変数という意識がなかった変数も
ブロック内で不意に未定義で使うとグローバルなスコープになってしまう。
そんなこと勝手に解釈しないで、未定義だと言ってほしい。
クラス定義内の仮引数 "self"
class Cls:
def __init__(self, x):
self.a = x
def plus(self, b):
return self.a + b
c = Cls(1)
c.plus(2)
self, self って自己主張強すぎ!
ついでに前述のコロン不要説も。
↓ 情報量としては、こんな感じでいいのでは?
class Cls
def __init__(x)
self.a = x
def plus(b)
return self.a + b
c = Cls(1)
c.plus(2)
Ruby な人なら 「'return' も不要じゃね?」となるんだけど、
それはさておき。
後者を Rython と名付けてPythonのプリプロセッサにしよか?(しないけど)