【実験台】 Python 3.0 のお勉強 Part 1 【非互換】
■ このスレッドは過去ログ倉庫に格納されています
Python 3.0 は隔離スレを作るべきだと思うのは俺だけかな?
そもそもあれは実用で使うには時期が早すぎるわけで、ここで
普通に語られても困る。
--------
別に
--------
細分化する必要性が全く感じられない。
各自がレスの内容を収拾選択すればいいだけ。 やべ
起てられないと思って
弄んでたら
勃っちゃった //
/ / パカッ
//⌒)∩__∩
/.| .| ノ ヽ
/ | | ● ● |
/ | 彡 ( _●_) ミ まピョーん☆
/ | ヽ |∪| /_
// │ ヽノ \/
" ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ
つうかまじでpython厨うざい。
python厨は全員首吊って死ねよ。
ruby人口の方が多い。
rubyの方がいろいろできる。
言語的仕様は好みの問題。
議論の余地無し。
以上。 >>3 は別スレの >>979 に対して python ⇔ ruby 変換をしてコピペしたもの。
他人のレスを盗作するしかないぐらいに悔しくなった ruby 厨の仕業。
以前からpythonスレを荒しまくり、自分でrubyコミュニティーのアホさ加減を露呈している人間。
俺がrubyを使うのを止めて、python使いになるきっかけをになってくれた張本人でもある。
完全無視推奨。
以下、オリジナルのソース:
http://pc11.2ch.net/test/read.cgi/tech/1230821097/
| From: [979] デフォルトの名無しさん <sage>
| Date: 2009/02/17(火) 14:18:58
|
| つうかまじでruby厨うざい。
| ruby厨は全員首吊って死ねよ。
|
| python人口の方が多い。
| pythonの方がいろいろできる。
| 言語的仕様は好みの問題。
| 議論の余地無し。
| 以上。
|
| From: [985] デフォルトの名無しさん <sage>
| Date: 2009/02/17(火) 17:21:04
|
| 結局のところ>>979が穏便かつ正論だと言わざるを得ないな わざわざ改変レスで返すって事は
そのレスを読んで悔しかったって事なんだろうなw 流行るんじゃあない。
俺たちで、流行らすんだよぉ! PythonもRubyもPerlも
さくっと互換性なくすよな Pythonは2.5→2.6→3.0すればいいから他よりまし 2.6 → 3.0の変換と移行ってどのくらい大変?
いや、どこが変換できないとかはいちおう調べたんだけど
実際どうなのかなと まったくの別の言語になってしまった。
Pythonとは言えない言語に変わってしまった。 >>12
アクロバチックなコード書いてないなら、全部自動で変換される(できる)んじゃない? まず print "Hello" が使えなくなった。
print("Hello")と書かなければならない。
その関係でprint "Hello",len("Hello")の書き方もかわった。
print ("Hello",len("Hello"))と書かなければならない。
これはPython2系ではエラーになる書き方だったよね。
それからxrange()とrange()の統合。
旧range()がなくなってxrange()が新range()になった。
まぁそんな具合かな。あとよろ。 いや、3.0の話題は完全にこっちにかかなければならなくなった。
あちらは2.x系のみ、話題に出してよい。
過去依存に付いては両方のスレにレスを付ける必要がある。 3.0のdisutilsが2to3に対応してるので、
出来る限りブランチ作らないで済むような配慮はあるみたい。
勿論、それぞれのバージョンでのテストは必要になるけど。
3.0の紹介にあるような変更は自動変換で殆ど2to3で自動変換される。
でも、流石に全部とは言い切れない。細かいところは手作業による修正が必要。
特に面倒だと思った所は文字列周り(repr, encoding)かな。
大きな変更は不要なはずなので、テストさえしっかりと書いてれば(大前提)それほど大変な作業にはならない。
python2.6 -3警告オプションでも、2to3でも補足されない変更は python-porting(ML)にも幾つか挙がってる。
* file -> io.FileIO
* doctest内等での文字列の表現。 'foo' -> b'foo'
* os.path.walk
* etc...
後方互換を残し && 読みやすいコードを心掛けたいなら、多少工夫が必要なケースもあるけど、
リファクタリングする丁度良い機会にもなる。
# 3.0対応ライブラリ一覧 @pypi
ttp://pypi.python.org/pypi?:action=browse&c=533&show=all
他のプロジェクトでもtrackerやレポジトリのbranches覗いてみると、patchや3.0移植作業中のものが結構ある。
# djangoの3.0移植の過程のまとめ
ttp://wiki.python.org/moin/PortingDjangoTo3k >>15
式っていうなら昔からもこれからも式だろw
3.0で文から関数に変わったんだろ >>18
おお、こうしてまとめてみると移行プランがんばってるなー
なにより3k用ブランチを作らないようにするアプローチがありがたい >>4-5
ttp://www.atmarkit.co.jp/news/200902/13/wp.html
Pythonの方が多いと思ってたけど求人数ではPythonは15位にも入ってないんだな。
まあ国内の話だから世界的には分からないけど
求人上位から
Java
C
C++
PHP
C#
VisualBasic
Perl
JavaScript
COBOL
VisualBASIC.net
ruby
ActionScript
ASP.net
PL/SQL
VBA
すごいのみっけた
要求はすごいけどレベルは低そう・・・
ttps://www.netdepon.jp/b2c/app/j_search_d.action;jsessionid=3EA1DC5D9629508E19861A8BD0B85661?jobItemId=16062
雇用形態 1 .正社員
言 語 ■ C(必須) ■ Delphi(必須) ■ Javascript(必須) ■ JSP(必須)
■ pro*C(必須) ■ VB(必須) ■ XML(必須) ■ SQL(必須)
■ シェルスクリプト(必須) ■ PHP(必須) ■ COBOL(必須) ■ ASP(必須)
■ C#(必須) ■ PL/SQL(必須) ■ Java(必須) ■ C++(必須)
■ Perl(必須) ■ VC(必須) ■ VBA(必須)
ttp://www.oisys.co.jp Java C C++ PHP C# VisualBasic Perl JavaScript COBOL VisualBASIC.net ruby ActionScript ASP.net PL/SQL VBA python ranking
上記キーワードでググって検索結果を読み進めると、
Google エラー
申し訳ありません
... コンピュータ ウィルスやスパイウェア アプリケーションの自動リクエストと類似したクエリが送信されました。 ユーザーを保護するため、このリクエストをすぐに処理することはできません。
できるだけ早くアクセスを復旧しますので、しばらくしてからもう一度お試しください。
お使いのコンピュータやネットワークがウィルスの被害にあっていると思われる場合は、ウィルス チェッカーやスパイウェア削除ツールを実行して、システムからウィルスや不正ソフトウェアを駆除してください。
引き続きこのエラーが表示される場合は、Google の Cookie を削除してから、Google に再度アクセスすると問題が解決する場合があります。 ブラウザ固有の手順については、お使いのブラウザのオンライン サポート センターにお問い合わせください。
ネットワーク全体が影響を受けている場合は、Google ウェブ検索ヘルプ センターで詳細をご覧ください。
ご不便をおかけいたしますが、ご理解、ご対応のほどよろしくお願い申し上げます。 python厨だが、このスレはさすがにいらねーだろ。。。 Ruby厨が、Python3.0をいじくりまわして、重箱の隅をつつきまくるスレになりますので、
それまで少々お待ちください(^^)v >>21
なんでも出来ると何でもやらされるパターンですねわかります >>25
なんでも中途半端にやって身につかなさそうな感じするよね。 つttp://www.youtube.com/watch?v=y8SZnU5iG-4 いきなりだが
python
流行らすこと さんせーい^^ CとかJavaScriptとかのコメントで /* ... */ というのがありますが、
文の途中でも abc = /* def; */ ghi; みたいに書けますね。
abc = # def # ghi
だとおかしくなっちゃうんですけど
こういうときはどうコメントすれば良いのでしょうか / | | ● ● |
/ | 彡 ( _●_) ミ まピョーん☆ >>32
同感。笑えばよい。
この場合の文法解釈としては、だね。
「行儀が悪い」=「頭が悪い」ということ。
見てくれる相手に何をしようとしているのか理解してもらえないのなら、
キチンと、正しいと思われるプログラムが「完成するまで」やり遂げること。
このスレッドは天才チンパンジー「アイちゃん」が
言語訓練のために立てたものです。
アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。
京都大学霊長類研究所
PythonはRubyよりもリファレンスがきちんと
まとまっていて良いね。 >>52
ソースは日本語使えるしマニュアルも日本語があるだろ? ここはPython3.0のスレなので、日本語マニュアルは無いんじゃないのかな マニュアル一度も読んだことないんだけど、だめかな。
オライリーのほうが内容充実してない? 99 デフォルトの名無しさん [sage] Date:2009/10/09(金) 02:19:29 ID: Be:
>>93
翻訳用のファイルを作ってコミットしておいた。
http://code.google.com/p/diveintopython3-ja/
暇人の方は↓のグループに参加申請してくれれば、↑のメンバーに追加します。
http://groups.google.co.jp/group/diveintopython3-trans-ja
100 デフォルトの名無しさん [] Date:2009/10/09(金) 12:11:29 ID: Be:
思ったほど大した量じゃないね
これはいけるかも
101 デフォルトの名無しさん [sage] Date:2009/10/09(金) 12:24:03 ID: Be:
>>99-100
ここに移動した方がいい
【実験台】 Python 3.0 のお勉強 Part 1 【非互換】
http://pc12.2ch.net/test/read.cgi/tech/1235050215/ >>57
> 暇人の方は↓のグループに参加申請してくれれば、↑のメンバーに追加します。
> http://groups.google.co.jp/group/diveintopython3-trans-ja
暇人の方が世界中で一人しかいない件。 処理中にStringの文字コードを気にしなくていいってのは大きなアドバンテージだと思うけどな
いろいろ変わりすぎなのは残念だけど Linuxのシステムで使われてるPythonはあと何年したら入れ替わるかなー @ 2系列 → 3系列
A Python → 他言語
iconv を落としてきて入れようとした git clone ~ とか
やりはじめて何がどうしちまった、とそんな感覚を味わ(ry $ automake --version
automake (GNU automake) 1.10.2
1.11 じゃないと…ぐぬぬ http://www.jmuk.org/diary/index.php/2009/10/07/kindle-in-japan/
*stolen risk
*color display
*low price paperbook
i think that it's sold well in japan... >>68
Python To exe > Python 2 exe > py2exe
だからたぶんそのまま >>57
下のリンクが切れてるんだが、参加するにはどうしたらいいの? にっちゃんねるでまーけってぃんぐをしようとして失敗した数限りない例のうちの一つ。 >>74
どのように進んでるかが良く分からんので、おまけのPorting Code to Python 3 with 2to3から手をつけます。 Fedora 13で2, 3並列インストールになるようだ。EL6でテクニカルプレビューとして入るかもね。 cgi.FieldStorage のコンストラクタの引数の fp って使えてる?
BaseHTTPRequestHandler で受け取った post のデータを渡したら byte に str の操作しようとしたって言われて落ちちゃうわ
こんな場合どうしたらいいのよ multipart/form-data も application/x-www-form-urlencoded もどっちも同じ理由で使えないっぽい print "Hello world!"
が動かなかったので止めました。以上 やめて正解。
本当におめでとう。
おめでとうおめでとう。 >>81
止めてよかった。
本当にありがとう。
ありがとうありがとう。 >>60
数年後
more-on-ubuntu@laptop:~$ python\t
python python2 python2.6 python3
デフォルトが3系列になったらどうしよう.....(´・ω・`) ubuntuだとやりかねないから困る。
でもまぁ普段から、OSはOS、アプリはアプリだと思って
OSが使ってるものは別にインストールしてるから大丈夫だけど。
SymPyが使えないよ〜。
2to3つかってもなんか動かんし。 printはprint文じゃなくて、関数になってるっていうマジレスしてみる 言語としての正しさを追求しても使いやすくなるとは限らんのにな。 print文で出力ストリームを切り替えたり、末尾文字を入れないようにしたりするのに独特の文法が
必要だったり、区切り文字を指定できなかった。
関数になって、普通の関数の文法で全部できるようになった。
良い事づくめじゃないか。 従来風の print みたいな機能は ipython レベルで
入れてくれれば十分って感じかなぁ
まあ別に print() でいいけどさ 関数が必要なケースでは sys.stdout.write() で良かったんじゃね? writeとprintは違うから・・・
a = 3
sys.stdout.write(a) ってできない。 でも今までも sys.stdout.write() って書いてたなー python3でcgi作るのは文字コード関連で苦労しそうな気がした 「Python 3 プログラミング徹底入門」発売されてるよー
まだ初めてのPython第3版読んでねーから、オレはパスだけど Python本にありがちなしょぼい内容なんだろうな http://www.mobypicture.com/user/ats/view/5751167 — あまり悪いことはいいたくないんだけど、ピクルスはないわ...orz...。ドキュメント翻訳ちゃんと見てくれ。。。
みんなの力をオラに貸してくれ!
Python3.0に乗り換えたら、Tkinterパッケージの位置が変わったみたいで、
GUIの部分が作れねぇ!
調べても、出てくるのは2.x系統のサンプルコードばかり。
だれか、Python3.0で、ボタンを押してイベントが発生するTkinterのコード
を、ここに書いていただけませんか!? import tkinter as Tkinter >>108
import tkinter as Tkinter
from Tkinter import *
で、
File "C:\Users\ootuka\Desktop\search\tktest.py", line 2, in <module>
from Tkinter import *
ImportError: No module named Tkinter
でした。困ります(´・ω・`) >>109
1行目はTkinterとしてtkinterをimportしろという意味だ。
from使うならtkinterからimportしろ。
ドキュメントくらい読め。
http://docs.python.org/dev/3.0/library/tkinter.html 3.0への移行は、新しもの好き以外は時期尚早とみていいのか?
そろそろ移行時期か? いまPython始めるべき?
やるとするとPython3になるけど。 3しか念頭にないならやめといた方がいい。
いまPythonをはじめるなら2.6にすべき。 別にただプログラムのお勉強がしたいなら3でもいいんじゃね プログラムの勉強ったってPythonの勉強を兼ねるんだろからな。
Pythonの勉強となるとサイトのサンプルプログラムとか
既存ライブラリ使ってみようとかあれこれやりたくなるでしょ。
そしてつまづいて「Pythonむずかしー」あるいは「Python糞だな」
ってなるでしょ。2.6ならそうならないでしょ。そういうことだよ。 >>122
程度問題の話をしてるんだから
そういうコメントは野暮というもの >2.6ならそうならないでしょ。
どこが程度の話だよw 3だけなのか知らないけど、Windowsでリダイレクトからの標準入力が欲しくて、
for line in sys.stdin:
pass
と書いたのだけれど、普通に実行したときは問題ないのに、
hoge.rb < file.txt
と実行したら、sys.stdinがNoneになってるんだよね。
標準入力を読み込むにはどうしたらいいの? >>130
rbかよ!
python hoge.py < file.txt
ってしてみ? >>131
> rbかよ!
すまない。ついうっかり癖で、、、
ちゃんと標準入力読めました。ありがとう。 なんで
hoge.py < file.txt
で読めないのかな
バグ? >>133
Windowsの有名なバグ。
なんか当てたら直ったと思う。
Vista以降だとなんも当てなくても直ってたかもしれない。 Python3kの教えやすさは異常。
DjangoもGAEもいつかは3kがメインになるのかなぁ >>136
そうだよね。Python2のUnicodeはエッジケースが多すぎて、初心者じゃなくても
切り傷だらけになる。初心者なら脱落してもおかしくない。
print u"あいうえお" はできるのに raw_input(u"あいうえお") ができないとか、
os.listdir(u'.') しても filesystemencoding でデコードできないファイル名は
バイト列としてリストに入るとか。 # Python 2.6.4
>>> os.listdir('.')
['a', '\xff']
>>> os.listdir(u'.')
[u'a', '\xff']
# Python3.1.1
>>> os.listdir('.')
['a', '\udcff']
>>> os.listdir(b'.')
[b'a', b'\xff']
U+DCxx に置換されるんだね(PEP383) Python3.xで俺が期待したこと
ライブラリの命名規則を統一してほしかった...orz
classmethod, assertEqual, set_autholizer
orzorzorz Rubyがここら辺が完璧なだけに痛い。
2.x -> 3.xのタイミングでしかできないような変更だからまじで悲しい。
欧米人はあんまり気にしないのだろうか? 非標準なライブラリ使えばすぐに汚染される程度だからな
だんだん慣れて来たしもうどうにでもなーれ 過疎ってるな。
>>144
これから書くなら、できるだけ区切らないorアンダースコア使えってPEPに書いてあった。
Javaとかから持ってきたライブラリだとhasKeyみたいに、大文字区切りになってる。 命名規則を標準でがっちり決めてくれれば、それをエディタの機能強化に回せるんだろうけどな。
標準から外れるとエディタ支援を受けれなくなるから、みんな同じような書き方になって見やすくなるはず。 まだ2.7も出てないし
少なくともまだ1年はかかると思う 2.5,2.6とか出さないほうが良かったのかな。
地デジと同じでズルズル先延ばしで、移行期間があっても移行しない。 2.4 は糞だから 2.5 出したのは正解だと思う
2.6 は微妙 3.xの日本語リファレンスが欲しいのに入門書ばっかだ >>155
これで分からなかったら、何見ても分からん。 Rubyでいうところのredoが欲しんだけどないかな。
while True: のループで代用しないとだめですかね。 任意の数より大きい数を表す定数みたいなのない?
なにかの最小値を求めるときに下のような処理はよくあるとおもうんだけどminvの初期値に設定したいんだ。
minv = すごくでかい数
for x in seq:
v = func(x)
if v < minv:
minv = v
min(func(x) for x in seq) で常にかければいいんだけど、書けないこともよくあるので。 >>160
3では削除されたし、2でも多倍長整数の最大値はないよ。
大抵の場合はそれで十分だと思うし、なくても
HUGE_VAL = 2**31
とでもしとけば、大抵の用途では十分だと思うけど。
>>159
型が重要でないなら、
float('inf')
で、不動点小数型の無限大が得られる。
float('inf') > 2**10000000
---> True
整数型であることが重要なら、クラス継承して比較演算子を書き換えるか。 >>164
Python2の標準ライブラリー相当品は3でもOKなんだよね?
その他の3rdPartyライブラリーは殆ど使わないんだ >>165
基本的にはそうだけど、いくつかは廃止・統合されてるから標準については公式行って確認するといいよ。
サードパーティーの使わないなら、対応状況はかなりいいはず。 >>159
minv = func(seq[0]) >>167
それ、seqがコピーしづらいイテレータだったとき面倒にならない? for i, x in enumerate(seq):
v = func(x)
if i == 0:
minv = v
elif v < minv:
minv = v なんか違和感あるなw
こっちのが分かりやすいか
for i, x in enumerate(seq):
v = func(x)
if i == 0 or v < minv:
minv = v
python3でグラフ書くのに何使ってる?
やっぱりgnuか? 3.xのライブラリが2.x並になるのって、あと何年かかるんだろうか 最近python関係の書籍が色々と出てるね。
python2.6.2って・・・。 >>171
のプログラムみたら、
やりたいことは値の設定なのであって、複文を実行することじゃないから、
minv = func(x) if i == 0 or func(x) < minv else minv
って書きたいけど、中でfunc(x)が2回出てるから、func(x)がすっごい重い処理だと
性能悪いなー
って思うのは正しい?
func(x)の値は内部的に保持され、2度実行されないよう最適化してくれるのかな? そんな最適化してくれるコンパイラはCでもないと思うぞ どうもスクリプト言語は互換性を一度ぶった切りたくなるものみたいだなぁ
Rubyは一見その点では有利そうなんだが、実際にはバージョン間の互換性がさっぱりで、
単に同じこと(過去の微妙な仕様の切り捨て)を小分けに毎回やってるようなもんだから
ある意味余計に悪いし
まぁでも、俺は当分3kは使わないけど、いずれ移行するような気はするけどな CやC++も最初のころは仕様がコロコロ変わっていたような覚えがあるのだが >>182
やぱCでもgcc:O2でもfuncの中身までは解析しなかった
変数の出現が関数外ではありえない、みたいな
extern宣言が出来ると、イケチャウ雰囲気あるんだけどな〜
動的スコープだとほんと無理なのかな
誰か天才いないかーーーー >>181
else のときは
minv = minv
になるから
アホなコードだなぁ
と思う >>181
こういうコードはダメ。Ruby厨に惑わされるな。 >>159の
> min(func(x) for x in seq) で常にかければいいんだけど、
> 書けないこともよくあるので。
これってどんなとき? >>159
reduce使え
min(seq)は
reduce(min, seq)と同じ
その手のやつは大概適当なfを用意してやれば
reduce(f, seq)
に書き換えられる ストリームデータから最小値を見つけるとか。
ファイルシステムを捜査しながら最大サイズのファイルを見つけるとか。
かな >>193
それminで何でだめなんだ?
min()はiterable受け取れるけど >>189 >>190
俺も同意だと思ったけど、内部的にはmin関数もまったく同じなんだよね。
趣味の問題かな? 初心者のお試しレベルなら問題ない
パフォーマンス考えたら避けるべき 関数型言語ならletする場面だから、
Pythonでは潔く2行にするのが良いんじゃないの >>140
パイソンってこういうコーディングルール統一されてると勝手に思ってたけど、汚いんだな
統一されてないのは書いてて気になるし、推測でメソッド名書けなくなるから、やっぱりそういうところちゃんとしてるルビーのほうが良さそうか
理路整然としてるイメージを勝手に持ってたけど、rubyのほうがそゆとこしっかりしてんのかな >>200
classmethod みたいな、1つの単語と呼べるものは、アンダースコアで区切らない。
set_autholizer みたいな、複数の語でなる句は、アンダースコアで区切る。
JUnit みたいに、別のリファレンスに従う設計になっているライブラリは、そのリファレンスの命名に従う。
理路整然としてるけど? なんかpython3始めたいのにまともな書籍が売ってない。
いつになったら普及するのよ。 java-jaの人が執筆したJython本で我慢しろよ >>205
本スレにカエレ
>>204
もうちょっとかかりそうだな。
このスレでも何度か出てきてるDive into Python3は、英語版なら書籍でも出てる。
書籍の形で欲しいのなら適さないけど、内容的に書籍レベルのものが欲しいのならWebの日本語訳がいいと思う。
ttp://diveintopython3-ja.rdy.jp/index.html >>202
> 理路整然としてるけど?
で、結果としてばらばらのネーミングルールになってると。
馬鹿か。 まあ、馬鹿は言い過ぎと思うが、>>202 の理由が正しいとしても結果として
統一されてないのは事実だし、おれも >>200 のようにいまいち汚いと思う。 ttp://docs.python.org/py3k/library/itertools.html
レシピのpowerset できたと思ったらまともなのが出てた。
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])]) 今年出たpaython本が2.6対応なのにはワラタ。 >>216
Python3の本もたくさん出はじめてるよ。
どの本がPython3用になって欲しかった? ぶっちゃけ入門レベルで、2.6も3.0もたいした違いはないし、
もっと他に気を掛けることがあるだろうに。 なにごとも初心者は、自分の進め方が正しいかどうかで迷ってしまうからねぇ。 そういえば、Pythonスタートブックっていう書籍が出たけど、
あの手の書籍は最新python3で出して欲しかったな。
初心者向けみたいだし、プログラミング入門者でも分かりやすい内容だったから。
仕事で使うのではなく、ただなんとなくPython始めたいような人は
最新環境で学ぶべきだと思うよ。
俺らが3の仕様変更を知らされたときに受けた失望感を
初心者にまで与えるのはあまりにも酷だろ。
それでも2.Xが優勢だということは、
おそらく3は当分普及しないってことだろうね。
たぶん日本ではGoogleのGo言語のほうがpython3よりも先に普及すると思う。
どうしてこうなった。
>どうしてこうなった
encode/decodeのせい
python3に期待 >>220
日本でGoが普及するか?まだC#の方がありうると思うぜ。
それ以前にGoとPythonの守備範囲も若干違う気がするし… あるうるも何も、C#はとっくに普及しとるがな
特に国内ではPerlやPHPならともかく、Pythonとは比較にもならんだろ >>223
そんなに普及してんの? Pythonと似たり寄ったりだと思ってた。
LLスレにでも移動して語ってくれ。 ttp://www.atmarkit.co.jp/news/200902/13/wp.html
ワークポートとかいう会社の調べ
C#の求人件数は5位
ちなみにPythonは圏外ね 日本の不幸はRubyっつーガラパゴス言語が作者が日本人だってだけで国内で(ry つーか国内で別にそんなにRuby使われてないだろ
Pythonがそれ以上に使われてないだけで コアの開発に関する議論が日本語で行われていて世界からはブラックボックスに見えるという
時点で、ある程度のガラパゴス性をもってるよね>Ruby >>230
そうなん?スマン。
MLでオープンな議論もするけれど、重要なことはMatzを中心とする一部の日本人が
エイヤで決めるってどっかのインタビューで答えてたと思ったから。 pythonから発展した話題だし、少しくらいいいんじゃね?
ところで、お前らpythonなにに使ってる? >>233
電卓代わり、CGI、C/C++で書くほどじゃないプログラム全般。
まともに使い方知ってる言語がC/C++とPythonしかないから、ある意味で楽。 >>233
領土問題と同じで、少しくらいと譲歩してたら乗っ取られる。 pythonだと作るのが非常に楽なので、python常用して
python2だと日本語が扱いづらいので、python3導入して
研究で最適化アルゴリズムとか強化学習のプログラム作ったけど
先輩のc言語で書かれた同じ最適化アルゴリズムで作った巡回セールスマン問題と
実行速度比較したら、10倍以上差があるんだが・・・先輩のが数分で、自分のが数時間
読みやすさ重視でプログラム書いたからループ内で不要な処理とかかなりしてる気もする
python3のコンパイラないかな
python3にしか対応してない素晴らしいモジュールを作れば移行が早くなるかも!! >>238
あったとしても、多少マシになるくらいでCにはとてもかなわないと思うよ。
psycoって3.x対応してないよなぁ。 10倍ですむならマシだな
ものによっては100倍ぐらい差がつく >>240
多少でもマシにしたいほど時間がかかる・・・
たしか対応してない Python2 にもどして、 PyPy 使うと良いよ。
今日 PyPy-1.3 がリリースされたし。 ctypesいじくり中。
pointerとbyrefってどう使い分けるんだ?
あとlistをそのまま配列としてcに渡したり出来ないのね。
内包表記でばーんと渡したりって訳にはいかないね。 とりあえず全部PythonでつくってProfilerかけて時間のかかる処理だけSWIG+Cで書いてるけど
このオーソドックスな方法は素晴らしいっすよ Cythonも素晴らしいよ。
ちゃんとPython3にも対応してるし。 #! /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だとリスト内包表現って遅いの? こうしないと同じ条件にならないんじゃ?
def sample_comprehension(n):
L = []
return [L.append(i) for i in range(n)] CPythonって、リストの実装って配列だっけ?双方向リストだっけ?
>>250
sample_comprehensionとsample_loopの順番を入れ替えてみても結果変わらない?
32bit環境だと50000000要素だと、配列なら約200MB、双方向リストなら約600MBのメモリ確保が必要になって、
それに時間がかかったんじゃないかなぁ。
一旦確保したら、ひとつめのsample_comprehensionで作ったリストはGCの対象になるから、新たにメモリ確保の必要がない。
だから2つめのsample_loopは早かった、と予想してみる。 >>252
適当なサイトのソースをコピペして実行しただけだから深く考えてなかった
それでやってみる
>>253
順番入れ替えても変わらなかった >>251
そうそうこのページのソースをコピペして実行した
人が居たから、かなり適当に書いた
だからtimeじゃなくdatetime使ってたり #! /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 >>252
正直その糞コードで何をしたいのか全然わかんねえ
list.append()はNoneを返すから
それって結果は
[ None ] * n
になるよな #! /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 秒 >>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;
} >>252
L.append自体をすることが目的ならそうだけど、
L.appendの副作用でリスト作るか内包表記でループ作るかどっちが速いかを調べたいなら元々のであってる Cyhonの使い方を勉強しよう
まだほとんど調べてないが、使い方がよくわからない
てかトイレ行きたくて集中出来ない 結局ある程度調べたつもりだが
cython全然わからんとです
超初心者スレで教えてもくれるかな 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に媚びるような仕様。 Guidoパパ曰く:
> This whole movement to condemn super because it's not "pure" strikes
> me as wasted energy. That's my last word. >>266
英語力不足で意味が掴みづらいんだけど、
super()への批判は聞き飽きた。もう知らん。by Guido
って感じ?なんかGuidoらしくないなあ。俺みたいに批判してる人は
なんで今までわざわざself書いてきたんだろう、って気持ちになるんだよ。
通常の関数定義には__class__は現れなくて、メソッド定義中では
それが現れるってええ?メソッドがただのclass内で定義された関数っていう
整合性のためにself書いてたんだよって。
もちろんそれ以外にもselfなければデコレータがこれ程強力に
使われることもなかっただろうし、他にも利点はあるから
selfは必要だけど、それでもselfが必要な重要な理由の一つ
が消えちゃったんだ。 メソッドの最初の引数にself付けるのも__class__が導入されたのも何が嫌なのか全く分からん Ruby そんなに嫌なら自分で新しい言語作れば良いのに
Python 我慢して使えよ
PHP 祈りなさい
Perl シラネ >>268
うーん。selfがキモくないと思うなら(俺はキモくないと思う)、
__class__はキモいと思えるはず。
__class__導入によって、selfが2.xに比べてキモくなったって話。
たぶんキモいのは多くのPythonistaが認めてる。さっきのサイトの書き込みとか見てると。
でも、それでもDRYなコードを書けるようにしたかったんだと思う。
あと、__class__って属性の方の__class__じゃないよ。ローカル変数の__class__ね。
属性の方は別にキモくないよ。 一応コードで説明する
def foo(self):
pass
class Foo:
def foo(self):
pass
このとき、fooとFoo.fooが全く同じだったのが今までのPython。
Foo.fooはFoo名前空間の中にある「関数」に過ぎない。
Fooがインスタンス化されて、次みたいに呼び出される瞬間だけメソッドになるのが、
Pythonの実装方法
x = Foo()
x.foo # これはメソッドになる。(xが第一引数になる)
でも、Python3では、fooのローカルには存在しない変数__class__がFoo.fooの中に勝ってに
入ってる。
まあ、それだけの話だから、Pythonのオブジェクトシステムに興味ない人にとってはどうでも
いいかもね。俺はキモくてしかたないわ。 >>270-271
ありがとう。意味が分かった。
確かにこれはキモい。
けど、キモくしてまで__class__を入れる理由ってあるの? 無引数super()の実装に__class__が必要。
Pythonには自分を呼び出した元の関数のローカル変数を参照する機能が、
CレベルでもPythonレベルでもある。
__class__があれば、super()内から、クラスとselfが参照できるから、
そのクラスの__bases__からスーパークラスを参照してそれとselfを結びつけられる。
無引数super()が必要な理由は、DRYのためだけだと思う。確かにLLなのにDRYの点で
Javaなんかに負けるのは許されないことだったのかもしれない。
言語仕様を汚すぐらいならキーワードにしちまえみたいな意見もあったみたいだけど、
多重継承のあるPythonでは引数有りsuper()もサポートしたいし互換性あるし
みないなところで、こうなった。
俺はこのsuper()は関数に見せかけたキーワードだと思うことにした。
そうすれば、x=superとかしたときにx()が動作しないのにまだ納得がいく。
さて、再びROMるか。 >>273
なるほど。重ね重ねありがと。
self.super()だったらそんなにきもくないのに(・ω・`) 早くコンパイラ作って下さいお願いします
自分の作ったプログラムが終わるのに、後1年かかるとか待ってられない それはプロファイル取ってチューニングして、という常道はすでにおこなっての話? >>277
常時してるよ
かと言っても、シミュレーション行わないといけないから
ある程度早くなった段階で、実行して、実行中に改善して、
次、実行するときに少し早くなったのつかって、ってのを繰り返してる
>>278
Cythonは使ってる
下のやつは初耳調べてみます
プログラムをオブジェクト指向みたいに書いちゃったおかけで、その部分をCythonに直すのがよくわからない
あと、Cythonの関数?を呼び出す回数が多いから、まだ時間がかかる
全体的に関数使いすぎだけど、拡張性を高くしときたいからこれをinline化するのも何かあれな気もする
速度を早くすることに時間を費やしてばかりいられないのと、
自分が低脳なせいで改良の余地はまだまだあるのに、大して出来てない・・・って状況です Cythonなら、Pythonのコードの8割がそのまま動く(ジェネレータとかは動かない)し、
defをcdefに書き換えるとPythonの関数オブジェクトを作らず直接C言語の関数になる
から関数呼び出しも高速になる。 >>280
cdefはpyxの中でしか呼べないから、
pyからpyxのdefを呼んで、pyx内で、cdefを呼んでる
うまく説明出来てないけど、今こうなってる。
全部pyxにしちゃえばいいんだけど、そうできないのがいくつかある 結構色々とあるんですね
まあ、しばらくはCythonしか手を出せないんですが…
Cythonのオブジェクトが良くわからん
cdef class abc:
def aaa(self,val):
aaa_f(self,val)
cdef aaa_f(self,val):
self.A = 0
self.B = []
self.C = val
aaa_f がありませんだってお >>284
CythonじゃなくてPythonでもそれはエラーになるだろ… >>285
Pythonだとこんな感じ
#abc.py
class abc:
def aaa(self,val):
self.A = 0
self.B = []
self.B = val
特に実行エラーとかもなく普通動いてる
#main.py
neko=abc.abc()
neko.aaa(val)
こんな感じかな >>290
よくわからないです…
#main.py
neko=abc.abc()
neko.aaa(val)
で、
#abc.pyx
のaaaを呼び出して
abc.pyxで、aaa_fを呼び出してる
cdef class abc:
cdef:
object A
とかも必要なのか… class Foo1:
def aaa(self):
self.bbb(0)
def bbb(self,val):
self.x = val
class Foo2:
def aaa(self):
bbb(0)
def bbb(self,val):
self.x = val
class Foo3:
def aaa(self):
Foo3.bbb(self,0)
def bbb(self,val):
self.x = val
どれなら動くと思う? ここまで互換性が無いのに、仕様変更するのってが良い
規制で雁字搦めになって身動きが取れなくなってたりしなくて
これからも、互換性気にせず、ドンドン変更して欲しい
その上で、変換するものがあってくれれば Python3のタイミングで変数の型指定(静的型付け)を導入してくれれば明るい未来が開けたのに・・・ >>299
潔癖(だと思い込んでる)Javaプログラマを取り込みやすくなる、とかw
ないな。JavaプログラマはJavaしか書こうとしないし、それしかできないw >>299
インテリセンスが賢くなる。
>>300
Javaプログラマにコンプレックスがあるの? >>301
コンプレックスというより、バカで使えない、というトラウマがあってw このスレ見てるとPythonももう終わったなって感じだな どうでもいいニュース:
今日、Arch Linuxの/usr/bin/pythonがpython3になった。 Arch使ってるような変態じゃなくて玄人連中は別に困りそうも無いから問題無い どうせ2もpython2とかいう名前で入れられるんだろ? Python3の旅はこれからだ!
グイド先生の次回作、Python4にご期待ください。 Djangoが使えるようになったら移行する > 3 Python素人だけれども、
ユニコード文字列とかのややこしさがなくていいなと思って3.1をインストールしたんだが、
間に合ううちに2.7に切り替えるべきか? それともどうせ通る道と受け入れるべきか? >>314
3rdパーティのライブラリが使いたくなったらPython2.xへ。 必要になったら3.xをいれればいいさ
5年後ぐらいにはそうなるよきっと Google App Engine(とWSGI準拠のアプリケーション)が
3に対応したら必要性で周りのライブラリも加速するんじゃねぇかなーと思う 嘘つくな。
UnicodeDecodeErrorは相変わらず出るぞ。 ということはつまり2から3に引っ越すメリットってなに? 将来にわたって比較的安心につかえる。
現時点でのメリットはそれしかない。 >>326
クククッ, ハタシテ ソウカナ となりそうで怖い 初心者ならいいけど、
ある程度の経験者でUnicodeDecodeErrorと格闘してるような奴は、
基礎を固めずに、行き当たりばったりでプログラムを書いてるんでしょ。 いちいち u'' を書かなくて良くなったんだってね
2.x の unicode = 3.x の string
2.x の string = 3.x の bytearray
っていう認識で桶? >>329
そういう基礎や定石的な対処法って何に書いてあるものなんだ?
Python3.1使ったWEBを作ってるんですが
次のようなエラーが出て困ってます。
UnicodeEncodeError: 'ascii' codec can't encode characters in position 178-180:
インタープリターで実行すると出ないエラーです。
ブラウザから実行したときに出るエラーです。
処理としてはDBアクセスして検索SQL実行して結果セットをループで回してXML形式の文字列としてクライアント側に返すといった内容です。
原因がわかれば教えてください。
>>335
文字コードは、省略してもいいって絶対の自信がない場合は面倒くさくても指定しろ。 >>335
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
のように、sys.stdoutを置き換えると良いよ(utf-8の部分は適宜置き換えて) >>335
基本的に、文字列を出力するときはエンコードしなきゃいけない。
にもかかわらず、コンソールで実行するときに問題が表面化しないのは、
Pythonが端末のエンコーディング(例えば'UTF-8')を sys.stdout.encoding に自動で設定してくれているおかげ。
これによって、print "うんこ" は、sys.stdout.write("うんこ".encoding("utf-8"))として実行される。
しかし、CGIで実行する場合はそんな支援はしれくれず、sys.stdout.encoding はNoneになっている)ので、
print "うんこ" は、sys.stdout.write("うんこ".encoding("ascii"))として実行
されてしまい、エラーとなる。 まちがえ。encodingじゃなくてencodeね。 encoding('UTF-8')を付加してみたんですが、今度は違ったエラーが出てきました。
修正前)testclass.filehandler.write(return_str + "\n")
修正後)testclass.filehandler.write(return_str.encode('UTF-8') + "\n")
コンソールで実行したら
次のエラーが出ました。
<class 'TypeError'>, TypeError("can't concat bytes to str",)
型変換処理が必要という内容だと思うんですが
bytes型→str型には、どうやって変換するのでしょうか? >>342
そういう変な(中途半端な)場所じゃなくて、I/Oの直前直後に
変換かけるようにしなよ 文字コードについて知らない・知ろうとしない人は
Python3になっても苦労するだろうね >>342
文字列("\n")とバイト列(return_str.encode('UTF-8'))を結合しようとしてるからそうなるだけ。
最初に結合させてから変換すればいい:
return_str = return_str+"\n"
testclass.filehandler.write(return_str.encode('UTF-8')) dive intoはいろいろ問題があるから非推奨だって話を読んだことがあるけど。 英語の文献まで手を広げれば色々あるから
自分に合ったやつを選べばいいんじゃない? 主要モジコードのISOの番号を全部暗記していた時代が僕にもありました。 Windowsでウインドウ列挙して指定のウインドウをキャプチャして
その画像をメールで送りたいんだけど、
・ウインドウの列挙
・画像のキャプチャ
はどうすればいいですか?
ライブラリ有りますか? Python3.1でPOSTデータの取得の仕方で質問です。
下記のコードで値が取れないのですが、問題があれば指摘ください。
import sys
import cgi
def application(environ, start_response):
form = cgi.FieldStorage()
user_name = form.getvalue('txt_username', 'Unknown')
(略)
この「txt_username」の入力値が拾えません。 >>358
mod_python環境だったりしない? >def application(environ, start_response):
numpy-1.5.1rc1.win32-py3.1-mkl.exe たまたま見てたら今日出たのか 3.xのリファレンスは翻訳してないのかえ?
別に要らないけど。 流行る気配すら無いんだが大丈夫なんかな
10年くらいで移行できたらいいなみたいな感じらしいけど Python2.10が出るに1ジンバブエドル賭ける py2exeとwxPythonが3系に対応してくれれば乗り換えるんだが。 Py2exeって対応する予定ないのかな
もう自分でやるか Python3に、Python2互換モードを導入すればよろし。
from __ancient__ import print wxPythonが3系に移行しないのは、何か技術的に難しかったりするの?
それとも政治的な理由(ようは作者が3系の流れに反抗しているとか)?
同じC++で作られているQtのほうが意外と早く対応したんで
この温度差にちょっと違和感を感じている。
単に「時間がないマンドクセ」ならまだいいんだけどさ。 3.2がでるまでは様子見じゃない?
言うなればそれまでは3β版みたいなもんだし 3.2ってそんな感じのリリースなん?
いや、単なるエンジンのバージョンアップ待ちなら
気長に待つんだけどさ。
Qtもそうだったんだけどコミュニティが分裂したりするんじゃ
嫌だなあなんて思ったんで、ちょっと聴いてみた
(あっちはGPL脱却が目的みたいだけど)
気に入らなけりゃフォークしちまえってハッカー文化も嫌いじゃないけど
俺はたんに使うだけの利用者なんで、あんまり分裂されてもうれしくないのだw >>380
3.2はそんな感じのリリースだし、Pythonの開発者は分裂していない。
3.2がリリースされてから有名プロダクトの3系対応が一気に進むはず。 >>381
そっか。トンクス。
いま公式見たら3.2βでたのが2010年の12月で2011年2月がファイナルリリースか。
それで本当に移行が進むんだったらうれしいな。
慣れてきたら、なんだかんだで3系のほうが使いやすいし。 log = open('log.txt', 'a')
print >> log, x, y, z
print a, b, c
python3でこれはどう書けばいいのでしょうか? import logging
logging.basicConfig(filename='log.txt', level=logging.DEBUG)
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
ch.setFormatter(logging.Formatter('%(message)s'))
logger = logging.getLogger('root')
logger.addHandler(ch)
logger.debug('%s, %s, %s' % (x, y, z))
print(a, b, c)
>>383
log = open('log.txt', 'a')
print(x, y, z, file=log)
print(a, b, c) >>392
もうあまり覚えてないが、今出てる3.2rc2 と 3.13?で同じ簡単なコードを書いて実行速度計っただけ
リストへの代入かなんかだったような…
複数回実行して比較したり、n回試行の平均出したりしたら、9割の確率で3.2rc2のが遅かったってだけ
正式なベンチマーク使ったり、色々な処理で比較したりはしてない
3.2finalや、その次のバージョンとかで早くなる事に期待 206 デフォルトの名無しさん [sage] 2011/02/23(水) 00:30:05.97 ID: Be:
かってに、google に甘い期待をしているんだけど、
ttp://sourceforge.jp/magazine/11/02/22/104206
これとかを見ると、google 的には、
C++ は Web アプリみたいにして、
Android に持っていくつもりなのかな。
プログラマのヘマでセキュリティーホール作られるよりは、
制限あっても、sandbox 内で…って感じで。
Javaが選ばれた理由も、そんなんじゃなかったっけ? C++は好きだけど、あのビルド時間には耐えられないものがある pythonの内包表記をHaskellみたいにしてくれないかなぁ
三項演算子といい、ところどころ書き方がきもいんだよな。 > Haskell について一言いわせてもらう。
> こんな記号列が出てくる言語をオレはまともなプログラミング言語だとは思わない
>
> f _ _ (_:_) [] = []
>
> C++ や Perl や BrainFcukと同レベル。 以上。
ってGuidoが言ってた。 >>398
_が何でもいいって意味だってことはHaskellの序盤で習うことなので
それは読もうと思えば簡単に読める。書いた人が後から見て意味が分からないということもない。
しかもその文だけで関数fが定義されるわけじゃなく、下に具体的な記述が続く。
まあhaskellが読みやすいとは俺も思えんけど。記号列とかじゃなく、高階関数の多用で読みづらくなってる。
whatが分かるようにはなってるかもしれんけど、その関数に慣れてない人が見るとhowが分からない。 reduce()が死んでmap()filter()が生きるってマジなん? Python 3.2 (r32:88445, Feb 21 2011, 19:50:46)
[GCC 4.3.4 20090804 (release) 1] on cygwin
Type "help", "copyright", "credits" or "license" for more information.
>>> reduce
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'reduce' is not defined
>>> import functools
>>> functools.reduce
<built-in function reduce> Python3.2遅すぎww
計算量の多いシミュレーションを実行したら
Python 3.1.3 587.127000093s
Python 3.2 901.7620000839233s
両方ともCython-0.14.1を利用
1.5倍も遅い
全く同じプログラムで乱数のシードも同じにしてるのにシミュレーション結果異なるし
多分、Cythonの型変換とかで切り捨てられる精度が変わったんだろうが >>402
そうだけど、cygwin 使っている時点で遅いわな。 もうPython3.3が出るのかと思ったら、来年か python3に対応してるGUIフレームワークおしえてください >>413
bin(ord('a'))
こうゆうこと? >>414
ありがとう
これを文字列に対して使いたいんだけど、一気に出来ない?
やっぱりforで1個ずつやるしかないかな? ''.join([bin(ord(c)) for c in "abc"])
結局for文使うか "".join( [bin(x)[2:] for x in map(ord, "abc")] ) Python3でGnuplot.pyって使えんの? matplotlib って 3.0 に対応したの?
2chでpython始めるなら2.xと3.xのどっちがいい?って聞いて3.xを勧められてもう二年近くなるが、
サードパーティのライブラリはいつ充実するの? matplotlibみたいな大物に目をつぶればそれなりに これから始めるのに2.xはない
特定の事にのみ使うとかで、3.xでは対応してないとかならわかるけど
Pythonを勉強するとかの理由なら3.xやるべきだわ
>>423
ttp://www.lfd.ucl.edu/~gohlke/pythonlibs/ www.lfd.ucl.edu という名前のサーバが見つかりませんでした。
http://www.lfd.uci.edu/~gohlke/pythonlibs/ Windows7 64bit OS Python3.1.4でCython-0.15.1を利用
ttp://lycopersin.blogspot.com/2011/04/64bit-windowscython.html
ttp://wiki.cython.org/64BitCythonExtensionsOnWindows
このあたりを参考にしてやった結果
C:\Program Files\Microsoft SDKs\Windows\v7.0>set DISTUTILS_USE_SDK=1
C:\Program Files\Microsoft SDKs\Windows\v7.0>Bin\setenv /x64 /release
>The x64 compilers are not currently installed.
>Please go to Add/Remove Programs to update your installation.
>.
>Setting SDK environment relative to C:\Program Files\Microsoft SDKs\Windows\v7.0.
>指定されたバッチ ラベルが見つかりません - Set_x64
>
>C:\Program Files\Microsoft SDKs\Windows\v7.0>
と怒られて、無視してcythonを利用しようとすると、
>cl.exe /c /nologo /Ox /MD /W3 /GS- /DNDEBUG -IC:\Python31\include -IC:\Python31\PC /TcC:\Python31\Sc
>ripts\Cython-0.15.1\Cython\Plex\Scanners.c /Fobuild\temp.win-amd64-3.1\Release\Python31\Scripts\Cyth
>on-0.15.1\Cython\Plex\Scanners.obj
>error: command 'cl.exe' failed: No such file or directory
でエラー >>432
ttp://social.msdn.microsoft.com/Forums/en/windowssdk/thread/29cccbf7-4d5f-4c8d-a075-972fb8e820ae ここより
C:\Windows\System32\cmd.exe /E:ON /V:ON /T:0E /K "C:\Program Files\Microsoft SDKs\Windows\v7.0\Bin\Setenv.cmd" /x64 /release
で、Setenv.cmdを起動すればいいことがわかり、やっとできた
MinGW、distutils.cfgは、不要
結局最初のエラーの原因よくわからないし、MinGWに比べて、VisualStudioのコンパイルかなり遅いし Python 3 Resources for Python developers and users
http://getpython3.com/ 本を読む習慣が無いひとには
おおまかに次の3つのタイプがあります
1.目が悪いひと
2.頭が悪いひと
3.文盲(識字出来ない)
頭が悪いひとより文盲の方が深刻です
普通は漢字が読めないレベルとかを想像しますが
アルファベットですら読めないひとが日本には多くいます 一人のジャイアンを救うごとに一人のエックスが犠牲になっていく…… Python3.2より3.3のがだいぶ早いな
でも3.1のがさらに早い
適当に書いたプログラムで試しただけだが 3系の日本語のリファレンスとかってまだないんだっけ? 政府は8日の閣議で、米インターネット検索大手グーグルの地図検索サービス「グーグルマップ」が、
竹島(島根県)を韓国領と誤解を与える表記をしている問題に関し、同社が対応を検討しているとする政府答弁書を決定した。
http://sankei.jp.msn.com/politics/news/120608/plc12060813260015-n1.htm python3の変更点を見ていて疑問に思ったんだけど、
どうして関数定義時にタプルを仮引数として使えなくしたの?
python2でいうと
def f((a,b),c): print a,b,c
のような書き方。
これ便利だったのに… 自己レスだけどPEP 3113か
ちょっと読んでみる。 ツン期からデレ期に移行したPython 3を学ぶなら「みんなのPython 第三版」がいいよという話
http://coreblog.org/ats/minpy-3rd-has-been-published
この本ってちゃんとver3.3に対応してるんかな タプルの例がIPアドレス使った奴から変わってるかな? >>450
とても素晴らしい表紙で,担当編集者の方には大変感謝しております。
↑
これって絶対皮肉だと思う。
>Rubyは,えーと,えーと,「バージョンって言い方なの?」って体制が病あーりんアイドルだからプログラミングとか分かんない\(^o^)/
何言ってるかわからんw >>452
愛されてるよ
ttps://twitter.com/yukihiro_matz/statuses/243985245219717120 3.3に移行したいのに遅すぎる
3.1の2倍、実行時間かかるぞ こういうやつか
ttp://bugs.python.org/issue14687 寄付額がなかなか増えない・・・欲しがっている人少ないね Python 3.3.0 was released on September 29th, 2012.
http://www.python.org/getit/releases/3.3.0/ >>450
3.3では u"〜" 表記が復活する、というのは書いてあった。
>>451
そのまんま。
あと、「2を20乗して1ギガバイトに相当するバイト数を計算しています」という
間違いも直っていない(2の20乗バイトは1メガバイト)。 >3.3では u"〜" 表記が復活する
3に乗り換える意味が益々無くなる >>465
3.3は、文字列リテラルにuつけてもよくなるだけで、uはつけなくともいいんだぞ
2.x系のソースをより移植しやすくするための措置らしい 「移植しやすく」というより、2と3の両対応のスクリプトを書きやすくするためらしい。 >>468
両対応のスクリプト書くなって方針じゃなかったの? 世の中的に3系イランモードなんかいな。
個人的には慣れてしまえば使いやすくていいもんだと思うから
はよ3系が主流になってほしい。 u付けて2でも動くよ〜
って喜んでる見たいだけどさ
2で動くんだったら3要らなくね?
ってなるよね >>468
from __future__ import unicode_literals があるので
新規で両対応のコードを書くならそっち使う。
3.3では u"" は何もしないので、わざわざ使う利点はない。
3.2ではエラーになるので、寧ろ互換性を損ねてる。 u付き復活とかなんか必死だなとは思った
3のみ対応の素敵ライブラリでも出てこないと使う気が起こらない
そういうのもう出てたりしないのかな いちおう3.3が2系を完全に切り離したリリース(今後2系はもうリリースしない)
と言われているけどな。ある意味やっとこさスタートラインともいえるが、どうなんだろうな。 u付き認めると移植はしやすくなるかも知れないけど、
3への完全移行にはかえって仇になると思うな。 ひとつ復活を認めると、あれもこれもでガンガン不要として切り捨てたものが復活して
結局2と同じものになりそうだな D言語のgdgdの再現プレイを見ているようだ
内部崩壊を狙う埋伏の毒が居るのかもしれん スレッド乱立荒らし出没中につき
dat落ちしないように保守 3 対応ってライブラリもCバインディングが含んでたら
buildし直さないと使えないんだな
まだ archぐらいじゃないか
3系列を薦めてくるの。ここから移行にはもうしばらく時間は掛かりそうだ… Ubuntu 12.10 でPython 3.2が標準で載るようになったね http://distrowatch.com/table.php?distribution=ubuntu
はじめにbuiltinで入ってるのは 2.7.3
あたらしいのを使いたいなら
$ sudo apt-get install python-3.2-dev
$ sudo apt-get install python-3.3-dev
もしくは python3-dev で 3.2 が入る
どのみち後からいれないと駄目だ。次と言うと 13.4 からか
3.2 と 3.3 の違いがよくわからんが… http://cpplover.blogspot.jp/2012/10/ubuntu-1304raring-ringtail.html
>また当初、Ubuntu 12.10で、CanonicalはPython 3.2に移行し、Python 2系列は
>デフォルトではインストールしない予定だった。Python 3はPython 2に対して
>破壊的な変更を含んでいる。つまり、Canonicalが直接サポートするソフトウェア
>でPythonを使うものは、すべてコードをPython 3.2で動作するように移植しなけ
>ればならない。残念ながら、その移植作業は間に合わず
http://news.mynavi.jp/news/2012/10/19/181/
>Python のバージョンをPython 3.2へ移行
>標準のGNUツールチェインをGCC 4.7.2に変更
>標準のJavaツールチェインをOpenJDK7に変更
mynavi プレスリリースする前に確認しようよ
まだ移行してないし from __past__ import unicode_literal
次は何だ? これはいい変更。
>>> open("aho.txt")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
FileNotFoundError: [Errno 2] No such file or directory: 'aho.txt' 従来はIOErrorだったのが、FileNotFoundErrorを返すようになったのか。よいね。 「おっぱい揉みたい」なのか「おっぱいも見たい」なのか、それが問題だ。 よく考えたら、おっぱい見るのはそこらに画像が転がってるから簡単だった。
だから揉みたいが正解だな。 expess edition だと plugin 使えないかんな!
と py3k に移植完了したコードを 2.7系に戻すそんな本末転倒な場面もあったり
でも os だってダウングレード権とかある。そんな状況が発生するのも別段おかしく yabaiyo
indent
source
貼れないよ ■python3系のメリット
・文字コード周りがすっきり unicode/str地獄に悩まされなくて済む
・今後便利な機能がどんどん実装される 個人的にイテレータ周りは相当良くなると思う
・パフォーマンスは最新3.3で2系をほぼ凌駕した 地味な所でどんどん性能改善してるので今後期待できる
■言語自体のデメリット
・ほぼ無し あえて言えば人によってprint文が若干面倒に感じるぐらい 言語自体は間違いなく良くなってる
■2->3への移行に伴うデメリット
・現有資産の書き換えが必要 特に文字コード周りは大幅な書き換えが必要
・まだ3系に対応していないライブラリが多い
著名どころでも非対応多いし、対応してても枯れてないのでおかしな動きしたり
適当だけどこんなところかな>>505
とにかく非対応ライブラリの問題が根深いですね
既に対応してるライブラリでもテキスト処理関係のライブラリはまだバグが多い(lxmlとか) 文字コード周りがすっきり unicode/str地獄に悩まされなくて済む
はずなのに 2 からの移行で悩まされるのはほとんどこの問題とか Python3の唯一のデメリットはまだ枯れてないことだな。
例えばPyArg_ParseTupleの引数 s と s* の区別がきちんとできないライブラリが
標準ライブラリにも混じってるから困る。 そういえば zipfile が utf-8 固定になってる問題は直ったの? ぼくちんはwxPythonが3.3に対応したら移行するでち
それまでは2.7で頑張りますでち wxは本家が次期バージョンで下位互換捨てる方針だからそれにあわせるんじゃねえの パイソンでグラフプロットするにはどうすれば良いですか? >>519
何それ?
俺の知ってるライブラリと違う。 辞書オブジェクトのキーを属性名、バリューを値に持つようなクラスってつくれますか?
d = {'hello', 'world'}
obj = X(d)
print(obj.hello) # world
こんな感じにしたいんですが・・・ class ReadOnlyAttr(dict):
def __getattr__(self, key):
if key in self:
return self[key]
raise AttributeError(key)
spam = ReadOnlyAttr(hello='world')
spam['ham'] = 'egg'
print(spam.hello, spam.ham) 読み取り専用辞書 types.MappingProxyType が 3.3 に入ったね
以前のdictproxyからの変更、インスタンスが作れるようになってる
もう一つ3.3の話題、丁度新しい型が追加されてた
クラスやnamedtuple等よりは辞書寄りで、単に辞書データへ属性アクセスしたい場合に使える
ns = types.SimpleNamespace(hello="world") 改善された点
__getattr__を使う方法や、インスタンスの __dict__ へ追加する方法では
名前空間を共有することになるので、他の属性との名前の衝突には注意が必要になるけど
SimpleNamespaceは __xxx__ 形式の属性しかないので、比較的運用が楽。
辞書が必要な場合は、ns.__dict__ が使える
従来の方法に対するデメリットは、サブクラス化してメソッド追加が(多分?)出来ない点 その他、用途別。辞書ライクなデータを属性アクセス可能にする方法
# A
color = {"red":0, "green":0, "blue":0, "alpha": 0}
みたいに、小規模・フィールドが固定なデータ構造だったら namedtuple
# B
フィールドは固定で、本来なら属性にする所だけど
数が多いので外部リソースから読み込んだりして一時的に辞書で扱ってるのを
纏めて属性アクセスできるようにしたい。用途的に名前衝突の心配がない場合
self.__dict__.update({"hello":"world"}) 不動少数点数にマッチする正規表現てどう書きますか? SimpleNamespaceって
>>> ns = type('SimpleNamespace', (), {'hello': 'world'})
じゃいかんのか >>533
IronPythonはPythonから標準モジュールを抜いて、.NET フレームワークが使えるようになっただけ。
PythonとC#を学んだ方がいい。 >>534
一時的な用途で属性アクセス専用なら使えるけど、あまり積極的にはお勧めしない。
汎用の辞書としては、__dict__が他の属性と混ざってるので、扱いが面倒になる => 辞書のメソッドが使いたい場合、シリアライズしたい場合等
この点、SimpleNamespaceの方では__dict__でクリーンな辞書を参照できる。
後、ユニークなクラスを作ることになるので、別のインスタンスを作っても共通の親が無く
isinstanceでの判別がしにくい等、細かい点で手間かかる事になるかもしれない。 __dict__と混ざるのはメリットでもあるしデメリットでもあるんじゃないの
後この手のコンテキストで型チェックってあんま意味がないような気がする
実行時例外をそのままスルーした方がいいような
>>535は一行とはいえ黒魔術的だからSimpleNamespaceの方がいいんだろうけど 用途を明確にしたほうがいいかな
汎用コンテナとして、辞書を属性アクセス可能に拡張するなら、
辞書のサブクラス作るのが順当なアプローチだと思うけど
データと属性の名前空間が混ざるのはデメリット
オブジェクトの属性を辞書で一括更新する場合は __dict__ を利用
但し、クラス変数だと __xxx__形式のメソッドが混ざってくるのと__dict__が dictproxy(mappingproxy) になるので
インスタンス変数の__dict__を利用する。 >>538
> 後この手のコンテキストで型チェックってあんま意味がないような気がする
> 実行時例外をそのままスルーした方がいいような
型チェックが冗長になる場面では基本的に同意だけど、
出来るけどやらないのと、そもそも出来ないには隔たりがある。
Duck-Typeの柔軟性を活かす為に、暗黙のインターフェースを用いる方法は、
抽象基底クラス(abc)を使うとインターフェースを明示できるようになるよ。 最高にクールなpython3の参考書はどれですか? Python3の書籍なんて何冊もないんだから全部買え。
自分に合った本は自分でしか見つけられない。 ほとんどshift-jisなんだけど時々違う文字コードが紛れ込んで文字化けしてるbyte列をデコードしたいのですが
こういう文字列として不完全なbyte列をデコードする関数は標準にはありますか? >>548
場所とエンコーディングが分かっているのならば自分でbyte列を分割して適切に
処理してやればいいんじゃないの
全自動でやってくれというのなら>>549の言うように無理だな
Shift_JISとして不正なbyte列を含んでいる場合はそこでデコードエラーになり、
その位置も取れる筈だけど、以下のような問題がある
1)人の目には明白に文字化けしているケースであっても常にShift_JISとして不正な
byte列であるとは限らず、その場合は「何か問題がある」ことすら検出
しようがない
2)文字化け部分が短い場合、自動でその文字エンコーディングを推測するのは
非常に困難 まあ、完璧にやるのは無理としても、デコードエラーになったら違う文字コードを
試すとかしてそれなりにデコードするのは可能かもしれない。
でも、それ以前にそんなニッチな関数が「標準」にあると思う方がどうかしてる。 https://github.com/fumiyas/python-nkf
nkf のバインディングを置いとく
3で動くかは知らん
-g オプションは guess の略
>>551 が言うように完璧は無理 (guess) >ほとんどshift-jisなんだけど時々違う文字コードが紛れ込んで
環境依存文字等では、shift-jisではエラーでもcp932だと通る事がある。
そういったケースではなく、まったく別の文字コードが紛れてる?
不完全な部分を正しいデコードしなくてもよいのであれば、
decodeの第二引数に'ignore'や'replace'を指定すると、
デコード出来ない文字は読み飛ばしたり適当な文字に置き換えて処理してくれる。
エラー関数はカスタマイズ可能なので、551の方法を試す枠組み自体は整ってる。詳しくはcodecsモジュール読んで。 エラーの時に別のエンコーディングを試すアプローチだけど
文字コードが混在したデータには使えなかった。エラーにならない文字だと単に文字化けする # module file : MyClass.py
class Body:
pass
class MyClass(object):
def __init__(this):
body = Body()
body.x = 0
def SetX(x):
body.x = x
def GetX():
return body.x
this.SetX = SetX
this.GetX = GetX
def New():
return MyClass()
こうするほかにアクセス不能(?)なプライベートなプロパティをもつことは可能ですか? >>557
完璧なプライベートなんてのは不可能なんだから諦めたら?
n = New()
n.GetX.__closure__[0].cell_contents.x = 123
print(n.GetX())
http://docs.python.jp/3.3/reference/expressions.html#atom-identifiers Python 3.2.4 and 3.3.1 have been released
ttp://www.python.org/download/releases/3.2.4/
ttp://www.python.org/download/releases/3.3.1/ 日本Pythonユーザ会のサイトのダウンロードページでは
未だにPython最新リリースが3.3.0なんすけど
これは3.3.1以降の日本語化が終わってないってことでしょうか?
http://www.python.jp/Zope/Zope/download/pythoncore インストーラーへのリンクは本家へ直リンなので
ユーザー会がページを更新していないだけだと考えられる >>565
ありがとっす
日本語パス上にあるスクリプトファイルを
起動できない事象を回避したいので早速本家からもらってくる
>>566
これは古かったですかスマンです
移行したとは気づかなかった… Microsoft Windows 2000 [Version 5.00.2195]
(C) Copyright 1985-2000 Microsoft Corp.
C:\>python -V
Python 3.2.5
C:\> tkinterのサンプルたくさん載ってるサイトない?
海外のでいいから NumPyもMatplotlibもPIL(Pillow)も、Webの各種フレームワークも3に対応した。
おいらはもうPython 3オンリーでやっていける。 案外すんなりと移行しちゃって
このスレも役目を終えたな >>577
もうPython3に逝っちゃってもいいんですか?
勉強しようとしたら論争がいつまで経っても終わらんなと思っていたところで そもそも文法はたいして変わらんし
使いたいライブラリが3に対応してるかだけの話だよ元々 2でもfutureインポートで3の文法使えるから、それで慣れるのもあり Pythonコードと
ハリソンフォードって
似てるよね は行の清音を表現しきれないシナチョン語だと似てるんだろうな 1年前はまだ良さげなライブラリとか見つけて3非対応でガッカリさせえられてたけど
ここ一年でだいぶ変わって来た気がする
多分1年後はもう問題無くほとんど全てが3に以降してるはず いや、科学系とWeb関係でPythonを使ってるけど、もうほとんど移行可能だよ。
まだ新規に2.x書いてるの? PyGTK や PyQt 使ったアプリケーションはいまだに 2 を使ってるものばかりだから
相変らず 2 で書いてる 言葉が足りなかったか
既存の GUI アプリが 2 で書かれてるものだから
プラグインを書いたりするときに結局 2 が必要になっちゃうって話 2.x無視すると、キモい互換用コード書かなくて済むし楽だ
ついでに、コードもstrictな感じになるし Python 3.xの新機能がよくわからなくなってきた
3.4でEnumライブラリが入るんだね ライブラリやAPIは問題ないけど、大学の先輩方が作った卒研の資産が動きません
コードが汚くてリファクタリングする気にもなりません asyncioとpathlibのせいで2は過去の物と切り捨てる覚悟ができた Google App Engineさえ3対応したら個人スクリプトは3系に全面移行できる
仕事はまだまだ2系が多いけどなー 2使ってて3でも使える書き方をしておくのに
from __future__ import print_function
とか出来るけど
3使ってて2の機能(モジュールとか)を使う方法はある? python3でimport pylabすると「見つからなぇよ」と言われるけど2なら通る
わけわかめ >>606
基本的には2に対応したライブラリと3に対応したライブラリは別物だから、
それぞれインストールする必要がある。
python3用のpylabをインストールしたのに見つからないと言われるならライブラリのパスが正しくない。 3.4とasyncioの組み合わせだとgcが不安定だな WIN7 Python 3.4.1 64bitでGUI (wxPython)
D:\Python341\Scripts>pip install -U --pre -f h ttp://wxPython.org/Phoenix/snapshot-builds/ wxPython_Phoenix サッカーブッシュ日本代表日程ぷあたん(しゅっちょうまいくろ教育長交代)春文執行40代売上差額シュガーチョコ
https://www.youtube.com/watch?v=NDq1QoJY0nY宇ドナルドアナリストパワーストーンコーチングとしまえん
サッカーブッシュ日本代表日程古本屋よしたけしゅっちょうちょこしゅがー
ディーラー税務署天才開発者死亡詰みヨミドクターマイクロサービス不足
サッカーブッシュ日本代表日程ぷあたんシフト光金さかい強制バイト人権侵害問題
春分資源執行ニューヨーク低原価ぼったステーキソルトレイク福岡横浜新橋奴隷課金パチシフト強制バイト問題新潟米センター生残
コスメ24チャリティー隠れ40代生活保護プレイボーイバイトレードいたりあん接待問題
マスコミKARDローンケーオーサービス不足婚活パーティー寄付金執行原発ビジネス
FBIチャイニーズタイホテル売上事務所ガチャ決算ガチャキャンペーン(販売報道陣過激派組織向携帯最新情報提供終了
校長発言細心注意ノートン産廃エラー(著作権クレーム中国反応融資高額教育費)(中国捕鯨団体40代社員サッカーコメント
高額入学金ヤフウ新橋大学ヤフウ新橋理事長FX経費 おじや50代資産ガリバズフィード40代エリート # Python 3.2
import urllib.requestをつかってみました! # Python 3.2
import urllib.request
def getWebpage():
fp = urllib.request.urlopen('http://www.toto-dream.com/dci/I/IPC/IPC01.do?op=initVoteRate&holdCntId=0836&commodityId=01')
html = fp.read()
fp.close()
return html.decode('utf-8')
if __name__ == '__main__':
print( getWebpage() ) # UTF-8
# Python 3.2
import urllib.request
def getWebpage():
fp = urllib.request.urlopen('http://www.toto-dream.com/dci/I/IPC/IPC01.do?op=initVoteRate&holdCntId=0836&commodityId=01')
html = fp.read()
fp.close()
return html.decode('utf-8')
if __name__ == '__main__':
print( getWebpage() ) http://...
正しいURLをつかえばうまくいきます ■ このスレッドは過去ログ倉庫に格納されています