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


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

Pythonのお勉強 Part37



1 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 16:59:28 ]
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/1264924208/

562 名前:デフォルトの名無しさん mailto:sage [2010/04/13(火) 21:34:55 ]
>>559
なんでサーバー的にダメなんだ?

563 名前:デフォルトの名無しさん mailto:sage [2010/04/13(火) 21:45:14 ]
Pythonなら標準で入ってるからとかかな?

564 名前:デフォルトの名無しさん mailto:sage [2010/04/13(火) 22:10:55 ]
>>562
遅いからじゃないかな

565 名前:デフォルトの名無しさん mailto:sage [2010/04/14(水) 14:05:19 ]
Pythonより数倍遅いのはいただけないねえ

566 名前:デフォルトの名無しさん mailto:sage [2010/04/14(水) 15:18:25 ]
Ruby はメモリも食うしな

567 名前:デフォルトの名無しさん mailto:sage [2010/04/14(水) 17:19:08 ]
つーかrubyは動作が不安だろ

568 名前:デフォルトの名無しさん mailto:sage [2010/04/14(水) 20:51:02 ]
あれだ
そもそもこのスレでRubyを出しちゃいけなかったと思うんだ

569 名前:デフォルトの名無しさん mailto:sage [2010/04/14(水) 21:57:07 ]
python厨とruby厨が仲直りするスレって昔あったよね

570 名前:デフォルトの名無しさん mailto:sage [2010/04/14(水) 22:02:51 ]
厨は天敵への偏見に使うものだと認識されているよ
日本語の基礎すら出来てないようだね



571 名前:デフォルトの名無しさん mailto:sage [2010/04/14(水) 22:06:04 ]
    ヘ⌒ヽフ
   ( ・ω・) dd
   / ~つと)


572 名前:デフォルトの名無しさん mailto:sage [2010/04/14(水) 23:01:13 ]
>>555
UTC使うのが当たり前なマだけしか使わないならいいんだけど、
そんなこと考えもしないバカがバカやらかすからそれじゃダメ。
ttp://www.itmedia.co.jp/news/articles/0811/19/news051.html

573 名前:デフォルトの名無しさん mailto:sage [2010/04/14(水) 23:03:40 ]
>>570
使い方として間違ってない気がするが、それはこの際どうでもいい。
ネットスラングの誤用で日本語の基礎力疑われるのか。
インターネットも身近になったものだ。

574 名前:デフォルトの名無しさん mailto:sage [2010/04/14(水) 23:05:17 ]
文系はこれだから

575 名前:デフォルトの名無しさん mailto:sage [2010/04/15(木) 11:27:06 ]
>>561
つまりこれからはpipでパッケージ書くのが推奨ってことでいい?

576 名前:デフォルトの名無しさん mailto:sage [2010/04/15(木) 11:51:31 ]
スラングこそ基礎力が試されるだろ
>>505みたいな基礎力がない奴が短縮化するとアホみたいなコードが出来る

577 名前:デフォルトの名無しさん mailto:sage [2010/04/15(木) 11:53:09 ]
>>575
pip はタダのインストーラで、distutilsやsetuptoolsの置き換えではなく、
setuptoolsの中のeasy_installだけの置き換え。
パッケージ作る人が使うのは、現時点ではdistributeが推奨で、distutils2 1.0が
リリースされたらそちらが推奨になる。

現時点だと、pipだとeggをインストールできないので、eggに依存しているもの
(Tracプラグインとか)はeasy_installを使わないといけない。
なので、まだコミュニティ全体の方針としてpipが推奨されている訳はない。
pipにも良いところがあるけど、使い分けが面倒だから俺はeasy_installを使っている。

578 名前:デフォルトの名無しさん mailto:sage [2010/04/15(木) 21:19:53 ]
__(ダブルアンダースコア)の名前修飾ルールについての質問です。

class Foo:
__x = 100
def func(self):
return self.__x
Foo().func() # (1)これはOK
def func(self):
return self.__x
Foo.func = func
Foo().func() # (2)これはダメ

この原因を教えて欲しいです。そもそも__xは_Foo__xという
名前に変えられてしまうのに、何故(1)のときにエラーにならないのか不明です。
クラス定義が終了した瞬間に、すべての__で始まる名前(呼出側も)書き換える、
ということなのでしょうか。

579 名前:デフォルトの名無しさん mailto:sage [2010/04/15(木) 21:24:17 ]
>>578
Yes。関数名だけじゃなくて、全部の __ が置き換えられる。
でも、 __ は非推奨。 _ だけ使えば良い。

580 名前:デフォルトの名無しさん mailto:sage [2010/04/15(木) 21:27:33 ]
インデントがorz
class Foo:
 __x = 100
def func(self):
 return self.__x
Foo().func() # (1)これはOK
def func(self):
 return self.__x
Foo.func = func
Foo().func() # (2)これはダメ

すみませんでした。



581 名前:デフォルトの名無しさん mailto:sage [2010/04/15(木) 21:31:55 ]
>>579
ありがとうございます。__はprivate(サブクラスへの隠蔽)で、_は
protected(外部への隠蔽)として使う。また、普段はprotectedで十分なので_を使う。
ということでよろしいでしょうか。

サブクラスで自由なアトリビュートを持たせられるようにするために、
この名前修飾ルールがあるのですよね。

582 名前:デフォルトの名無しさん mailto:sage [2010/04/15(木) 21:35:26 ]
>>> class Foo:
... __x = 100
... def func(self):
... return self.__x
...
>>> Foo().func()
100
>>> vars(Foo())
{}

>>> class Hage:
... def __init__(self):
... self.__x = 200
... def func(self):
... return self.__x
...
>>> Hage().func()
200
>>> vars(Hage())
{'_Hage__x': 200}

この違いは何でしょう?

583 名前:デフォルトの名無しさん mailto:sage [2010/04/15(木) 21:40:50 ]
Fooの__xの方はインスタンス変数でなくてクラス変数
vars(Foo), vars(Hoge)もみるといいと思う

584 名前:581 mailto:sage [2010/04/15(木) 21:45:21 ]
>>582
Fooでの__xはクラスのアトリビュートでインスタンスからは間接的に参照される。
Hageでの__xはインスタンスに直接所属するアトリビュート、ですよね。

P.S.
以下のコードで呼出側も修飾されることがわかりました。
>>> class Foo:
... __x = 100
... def func(self, other):
... return other.__x
...
>>> Foo().func(Foo())
100

Pythonってよくできていますね。Javaのprivateと全く同じです。

585 名前:デフォルトの名無しさん mailto:sage [2010/04/15(木) 21:46:32 ]
文系乙

586 名前:581 mailto:sage [2010/04/15(木) 21:50:45 ]
>>585
理系大学生です。でも物理の成績は悪いので、文系頭かもしれません。

587 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 11:10:11 ]
確か、完全に隠蔽するつもりはGuidoにはなかったよね。
隠蔽しなかったら、わかる人には便利だし、わからないのに使う人はタダのバカだから放っとけばいいって話だったかと。

588 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 11:34:09 ]
やべー
いままで自分が作ったクラスのメンバ全部 self.hoge って書いてた
これからは self._hoge を使わなきゃ

589 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 18:42:08 ]
Python 2.6.2のcsv書き出しについて質問です。

x=csv.writer(file(csvfile.csv,"wb"))としたとき
x.writerow(["あああ","いいい","ううう"])
と出力させたところ、生成されたcsvはメモ帳などで表示させればきちんと表示されているんですが
excelで表示させたところ文字化けします。
utf-8から、shift-jisで出力させる方法を教えて欲しいのですが。dialect='excel'としてもエラーを吐きます;

590 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 19:42:56 ]
x.writerow([u"あああ",u"いいい",u"ううう"])




591 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 19:44:26 ]
やってみます。ありがとうございます。

592 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 19:48:19 ]
駄目みたいです
もっと調べてみます。すみませんでした。

593 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 20:08:25 ]
u"あああ".encode('shift-jis')

594 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 20:43:01 ]
>>593
ありがとうございます。
レスに気付かないまま夢中でやってました;
いったん、unicodeでutf-8からunicodeへ変換して→encodeでunicode→shift-jisへ変換して無事に解決しました。
リスト化しているので、for文を使用し手前で変換しておいて吐き出すようにしようと思います。

>>590 >>593 ヒントありがとうございました。

595 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 20:48:01 ]
"あああ".decode('utf-8').encode('cp932')

596 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 20:52:46 ]
最近打ち合わせでは分かり切ったことは飛ばして話を進めているのに
知識として持っててあたりまえのことを質問する馬鹿が増えた


597 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 21:52:39 ]
Pythonで日本語の出力とか使うつもりなら
3.x使うか他の言語にした方がいいよ

598 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 22:16:22 ]
そんなばなな

599 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 23:12:52 ]
勉強会やるやる詐欺。

600 名前:デフォルトの名無しさん mailto:sage [2010/04/17(土) 01:54:13 ]
>>594
codecsは使えない?



601 名前:デフォルトの名無しさん mailto:sage [2010/04/17(土) 11:07:50 ]
>>597
同意。
2.xは本格的に文字列処理するには面倒だし、3.xでかなり変更されてるのに今更本格的に覚えるのもバカバカしいよね。

602 名前:デフォルトの名無しさん mailto:sage [2010/04/17(土) 11:57:50 ]
rubyを使えば解決だね!

603 名前:デフォルトの名無しさん mailto:sage [2010/04/17(土) 12:30:45 ]
>>602
うん。本格的な文字列処理とか正規表現とかやりたいんだったらruby使えばいいと思う。

エンコードの問題の他にもPythonは文字列処理のしにくさを抱えている。
rubyやらがどうなってるかは知らんが、Pythonでは文字列は変更不可能な型だから破壊的な処理ができなくて、
一文字でも変更しようと思ったらインスタンスを作り直すことになる。

604 名前:デフォルトの名無しさん mailto:sage [2010/04/17(土) 12:52:04 ]
じゃあperlでいいや

605 名前:デフォルトの名無しさん mailto:sage [2010/04/17(土) 14:03:37 ]
変更可能な文字列型があるのはともかく
デフォルトの文字列が変更可能なのはダメだろ……

606 名前:デフォルトの名無しさん mailto:sage [2010/04/17(土) 14:11:55 ]
ruby使うぐらいならperlの方がまだマシだな

607 名前:デフォルトの名無しさん mailto:sage [2010/04/17(土) 14:59:11 ]
ruby って結局 perl の汚いところと C++ の汚いところを両方引き継いでるよね www

608 名前:デフォルトの名無しさん mailto:sage [2010/04/17(土) 15:42:44 ]
from ctypes import *
s = "aaaaa"
get_charptr = lambda s, pos: c_char_p(memset(s, 0, 0) + pos)
memset(get_charptr(s, 2), ord('b'), 2)
print s
# ===> aabba

まったく推奨しないが、こういう変換方法もないわけではない。

609 名前:デフォルトの名無しさん mailto:sage [2010/04/17(土) 16:03:03 ]
>>608
流石にそれでctypes使うのは行き過ぎじゃないのかな
大抵arrayでいいと思う

610 名前:デフォルトの名無しさん mailto:sage [2010/04/17(土) 16:43:15 ]
以下のようにlistにして変更して最後に''.joinとかはどうだろうか。
ham = list('ham')
ham[1] = 'm'
ham = ''.join(ham)



611 名前:デフォルトの名無しさん mailto:sage [2010/04/17(土) 17:10:32 ]
>>609
>一文字でも変更しようと思ったらインスタンスを作り直すことになる。
への反例だろ

612 名前:デフォルトの名無しさん mailto:sage [2010/04/17(土) 17:13:43 ]
>>610
それはインスタンスを作り直すことになるだろ

第一listは文字列じゃないし

613 名前:デフォルトの名無しさん mailto:sage [2010/04/17(土) 17:15:49 ]
アイライクシーライク

614 名前:デフォルトの名無しさん mailto:sage [2010/04/17(土) 17:27:22 ]
>>611
は?arrayってinplaceで変更できるでしょ
x = array.array('c')
x.fromstring('abcde')
x[4] = 'D'
とか

615 名前:デフォルトの名無しさん mailto:sage [2010/04/17(土) 18:13:08 ]
arrayは文字列じゃない

616 名前:デフォルトの名無しさん mailto:sage [2010/04/17(土) 18:15:25 ]
っつーか「インスタンスの作り直し」の意味が判ってないアホがいるなw

617 名前:デフォルトの名無しさん mailto:sage [2010/04/17(土) 18:15:27 ]
ああ、Stringがimmutableな世界で、StringBuilderみたいなものも
使わない方向で考えたわけね
やっと意味分かった、すまんかった


618 名前:デフォルトの名無しさん mailto:sage [2010/04/17(土) 18:18:53 ]
>>614
先生!
s が変わりません!

>>> import array
>>> s = 'hogehogefugafuga'
>>> x = array.array('c')
>>> x.fromstring(s)
>>> x[4] = 'D'
>>> x
array('c', 'hogeDogefugafuga')
>>> s
'hogehogefugafuga'

619 名前:デフォルトの名無しさん mailto:sage [2010/04/17(土) 18:20:13 ]
>>618
うん、意図を誤解してた
「C風にinplaceなバイト列の編集がしたい」という話だと思っていて、
immutableなstringを「弄る」ことを本質だと思ってなかった

620 名前:デフォルトの名無しさん mailto:sage [2010/04/17(土) 18:23:55 ]
>>619
先生ごめん
reload してなくて入れ違いになった



621 名前:デフォルトの名無しさん mailto:sage [2010/04/17(土) 21:51:30 ]
文字列がimmutableなのは別にかまわん。
問題は、時々EUCのdecodeに失敗すること。
面倒でかなわんぜ。

622 名前:デフォルトの名無しさん mailto:sage [2010/04/17(土) 21:54:10 ]
ignore指定すりゃええが

623 名前:デフォルトの名無しさん mailto:sage [2010/04/17(土) 21:56:07 ]
>>621
euc_jpを使っているのなら
euc_jisx0213を使えば少しマシになるかも

624 名前:デフォルトの名無しさん mailto:sage [2010/04/18(日) 00:50:08 ]
>>622
今はそうしてる。
エラーがあったかわからないのが困るが…

>>623
ありがとう。試してみるよ。

625 名前:デフォルトの名無しさん mailto:sage [2010/04/18(日) 02:02:18 ]
〜が変になるね

626 名前:デフォルトの名無しさん mailto:sage [2010/04/18(日) 02:18:45 ]
誰がマッピングを間違えたんだろうな

627 名前:デフォルトの名無しさん mailto:sage [2010/04/18(日) 02:42:56 ]
カと力が間違われなくてよかったな

628 名前:デフォルトの名無しさん mailto:sage [2010/04/18(日) 14:05:07 ]
decimalってデフォルトだと四捨五入するらしいんですが
精度を2に設定した下記の計算では切り捨てられています。
これはどういうことでしょう??本来ならDecimal("2.1")になると思うのですが・・・。

>>> import decimal
>>> decimal.getcontext().prec = 2
>>> a = decimal.Decimal(str(1.01))
>>> b = decimal.Decimal(str(1.04))
>>> a + b
Decimal("2.0")


629 名前:デフォルトの名無しさん mailto:sage [2010/04/18(日) 14:20:01 ]
decimal.Decimal(str(1.01+1.04))
>Decimal("2.05")
decimal.getcontext().prec = 3
a = decimal.Decimal(str(1.01))
b = decimal.Decimal(str(1.04))
a + b
>Decimal("2.05")

630 名前:デフォルトの名無しさん mailto:sage [2010/04/18(日) 14:24:27 ]
>>> decimal.getcontext()



631 名前:デフォルトの名無しさん mailto:sage [2010/04/18(日) 14:25:54 ]
途中で投稿してしまったが、
python decimal 四捨五入
でGoogle検索すればデフォルトで四捨五入されるなんてことはないと分かるはず

632 名前:デフォルトの名無しさん mailto:sage [2010/04/18(日) 14:30:10 ]
食いつきのいいえさだな

633 名前:デフォルトの名無しさん mailto:sage [2010/04/18(日) 14:32:30 ]
食いつきのいい餌ってなんだよ
餌は生きたサメでアジでも釣るのか?

634 名前:デフォルトの名無しさん mailto:sage [2010/04/18(日) 14:34:58 ]
>>633
>>633
>>633

635 名前:デフォルトの名無しさん mailto:sage [2010/04/18(日) 14:39:58 ]
>>628
Pythonライブラリリファレンスのやつは読んだ?
DecimalはFAQもあるからそれ読んだほうがいいよ

636 名前:デフォルトの名無しさん mailto:sage [2010/04/18(日) 14:48:25 ]
pygameの64bitピルドのパージョンはリリーズされてるんですかね?

637 名前:628 mailto:sage [2010/04/18(日) 16:49:02 ]
>>631
ありがとうございます。四捨五入では無いですね。
オライリーのPythonクックブックに四捨五入って記載されていたので。。。


638 名前:デフォルトの名無しさん mailto:sage [2010/04/18(日) 16:56:34 ]
ひどすwww

639 名前:デフォルトの名無しさん [2010/04/18(日) 17:01:57 ]
>>637
四捨五入されるなんてどこにも書かれてないぞwww
ttp://www.python.jp/doc/pdf/release/tut.pdf


640 名前:デフォルトの名無しさん mailto:sage [2010/04/18(日) 17:04:38 ]
>>637
立ち読みすればわかるけどクックブックは初心者向けの章がごっそり削られてるから初心者は買わないほうがいい



641 名前:628 mailto:sage [2010/04/18(日) 18:03:39 ]
>>639
チュートリアルでなくクックブックの方です。

beebee2see.appspot.com/i/agpiZWViZWUyc2VlchQLEgxJbWFnZUFuZFRleHQYl5NlDA.jpg

p117
beebee2see.appspot.com/i/agpiZWViZWUyc2VlchQLEgxJbWFnZUFuZFRleHQYoONsDA.jpg



642 名前:デフォルトの名無しさん mailto:sage [2010/04/18(日) 21:10:09 ]
Decimal.quantizeのオプションで指定すれば四捨五入してくれる

643 名前:628 mailto:sage [2010/04/18(日) 22:51:21 ]
>>641
2枚目の写真横向きで撮ればよかった。こういうセンスが足りないんだよなぁ

644 名前:デフォルトの名無しさん mailto:sage [2010/04/18(日) 22:56:22 ]
は?

645 名前:デフォルトの名無しさん mailto:sage [2010/04/18(日) 22:59:58 ]
pythonの公式オフ会に参加した奴いる?

646 名前:デフォルトの名無しさん mailto:sage [2010/04/19(月) 01:54:45 ]
単三電池の方なら参加されたのではないでしょうか

647 名前:デフォルトの名無しさん mailto:sage [2010/04/19(月) 03:10:40 ]
彼は単二電池を入れることができるまでに成長しました

648 名前:デフォルトの名無しさん mailto:sage [2010/04/19(月) 15:14:02 ]
質問です
Pythonではglobal変数を関数内では更新できない
らしいことをようやくながらおぼろげに理解しました

複数の関数内にて更新すべきglobal変数を多く抱えている場合
これらの全てにglobal宣言していくしかないのでしょうか?

649 名前:デフォルトの名無しさん mailto:sage [2010/04/19(月) 15:15:50 ]
うん

650 名前:デフォルトの名無しさん mailto:sage [2010/04/19(月) 15:23:31 ]
>>649
そすか
こりゃ1から書き直した方が良いのかもしれん…



651 名前:デフォルトの名無しさん mailto:sage [2010/04/19(月) 15:37:00 ]
module にするだけでも楽になるよ

652 名前:デフォルトの名無しさん mailto:sage [2010/04/19(月) 16:12:17 ]
そういう場合は自分はまとめてクラスにしてしまう。

けど何か負けたような気がするのも確か。


653 名前:デフォルトの名無しさん mailto:sage [2010/04/19(月) 17:14:00 ]
辞書にすればいいんじゃね?
辞書をグローバルに置くと、辞書そのものは変更できないけど
要素は(グローバル宣言しなくても)好き勝手に変更出来る。

654 名前:デフォルトの名無しさん mailto:sage [2010/04/19(月) 17:24:03 ]
なんのためのクラスだよ
静的クラス使えばよし

655 名前:デフォルトの名無しさん mailto:sage [2010/04/19(月) 17:44:47 ]
静的クラスってなんだよ
monostateパターンのことか?

656 名前:デフォルトの名無しさん mailto:sage [2010/04/19(月) 17:49:08 ]
クラス変数と静的メソッドを併用しろってことでhそ

657 名前:デフォルトの名無しさん mailto:sage [2010/04/19(月) 17:55:22 ]
で、そのクラス変数をglobalに置いて(ry

658 名前:デフォルトの名無しさん mailto:sage [2010/04/19(月) 17:57:05 ]
マジレスすると
globals.py
とかを作ってそこに全部global変数書く

他のコードから使うときは
import globalsして、
全部
globals.foo
でいい
global文要らなくなる

659 名前:デフォルトの名無しさん mailto:sage [2010/04/19(月) 18:10:40 ]
今は角電池くらいがちょうどいいです。

660 名前:デフォルトの名無しさん mailto:sage [2010/04/19(月) 18:16:07 ]
>>658
正解



661 名前:デフォルトの名無しさん mailto:sage [2010/04/19(月) 18:25:21 ]
昔は電池と言っただけでこのスレがあっというまに埋まったのに

662 名前:デフォルトの名無しさん mailto:sage [2010/04/19(月) 18:46:19 ]
突拍子もないセンスもないので廃れました






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

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

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