1read 100read
2011年11月2期プログラム46: Pythonのお勉強 Part45 (235) TOP カテ一覧 スレ一覧 2ch元 削除依頼

Pythonのお勉強 Part45


1 :11/11/13 〜 最終レス :11/11/24
Pythonオフィシャルサイト
http://www.python.org/
日本Pythonユーザ会
http://www.python.jp/Zope/
まとめWiki
http://python.rdy.jp/
関連スレ
http://find.2ch.net/?BBS=ALL&TYPE=TITLE&STR=python
前スレ
http://hibari.2ch.net/test/read.cgi/tech/1315065159/

2 :
|....,,__
|_::;; ~"'ヽ
| //^''ヽ,,)
|  i⌒"
| ∀`) < 誰もいない きのこるならいまのうち
|⊂
| ノ
      _,,,......,,__
  /_~ ,,...:::_::;; ~"'ヽ
 (,, '"ヾヽ  i|i //^''ヽ,,)
   ^ :'⌒i    i⌒"
      |( ´∀`) < きのこ のこーのこ げんきのこ ♪
      |(ノ   |つ
      |     |
     ⊂ _ ノ
       ""U
      _,,,......,,__
  /_~ ,,...:::_::;; ~"'ヽ
 (,, '"ヾヽ  i|i //^''ヽ,,)
   ^ :'⌒i    i⌒"
     (´∀` )| < エリンギ まいたけ ブナシメジ ♪
    ⊂|  (ノ |
      |     |
      ヽ _ ⊃
      .U""
|
| ミ
| ミ  サッ!
| ミ
|

3 :
先輩方に質問させてください
RubyではなくなぜPythonを選んだのですか?

4 :
>>2は古参

5 :
Zen of Pythonに共感したから。
圧倒的にPythonの方がメジャーだから。
「国産」なんて売り文句を付けないと信者の勧誘もできない、という点に
ネガティブな印象を感じた事も否定できない。

6 :
>>3
そん

7 :
RubyからPerl臭がしたから

8 :
C(C++じゃなく)に慣れてるとRubyよりPythonの方が気持ち良い

9 :
選ぶもなにも両方自然にできるでしょ

10 :
俺も7と一緒だな。
Perlが嫌で別のを探したのに、RubyからはPerl臭がした。

11 :
   ┌─┐
   │●│
   └─┤
   _   ∩
  ( ゚∀゚)彡
┌─┬⊂彡
│●│ !!
└─┘

12 :
PyScripterは不評みたいだけど
みんなエディタとかIDEとか何つかってんの?

13 :
}やendを書く手間が省けるから

14 :
windowsではnodepad、linuxではgedit使ってる

15 :
間違えた。notepad++

16 :
vim

17 :
emacs

18 :
操作がVi(Vim)方式で、モダンなエディタが登場したら、
それを使うわ。

19 :
>>18
ideをカスタマイズすればいいんでね?

20 :
超重いけどeclipse

21 :
>>18
vi+tmuxで充分だったりする

22 :
Eric4

23 :
俺はPyScripter好きだよ。
軽いし、スクリプト実行した後やブレイクしたときに
内蔵のシェルに変数の値等が全部そのまま残ってるから
テストコードとか書かなくても色々確認できて便利だし。
単なるエディタには戻れないな。

24 :
xyzzy

25 :
>>1
ttp://python.rdy.jp/wiki.cgi?page=%B2%E1%B5%EE%A5%ED%A5%B0
ここって誰かメンテしてるの?

26 :
RoR との対比で Python で言えば django って思ってるひとは多いみたいだけど
werkzeug とか Pyramid とかが今後の流れっぽい

27 :
シンプルなものが流行るのは良い傾向

28 :
komodo edit

29 :
フレームワークとかDSLは規模がでかくなりすぎてコストに見合うか疑わしいレベルになってきてる
俺は自家製XMLテンプレートエンジンでシコシコやるわ

30 :
>>12
秀丸

31 :
>>30
オートインデントしてくれる?
ならWindowsでは秀丸使ってもいい。

32 :
Tkinterの使い方を調べているのですが
αbrendでWindowを透過させる方法はありますか?
無ければregionでも結構です
あれば教えてください

33 :
正解: tkを捨てる

34 :
>>32
tkinterはよく知らんがこれのことか?
import Tkinter as tk
root = tk.Tk()
# use transparency level 0.1 to 1.0 (no transparency)
root.attributes("-alpha", 0.3)
root.mainloop()

35 :
出来ました!!
ありがとうございます!!!

36 :
ふと思い立って
math.exp(1+1j)
とか試したらダメだった
xyzzyはできるみたいだな
まさかテキストエディタで複素解析できるとは(何に使うのか知らないが……)
(exp (complex 0 pi)) -> #C(-1.0d0 1.224606353822377d-16)
(exp (complex 0 (* 2 pi))) -> #C(1.0d0 -2.449212707644755d-16)

37 :
cmath.exp(1+1j)

38 :
>>37
サンクス!別のモジュールとは盲点だったぜ……

39 :
>>12
IDLEとかいうの使ってるわ

40 :
構文が覚えられない

41 :
考えるな、フォースを感じるんだ。

42 :
IDLE最強他は糞

43 :
pass

44 :
#!/usr/bin/python
import&ndsp;sys
if&ndsp;len(sys.argv)&ndsp;==&ndsp;2:
&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;tab&ndsp;=&ndsp;int(sys.argv[1])
else:
&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;tab&ndsp;=&ndsp;8&ndsp;
for&ndsp;c&ndsp;in&ndsp;sys.stdin.read():
&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;space&ndsp;=&ndsp;'&ndsp'&ndsp;+&ndsp;';'
&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;p&ndsp;=&ndsp;sys.stdout.write
&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;
&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;if&ndsp;c&ndsp;==&ndsp;'&ndsp;':
&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;p(space)
&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;elif&ndsp;c&ndsp;==&ndsp;'\t':
&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;for&ndsp;i&ndsp;in&ndsp;range(tab):
&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;p(space)
&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;else:
&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;p(c)

45 :
#!/usr/bin/python
import sys
if len(sys.argv) == 2:
        tab = int(sys.argv[1])
else:
        tab = 8 
for c in sys.stdin.read():
        space = ' ' + ';'
        p = sys.stdout.write
        
        if c == ' ':
                p(space)
        elif c == '\t':
                for i in range(tab):
                        p(space)
        else:
                p(c)

46 :
文字化けについて質問させてください。
# -*- coding: utf-8 -*-
print "ㅇ"
print "ㄴ"
だと正常に出力されるのですが、
# -*- coding: utf-8 -*-
print "ㄴ"
だと文字化けしてしまいます。
"ㄴ".decode("utf-8") にすると
UnicodeEncodeError: 'ascii' codec can't encode character u'\u3134' in position 0: ordinal not in range(128)
import sys
import codecs
sys.stdout = codecs.getwriter('utf_8')(sys.stdout)
を追加すると
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe3 in position 0: ordinal not in range(128)
環境はWindows7, Python2.6.1で行なっています。
出力は
>python.exe hoge.py >hoge.txt
でテキストに出力して確認しています。
どうすれば文字化けをしないようにできるのでしょうか?

47 :
pythonで、メモリ消費量を量りたい時はどうすればいい?
できれば
with memorychecker() as m:
 計測対象コード
 print m.check()
とかすればメモリ使用量が見れるとうれしい。

48 :
>>46
Python 2.x系列のprintでは、次のように、unicodeではなく標準出力のエンコーディング(Windowsならcp932)に合わせたstrを渡す必要がある。
# coding: utf-8
print u'ほげ'.encode('cp932')
unicodeを渡せるようにするには、一度エンコーディングを指定したらあとは与えられたunicode文字列をデコードして出力してくれるcodecs.getwriterを使う。
# coding: utf-8
import sys
import codecs
sys.stdout = codecs.getwriter('cp932')(sys.stdout)
print u'ほげ'

49 :
ねーねー、pipって、もしかしてバージョン番号を指定してインストールするのができない?
かなり困るんだけど・・・

50 :
pip install hoge==3.14

51 :
ド素人の質問で申し訳ありません。
↓のようにコードを実行するとエラーが出るのですが何ででしょうか…
クラスというものの仕組みがいまいち分かりません。。
class testSuperClass():
X = 5
class test(testSuperClass):
def printXvalue():
print X
test.printXvalue()

52 :
>>51
分からないなら無理に使わなくてもよい。

53 :
教えてください。
クックブックに「メソッドや関数の発行にディクショナリを使う」というのがあります。
if(多言語ではcase)の代わりに使える、との事ですが、関数を辞書に入れていくという
処理が、速度低下につながるという事はないのでしょうか。

54 :
ちょーデカいライブラリファイルhoge.pyを
import hogeして、hogeの定数を使う(tempファイルに書き出す)んだけど
書き出した後は使わない。そういう時ってhoge.pyの為に使ったメモリ量を
解放?したいんだけど、どうやるものですか?
特に動作上気にする必要はないだろうけど
どうしても気になるのです。del hogeとかやればOK?

55 :
>>53
可能性の話をしたら「ある」。
運悪くキーがことごとく衝突しまくるという可能性。

56 :
>>51
class testSuperClass():
  X = 5
class test(testSuperClass):
  @classmethod
  def printXvalue(cls):
    print cls.X
test.printXvalue()

57 :
>>54
sys.getrefcount(hoge)
とすると 3 と出る。
1つは sys.modules['hoge']
残り1つは何だ?

58 :
>>52
自分が使わない分には良いですが他の人のソースコードが読めないのは困りますね…
>>56
ありがとうございます!!!
しかし何でこう書くとうまく行くのかワカラン。。。
オブジェクト思考ムズカシス
ネットで@classmethodを調べてみたら
↓こんなのがあったのですが
class Foo():
@classmethod
def add1(cls, n):
return n + 1
Foo.add1(2)
クラス内の関数を呼び出す場合は、@classmethodを使うってこと…????

59 :
python3はいつになったらpythonになりますか?
easy_installでSyntaxErrorばかりなのは疲れたです

60 :
>>58
> クラス内の関数を呼び出す場合
それはこう
class testSuperClass():
  X = 5
class test(testSuperClass):
  def printXvalue():
    print testSuperClass.X
test.printXvalue.im_func()

61 :
何がどう違うのかワカラン

62 :
>>53 みたいに、switch文の代わりに辞書使うっての、考えたことはあるんだけど
遅そうだなと思ってやったことはなかった。この際だから、やってみた。
http://ideone.com/pcgK3 単純にメソッド返しゃいいもの
http://ideone.com/X6TC3 式をlambdaでかこって関数化する必要があるもの
やっぱ遅いな。
けど、if文の場合、なんで前者のより後者の方が早いんだ? 処理増えてるはずなのに。

63 :
>>58
まず、Pythonでクラス使うにおいて覚えておかなければいけないのは、
C++やJavaと違って、クラス内のメソッドであっても、メンバ変数やメソッドに直接アクセスできない。
直接アクセスするかわりに、第一引数にとるselfを介してアクセスする。
class Foo:
 # 略。
foo = Foo() となっているとき、 foo.method(arg) は、次のように解釈される。
Foo.method(foo, arg)
まずはその基本を叩き込め。 >>51 では、self.Xを呼び出すべきなのにXを呼び出したからエラーが出たのだろう(エラーメッセージはちゃんと書け)
@classmethod は、デコレータ表記といって、基本を分かっていないと難しいので、まだ理解しなくていいが、
class Foo:
 @classmethod
 def method(cls):
  pass
foo = Foo()
のようになっているとき、Foo.method(arg) も foo.method(arg) もどちらも
Foo.method(Foo, arg)と解釈される。

64 :
急にレベル落ちたな

65 :
>>62
辞書の定義を外に出したら速くなった気がする。
http://ideone.com/ORQxP
最初は例外が遅いのかと思ってtry-exceptの代わりに.get()を使うようにしてみたんだけど、そしたらさらに遅くなった。

66 :
なんか速度にこだわってる奴よくいるけど読みやすさ優先じゃなかったらPython使う意味ないだろ
だいたいプログラム書いてからプロファイルとって最適化するのが正道だと思うんだが

67 :
>>66
お前が正しい

68 :
しかし放っておくとどんどんくっついて膨らんでいくからな
遅いと分かっているコードを書きたくない気持ちも分かる

69 :
>>50
>pip install hoge==3.14
動作確認した。ありがとう。
でもヘルプメッセージには書いてなさそう。

70 :
>>48
レスありがとうございます。
試したところ
UnicodeEncodeError: 'cp932' codec can't encode character u'\u3147' in position 0: illegal multibyte sequence
になってしまいました。

71 :
>>46
結論から言うと、それはPythonの問題ではない。
出力したテキストを閲覧するときに使ったエディタの問題。
エディタが文字コードの自動判定を行いやすくなるよう
余計なBOMでも先頭に出力しておくといい。
# -*- coding: utf-8 -*-
import codecs
import sys
sys.stdout.write(codecs.BOM_UTF8)
#print "ㅇ"
print "ㄴ"

72 :
>>71
ありがとうございます。
…こんな所を見落としてたなんて。

73 :
rubyに %w(foo bar hoge) が ['foo', 'bar', 'hoge'] と等価になる記法があるのですが、
pythonにこれと同じ記法はありますか?

74 :
>>73
ないよ。
書きやすさ重視の言語じゃないし。
'foo bar hoge'.split()
とするしかないね。

75 :
>>74
ないのか、残念。
レスありがとうございました。

76 :
>>73-75
'foo bar hoge'.split()
じゃだめなの?

77 :
しまった、すでに74に書かれてた。
ちょっと埋まってくる。

78 :
u'foo bar hoge'.split()
だと繋がる不思議

79 :
%w(foo bar hoge)
なにこれ?こんな構文がいくつもあるの?
3日触れなきゃ完全に忘れそうだな

80 :
繋がるとはどういう意味?
>>> u'foo bar hoge'.split()
[u'foo', u'bar', u'hoge']

81 :
>>68
>しかし放っておくとどんどんくっついて膨らんでいくからな
非論理的すぎて失笑レベル

82 :
>>79
Perlにあるからなあ
Rubyは名前もだが、中身もかなりPerlを意識してるから入れたんだろう

83 :
>>81
まともなコードはどんどん使い回していくからなんのかんのとくっつく(依存していく)もんなんだよ
そのうち当初考えもしなかった使われ方をして妙なところでボトルネックになるよりは
そういう懸念を少しでも減らしておきたいと思うのも人情という意味

84 :
最適化はあとでやればいい。
「早すぎる最適化」って言うでしょ。

85 :
パフォーマンス気にする人が測らずに終わることはないよ大抵
直感的な分かりやすさだって気にすると思うけど伝わらないようだからもういいや

86 :
小手先のテクニック頑張って覚えても実装やらバージョンやらプラットフォームが変わった程度で無駄になると思う
つまりお前のやってることはほぼ無駄な努力ってみんなあえて言わないだけ

87 :
そんなに気になるならCで書け。

88 :
>>87
最適化をコンパイラにおまかせしちゃうならCで書いた方が楽だけれども
命令ごとのスピードを気にして書くならアセンブラの方がいいかもね。

89 :
Z80機械語ならまかせろ

90 :
DJNZ と django が似てる件

91 :
Pythonのはなしをしなさい。

92 :
そういえば年末か年明けに出るね
ラクダ本の新版が

93 :
Perlはオワコン

94 :
unittestで、ある特定のテストだけを実行する方法は?

95 :
プログラムの引数にテスト名を指定するだけ

96 :
関数を変数に代入し、その変数を関数として使っているコードをチラホラを見かけます。
どんなメリットがあるのでしょうか?

97 :
突き放すわけじゃないけどそのコード見て必要性が分からないうちは使う必要ないよ

98 :
>使う必要ないよ
使いたい訳ではないのです。勉強中なので、色々なTipsやテクニックの趣旨や
メリットデメリットを知っておきたいのです。

99 :
boost::python (2.x) で std::wstring の受け渡しってどうするの?

100read 1read
1read 100read
TOP カテ一覧 スレ一覧 2ch元 削除依頼