【実験台】 Python 3.0 のお勉強 Part 1 【非互換】
■ このスレッドは過去ログ倉庫に格納されています
Python 3.0 は隔離スレを作るべきだと思うのは俺だけかな?
そもそもあれは実用で使うには時期が早すぎるわけで、ここで
普通に語られても困る。
--------
別に
--------
細分化する必要性が全く感じられない。
各自がレスの内容を収拾選択すればいいだけ。 >>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:\> ■ このスレッドは過去ログ倉庫に格納されています