[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 09/12 00:16 / Filesize : 189 KB / Number-of Response : 952
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Pythonのお勉強 Part34



1 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 22:23:19 ]
Pythonオフィシャルサイト
www.python.org/
日本Pythonユーザ会
www.python.jp/Zope/
まとめWiki
python.rdy.jp/
関連スレ
find.2ch.net/?BBS=ALL&TYPE=TITLE&STR=python
前スレ
pc12.2ch.net/test/read.cgi/tech/1240678081/

209 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 10:32:17 ]
>>208
それは >>206 とはちょっと違う話で、少しでも複雑な関数を作るときは
ちゃんと名前を付けましょうねという意味で、lambda が単文しか実行
できなくなってる。

map + lambda が推奨されないのは、
1) 単純に map(lambda x: と書くタイプ数 が for x に削減される
2) map はリストが不要なときも一時リストを生成してしまう。
  (>>206ではリストが必要だったけど、必要ないときはジェネレータ内包が使える)
3) map 内で繰り返し関数呼び出しが発生する。内包だと式の評価なので lambda より速い
4) Lisp脳ではない人間にとっては、 map(lambda x: を読むときに頭の中で分解再構築が必要になる。
  内包表記の方がやりたいことをすっきりと書き下せる。

210 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 10:37:19 ]
とりあえずIDLEでimport thisしようぜ

211 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 10:41:13 ]
>>209
頭大丈夫? 自分が何を主張するために何を持ち出しているのか読み直した方がいいよ。


212 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 11:21:42 ]
>>211
オレは>209の入ってる事がよく分かったが、何か問題でもあるのか?

213 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 11:44:48 ]
>>209
1)については、そもそもlambdaとか6文字も必要なsyntaxにしたのが間違いだったんだと思う
Haskellみたいに記号使っとけば……
2)はpython3000ではmapもイテレータ作るし

まぁ内包のほうが速いし、そっち使ったほうがいいんだけど

214 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 13:18:29 ]
-> だったっけ

215 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 14:19:08 ]
>>213
Pythonにとって、lambdaは便利で強力だけど一つの文が複雑になるし遅いので
あまり推奨できないから、記号を導入してまでみんなに使ってもらおうとは
思ってないんだろう。

216 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 15:22:31 ]
Pythonの場合、lambdaとインデントの相性が悪いのもあるんじゃない?
でも、他の言語使ってても複雑な式ならどのみち関数定義するから、
そのために何かして欲しいとは思わないけど。

217 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 15:50:27 ]
f = λ x:a*x+b

これでいくか。



218 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 16:12:54 ]
Perl
my $f = sub { $_[0]+1 }
$f->(42)

Ruby1.8
f = lambda { |x| x+1 }
f[42]
f.call 42

Ruby1.9
f = ->(x) { x+1 }
f[42]
f.call 42

Python
f = lambda x: x+1
f(42)

Haskell
f = \x -> x+1
f 42

219 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 16:27:54 ]
どれも、これだ!ってのがないな。

220 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 16:45:23 ]
というかλ記法って^が変化してλになったんだから
^記号をつかえばいいやんとか思う
ビット演算とまぎらわしいなら$で

221 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 16:46:13 ]

Python
def f(x): return x+1
f(42)


222 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 16:47:28 ]
$があるとperlみたいで汚いから嫌だ

223 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 18:47:47 ]
>>192
いくのかなあ、って変わってないんだからそうに決まってるでしょ。
docs.python.org/3.1/library/logging.html#formatter-objects

224 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 19:24:26 ]
逆に>>221でなにが不都合があるんだろ。
名前を考えないといけないから思考が停止しちゃうとか?

225 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 19:37:45 ]
>>224
内包表記のときはやっぱりラムダがあった方がいい。
名前も、じゃあ全てのfor文に名前を付けるか?みたいな話だと思われ。

それくらい気楽な関数。

226 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 20:31:36 ]
俺が恵まれていないだけかも知れんが、俺の周りで
関数名つけるの面倒くさいっていうやつは、98%の確率で
ろくなプログラマではない

だいたい、面倒って言ったって、xxx2yyy くらいを考えれば十分だし、
一言で表せないような関数を渡すのは構造的に失敗してると思うし

227 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 20:38:30 ]
>>226
どっちかというと、かぶらないか失敗っていう心配だな。
Pythonならあんまり気にしなくてもいいんだけどw



228 名前:デフォルトの名無しさん [2009/07/26(日) 22:30:21 ]
Python3に対応したpygame出てないのかよ
Python使いからの不満も多いみたいだし、こんなので3は普及するのかねぇ

229 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 22:33:35 ]
pgreloaded はまだ開発中か

230 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 23:45:40 ]
>>225
> 内包表記のときはやっぱりラムダがあった方がいい。
ラムダが内包表記で便利な経験が無いんだけど、
ラムダ+内包表記のcoolな例あったら挙げてみて。

231 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 02:30:48 ]
可読性と内包表記、
やっぱり、[fnc(x) for x in a if check(x)==0]
のようにして、[ ]内はごちゃごちゃしないようにしたほうがイイすよね?

232 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 08:38:42 ]
www.djangoproject.jp

まだ落ちてるよ
日本人でDjangoをやっているひとたちは
サイトが長時間落ちてもオッケー的な感覚の持ち主なんだろうな

233 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 12:54:32 ]
東京で停電があったとき以来
復活してないサーバと比べりゃ(ry

234 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 13:16:15 ]
>>231
読む人が「えーとこれは」と考え込まずに済むように書きたい。
したがってその位に留める(長くなるなら外に出す)という習慣は
良いことだと思われます。

235 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 13:33:44 ]
def abc():
  hoge=fuga
  hage=moge
  def func(x):
    return x+1
  vwx=[fnc(x) for x in a if check(x)==0]
  return xyz

236 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 14:24:49 ]
>>235
さすがにそれは内包表記の中で直接 x + 1 した方が良いだろ。

237 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 14:58:17 ]
「長くなるなら」外に出す、なのに「x+1なのに外に出す」って何だよw



238 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 15:31:23 ]
Pythonで無料レンタル鯖のいいとこ&有名なとこあります?

239 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 15:40:56 ]
ドジャンゴが使っているところはやめたほうが良さそうだな。

240 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 16:20:11 ]
レンタル鯖だと、Pythonはいまだに2.3や2.4ばかりで悲しい。

241 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 16:21:44 ]
>>238
国内無料鯖は2.4どころか2.3、Python自体ないとかあってかなりの不遇で、自信を持っておすすめできるものはない。色々探してみるといい
ただSSHなどシェルアクセスできれば自力で導入できるとこもある(xreaとか。まあSSH使える無料鯖はほとんどないが…)
低価格鯖なら最近2.6が導入されたさくらがおすすめかな。

242 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 16:50:15 ]
どうせ他にもいろいろしたくなるから、
まるまる仮想OS使えるところでいいんじゃないの。

243 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 17:14:51 ]
月3000円も出せばVPS借りられるんだからそのくらい出せよ
それも出せないなら自宅鯖でも作れ
いやならPHPでも使ってろ

244 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 19:41:54 ]
釣りか?

70 名前: デフォルトの名無しさん Mail: sage 投稿日: 2009/07/27(月) 15:02:19
PHPで無料レンタル鯖のいいとこ&有名なとこあります?

245 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 22:38:51 ]
Pythonスレの方がレスが多くて
みんなやさしくて好きです

246 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 22:42:32 ]
>>238
pc12.2ch.net/test/read.cgi/tech/1243160751/4-10

247 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 22:43:01 ]
表向きは永久凍土な連中ということで通ってるんだから
そういうこと言っちゃいけません



248 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 22:47:20 ]
>>238
Google App Engine 2アプ目
pc11.2ch.net/test/read.cgi/php/1243654802/

249 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 22:51:55 ]
GAE はないわなぁw

250 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 23:37:18 ]
@pagesとか言うところが2.5.1みたいだ

251 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 23:42:47 ]
実際に sys.version 出力させてみたら
2.5.2 だったよ。

252 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 07:48:58 ]
関数の中から実引数の数を調べることはできますか。

def f(a, b=1, c=None):
 print (a, b, c)

とあって、f(0) という呼び出し方をした時に、f() の中で実引数の数がいくつなのかを調べる方法があれば教えてください。

253 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 08:07:59 ]
バイトコード調べれば何とか…
じゃなくて
def f(*args):
    defaults = (None, 1, None, )
    len(args) で調べる
    args = tuple(args) + defaults[len(args):]
とかした方がいい

254 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 08:59:52 ]
>>252
www.python.jp/doc/2.4/lib/inspect-classes-functions.html

標準モジュールも知らない低レベルプログラマは
今すぐPythonやめてPHPに戻れよ

255 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 09:04:44 ]
found = None
for x in L:
 if something(x) == expected:
  found = x
  break
という処理をもっと簡潔にかけますか。
Ruby なら
found = L.find {|x| something(x) == expected }
という処理です。
内包表記で頑張ろうと思ったのですがbreakの仕方がわからず断念しました。
#Rubyは説明のために出したのであり、PythonとRubyとの比較をするつもりではないのでご了承下さい。

256 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 09:54:57 ]
[i for i in xrange(10) if i >= 7][0]

257 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 10:15:34 ]
>256 だといったん完全リストにしちゃうから
元が xrange(一億) とかだった場合にすげー重くならない?

イテレータ使ってても,リスト内包表記で一旦
リスト化しちゃうと遅延評価はされなくなっちゃうよね?



258 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 11:37:56 ]
>>239
なんで?

おすすめは
zope
web.py
なの?


259 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 12:00:59 ]
(i for i in xrange(10) if i >= 7).next()

260 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 12:12:43 ]
>>259
スゲー
面白い書き方だなw

261 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 12:54:59 ]
>>254
牛乳飲めよ

262 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 13:12:03 ]
>>261
PHPに戻れよドカタ

263 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 13:18:20 ]
>>258
Django自体は問題ナッシング
むしろすばらしい
問題は日本のヤツら

264 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 14:54:13 ]
Djangoの中に遅延評価関数とか入ってるからwebやらなくても使ってみたい気はする

265 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 15:14:13 ]
Formがもうちょっとイカしてくれてればなぁ
っていうか web 板の django スレが寂しすぎる件

266 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 18:01:09 ]
Djangoのutilsには,便利なクラスや関数がたくさんあるので
utilsだけで使うことが良くあるよ

267 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 22:28:19 ]
>>259
ありがとうございます!
でもPython3で動かない。。。。
Python2と3の両方で動く書き方はありませんか?
聞いてばかりですみません。



268 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 22:47:03 ]
>>267
python3の場合

(x for x in range(10) if x>=7).__next__()

269 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 23:10:51 ]
>>268
next(x for x in range(10) if x>=7)
だろ

270 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 23:18:40 ]
ごめん

271 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 01:56:49 ]
Don't mind.

272 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 06:29:23 ]
>>255
found変数をどう使いたいのか判らないけど、Pythonのfor文には
else 節があるので、後で if found is None: return とかするのであれば
その for 文を
for found in L:
  if something(found) == expected:
    break;
else:
  return
みたいにはできるよ。

あと、 >>269 みたいなやり方をするなら、
found = next(x for x in L if somethong(x) == expected, None)
って二つ目に default を入れないと、見つからなかったときに next が
StopIteration 例外を出すよ。

273 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 06:34:35 ]
sunkus

274 名前:デフォルトの名無しさん [2009/07/29(水) 09:54:00 ]
>>252 f() の中で実引数の数がいくつなのかを調べる方法があれば教えてください。

無理。デフォルト引数処理は関数呼び出しの直前に行われるから、f(..) の中ではデフォルト引数値が使われたか否かは判別できない。253 さんの示したように、関数の呼び出し方を変えて自分で調べるしかない。

ここらの Python の内部処理を知りたかったら www.nasuinfo.or.jp/FreeSpace/kenji/sf/python/virtualMachine/PyVM.htm を読め。少しマニアックだが。


275 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 11:49:53 ]
class foo:
  def __init__(self):
    self.bar = range(5)
  def __call__(self):
    self.bar.reverse()
class hoge:
  def __init__(self):
    self.hage = foo()
    self.foobar = self.hage.bar
    self.hage()
cls = hoge()
print cls.foobar == cls.hage.bar


.foobarには、.hage.barの値をコピーしているだけですか?
それともポインタ的なものが入ってるんでしょうか?

276 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 12:10:48 ]
barの型次第
上の場合はリストだから参照になるね

277 名前:252 mailto:sage [2009/07/30(木) 07:00:23 ]
>>254
>標準モジュールも知らない低レベルプログラマは
>今すぐPythonやめてPHPに戻れよ

みなさんの怒りを買うような質問をしてしまい、申し訳ありませでした。




278 名前:252の母 mailto:sage [2009/07/30(木) 10:17:41 ]
息子がご迷惑をおかけして申し訳ありませんでした。

279 名前:252の父 mailto:sage [2009/07/30(木) 11:06:55 ]
息子にはPythonをあきらめてPHPに戻るようによく言い聞かせました

280 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 13:21:43 ]
いやいや、誰もが最初はそんなもんですから。

281 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 13:35:18 ]
話がまとまったところで、あとは若い人たちに任せるとしましょう。

282 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 15:24:22 ]
おまえら表面は凍ってるのに中身は生暖かいのな。

283 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 23:55:49 ]
今からpython勉強するなら、2.6.2と3.01どっちがおすすめ?

284 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 00:15:39 ]
仕事で必要なら、必要な方なのは置いといて。
私は、stringが完全Unicodeになってる3をすすめます。

285 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 00:50:07 ]
初めてPYTHONをやり、最初、2.4入れて
setが使えないので、1ヶ月で2.5に移行
その後、文字化けが面倒なので2ヶ月で3に移行
最初から3にすれば良かった
てかemacsで文字化けする
しかもWindowsのエラーで、プロンプトからemacs起動出来ないから直し方わかんね
結局UTF-8使ってない

286 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 00:58:21 ]
なるほど、こういう人たちがいるがために今の状況があるわけか

287 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 01:07:20 ]
ライブラリが全然ついて来ないから
未だに 2.x だけどな。



288 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 01:13:02 ]
3.1は失敗作だったねえ。Python5.0に期待。
対するRubyは1.9.2でだいぶ動作がマシになった。
完全に抜かれちゃったなあ

289 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 06:29:42 ]
pass

290 名前:283 mailto:sage [2009/07/31(金) 07:11:16 ]
ありがとうございました
参考にします

291 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 11:55:24 ]
>>283
用途次第だけど2.5がライブラリ豊富で一番良いよ

292 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 12:43:59 ]
2.6 でなく 2.5 を勧める理由が意味不明

293 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 12:45:54 ]

2.5 でなく 2.6 を勧める理由が意味不明


294 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 13:42:38 ]
ダンジョーも動かない2.6を勧める理由が意味不明

295 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 14:29:15 ]
2.5.2で間違いない

296 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 17:29:14 ]
>>294
サーバが止まりまくりのDjangoなんて使えたって意味ないだろ

297 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 18:04:01 ]
ジャンゴが止まりまくるってどんな環境よ



298 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 18:23:07 ]
デベロップ用のサーバで公開したのかなw

299 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 22:28:32 ]
ttp://djangoproject.jp/

どうして止まるんだろう...。

300 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 22:34:20 ]
>>299
デベロップ用のサーバで公開したのかなw

301 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 22:46:12 ]
マルチコアのCPUで並列実行させたいんですが、
Pythonのthreadやthreadingモジュールだと
実際には同時平行で複数のスレッドが実行されないって本当ですか?
並列化するのにお勧めのモジュールってありませんか?


302 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 23:03:13 ]
>>301
ja.wikipedia.org/wiki/%E3%82%B0%E3%83%AD%E3%83%BC%E3%83%90%E3%83%AB%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%97%E3%83%AA%E3%82%BF%E3%83%AD%E3%83%83%E3%82%AF
docs.python.org/library/multiprocessing.html

303 名前:デフォルトの名無しさん mailto:sage [2009/08/01(土) 01:35:18 ]
>>302
すみません、わかりません。答えを教えてください。

304 名前:デフォルトの名無しさん mailto:sage [2009/08/01(土) 02:47:30 ]
>>303
ja.wikipedia.org/wiki/CPython#.E4.B8.A6.E5.88.97.E6.80.A7.E3.81.AB.E9.96.A2.E3.81.99.E3.82.8B.E5.95.8F.E9.A1.8C

305 名前:デフォルトの名無しさん mailto:sage [2009/08/01(土) 06:49:35 ]
GILが問題になるようなプログラムにPythonは向いてないよ

306 名前:デフォルトの名無しさん mailto:sage [2009/08/01(土) 07:33:59 ]
>>301
multiprocessing モジュールがお勧め。並列性のある問題を解くのに使えば
複数プロセスが同時に並列実行されてちゃんと台数効果が出ます。

307 名前:デフォルトの名無しさん mailto:sage [2009/08/01(土) 07:42:54 ]
>>299
まだ止まってんのかwwwwww



308 名前:デフォルトの名無しさん mailto:sage [2009/08/01(土) 09:01:10 ]
僕たちサーバ管理よりイベントが大好きなんです
アッーー!

309 名前:デフォルトの名無しさん mailto:sage [2009/08/01(土) 10:37:07 ]
>>302>>306
ありがとうございます。
GILがあって今一つ並列実行しにくいのでプロセスをフォークするんですね。
スレッドのタスクが重ければフォークのコストは大したことないですが、
リソースの共有が大変になるんでしょうか。
Core i7で8コアもあるのでそろそろ並列化をまじめに考えなくちゃと思っているので、とりあえずいじってみます。
それから>>303は私じゃないです。







[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<189KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef