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


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

Pythonのお勉強 Part30



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

730 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 00:36:34 ]
>>729
そうなのか。公式のドキュメントがいいってのはいいね

バージョンは結局自分で触ってみないと善し悪しがわかりそうにないな
てきとーにいじってみてから考えるとしますわ

731 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 01:10:48 ]
>>730
jp独自ドキュメントじゃなくて、本家ドキュメント読んでねw
2.5は翻訳完了してるから。

732 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 01:11:52 ]
いま>>731がしれっとひどいこと言った

733 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 01:12:12 ]
URL挙げとくか。PDFもあります。
www.python.jp/Zope/links/python_documents/

734 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 01:12:27 ]
胸が小さい

735 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 01:14:01 ]
Pythonでローパケットいじりたい場合
Twistedしかない?

736 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 01:21:54 ]
>>735
raw socketをそのまんま使う

737 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 01:29:14 ]
>>736
そこらへんのことを学ぶたべの書籍ってないでしょうか?

738 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 01:42:44 ]
UNIXネットワークプログラミング〈Vol.1〉ネットワークAPI:ソケットとXTI
www.amazon.co.jp/dp/4894712059/
WinSock2プログラミング−Windows Sockets APIによるネットワークプログラミングのすべて
www.amazon.co.jp/dp/4797330449/

C言語だけど、この辺知らないでプログラム書くのは無謀。

詳解TCP/IP〈Vol.1〉プロトコル
www.amazon.co.jp/dp/4894713209/



739 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 02:41:25 ]
Python 2.5.4 released.

2.5.3 短命杉w

740 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 03:07:03 ]
739 :デフォルトの名無しさん [↓] :2008/12/24(水) 02:41:25
Python 2.5.4 released.

2.5.3 短命杉w

741 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 03:59:11 ]
740 名前:デフォルトの名無しさん[sage] 投稿日:2008/12/24(水) 03:07:03
739 :デフォルトの名無しさん [↓] :2008/12/24(水) 02:41:25
Python 2.5.4 released.

2.5.3 短命杉w

742 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 04:42:19 ]
クラスへのメンバの追加を制御するために__slots__を使っているんですが、

class foo(object):
  __slots__ = ['hoge', 'fuga']

  def __init__(self):
    self.hoge = 1
    self.fuga = 2

ここに新たに'piyo'というメンバを追加したくなったときに、__slots__と__init__の2箇所を書き直さなければならないのは少し面倒な気もします。
もっと簡単に書けませんかね?
そもそもこういうことをpythonに求めてはいけないとか?

743 名前:デフォルトの名無しさん [2008/12/24(水) 06:23:03 ]
しかしpythonもデカい言語になったもんだなー。
Library reference読んで再認識したよ。


744 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 10:07:22 ]
>>742
>そもそもこういうことをpythonに求めてはいけないとか?

メタクラスでも使って自己解決しろ。

745 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 11:04:00 ]
この記事、ひどくね?

gihyo.jp/dev/clip/01/orangenews/vol48/0001
>一般的に,並行処理を行うにはスレッドを用いますが,Pythonは
>GIL(Global Interpreter Lock)という1プロセスごとにロックを持
>つ機構を採用しているため同時に1つしかスレッドを実行できません。

746 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 11:17:14 ]
Ruby厨のデマだよ。
よい子は惑わされちゃダメだよ。

747 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 11:19:33 ]
論理的にマルチスレッドで書くという話と
SMP で並列処理してパフォーマンスを書くという話の
マルチスレッドとを用語上きちんと分けろってこと?

一般用語はどうなってるの?

748 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 11:29:21 ]
何をひどいと言ってるのかは分からんな

PythonにはGILがあるからマルチスレッドでは並列計算が出来なかった
(I/Oとかは外出し出来たけど)
→multiprocessingならそんな問題が無くてウマー

という提灯記事じゃないのか?



749 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 11:32:51 ]
I/Oに限らず、時間のかかる拡張モジュールは全部GIL外で動かすことで
Pythonと並列に実行できるけどな。

750 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 11:34:23 ]
まあCのコードを書いて、かつPythonインタプリタやPythonのオブジェクトに
触らないんなら
そら何でもありだわな

751 名前:デフォルトの名無しさん [2008/12/24(水) 11:44:51 ]
何でもありが一番だよ。

752 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 15:05:56 ]
Alex MartelliのPythonクィックリファレンスってもうそろそろ出るのかな?
クックブックは、今から買ってこようと思うんだけど

初めてのPythonとクックブックがあれば、
本家サイトの英語版でお茶を濁せるもんですか?

正規表現関連とメール関連がやりたいです

753 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 16:06:43 ]
Dやろうっと。

754 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 16:23:31 ]
Cook Bookも原書で読んだ方がいいよ。
翻訳本はどれもクソだよ。

755 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 16:35:10 ]
買ってきたお
3月前に出版されたbashのクックブックも買ってきてしまった

Pythonクィックリファレンスもチェックしてきたけど
プリントアウトを代行しましたみたいな本だね
もっと詳しいことが載っているのかと思っていた

くわしく使い方を知りたかったら、ソースを読めって話なのか
>>754
英語を楽しんでいる時間は、ないんよ
3.xに完全移行したら、そのときは原書を読もうかな

756 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 16:55:31 ]
クイックリファレンスの次がソースw

757 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 17:01:20 ]
>>755
>プリントアウトを代行しましたみたいな本

おまえそれは翻訳者に失礼だわ。
離婚書けてまで翻訳したらしいぞ(ww

758 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 17:40:18 ]
pythonで計算時間の計測ってどうするの?



759 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 17:45:17 ]
ttp://www.python.jp/doc/2.5/lib/profile.html

760 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 23:52:33 ]
>>738
そこら辺は知ってるけど
Pythonで簡単にやる方法を探してる

761 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 00:03:28 ]
raw socketで簡単じゃんw

762 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 00:06:28 ]
>そこら辺は知ってるけど
知ってるのなら>>759より簡単な計測方法って
具体的にどんなものをイメージしているのか教えてくれ。

timeとか?w

763 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 00:07:28 ]
>>761
Cでならできるけど
Pythonでのサンプルを見たい

764 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 00:08:17 ]
Cでできるなら
Pythonでのサンプルなんていらないだろ

765 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 00:08:53 ]
>>762
多分勘違い
計測方法を聞いてるのは俺じゃない
俺は生パケットのPythonでの扱いを聞いた方

766 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 00:09:36 ]
>>764
スクリプト言語でやることが必須

767 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 00:09:55 ]
>>765
正直心の底からすまんかった

768 名前:デフォルトの名無しさん [2008/12/25(木) 00:13:33 ]
python 2.5.4は2.5.2に比べてかなり速くなってる。
BeutifulSoupにxmlをパースさせる処理が約11秒から約9.5秒になった。



769 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 00:17:41 ]
2.5.3寿命短すぎだろw
落とすだけ落としたけどインスコしないで正解だったわ

770 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 00:18:14 ]
>>765
まずこれ。www.python.jp/doc/nightly/lib/socket-example.html

あとは httplib.py とか SocketServer.py とかそのあたりの標準ライブラリの
コードを読むのがオヌヌメ。


771 名前:デフォルトの名無しさん [2008/12/25(木) 00:22:45 ]
>>758
チュートリアルぐらい読め

772 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 00:23:50 ]
んなTCPとかいう高級なレイヤーの上の話じゃなくて、
raw socketの話をしてんじゃないのか?

なんか全然勘違いしてると思うぞ質問者の意図を

773 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 00:30:04 ]
>>772
TCPより下の部分はOSの領分だから、普通は raw socket といえばTCP/UDB/Unix Domain
なんだよ。
ていうか、IP層には socket の概念ないし。 raw packet なら IP Packet か Ether Packet かも
しんないけどさ。

774 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 00:37:27 ]
>>773
いやフツーraw socketつったらSOCK_RAWのことだと俺は思っていたが……
まあraw socketって言葉遣いが悪かったんならそれは謝る、質問者は
>>735でraw packetと言っていたからね

775 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 00:53:45 ]
>>770
ありがとう
ただ、そこのサイトの例はちょっと上位レベルな感じだな
TCPヘッダのSEQナンバー、ACKナンバーとか制御フラグとか
いじるのが一番の目的なので

SocketServer.pyとかはそんな感じなのかな?

776 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 01:08:10 ]
>>775
> SocketServer.pyとかはそんな感じなのかな?

いや全然そんなことは無いので安心汁


777 名前:773 mailto:sage [2008/12/25(木) 01:24:36 ]
>>774
いや、生パケットとか生ソケットって言葉から、 SOCK_RAW 連想できんかった。すまん。

一般用語としては、「生」っていう用語はあるレイヤに着目したひとつ下のレイヤの事で、
IPの下にはEther当のネットワーク層があるから、生パケットって言われても
TCP Packet, UDP Packet, IP Packet, Ether Packet のどれか判らんかった。

778 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 01:28:34 ]
>>777
いや、TCPの上に乗っかるアプリケーションにはTCPを流れるデータは
バイトストリームにみえるわけで、
「パケット」は意識しないし、できないでしょ
「パケット」と言われて>>770の例を出すのは発想として明らかにおかしいと思うよ

まあ結論はもう出てるからどうでもいいけどね



779 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 08:45:14 ]
ARPは扱えますか?

780 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 09:19:03 ]
何をしたいの?
サーバはカーネル組み込みのOSが多いから置き換え不能だけど。

781 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 10:06:12 ]
は?

782 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 18:19:11 ]
python で ARP のパケットを送受信できますか
何か OS 依存のライブラリとか使わないとできませんか?


783 名前:デフォルトの名無しさん [2008/12/25(木) 18:40:58 ]
>>782
できる。
ttp://mail.python.org/pipermail/python-list/2002-November/172963.html
ttp://sourceforge.net/projects/pylibnet


784 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 19:45:38 ]
>>783
ありがとうございます!!

785 名前:デフォルトの名無しさん mailto:sage [2008/12/26(金) 03:45:54 ]
pythonが関数型言語というわりに
あんまり関数ぽくない感じするのは気のせいなのか
副作用つかいまくってる


786 名前:デフォルトの名無しさん mailto:sage [2008/12/26(金) 03:54:29 ]
だれが関数型だなんていったんだ

787 名前:デフォルトの名無しさん mailto:sage [2008/12/26(金) 04:02:16 ]
>>785
> pythonが関数型言語というわりに

そんなこと誰が言ってるんだw
関数型言語から色々便利な道具は拝借してるが、単にそれだけだ。

式と文を区別してるし、参照透明性なんぞ最初から眼中にないし、
lambdaは中途半端な糞だし、関数型的なリストは持たないし、
カリー化もパターンマッチも代数データ型もないし、
末尾再帰は最適化しないし、畳み込みは3.0からは格下げだ。

ある意味Guidoの好みは時代に逆行してるな。関数型を嫌ってるんだから。

788 名前:デフォルトの名無しさん mailto:sage [2008/12/26(金) 06:12:36 ]
でも Python は使いやすい



789 名前:デフォルトの名無しさん mailto:sage [2008/12/26(金) 06:54:27 ]
関数型はネストが深くなりやすいとかメリットを享受するためには無名関数を使わざるを得ないとかの印象がある
Guidoの考えとは相性良くないんだろう
書きにくくはないけど読みやすくはない

790 名前:デフォルトの名無しさん mailto:sage [2008/12/26(金) 14:27:48 ]
ctypes で WindowsAPI EnumWindows を呼びたいのですが
EnumWindows は引数に callback 関数を指定しないといけないので
python 側の関数を callback してもらいたいと思います
具体的な書き方が分からないのでどなたか教えてください

791 名前:デフォルトの名無しさん mailto:sage [2008/12/26(金) 15:09:33 ]
ttp://www.python.jp/doc/release/lib/ctypes-callback-functions.html

from ctypes import *
from ctypes.wintypes import *

EnumWindows = windll.user32.EnumWindows
EnumWindows.argtypes = [c_void_p, c_int]
EnumWindows.restypes = c_int
EnumWindowsCallback = CFUNCTYPE(c_int, c_int, c_int)

GetWindowText = windll.user32.GetWindowTextA
GetWindowText.argtypes = [c_int, c_char_p, c_int]
GetWindowText.restypes = c_int

def pyEnumWindowsCallback(hwnd, lp):
buf = create_string_buffer('\000' * 1024)
GetWindowText(hwnd, buf, 1024)
if len(buf) > 0:
if buf.value != '':
print buf.value
return True

EnumWindows(EnumWindowsCallback(pyEnumWindowsCallback), 0)


792 名前:デフォルトの名無しさん mailto:sage [2008/12/26(金) 15:16:26 ]
py2exeでdllは作れないの?

793 名前:デフォルトの名無しさん mailto:sage [2008/12/26(金) 15:18:51 ]
>>787
まー関数型が好きな人は「パターンマッチとカリー化使ってプログラムできる俺かっけえw」
とかニヤニヤしてればいいんじゃね。
高度に関数型の言語は、手続き型と比べてアルゴリズムの記述とかパフォーマンスチューニ
ングのノウハウの蓄積と普及がまだまだという印象を受ける。みんながもっと関数型を使う
ようになればそういう動きが活発になるんだろうけど。
それと、SmallTalkとかHaskellみたいに一つのプログラミングパラダイムのみをサポートす
る言語は、特定の用途にはとても強いが、逆に苦手なプログラミングのタイプにはさっぱり、
ってのが多い気がしないか。
その点、いろんなとこから良いとこ取りしてるPythonは柔軟な対応ができて良いと思うのだけれど。

794 名前:デフォルトの名無しさん mailto:sage [2008/12/26(金) 15:19:05 ]
>>790
先を越されてしまったようだが……
コールバックとしては、↓のようにクラスのメソッドも普通に使えるよ。

import ctypes

BOOL = ctypes.c_int
HWND = ctypes.c_ulong
LPARAM = ctypes.c_ulong
EnumWindowsProc = ctypes.WINFUNCTYPE(BOOL, HWND, LPARAM)
user32 = ctypes.windll.user32

class Foo(object):
    def __init__(self):
        self.windows = []

    def MyEnumWindowsProc(self, hwnd, lparam):
        self.windows.append(hwnd)
        return 1

    def __call__(self):
        user32.EnumWindows(EnumWindowsProc(self.MyEnumWindowsProc), 0)
        return self.windows

for hwnd in Foo()(): print "%08X" % hwnd


795 名前:デフォルトの名無しさん mailto:sage [2008/12/26(金) 15:33:10 ]
>>793
Pythonは関数型言語じゃありませんよということを説明しただけだよ
Pythonに関数型言語になって欲しいとは一言も言ってない

マルチパラダイム言語の中で考えれば、Scalaあたりに比べれば
言語の記述力自体は別に平凡な部類でしょ、Pythonは

796 名前:デフォルトの名無しさん mailto:sage [2008/12/26(金) 15:45:25 ]
On Python
www.shido.info/py/
ython と Ruby は実はほとんど同じで、むきになるほどの差はないと思います。 (ただ、Python は Haskell などの最近の関数型言語の影響が強く見られ、 一方、Ruby は Smalltalk や Eiffel などのオブジェクト指向言語と Lisp の影響が見られます。)


797 名前:デフォルトの名無しさん mailto:sage [2008/12/26(金) 15:49:34 ]
>>796
ttp://d.hatena.ne.jp/odz/20061119/1163971267
で叩かれてたサイトだな

798 名前:デフォルトの名無しさん mailto:sage [2008/12/26(金) 15:54:24 ]
>>797
せっかく有用な比較してるのに妙な叩きするなよ

zopeとダンジョの比較情報探すのもかなり苦労したんだから



799 名前:デフォルトの名無しさん mailto:sage [2008/12/26(金) 15:59:59 ]
有用な比較って……

Pythonでシークエンス型は参照渡しで他は値渡しって記述は俺も
ひどいと思ったけど
大嘘じゃん

800 名前:デフォルトの名無しさん mailto:sage [2008/12/26(金) 16:05:05 ]
そもそもPythonレベルで参照渡しなんて概念を持ち出す必要があるのか疑問

801 名前:デフォルトの名無しさん mailto:sage [2008/12/26(金) 17:18:57 ]
>>800
お前相当アホだろ?

802 名前:デフォルトの名無しさん mailto:sage [2008/12/26(金) 17:22:40 ]
すみませんが、質問です。
ジェネレータを通常のリストに変換する簡潔な方法は無いでしょうか?
ジェネレータが逐次返してくる値を全部まとめたリストを得たいのです。

803 名前:デフォルトの名無しさん mailto:sage [2008/12/26(金) 17:40:37 ]
>>802
[ e for e in G ]

804 名前:デフォルトの名無しさん mailto:sage [2008/12/26(金) 17:40:42 ]
list

805 名前:デフォルトの名無しさん mailto:sage [2008/12/26(金) 17:54:45 ]
>>804
おお、こんなクラスが。ありがとうございました。
> Help on class list in module __builtin__:
>
> class list(object)
> | list() -> new list
> | list(sequence) -> new list initialized from sequence's items

>>803
リスト内包表記もかなり簡潔ですね。


806 名前:デフォルトの名無しさん mailto:sage [2008/12/26(金) 17:56:49 ]
>>791
早速ありがとうございます!!
でも実行すると最後にエラー出てました
EnumWindowsCallback = CFUNCTYPE(c_int, c_int, c_int)

EnumWindowsCallback = WINFUNCTYPE(c_int, c_int, c_int)
でエラー出なくなりました

>>794
きれいなコードですね
ありがとうございました!!


807 名前:デフォルトの名無しさん mailto:sage [2008/12/26(金) 18:21:56 ]
>>796
駄本の著者だな

808 名前:デフォルトの名無しさん mailto:sage [2008/12/26(金) 18:54:21 ]
景品表示法的にグレーな本書いた人ね



809 名前:デフォルトの名無しさん mailto:sage [2008/12/26(金) 19:05:47 ]
ttp://www.amazon.co.jp/dp/4777513688

続編は内容的にガッカリらしい

810 名前:デフォルトの名無しさん mailto:sage [2008/12/26(金) 21:15:32 ]
恥ぱい

811 名前:デフォルトの名無しさん mailto:sage [2008/12/26(金) 21:27:53 ]
中身がハッカーズ大辞典やアンサイクロペディアみたいなノリだったら
あのタイトルでも許せたんだけどな。


812 名前:デフォルトの名無しさん mailto:sage [2008/12/27(土) 05:52:00 ]
イテレータから、n 個ずつとってまとめたタプルを
次々返すようなジェネレータって標準モジュール内にないですかね?
itertools 内を見回しても見当たらないんですけど・・・
結構使う機能なので、使うたびにジェネレータ定義するの面倒だし、
この機能だけのためにモジュール定義するのとかも面倒だし、
標準モジュール内であると楽なんですが・・・

813 名前:デフォルトの名無しさん mailto:sage [2008/12/27(土) 06:03:34 ]
あの、回答まだでしょうか?

814 名前:デフォルトの名無しさん [2008/12/27(土) 08:06:33 ]
正月休みです

815 名前:デフォルトの名無しさん mailto:sage [2008/12/27(土) 10:03:05 ]
from 俺のitertools import pair
def pair(iterable, count):
    """
    >>> list(pair(range(10), 3))
    [(0, 1, 2), (3, 4, 5), (6, 7, 8), (9,)]
    """
    iterable = iter(iterable)
    stop = False
    while not stop:
        y = ()
        try:
            for i in range(count):
                y += (iterable.next(), )
        except StopIteration:
            stop = True
        if y: yield y


816 名前:デフォルトの名無しさん mailto:sage [2008/12/27(土) 10:46:00 ]
>>812
> この機能だけのためにモジュール定義するのとかも面倒だし、

Pythonのモジュール作るのは別に面倒じゃないと思うんだが……
つーかPythonのスクリプトって特別な呪文を唱えずとも全部モジュールとして
使えるわけだし、せいぜい既存のモジュールとファイル名がかぶらないようにだけ
注意しとけばいい

PYTHONPATH, PYTHONSTARTUP, sitecustomize.pyなどの手段で
sys.pathに自分用スクリプトディレクトリを加えておくといいぞ
Pythonみたいにモジュールが使いやすい言語でコードの再利用を考えないのは損だ

817 名前:デフォルトの名無しさん mailto:sage [2008/12/27(土) 11:47:56 ]
>>815>>816
分かりました。
myitertools.py みたいなのを作ってやってみようと思います。

818 名前:デフォルトの名無しさん mailto:sage [2008/12/27(土) 11:57:00 ]
ちょっと違うけど短くかけるな
def pair(iterable, n):
    return izip(*[iter(iterable)]*n)



819 名前:デフォルトの名無しさん mailto:sage [2008/12/27(土) 11:58:45 ]
うへ,tuple って immutable っていうから
+= みたいなのはなしかと思い込んでた…

820 名前:デフォルトの名無しさん mailto:sage [2008/12/27(土) 12:25:32 ]
a += b って a = a + b として処理されるんでないの

821 名前:デフォルトの名無しさん mailto:sage [2008/12/27(土) 12:26:35 ]
もちろんそうだよ。

822 名前:デフォルトの名無しさん mailto:sage [2008/12/27(土) 12:27:53 ]
>>820
__iadd__()がある場合は__iadd__()で処理される
無い場合は、__add()__を用いて処理される

immutableの場合は当然__iadd__()なんてものはないから
普通に__add()__を用いて新しいオブジェクトが作られる

823 名前:822 mailto:sage [2008/12/27(土) 12:28:50 ]
なんだ__add()__ってw
まあ意味分かるよね、ごめん

824 名前:デフォルトの名無しさん [2008/12/27(土) 21:48:30 ]
>>> zip(*[iter(range(10))]*3)
[(0, 1, 2), (3, 4, 5), (6, 7, 8)]
>>> zip(*[iter(range(10))]*4)
[(0, 1, 2, 3), (4, 5, 6, 7)]

825 名前:デフォルトの名無しさん mailto:sage [2008/12/27(土) 22:14:25 ]
>>815 >>818 >>824
この場合は末尾の扱いってどうすべきなのかな

826 名前:デフォルトの名無しさん [2008/12/28(日) 00:07:52 ]
用途によって末尾が必要な場合・不要な場合があるけど、
tupleで返す場合の戻り値は >>824 のように固定長にすべきじゃないかな。

また、>>815は、while ループ一巡辺り最大で
tuple += tuple で count - 1個, (iterable.next(), ) で count 個の不要な一時tupleオブジェクトが作成される。
この場合の作業変数はlistを使う方がベター。

827 名前:デフォルトの名無しさん mailto:sage [2008/12/28(日) 05:15:16 ]
余りが出たら、最後をデフォルト値で埋めてみる

def padpairs(iterable, n, default=None):
  x = chain(iter(iterable), repeat(default, n-1))
  return pair(x, n)

# pair は >>818 の奴

>>> list(padpairs(range(10),3))
[(0, 1, 2), (3, 4, 5), (6, 7, 8), (9, None, None)]
>>> list(padpairs(range(10),4))
[(0, 1, 2, 3), (4, 5, 6, 7), (8, 9, None, None)]

828 名前:デフォルトの名無しさん mailto:sage [2008/12/28(日) 10:12:17 ]
2.6以上ならizip_longestが使える



829 名前:デフォルトの名無しさん [2008/12/28(日) 10:32:42 ]
>>827
GJ

830 名前:デフォルトの名無しさん mailto:sage [2008/12/28(日) 15:09:27 ]
>>828
2.5でもmap使えばいいだろ






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

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

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