【実験台】 Python 3.0 のお勉強 Part 1 【非互換】

■ このスレッドは過去ログ倉庫に格納されています
2009/02/19(木) 22:30:15
Python 3.0 は隔離スレを作るべきだと思うのは俺だけかな?
そもそもあれは実用で使うには時期が早すぎるわけで、ここで
普通に語られても困る。
--------
別に
--------
細分化する必要性が全く感じられない。
各自がレスの内容を収拾選択すればいいだけ。
2010/05/03(月) 12:47:21
>>166
ありがとう!
ちょっとやる気が出た
2010/05/03(月) 14:01:21
>>167
それ、seqがコピーしづらいイテレータだったとき面倒にならない?
2010/05/03(月) 15:12:44
for i, x in enumerate(seq):
  v = func(x)
  if i == 0:
    minv = v
  elif v < minv:
    minv = v
2010/05/03(月) 15:14:05
なんか違和感あるなw

こっちのが分かりやすいか

for i, x in enumerate(seq):
  v = func(x)
  if i == 0 or v < minv:
    minv = v
2010/05/09(日) 18:01:53
Keep it simple, stupid!
2010/05/09(日) 21:38:50
python3でグラフ書くのに何使ってる?
やっぱりgnuか?
2010/05/10(月) 15:17:24
python2.xでmatplotlib
175デフォルトの名無しさん
垢版 |
2010/05/12(水) 00:07:01
3.xのライブラリが2.x並になるのって、あと何年かかるんだろうか
2010/05/12(水) 23:35:01
googleで対応してほしい
2010/05/15(土) 01:12:03
最近python関係の書籍が色々と出てるね。
python2.6.2って・・・。
2010/05/15(土) 13:04:59
う、うん……(´・ω・`)
179デフォルトの名無しさん
垢版 |
2010/05/18(火) 09:44:30
なんで俺たち3.xなんか始めちゃったんだろう……
2010/05/19(水) 01:30:56
しかし今更後戻りなど…
181デフォルトの名無しさん
垢版 |
2010/05/19(水) 01:37:20
>>171
のプログラムみたら、
やりたいことは値の設定なのであって、複文を実行することじゃないから、
minv = func(x) if i == 0 or func(x) < minv else minv
って書きたいけど、中でfunc(x)が2回出てるから、func(x)がすっごい重い処理だと
性能悪いなー

って思うのは正しい?
func(x)の値は内部的に保持され、2度実行されないよう最適化してくれるのかな?
2010/05/19(水) 02:40:26
そんな最適化してくれるコンパイラはCでもないと思うぞ
2010/05/19(水) 06:55:06
どうもスクリプト言語は互換性を一度ぶった切りたくなるものみたいだなぁ
Rubyは一見その点では有利そうなんだが、実際にはバージョン間の互換性がさっぱりで、
単に同じこと(過去の微妙な仕様の切り捨て)を小分けに毎回やってるようなもんだから
ある意味余計に悪いし
まぁでも、俺は当分3kは使わないけど、いずれ移行するような気はするけどな
2010/05/19(水) 08:21:19
いつまでも保守的ではいられないのさ
2010/05/19(水) 10:10:03
CやC++も最初のころは仕様がコロコロ変わっていたような覚えがあるのだが
2010/05/19(水) 11:17:13
いまでもコロコロ変わってますが
2010/05/19(水) 15:28:45
せめてnumpyがないと移行できないなー
188181
垢版 |
2010/05/20(木) 00:49:13
>>182
やぱCでもgcc:O2でもfuncの中身までは解析しなかった
変数の出現が関数外ではありえない、みたいな
extern宣言が出来ると、イケチャウ雰囲気あるんだけどな〜
動的スコープだとほんと無理なのかな

誰か天才いないかーーーー
2010/05/20(木) 06:04:42
>>181
else のときは
minv = minv
になるから
アホなコードだなぁ
と思う
2010/05/20(木) 13:53:03
>>181
こういうコードはダメ。Ruby厨に惑わされるな。
2010/05/20(木) 15:27:14
>>159
> min(func(x) for x in seq) で常にかければいいんだけど、
> 書けないこともよくあるので。
これってどんなとき?
2010/05/20(木) 18:17:37
>>159
reduce使え
min(seq)は
reduce(min, seq)と同じ

その手のやつは大概適当なfを用意してやれば
reduce(f, seq)
に書き換えられる
2010/05/20(木) 18:19:04
ストリームデータから最小値を見つけるとか。
ファイルシステムを捜査しながら最大サイズのファイルを見つけるとか。
かな
2010/05/20(木) 18:21:20
>>193
それminで何でだめなんだ?
min()はiterable受け取れるけど
2010/05/20(木) 21:12:50
うーむ
2010/05/20(木) 22:55:28
>>189 >>190
俺も同意だと思ったけど、内部的にはmin関数もまったく同じなんだよね。
趣味の問題かな?
197デフォルトの名無しさん
垢版 |
2010/05/21(金) 08:11:23
初心者のお試しレベルなら問題ない
パフォーマンス考えたら避けるべき
2010/05/21(金) 10:58:04
関数型言語ならletする場面だから、
Pythonでは潔く2行にするのが良いんじゃないの
2010/05/23(日) 11:35:37
unko
2010/05/23(日) 14:44:46
>>140
パイソンってこういうコーディングルール統一されてると勝手に思ってたけど、汚いんだな

統一されてないのは書いてて気になるし、推測でメソッド名書けなくなるから、やっぱりそういうところちゃんとしてるルビーのほうが良さそうか

理路整然としてるイメージを勝手に持ってたけど、rubyのほうがそゆとこしっかりしてんのかな
2010/05/23(日) 15:12:39
ああ、Ruby最高だよ
2010/05/23(日) 15:36:16
>>200
classmethod みたいな、1つの単語と呼べるものは、アンダースコアで区切らない。
set_autholizer みたいな、複数の語でなる句は、アンダースコアで区切る。
JUnit みたいに、別のリファレンスに従う設計になっているライブラリは、そのリファレンスの命名に従う。

理路整然としてるけど?
2010/05/23(日) 17:27:52
なるへそ
204デフォルトの名無しさん
垢版 |
2010/06/02(水) 21:48:16
なんかpython3始めたいのにまともな書籍が売ってない。
いつになったら普及するのよ。
205デフォルトの名無しさん
垢版 |
2010/06/02(水) 21:49:45
java-jaの人が執筆したJython本で我慢しろよ
2010/06/03(木) 03:44:37
>>205
本スレにカエレ

>>204
もうちょっとかかりそうだな。
このスレでも何度か出てきてるDive into Python3は、英語版なら書籍でも出てる。
書籍の形で欲しいのなら適さないけど、内容的に書籍レベルのものが欲しいのならWebの日本語訳がいいと思う。
ttp://diveintopython3-ja.rdy.jp/index.html
2010/06/03(木) 13:11:07
http://www.amazon.co.jp/dp/4873114489
208デフォルトの名無しさん
垢版 |
2010/06/05(土) 05:47:05
>>207
2.5じゃねーかハゲ
2010/06/05(土) 17:10:52
>>202
> 理路整然としてるけど?

で、結果としてばらばらのネーミングルールになってると。

馬鹿か。
2010/06/05(土) 20:50:51
>>209
馬鹿はお前だ
2010/06/05(土) 21:16:35
まあ、馬鹿は言い過ぎと思うが、>>202 の理由が正しいとしても結果として
統一されてないのは事実だし、おれも >>200 のようにいまいち汚いと思う。
212デフォルトの名無しさん
垢版 |
2010/06/09(水) 05:54:43
べき集合をスマートな一行で書く方法ないかね
2010/06/10(木) 00:42:28
>>212
1行じゃないけどこんなの見つけた
http://mail.python.org/pipermail/tutor/2004-April/029413.html
2010/06/10(木) 01:15:00
ttp://docs.python.org/py3k/library/itertools.html
レシピのpowerset
2010/06/10(木) 01:47:42
できたと思ったらまともなのが出てた。
t = set(range(3))
(lambda st: (lambda ls: set(frozenset(ls[j] for j in range(len(st)) if (i >> j) & 1) for i in range(2**len(st))))(list(st)))(t)

# ==>set([frozenset([0]), frozenset([1, 2]), frozenset([]), frozenset([0, 2]), frozenset([1]), frozenset([0, 1, 2]),
# frozenset([2]), frozenset([0, 1])])
2010/06/10(木) 15:37:58
今年出たpaython本が2.6対応なのにはワラタ。
2010/06/10(木) 16:47:12
>>216
Python3の本もたくさん出はじめてるよ。
どの本がPython3用になって欲しかった?
2010/06/18(金) 09:59:07
ぶっちゃけ入門レベルで、2.6も3.0もたいした違いはないし、
もっと他に気を掛けることがあるだろうに。
2010/06/18(金) 14:14:05
なにごとも初心者は、自分の進め方が正しいかどうかで迷ってしまうからねぇ。
2010/06/18(金) 14:29:00
そういえば、Pythonスタートブックっていう書籍が出たけど、
あの手の書籍は最新python3で出して欲しかったな。
初心者向けみたいだし、プログラミング入門者でも分かりやすい内容だったから。
仕事で使うのではなく、ただなんとなくPython始めたいような人は
最新環境で学ぶべきだと思うよ。
俺らが3の仕様変更を知らされたときに受けた失望感を
初心者にまで与えるのはあまりにも酷だろ。

それでも2.Xが優勢だということは、
おそらく3は当分普及しないってことだろうね。
たぶん日本ではGoogleのGo言語のほうがpython3よりも先に普及すると思う。
どうしてこうなった。
2010/06/18(金) 20:18:39
>どうしてこうなった
encode/decodeのせい
python3に期待
2010/06/18(金) 20:22:05
>>220
日本でGoが普及するか?まだC#の方がありうると思うぜ。
それ以前にGoとPythonの守備範囲も若干違う気がするし…
2010/06/19(土) 13:45:04
あるうるも何も、C#はとっくに普及しとるがな
特に国内ではPerlやPHPならともかく、Pythonとは比較にもならんだろ
2010/06/19(土) 18:25:04
>>223
そんなに普及してんの? Pythonと似たり寄ったりだと思ってた。
LLスレにでも移動して語ってくれ。
2010/06/19(土) 18:37:33
ttp://www.atmarkit.co.jp/news/200902/13/wp.html
ワークポートとかいう会社の調べ
C#の求人件数は5位
ちなみにPythonは圏外ね
2010/06/19(土) 19:34:21
日本の不幸はRubyっつーガラパゴス言語が作者が日本人だってだけで国内で(ry
2010/06/19(土) 23:12:50
ガラパゴスではないだろ
2010/06/19(土) 23:30:07
つーか国内で別にそんなにRuby使われてないだろ
Pythonがそれ以上に使われてないだけで
2010/06/21(月) 14:11:10
コアの開発に関する議論が日本語で行われていて世界からはブラックボックスに見えるという
時点で、ある程度のガラパゴス性をもってるよね>Ruby
2010/06/21(月) 14:26:26
ruby-coreの開発に関する議論は英語だが?
2010/06/21(月) 14:51:35
>>230
そうなん?スマン。
MLでオープンな議論もするけれど、重要なことはMatzを中心とする一部の日本人が
エイヤで決めるってどっかのインタビューで答えてたと思ったから。
2010/06/22(火) 00:28:53
Pythonの話しろ!
2010/06/22(火) 00:39:20
pythonから発展した話題だし、少しくらいいいんじゃね?
ところで、お前らpythonなにに使ってる?
2010/06/22(火) 01:30:20
>>233
電卓代わり、CGI、C/C++で書くほどじゃないプログラム全般。
まともに使い方知ってる言語がC/C++とPythonしかないから、ある意味で楽。
2010/06/22(火) 02:25:43
>>233
spamメールのフィルタ
2010/06/22(火) 02:34:24
>>233
領土問題と同じで、少しくらいと譲歩してたら乗っ取られる。
2010/06/24(木) 21:36:26
領民あっての領土だから大丈夫
2010/06/26(土) 08:50:39
pythonだと作るのが非常に楽なので、python常用して
python2だと日本語が扱いづらいので、python3導入して
研究で最適化アルゴリズムとか強化学習のプログラム作ったけど
先輩のc言語で書かれた同じ最適化アルゴリズムで作った巡回セールスマン問題と
実行速度比較したら、10倍以上差があるんだが・・・先輩のが数分で、自分のが数時間
読みやすさ重視でプログラム書いたからループ内で不要な処理とかかなりしてる気もする
python3のコンパイラないかな
2010/06/26(土) 08:57:15
python3にしか対応してない素晴らしいモジュールを作れば移行が早くなるかも!!
2010/06/26(土) 11:11:07
>>238
あったとしても、多少マシになるくらいでCにはとてもかなわないと思うよ。
psycoって3.x対応してないよなぁ。
2010/06/26(土) 11:29:12
10倍ですむならマシだな
ものによっては100倍ぐらい差がつく
2010/06/26(土) 11:29:38
>>240
多少でもマシにしたいほど時間がかかる・・・
たしか対応してない
2010/06/26(土) 11:30:34
先輩が数十分、自分のだと1日とかそんな感じ
2010/06/26(土) 11:51:10
Python2 にもどして、 PyPy 使うと良いよ。
今日 PyPy-1.3 がリリースされたし。
2010/06/26(土) 20:35:28
python3ってctypes使えますか?
2010/06/26(土) 21:16:25
使える
2010/06/26(土) 23:37:58
ctypesいじくり中。
pointerとbyrefってどう使い分けるんだ?
あとlistをそのまま配列としてcに渡したり出来ないのね。
内包表記でばーんと渡したりって訳にはいかないね。
2010/06/26(土) 23:45:14
とりあえず全部PythonでつくってProfilerかけて時間のかかる処理だけSWIG+Cで書いてるけど
このオーソドックスな方法は素晴らしいっすよ
2010/06/27(日) 02:10:57
Cythonも素晴らしいよ。
ちゃんとPython3にも対応してるし。
2010/06/27(日) 15:23:06
#! /usr/bin/env python
# -*- coding: utf-8 -*-
import datetime

def sample_loop(n):
L = []
for i in range(n):
L.append(i)
return L

def sample_comprehension(n):
return [i for i in range(n)]

d = datetime.datetime.today()
print (":",d.strftime("%Y-%m-%d %H:%M:%S") )

sample_comprehension(50000000)
d = datetime.datetime.today()
print (":",d.strftime("%Y-%m-%d %H:%M:%S") )

sample_loop(50000000)
d = datetime.datetime.today()
print (":",d.strftime("%Y-%m-%d %H:%M:%S") )

実行結果
2010-06-27 15:19:23
2010-06-27 15:19:46
2010-06-27 15:19:46

Python3だとリスト内包表現って遅いの?
2010/06/27(日) 15:43:03
>>250
2.6でも3でもリスト内包の方が速い。
2.5以前は知らんが、たぶんリスト内包の方が速い。
http://dsas.blog.klab.org/archives/51742727.html
2010/06/27(日) 15:50:16
こうしないと同じ条件にならないんじゃ?

def sample_comprehension(n):
    L = []
    return [L.append(i) for i in range(n)]
2010/06/27(日) 20:15:46
CPythonって、リストの実装って配列だっけ?双方向リストだっけ?

>>250
sample_comprehensionとsample_loopの順番を入れ替えてみても結果変わらない?

32bit環境だと50000000要素だと、配列なら約200MB、双方向リストなら約600MBのメモリ確保が必要になって、
それに時間がかかったんじゃないかなぁ。
一旦確保したら、ひとつめのsample_comprehensionで作ったリストはGCの対象になるから、新たにメモリ確保の必要がない。
だから2つめのsample_loopは早かった、と予想してみる。
2010/06/27(日) 20:45:54
>>252
適当なサイトのソースをコピペして実行しただけだから深く考えてなかった
それでやってみる
>>253
順番入れ替えても変わらなかった
2010/06/27(日) 20:48:28
>>251
そうそうこのページのソースをコピペして実行した
人が居たから、かなり適当に書いた
だからtimeじゃなくdatetime使ってたり
2010/06/27(日) 21:03:11
#! /usr/bin/env python
# -*- coding: utf-8 -*-
import datetime

def sample_loop(n):
L = []
for i in range(n):
L.append(i)
return L
def sample_comprehension(n):
L = []
return [L.append(i) for i in range(n)]

d = datetime.datetime.today()
print (":",d.strftime("%Y-%m-%d %H:%M:%S") )

sample_comprehension(50000000)
d = datetime.datetime.today()
print (":",d.strftime("%Y-%m-%d %H:%M:%S") )

sample_loop(50000000)
d = datetime.datetime.today()
print (":",d.strftime("%Y-%m-%d %H:%M:%S") )

結果
2010-06-27 21:01:04
2010-06-27 21:02:11
2010-06-27 21:02:12
2010/06/27(日) 21:30:30
>>252
正直その糞コードで何をしたいのか全然わかんねえ
list.append()はNoneを返すから
それって結果は
[ None ] * n
になるよな
2010/06/27(日) 21:53:13
#! /usr/bin/env python
# -*- coding: utf-8 -*-
import datetime

n = 50000000

d = datetime.datetime.today()
print ("for文リスト作成開始:",d.minute,"分",d.second,".",d.microsecond,"秒")
L = []
for i in range(n):
L.append(i)

d = datetime.datetime.today()
print ("リスト内包     :",d.minute,"分",d.second,".",d.microsecond,"秒")
L = []
L = [i for i in range(n)]

d = datetime.datetime.today()
print ("終了        :",d.minute,"分",d.second,".",d.microsecond,"秒")

for文リスト作成開始: 51 分 11 . 930000 秒
リスト内包     : 51 分 53 . 554000 秒
終了        : 52 分 9 . 919000 秒
2010/06/27(日) 23:05:53
糞コード貼り禁止
2010/06/28(月) 03:36:29
>>256
ほんとだ。すげー、ループはえー、と思ったらインデントを
def sample_loop(n):
    L = []
    for i in range(n):
        L.append(i)
        return L
にしてた(・ω・`)
2.5で動かしたからrange()がイテレータじゃなくてリスト返すおかげで数字的にリアルだった。

にしても、今時のCPU速いな。Pen4だとC++で同じような処理書いても2秒かかったぞ。
#include <vector>
#include <iostream>
class Range{
private:
int end;
int now;
public:
Range(int n) : end(n), now(0){}
int next(){return now == end ? -1 : now++;}
};
int main(){
Range range(50000000);
std::vector<int> l;
int i;

while((i = range.next()) != -1) l.push_back(i);
return 0;
}
2010/06/28(月) 03:39:39
>>252
L.append自体をすることが目的ならそうだけど、
L.appendの副作用でリスト作るか内包表記でループ作るかどっちが速いかを調べたいなら元々のであってる
2010/07/01(木) 06:54:38
Cyhonの使い方を勉強しよう
まだほとんど調べてないが、使い方がよくわからない
てかトイレ行きたくて集中出来ない
2010/07/01(木) 12:02:02
先に下痢を治せ
2010/07/07(水) 10:50:19
結局ある程度調べたつもりだが
cython全然わからんとです
超初心者スレで教えてもくれるかな
2010/07/07(水) 22:45:35
Python3について調べてたらsuper()がキモくなってて吹いた。

http://lucumr.pocoo.org/2008/4/30/how-super-in-python3-works-and-why-its-retarded
↑にも書いてあるけど、関数定義中の__class__って何なん?第一引数をスタックフレームから取るっておいおい。

以下のクラス定義でFoo()foo()すると

class Foo:
 def foo(self):
  print(locals()) #=> {'self': <__main__.Foo object> at ...>} # __class__いません
class Foo:
 def foo(self):
  print(__class__) #=> <super: <class 'Foo'>, <Foo object>> # ちょww
_super = super
class Foo:
 def foo(self):
  _super() #=> エラー # ちょww

いくらなんでもこの挙動はキモすぎだろ。たかがsuper()のためだけに。
最後のとか原因わかったとしても、難すぎる。
全くPythonicじゃない。こんなJavaに媚びるような仕様。
2010/07/08(木) 00:21:03
Guidoパパ曰く:
> This whole movement to condemn super because it's not "pure" strikes
> me as wasted energy. That's my last word.
267265
垢版 |
2010/07/08(木) 01:08:18
>>266
英語力不足で意味が掴みづらいんだけど、

super()への批判は聞き飽きた。もう知らん。by Guido

って感じ?なんかGuidoらしくないなあ。俺みたいに批判してる人は
なんで今までわざわざself書いてきたんだろう、って気持ちになるんだよ。

通常の関数定義には__class__は現れなくて、メソッド定義中では
それが現れるってええ?メソッドがただのclass内で定義された関数っていう
整合性のためにself書いてたんだよって。

もちろんそれ以外にもselfなければデコレータがこれ程強力に
使われることもなかっただろうし、他にも利点はあるから
selfは必要だけど、それでもselfが必要な重要な理由の一つ
が消えちゃったんだ。
2010/07/08(木) 01:47:54
メソッドの最初の引数にself付けるのも__class__が導入されたのも何が嫌なのか全く分からん
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況