アカウント名:
パスワード:
print "0x" + hex(x) # hex()は整数の十六進表記文字列を返す組み込みメソッドx = 128
を実行すると、1行目でxが未定義というエラーになります。これは納得できますよね。
print f(128)f = lambda x: "0x" + hex(x) # lambdaで無名の関数オブジェクトを生成
を実行すると、1行目でfが未定義というエラーになります。これも納得できますよね。
defで関数を定義した
print f(128)def f(x): return "0x" + hex(x)
も同様に、1行目でfが未定義というエラーになります。それだけのことです。
あーー、これは困ったな。実は最初の1つと後の2つは違う事を言っています。
print "0x" + hex(x) # hex()は整数の十六進表記文字列を返す組み込みメソッドx = 128を実行すると、1行目でxが未定義というエラーになります。これは納得できますよね。
えー、この段階ですでに「納得できない」だったりします。あ、いや、Pythonがそういう言語だ、と言うのは判りました。でも、それは必ずそうならざるを得ない、と言うものではない。
例えば Perl ですと、(x ではなく $x と書く必要がありますし、hex()は変換方向が逆向きなんで sprintf を使いますが):
print "0x" . sprintf "%lx\n", $x; # hex()は整数の十六進表記文字列を返す組み込みメソッド$x = 128;
逆に、perlは大昔にちょろっと勉強しただけなので、そういう違いがあったのかと今はじめて知りました。ふーん。
pythonだと、importでの読み込み時に環境を見ながら関数の定義を(単に代入で f = f_foo とか f_bar とかやって)挿し替えたりするのですが(行儀の悪い方法ですが、便利です)、perlではそういうことはあまりしないんですかね。
単純移植はいずれにせよ難しそうですね。
疎行列を簡単にemulateしたい時は辞書にしちゃう手もあります。 {}.get(key, default) で、keyがなければdefaultを得ることができます。実行効率は知りませんが。
見掛け上リストでアクセスしたければ、クラスを作ってそのクラスに __getitem__(self, key), __setitem__(self, key, value) とかを実装してあげればできます。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
開いた括弧は必ず閉じる -- あるプログラマー
前方参照はできません (スコア:1)
を実行すると、1行目でxが未定義というエラーになります。これは納得できますよね。
を実行すると、1行目でfが未定義というエラーになります。これも納得できますよね。
defで関数を定義した
も同様に、1行目でfが未定義というエラーになります。それだけのことです。
Re: (スコア:1)
あーー、これは困ったな。実は最初の1つと後の2つは違う事を言っています。
えー、この段階ですでに「納得できない」だったりします。あ、いや、Pythonがそういう言語だ、と言うのは判りました。でも、それは必ずそうならざるを得ない、と言うものではない。
例えば Perl ですと、(x ではなく $x と書く必要がありますし、hex()は変換方向が逆向きなんで sprintf を使いますが):
fjの教祖様
Re:前方参照はできません (スコア:1)
逆に、perlは大昔にちょろっと勉強しただけなので、そういう違いがあったのかと今はじめて知りました。ふーん。
pythonだと、importでの読み込み時に環境を見ながら関数の定義を(単に代入で f = f_foo とか f_bar とかやって)挿し替えたりするのですが(行儀の悪い方法ですが、便利です)、perlではそういうことはあまりしないんですかね。
単純移植はいずれにせよ難しそうですね。
疎行列を簡単にemulateしたい時は辞書にしちゃう手もあります。 {}.get(key, default) で、keyがなければdefaultを得ることができます。実行効率は知りませんが。
見掛け上リストでアクセスしたければ、クラスを作ってそのクラスに __getitem__(self, key), __setitem__(self, key, value) とかを実装してあげればできます。