Pythonのお勉強 Part33 at TECH
[2ch|▼Menu]
1:デフォルトの名無しさん
09/04/26 01:48:01
Pythonオフィシャルサイト
URLリンク(www.python.org)
日本Pythonユーザ会
URLリンク(www.python.jp)
まとめWiki
URLリンク(python.rdy.jp)
関連スレ
URLリンク(find.2ch.net)
前スレ
スレリンク(tech板)

2:デフォルトの名無しさん
09/04/26 02:03:24
  _  ∩
( ゚∀゚)彡 おっぱいそん!おっぱいそん!
 ⊂彡

3:デフォルトの名無しさん
09/04/26 03:40:09
ぱいちんこ

4:デフォルトの名無しさん
09/04/26 05:48:04
ぱいぱい! ぱいぱい!

5:デフォルトの名無しさん
09/04/28 00:28:12
10分前にPython 3.0.1インタプリタをダウンロードしたものですが
>>> "hello world"
'hello world'
>>> print "hello world"
File "<stdin>", line 1
print "hello world"
^
SyntaxError: invalid syntax
これはどういうことでしょうか?
いきなり挫折しそうです

6:デフォルトの名無しさん
09/04/28 00:31:56
print ("hello world")
自己解決すますま

7:デフォルトの名無しさん
09/04/28 00:32:46
Python3はprintが関数に変わったんで
print("hoge")
ってやらなきゃ駄目なんじゃね

8:デフォルトの名無しさん
09/04/28 00:37:20
>>6
Python 3.0 はまだαだから開発者以外手を出すな。
Python 3.1 はまだβだから一般人は手を出すな。
Python 3.2 はまだRCだから初心者なら手を出すな。
Python 3.3 から初心者もOK。

今、「環境変数取得APIをUnicodeにしちゃったけど、ちゃんとデコードできない
バイナリ列どう扱えばいいと思う?」とか議論しながらAPIを整備中。

9:デフォルトの名無しさん
09/04/28 00:44:12
3.4になったら本気出す。

10:デフォルトの名無しさん
09/04/28 01:18:55
入門書嫁
URLリンク(www.amazon.co.jp)


11:デフォルトの名無しさん
09/04/28 12:43:20
うちのはPython 2.4だけど
俺がPythonを覚えられない原因がわかったよ


12:デフォルトの名無しさん
09/04/28 13:56:03
3.4に手を出すと色々対応してくれるまで待つのが長いね

13:デフォルトの名無しさん
09/04/28 17:03:15
なんだ、ABCでもダックタイピングできるんじゃねえか
ABCMeta.registerとかってなんのためにあるんだよ

import collections

class Con():
    def __contains__(self):
        pass
    
class NotCon():
    pass

print(issubclass(Con,collections.Container))
print(issubclass(NotCon,collections.Container))

14:デフォルトの名無しさん
09/04/28 17:04:27
>>13
うっかり結果を書くのを忘れた
print(issubclass(Con,collections.Container)) # ==>True
print(issubclass(NotCon,collections.Container)) # ==> False

15:デフォルトの名無しさん
09/04/28 17:35:35
>ABCMeta.registerとかってなんのためにあるんだよ
自己解決。collectionのABC実装を見たところ、
ダックタイピングしてもissubclassで型チェックできる
=issubclassの結果を変える__subclasshook__があるのは
実装のないBaseClassのみだったんだよね。

つまり実装のあるBaseClassに関してはするか
手動でメソッドチェックしてregisterしないといけない。うーん……

16:デフォルトの名無しさん
09/04/28 19:16:30
と、思ったけどregisterって動的継承するわけじゃないのか
isinstanceやissubclassが通るようになるだけで、
MutableMappingをregisterしてもpopを自動的に実装してくれるわけではない……
CのクラスをABCに登録するとき用と考えたほうがいいのかなあ……

17:デフォルトの名無しさん
09/04/28 19:53:35
と、いうわけで、未知のクラスにabstractmethodで指定したメソッドが実装されているかのチェックと、
もし可能であれば対応するAbstract Base Classを継承したクラス用
インターフェースを作成する関数を作ってみた。

def is_abc_castable(instance, C):
    return all(
        any(hasattr(Base, abm) for Base in type(instance).__mro__) 
               for abm in C.__abstractmethods__)

def abc_cast(instance, C):
    if isinstance(instance, C):
        return instance

    if is_abc_castable(instance, C):
        class Wrapper(type(instance), C):
            def __init__(self, hold):
                self._hold = hold

            def __getattr__(self, attr):
                return getattr(self._hold, attr)
        
        return Wrapper(instance)

    raise TypeError("Can't cast")

18:デフォルトの名無しさん
09/04/28 19:59:40
連投すまん。
これは関数内部でダックタイピング的なチェックを行い、チェックが通ったら動的継承を行う。
委譲ラッパーを使うので関数の外部に影響を及ぼさない。

class Interval(metaclass = abc.ABCMeta):
    @abc.abstractmethod
    def begin(self):
        return NotImplemented

    @abc.abstractmethod
    def end(self):
        return NotImplemented

    def __str__(self):
        return "({begin}, {end})".format(begin = self.begin(), end = self.end())

class DuckInterval():
    def __init__(self, begin, end):
        self._begin = begin
        self._end = end
        
    def begin(self):
        return self._begin

    def end(self):
        return self._end

19:デフォルトの名無しさん
09/04/28 20:00:04
def interval_print(interval):
    if is_abc_castable(interval, Interval):
        casted = abc_cast(d, Interval)
        print(str(casted))
    else:
        print("This is not Interval.")

if __name__ == "__main__":
    d = DuckInterval(1,2)
    interval_print(d) # ==> (1, 2)
    print(isinstance(d, Interval)) # ==> False

print(str(d)) # ==> <__main__.DuckInterval object ...>


20:デフォルトの名無しさん
09/04/29 15:48:36
numpy.arrayじゃなくて
素のlistで行列計算をやってくれるlibraryはないのでしょうか

cのshard libなど(lapack.soなど)を読み込めない環境で数値計算したいのです


21:デフォルトの名無しさん
09/04/29 16:53:07
pythonのコードが2chでは潰れてしまうから、勉強がてら変換コマンドをつくってみようと思ったら、>>1のまとめサイトにあったw
やっぱりみんな考えることは同じだぬ・・

22:デフォルトの名無しさん
09/04/29 19:47:14
3.1は全角でも実行可能

23:デフォルトの名無しさん
09/04/29 22:28:31
まじで?

24:デフォルトの名無しさん
09/04/29 23:51:19
コードの半角スペースはそのまま書き込んでいいから自己アンカー付けるようにしてくれよ。そうすりゃ專ブラのポップアップでちゃんと表示できるから。
レス番選択→右クリック(Janeのバヤイ)でもポップアップできるけどメンドい。

25:デフォルトの名無しさん
09/05/02 11:25:07
PythonPath を call multiply multiply 3 2 として、
PyScripterで2.6と3.01を両方起動できるようになったんだけど
call multiply multiply 3 2 はどういう意味ですか?
あと、3.1もリリースされているけど、今のPyScripterでは
使えないですか?

26:デフォルトの名無しさん
09/05/02 22:49:40 BE:544161986-PLT(12000)
Pythonはじめました

27:デフォルトの名無しさん
09/05/02 22:57:42
がんばって

28:デフォルトの名無しさん
09/05/04 09:12:35
Pythonの並列計算用のppっていうのって、Core2Duoとか同じマシン上のマルチコアでも並列化してくれるの?


29:デフォルトの名無しさん
09/05/04 09:31:11
解答まだ?

30:デフォルトの名無しさん
09/05/04 09:40:52
がんばって

31:デフォルトの名無しさん
09/05/04 11:28:19
Pythonに限った話じゃないかもしれませんが、2つの整数が与えられたとき異なるビットの数を求めるよい方法はないでしょうか?たとえば、1111(=15)と1001(=9)が与えられたら真ん中の2つのビットが異なるので2を返したいのです。

32:デフォルトの名無しさん
09/05/04 11:34:30
釣りだとおもうけど
ヒント:XOR

33:デフォルトの名無しさん
09/05/04 11:40:56
Pythonは超初心者だけど、こんな感じかな?

str1 = format(15, 'b')
str2 = format(9, 'b')
count = 0
i = 0
while i < len(str1):
if str1[i] == str2[i]:
count += 1
i += 1
print count

34:デフォルトの名無しさん
09/05/04 11:56:43
>>32 >>33
アドバイスありがとうございます。

>>32
XORとると0110(=5)になって1の場所数えればよいわけですね。でも肝心の5という数値をビット列と見なす方法がわかりません・・・

>>33
Python2.5なのでformatメソッドがないのですが、推測するにstr1=format(15, 'b')って'1111'を返してくれるのでしょうか?それならすべてOKなのですが、2.5の範囲で同じことできないでしょうか・・・

35:デフォルトの名無しさん
09/05/04 11:57:05
PYTHONてバイナリ値を
いきなり文字配列に入れられるのか
便利だな

36:デフォルトの名無しさん
09/05/04 11:58:47
すみません、自己レスですが、python binary formatでぐぐったら
>>> bstr_pos = lambda n: n>0 and bstr_pos(n>>1)+str(n&1) or ''
>>> bstr_pos(15)
'1111'
という方法を見つけました!これでできそうです。アドバイスありがとうございました。

37:デフォルトの名無しさん
09/05/04 11:59:21
メソッド名やアトリービュート名の先頭につけるアンダースコア(_)
アンダースコアが1つついているのと、2つついているのの
違いってなんでしたっけ?

38:デフォルトの名無しさん
09/05/04 12:05:19
マスクBITをANDで順次
0にならない値をカウントとか

39:デフォルトの名無しさん
09/05/04 12:08:12
>>32
2で割る

40:デフォルトの名無しさん
09/05/04 12:09:36
アンカ間違えた >>34
しかも 5 じゃなくて 6 だし・・・

41:デフォルトの名無しさん
09/05/04 13:11:10
4桁のバイナリなら
汎用なら
(4BITの場合)
XORでもとめた値を
0001=1
0010=2
0100=4
1000=8
を順次に対象の値とAND演算
結果が0にならない値をカウント
だよね

42:デフォルトの名無しさん
09/05/04 13:17:09
ゴメン、”てにをは”がおかしかった…

43:デフォルトの名無しさん
09/05/04 19:46:51
1bitずつ右シフトして1とandとった方がよっぽどマシだろ。
何がどう汎用なのか小一時間

44:デフォルトの名無しさん
09/05/04 22:33:50
初心者スレにまでPython叩きに来る信者って
惨めだな

45:デフォルトの名無しさん
09/05/05 00:54:31
右シフトとかアセンブラじゃないんだから
よく知らないけどCとかJAVAはできるの?

46:デフォルトの名無しさん
09/05/05 00:58:39
CでもJavaでもPythonでも右シフト演算子はあるよ。
シフト演算子が無くても整数型を2で割るだけだから、できない言語の方が少ない。

47:デフォルトの名無しさん
09/05/05 03:15:49
というか、とりあえずhamming distanceでぐぐれ。

48:デフォルトの名無しさん
09/05/05 04:11:47
ググった。
 unsigned dist = 0, val = x ^ y;
  while(val) {
    ++dist;
    val &= val - 1;
  }
   return dist;

クヌースさん、歪みねぇな。

49:デフォルトの名無しさん
09/05/05 12:47:03
それってクヌースが考えたの?

URLリンク(gurmeetsingh.wordpress.com)
の 2a) 2b) は Peter Wegner となってる

50:デフォルトの名無しさん
09/05/05 15:28:39
WikipediaにはKnuth's Algorithmって書いてあったけど、
本の初出が1968みたいだからPeter Wegnerのほうが先なのかな。
先にペーパー出してるかもしれないし、よく分からん。

51:デフォルトの名無しさん
09/05/06 18:35:12
>>46
整数型に対する右シフトは、Cだと結果が未定義だぞ。
符号無し整数型ならOKだが。

52:デフォルトの名無しさん
09/05/06 19:04:20
仕様厨か?

53:デフォルトの名無しさん
09/05/06 19:57:46
違う。右シフトするときにMSBがどう処理されるかの、現実的な問題だ。
gccで試したら、-2を右1ビットシフトすると-1になった。
処理系によっては、INT_MAXになるはず。
で、前者だと>>46の通り整数型を2で割ったのと等しいが、今回の目的には使えない。
後者だと今回の目的に使えるが、整数型を2で割るのと結果が異なる。

54:デフォルトの名無しさん
09/05/06 20:01:06
1になってるbit数数えるのが目的の用途に符号なし整数使わず
わざわざ整数型持ってくる香具師が馬鹿でFA?

55:デフォルトの名無しさん
09/05/06 20:06:04
いや、>>51=>>53は仕様厨ではなく、指摘が回りくどくて揚げ足取りになってるでFAだ。
(おれがその>>51=>>53本人だが)

56:デフォルトの名無しさん
09/05/06 20:58:26
1ビット2ビット帰れない〜

57:デフォルトの名無しさん
09/05/06 21:41:21
うーん、あまりにも小さなネタ過ぎるのか、アルゴリズムの本やそれこそKnuth本を当ってもHamming Distanceの計算方法が見付からないな...
誰かKnuth本の出てる場所知ってたら教えてくれろ。


58:デフォルトの名無しさん
09/05/06 22:22:00
差分をとるのはXORで明白だから、
調べるなら>>49みたいに"bit count"のほうがいいんじゃない?

59:デフォルトの名無しさん
09/05/06 23:07:27
あーーーーーーがらっとるーーーーーーーーーーーーーーーー
なにがったんじゃーーーーーーーーーーーーーーーーーーーーーーー


60:デフォルトの名無しさん
09/05/08 08:26:19
ubuntuを最近の9.04にして
何かアプリいれると勝手にpython2.6が入るぞ

61:デフォルトの名無しさん
09/05/08 08:33:11
別にUbuntuじゃなくても

62:デフォルトの名無しさん
09/05/08 11:58:45
debianとか誰に必要とされてるんですか?
osにお金も払えない貧乏ニンですよね

63:デフォルトの名無しさん
09/05/08 12:13:35
貧乏人でもいいじゃない。
心が貧しくて卑しい >>62 より

64:デフォルトの名無しさん
09/05/08 16:18:22
実際、フリーソフト教って怪しいよね

65:デフォルトの名無しさん
09/05/08 16:35:20
ソース公開されてなきゃ気持ち悪くて使えないって人とか?
使うソフトいちいちソース調べてるんか

66:デフォルトの名無しさん
09/05/08 17:07:33
x = [1, 2]
x += [9, 8]
x == [10, 10]
True

みたいな事ができる、メソッドか関数か計算式ってありませんか?

67:デフォルトの名無しさん
09/05/08 17:30:00
マッピー

68:デフォルトの名無しさん
09/05/08 17:30:07
map(lambda x, y: x + y, [1, 2], [9, 8])

69:デフォルトの名無しさん
09/05/08 17:35:12
In [3]: from operator import *
In [4]: map(add, [1,2], [9,8])
Out[4]: [10, 10]
もしくは
In [5]: [x+y for x,y in zip([1,2], [9,8])]
Out[5]: [10, 10]

70:デフォルトの名無しさん
09/05/08 19:23:41
>>65
何か悪いことが起きたら、ソースを読むw

71:デフォルトの名無しさん
09/05/08 20:03:57
import numpy
x = [1, 2]
x = numpy.add(x, [9, 8])

72:デフォルトの名無しさん
09/05/09 00:38:22
>>68-71
どれが一番速いですか?
どれが一番メモリ効率良いですか?

73:デフォルトの名無しさん
09/05/09 01:17:55
キー・タイプ数の点で早いのは>>69

モジュールをインポートする必要がないという点で
メモリ効率が良いのは>>68

74:デフォルトの名無しさん
09/05/09 02:43:36
>>73
>>69のリスト内包は>>68より効率が悪いの?

75:デフォルトの名無しさん
09/05/09 03:39:16
>>70
俺は直す知識が無いからパッチ書いたりとか出来ないけど
ハードコーディングされてて使い難いと思ったところを
ちょこちょこっと書き換えて自分ライクにしたりとかはある。

76:デフォルトの名無しさん
09/05/09 05:34:00
zipの中身ってyieldだっけ?

77:デフォルトの名無しさん
09/05/09 05:35:49
3.0

78:デフォルトの名無しさん
09/05/09 15:42:04
>>68-69,71の中では>>71が一番処理速度は早いですよね?

79:デフォルトの名無しさん
09/05/09 16:35:37
>>78
自分で測定しろや

80:デフォルトの名無しさん
09/05/09 16:52:02
天下のnumpy様に
標準ライブラリや組み込み関数が勝てるわけないだろう。

81:デフォルトの名無しさん
09/05/09 17:07:07
>>78
やってみたぞ。

a, bをランダムな整数10000要素のリストとして

1. map(operator.add, a, b)
2. map(lambda x,y: x+y, a, b)
3. numpy.add(a,b)

を各1000回実行するのにかかった時間をtimeitモジュールを使って測定した結果は
以下のとおり。(CPU: Core2Quad Q6600, OS: Linux 2.6.28, Python: 2.6.2)

1. 0.977833986282
2. 1.91782212257
3. 0.0156099796295

ということで当然ながらnumpyの圧勝。
ただし、最初にnumpy.array()でシーケンスをnumpy.ndarrayに変換しておく必要あり。
これをやらないと逆に一番遅い。

82:デフォルトの名無しさん
09/05/09 17:45:19
>>78-80
numpyは中身がlapackかなんかじゃなかった?
どっちにしても一部cで書かれてるから場合によってはnumpyが早いかもね

正直言うと全部pythonのlistのまま処理してくれないとめんどくさくて嫌なんだけどね
arrayってなんだよ

83:デフォルトの名無しさん
09/05/09 18:10:57
numpyとscipyとpylabとmatplotlibの関係が良く分かんないんだけど。


84:デフォルトの名無しさん
09/05/09 18:28:23
>>> _lambda.repeat(1,100000);_operator.repeat(1,100000);_numpy.repeat(1,100000)
[0.5832531788257711]
[0.43510585842614091]
[1.2607769981939327]

85:デフォルトの名無しさん
09/05/09 19:10:13
>>84
なにこれ

86:デフォルトの名無しさん
09/05/09 19:59:17
>>83
おまい使ったことないだろ。使えばすぐに分かるぞ。

おおざっぱに言うと、numpyで効率的なn次元配列及びそれらに対する
基本的な演算が与えられ、それを使ってscipyで計算をし、
結果をプロットするのがmatlabplotだ。

87:デフォルトの名無しさん
09/05/09 21:28:07
スクリプト系は結局こうなるよな。
アルゴリズムの知識じゃなくて、モジュールの知識。

88:デフォルトの名無しさん
09/05/09 21:32:43
最近の言語はそうじゃない?
今C#やってるけど、ひたすら.NETFrameworkの使い方調べてるぞ。

89:デフォルトの名無しさん
09/05/09 21:34:30
>>87
ある程度ライブラリが揃っていれば、スクリプト言語かどうかに関係なく
どの言語も似たようなものだろ。

90:デフォルトの名無しさん
09/05/09 23:05:14
Python 2.x ではstatementだったexec が3.0ではfunctionになりましたが、
2.xと3.0の両方で動作するように書くにはどうしたらいいでしょうか。
exec '....' in globals, locals # 2.x
exec('.....', globals, locals) # 3.0

globalsとlocalsを指定しなくていいなら exec('....') でいいのですが、globalsとlocalsも指定して、なおかつ2.xと3.0の両方で動かしたいです。

91:デフォルトの名無しさん
09/05/10 00:20:09
from __future__ import exec
exec('.....', globals, locals)

とかすればできるのかな。
future文使ったことないから知らん。

92:デフォルトの名無しさん
09/05/10 00:50:52
pythonで動画扱いたいのですが
どのライブラリがお勧めですか?

93:デフォルトの名無しさん
09/05/10 01:28:57
速さは分かったけど
メモリ効率って
どうやって調べられるん?

94:デフォルトの名無しさん
09/05/10 02:39:10
topでresident sizeでも見れば?大雑把な指標にはなる。

95:デフォルトの名無しさん
09/05/10 02:50:22
resourceモジュールだっけな、もう忘れた

96:デフォルトの名無しさん
09/05/10 07:22:06
resourceモジュールってgetrusage()呼んでるだけだよな。
ということはtopを見れば十分という話だな。
WindowsでもProcess Explorer使えば同様にモニタリング出来るし。

97:デフォルトの名無しさん
09/05/10 07:24:00
MacOS XでPython3.0を使っているのですが、help()を使うとときどき
UnicodeEncodeError: 'shift_jis' codec can't encode character '¥xab' in position 3701: illegal multibyte sequence
というエラーがでます。
たぶんデフォルトの文字コードがshift_jisになっているせいだと思いますが、
デフォルトの文字コードをutf-8に変更するにはどうしたらいいですか。
できればLANG以外の方法で。

98:デフォルトの名無しさん
09/05/10 10:59:04
>¥xab

\が全角だから

99:デフォルトの名無しさん
09/05/10 11:03:21
円マークじゃなくて、\x5c の文字である必要があるから、環境によってはバックスラッシュかもね。

100:デフォルトの名無しさん
09/05/10 11:47:29
import math
print math.e ** (1j * math.pi) がOKで
print math.exp(1j * math.pi) がNGなんだけど

expがcomplex を受け取らないのは何か理由があるの?

101:デフォルトの名無しさん
09/05/10 12:20:21
>>101
複素数用にcmathが用意されてるから。cmath.exp()を使え。

102:デフォルトの名無しさん
09/05/10 12:57:53
expがcomplex を受け取らないのは何か理由があるの?

103:デフォルトの名無しさん
09/05/10 13:03:17
ソース読んで自分で調べろボケ

104:デフォルトの名無しさん
09/05/10 13:54:36
>>103
お前初めてかここは、力抜けよ

105:デフォルトの名無しさん
09/05/10 13:57:09
みんなのPython 改訂版 が出たと思いますが
初心者にはおすすめでしょうか?
まったくの初心者です。

106:デフォルトの名無しさん
09/05/10 14:00:47
プログラム初心者ならみんパイ
Python初心者ならはじパイって感じじゃね?
amazonのレビューとかは気にすんな

107:デフォルトの名無しさん
09/05/10 14:15:06
ありがとうございます。参考になりました。

108:デフォルトの名無しさん
09/05/10 14:26:20
URLリンク(docs.python.org)
>It is not recommended to try to write source code that runs unchanged under both Python 2.6 and 3.0;
訳) 2.6と3.0の両方で動くように書いたらダメってGuidoが言ってた

109:デフォルトの名無しさん
09/05/10 14:50:35
>>104
>>101で答えてやったのに、補足もせずに全く同じ質問をぶつけてきたら
頭に来るだろ。

110:デフォルトの名無しさん
09/05/10 15:06:22
裏でなにが行われてるか知らないとキモチワルイ!
ってタイプの人なんだろう。
でもそういう人はソースくらい自分で読めないとね

111:デフォルトの名無しさん
09/05/10 15:48:31
どうせいつものなりすまし厨だろ。

112:デフォルトの名無しさん
09/05/11 00:23:14
おっぱいそん初心者です。

固定長データの中に16進コードで日本語の地名が入っているのですが、
それを日本語で出力するにはどうしたらいいのでしょうか。
(例えば、「東京」ならデータ中には 「93 8C 8B 9E」 とshift jisで入っています)

固定長のデータを変数に入れたとして、
b='93'
c='8C'
d = '\x' + b + '\x'+ c
として「東」 を表示しようとしましたが、dに代入するところですでにエラーが。
どなたかお助けを…


113:デフォルトの名無しさん
09/05/11 00:48:07
とりあえず
d = r'\x' + b + r'\x'+ c

114:デフォルトの名無しさん
09/05/11 00:59:12
あ、それだと駄目なのか

115:デフォルトの名無しさん
09/05/11 01:10:38
>>> s = ["93", "8c", "8b", "9e"]
>>> print "".join(chr(int(x, 16)) for x in s)
東京

116:デフォルトの名無しさん
09/05/11 03:12:10
>>109
>104 が答えになってないだろ

117:デフォルトの名無しさん
09/05/11 03:22:47
頭に血が登ってアンカー間違えたか?
くだらん言いがかりつける暇あるなら調べろよカスが

118:100
09/05/11 06:17:42
python に慣習、主義があって
それにしたがってんのかと思い聞いてみたんだが
この感じだとそんなんじゃ、なさそうやね。
単に処理速度の問題かな。

自分のコピペんのせいで荒れるの嫌だから
一応念のためにいうけど>>100 とこのレス以外は別人なんで、よろしく。

119:デフォルトの名無しさん
09/05/11 08:45:22
2.6用
3.0用
のコードをブランチで分けて
darcsで同じパッチ当てながら開発って

クエン酸いれたらどうっすかなみのアイデアですか


120:デフォルトの名無しさん
09/05/11 09:26:32
>>117
血が昇る
では?

121:デフォルトの名無しさん
09/05/12 00:52:01
2.x系と3.0とを判定するよい方法はありますか。
現在は sys.version.startswith('3') で調べていますが、もっといい方法はありますか。

122:デフォルトの名無しさん
09/05/12 00:54:26
>>108
>訳) 2.6と3.0の両方で動くように書いたらダメってGuidoが言ってた

原文は It is not recommended だから、ダメじゃなくて おススメしないというだけだよね。

123:デフォルトの名無しさん
09/05/12 01:10:46
>現在は sys.version.startswith('3')で
それでいいんじゃないかと思うけど


適当に考えついた他の例
def is_python3_or_later():
 return range(0) != list(range(0))

124:デフォルトの名無しさん
09/05/12 06:32:31
>>121
sys.version_info >= (3, 0, 0)じゃだめ?

125:デフォルトの名無しさん
09/05/12 14:19:30
URLリンク(www.amazon.co.jp)

激しいクソ本臭がするんだが気のせいかな?

126:デフォルトの名無しさん
09/05/12 16:07:35
合格です
おめでとう

127:デフォルトの名無しさん
09/05/12 16:10:09
('3')が顔文字に見えてきた

128:デフォルトの名無しさん
09/05/12 16:33:12
>>125
ググってみたら、著者はzope、ploneな人たちっぽい...orz...。

129:デフォルトの名無しさん
09/05/12 16:55:34
>>124
sys.version_info なるものがあるのか! これは助かりました。ありがとうございます。

130:デフォルトの名無しさん
09/05/12 18:06:52
>>125
いつのまにかこんな本も出てたんだね
URLリンク(www.amazon.co.jp)

131:デフォルトの名無しさん
09/05/12 18:12:57
>>130
それちょっと気になってる。

132:デフォルトの名無しさん
09/05/12 18:15:13
>>130
その本はひどく読みづらい日本語で書いてあったなあ
あと、著者はPython分かってないと思う(w

133:デフォルトの名無しさん
09/05/12 18:28:37
10日で〜シリーズはそういう層がターゲットだからあんまり期待してもしょうがないでしょ。
それにしてもそんな本でなんでそんなに著者が多いのか・・・


134:デフォルトの名無しさん
09/05/12 18:32:16
束になってウンチ本を書いたんですね。ご苦労様です。

135:デフォルトの名無しさん
09/05/12 23:21:24
>>130のは少なくとも入門書てしては失敗してると思う・・・
Python云々ではなく

136:デフォルトの名無しさん
09/05/12 23:21:35
>>115
ありがとーん。
配列なめるあたりも分かりやすいですね。

いつもどおりにawkで書いたのですが、ユーザー関数つくらないとダメでした。
真剣にぱいてん(他言語からPythonへ転向)を考えております…

137:デフォルトの名無しさん
09/05/12 23:57:05
>>130
この本は、著者タソの才能が著しく低いか、やっつけで書いたのかどっちかだとおもう。
内容については1万歩譲るとしても、書籍として成り立ってない。

138:デフォルトの名無しさん
09/05/13 00:19:34
DRYが説明なしにでてきた気がするんだが説明されてた?
Pythonエクスプローラのときはちゃんと説明あったが

139:デフォルトの名無しさん
09/05/13 00:33:23
ドジャンゴってゾープと似てね?
使ってる人たちが。

140:デフォルトの名無しさん
09/05/13 00:58:22
>>132 >>135
ありがとう
Amazonのレビューにだまされるとこだったw

141:デフォルトの名無しさん
09/05/13 01:01:55
>>137
そういうのは編集者の方でなんとかすることは出来なかったんだろうか?

142:デフォルトの名無しさん
09/05/13 01:05:06
ploneってゾープと似てね?
使ってる人たちが。

143:デフォルトの名無しさん
09/05/13 03:29:28
てか、PloneってZopeの直系っしょ?


144:デフォルトの名無しさん
09/05/13 04:04:13
pythonってrubyと似てね?
使ってる人たちが。


145:デフォルトの名無しさん
09/05/13 06:51:49
そりゃねーわ

146:デフォルトの名無しさん
09/05/13 07:50:57
ダンジョーはこんなもの。
それが感想。大勢で書いた割にはgdgdだったし。

147:デフォルトの名無しさん
09/05/13 08:42:12
勘のいい奴はみんPyを買うということか...?

URLリンク(www.amazon.co.jp)
23%のカスタマーが
みんなのPython 改訂版を購入しています

URLリンク(www.amazon.co.jp)
15%のカスタマーが
みんなのPython 改訂版を購入しています

URLリンク(www.amazon.co.jp)
12%のカスタマーが
みんなのPython 改訂版を購入しています


148:デフォルトの名無しさん
09/05/13 08:57:46
はじめてのPythonをやってから
リファレンスとか見れば良いだけのような。

はじめてのPythonやってないと
細かな罠にひっかかりまくると思うぞ。

149:デフォルトの名無しさん
09/05/13 09:50:36
>>148
>細かな罠にひっかかりまくると思うぞ。

やっぱり勘の悪い人が買うんだ(笑)。

150:デフォルトの名無しさん
09/05/13 10:51:17
>>149
えっ??

151:デフォルトの名無しさん
09/05/13 12:47:55
恥ぱいで身につくとは思えない

152:デフォルトの名無しさん
09/05/13 12:49:55
パイチュー

153:デフォルトの名無しさん
09/05/13 13:28:21
>>151
身についたと思っているカンの悪い人が上に居るみたいだ。

154:デフォルトの名無しさん
09/05/13 13:46:09
rubyの%記法の文字列リテラルみたいな物ありますか?

%w[foo bar baz] 

['foo', 'bar', 'baz']と等価になる物です。

155:デフォルトの名無しさん
09/05/13 14:12:09
>>154
よく使われるのは "foo bar baz".split()
.split() を省略するためだけにそんな特殊な表記を導入したくないな。

156:デフォルトの名無しさん
09/05/13 15:28:37
どこのpearl

157:デフォルトの名無しさん
09/05/13 15:49:06
Rubyも結構変なことやってんだな

158:デフォルトの名無しさん
09/05/13 16:07:13
>>155
なるほど、ありがとうございます

159:デフォルトの名無しさん
09/05/13 16:10:41
{'foo':'foo', 'bar':'bar', 'baz':'baz'}
print '%(foo)s %(bar)s %(baz)s'%x

160:デフォルトの名無しさん
09/05/14 00:50:57
みんpyとか・・・・ ワロスw

あんな本意味なし。ゴミくずだ。

161:デフォルトの名無しさん
09/05/14 00:55:25
初版は産廃だったけど改訂版はだいぶ持ち直してるみたいだぞ

162:デフォルトの名無しさん
09/05/14 00:56:22
>>160
あ?

今から勉強しようと思ったら急遽PHPでいろいろ作業することになってみんpy読むひまがない俺にけんか売ってんお?

163:デフォルトの名無しさん
09/05/14 01:09:48
URLリンク(sugaya.otaden.jp)

そうだな。みんpyを選んだ早稲田の教官はクズで
それを使ってプログラミングを学んでいる学生はウンコだよな。

164:デフォルトの名無しさん
09/05/14 01:17:22
グロ注意

165:デフォルトの名無しさん
09/05/14 01:22:39
[85444, 2300832, 713157, 473942, 3507283, 6213812, 737398,
582550, 9148273, 733699, 5265275, 4307330, 2603059, 2314503,
2253004, 2420119, 5637322, 3994275, 3706583, 3181024, 9019492,
2558557, 1025660, 4504277, 9910254, 4737662, 5362664, 4515987,
4342684, 2881108, 5788213, 2794348, 4332896, 3082922, 2418008,
6420796, 8640377, 8780202, 8790787, 6080687, 9504108, 7991910,
8999531, 4909827, 614814, 2013544, 6017311, 2334914, 1045624, 7220658]
このリストがちゃんとヒープになっているか調べるのが面倒くさいので
スクリプトで解決してください

166:165
09/05/14 01:23:48
すみません、なってないですね。四つ目で気付けますよね・・・
自己解決しました・・・

167:デフォルトの名無しさん
09/05/14 01:33:06
激しくデジャブ。

>651 名前: nobodyさん Mail: sage 投稿日: 2009/05/04(月) 23:37:44 ID: ???
>URLリンク(sugaya.otaden.jp)
>
>ダンジョーが何匹集まってもかないそうにないね.
>
>652 名前: nobodyさん Mail: sage 投稿日: 2009/05/05(火) 14:03:29 ID: ???
>グロ注意


168:デフォルトの名無しさん
09/05/14 01:42:12
>>165
L1 = [ (中略) ]
L2 = list(L1)
heapq.heapify(L2)
print L1 == L2

169:165
09/05/14 02:09:54
>>168
ありがとうございます
自分で書く必要なんてないんですね

170:デフォルトの名無しさん
09/05/14 05:05:38
Ploneの勉強しようと思うのですが

URLリンク(store.shopping.yahoo.co.jp)
URLリンク(store.shopping.yahoo.co.jp)
URLリンク(www.7andy.jp)


どっちが良いのでしょうか?

171:デフォルトの名無しさん
09/05/14 09:20:31
ここで聞くと参考になる答えは返ってこないかと・・・

172:デフォルトの名無しさん
09/05/14 12:18:24
pythonのコードをreadableなcに変換する方法はないのでしょうか
readableなら完全な変換でなくて、多少の手で書きなおす部分があってもいいです

173:デフォルトの名無しさん
09/05/14 16:36:48
readableの定義は?

174:デフォルトの名無しさん
09/05/14 16:50:52
めんどくせw

175:デフォルトの名無しさん
09/05/14 20:54:21
ちょっとまって、ヒープは一意に決まるのかな?


176:デフォルトの名無しさん
09/05/14 21:08:09
>>171
もちろん参考にはしませんので教えれ

177:デフォルトの名無しさん
09/05/14 22:53:53
>172 pythonのコードをreadableなcに変換する方法はないのでしょうか
無理だ


178:デフォルトの名無しさん
09/05/14 23:20:24
lambdaが使われているソースがキモすぎて理解できません
誰か親切丁寧かつほのかなエロさで教えろ

179:デフォルトの名無しさん
09/05/14 23:27:54
ラムダ計算を勉強してこい

180:デフォルトの名無しさん
09/05/14 23:35:45
pythonのlambdaを使うだけならλ計算の勉強はしなくていいです。

lambda a, b: a + b ってのは、

def foo(a, b): return a + b という関数定義がその場にあって、
その場で foo と参照するのと同じ。

以上。難しくないでしょ?

181:デフォルトの名無しさん
09/05/14 23:39:43
>>180
簡潔。俺のような低能の長年の疑問が…。

182:デフォルトの名無しさん
09/05/15 03:27:15
>>178
死ね


183:デフォルトの名無しさん
09/05/15 03:49:17
f = lambda: f()
f()

184:デフォルトの名無しさん
09/05/15 06:36:46
lambdaの中で使う変数のnamespaceってどうなってんの?

185:デフォルトの名無しさん
09/05/15 22:35:09
クロージャの話をしろということだろうか

186:デフォルトの名無しさん
09/05/16 00:16:34
n = []
foo = lambda: n.append("unko")
bar = lambda: n
bar()
foo()
bar()
n = 123
bar()

187:デフォルトの名無しさん
09/05/17 11:23:38
各オブジェクトのメモリ使用量とか分かるモジュールありますか?


188:デフォルトの名無しさん
09/05/17 12:30:28
>>187
guppy の heapy

でも、もし手元にある Python プログラムがメモリを食っているのなら、
URLリンク(d.hatena.ne.jp)

189:デフォルトの名無しさん
09/05/17 13:03:14
2009-05-17
■[Python] Pythonプログラムがメモリを大量に使っているとき
もし想定以上のメモリを Python プログラムが消費しているのであれば、ループの中で循環参照が生まれていることや、回収不能オブジェクト(循環参照なうえに __del__ メソッドが存在するためにgcがどこから循環を切っていいのか判らないオブジェクト)が存在しないかを疑う。

import gc
gc.set_debug(gc.DEBUG_LEAK)
gc.disable()
# 問題の処理
gc.collect() # 回収された循環参照や回収不能オブジェクトが表示される



190:188
09/05/17 20:09:57
ありがとう。heapy試して見ます。


191:デフォルトの名無しさん
09/05/21 00:52:35
Python3.0 changes に

> dict methods dict.keys(), dict.items() and dict.values() return "views" instead of lists.

とあるんですけど、views とはなんですか。iteratorとはまた違うんでしょうか。

192:デフォルトの名無しさん
09/05/21 01:11:26
>>> d = {"abc":2, "def": 0}
>>> d.keys() == {"abc", "def"}
True
>>> "abc" in d.keys()
True
>>> len(d.keys())
2

193:デフォルトの名無しさん
09/05/21 03:59:30
>>192
データベース用語じゃないかな。

デリヘルだったのが業態変更で覗き部屋に変わりました
みたいな感じ。



194:デフォルトの名無しさん
09/05/21 20:08:13
URLリンク(docs.python.org)

195:デフォルトの名無しさん
09/05/22 19:20:38
プログラミング初心者です。
ちっちゃいツールを作れたら…と勉強開始しました。
最初のうちって数字を抜き出したり、表示させたりばっかりですが
なんかプログラミングって感じないんですよね。
最終的にはそれなりなツールが作れるといいんですが…

ちなみにスライスとかインデックスを指定とかって実際のプログラミングで使ったりするんですか?


196:デフォルトの名無しさん
09/05/22 19:22:43
つRails

197:デフォルトの名無しさん
09/05/22 19:45:51
windowsな人はブビでもやるよろし

198:デフォルトの名無しさん
09/05/22 20:53:42
linuxも勉強中ですので、頑張って続けてみます。
ありがとうございました。失礼します。。。

199:デフォルトの名無しさん
09/05/22 21:06:59
ひでw
お勉強スレでなんで違う言語に誘導すんだよw

200:デフォルトの名無しさん
09/05/22 22:12:27
質問には答えようぜ

>195

> ちなみにスライスとかインデックスを指定とかって実際のプログラミングで
> 使ったりするんですか?

超使います。例えば掲示板ソフトを作ったとして、メッセージの195番っつた
ら、 messages[195] とか書けるように作るのが単純なやりかた。

(もちろん、凝ろうと思えばいくらでも凝れます)




201:デフォルトの名無しさん
09/05/22 22:16:40
messages[194]がいいです

202:デフォルトの名無しさん
09/05/22 22:18:02
>>200

203:デフォルトの名無しさん
09/05/22 22:22:01
>メッセージの195番っつた
>ら、 messages[195] とか書けるように

ちょうウケる(WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW

204:デフォルトの名無しさん
09/05/22 22:28:51
”とか”って書いてるからいいじゃん
民主党みたいなことすんなや

205:デフォルトの名無しさん
09/05/22 22:34:20
       ,..--‐‐‐‐‐‐‐‐---..  
     /::::ヽ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;)   
     |::::::::::/        ヽヽ  
    .|::::::::::ヽ ........    ..... |:|  
     |::::::::/     )  (.  .||  
    i⌒ヽ;;|.  -=・=‐  .‐・=-.|   党首辞任”とか”してみたりなんかしちゃったりして
    |.(    'ー-‐'  ヽ. ー' |  
    ヽ.      /(_,、_,)ヽ  |  
    ._|.    /  ___   .|  
  _/:|ヽ     ノエェェエ>  |  
  :::::::::::::ヽヽ     ー--‐  /  
  ::::::::::::::::ヽ \  ___/


206:デフォルトの名無しさん
09/05/22 22:35:41
うわー
ところでmessages[0]はNone?空文字?

207:デフォルトの名無しさん
09/05/22 22:38:28
好きな人の名前に決まっているだろ!

208:デフォルトの名無しさん
09/05/22 22:43:08
messages[0]は0番だろ

209:デフォルトの名無しさん
09/05/22 22:47:40
thebbsはたしか0番から始まってた…と思ったらthebbs閉鎖したのね。

210:デフォルトの名無しさん
09/05/22 23:52:03
こうして今日もPythonの話題から脱線していくのだったとさ・・・

211:デフォルトの名無しさん
09/05/22 23:59:16
>>200
すごくわかり易かったです!
ありがとうございます。
基礎は重要ってことですね!
しっかり学びます。(みんなのPython改訂版使用)
図々しいですが、わからない事がありましたらまたお願いします。

212:デフォルトの名無しさん
09/05/23 02:27:13
もしかしてPythonが初めてのプログラミングなのかしら・・・

213:デフォルトの名無しさん
09/05/23 07:42:04
プログラミングに向いてない
別のことに時間使え

214:200
09/05/23 14:12:12
こんなにウケるとは思わなかったwwww

>201
わかってんならいいよ。でもoff-by-oneバグには気をつけて。
>203
そんな面白い?テヘ(´▽`)
>205
鳩山って一応工学部出てんだけど、なんであんなにデムパなのかね‥‥‥
>206
Noneでも空文字でもいいけど、俺が作るならスレッドタイトル入れとくかなぁ。
>207
おかーちゃんの名前を入れておけ!
>211
がんばれ。


215:デフォルトの名無しさん
09/05/23 14:36:27
>>212
俺、Pythonは2番目
最初に覚えたのはbashプログラミング

216:デフォルトの名無しさん
09/05/23 18:13:46
Perlから鞍替え組しかいなかったころがなつかしい

217:デフォルトの名無しさん
09/05/23 21:27:53
順番
Ruby->Pythonと
Python->Rubyのひとは
どっちが多いですか


218:デフォルトの名無しさん
09/05/23 21:34:02
Ruby->Pythonの方が多そうな気がする。主に実行速度の面で。

219:デフォルトの名無しさん
09/05/24 00:08:33
>>218
実行速度もそうですが
Rubyのプログラムの書き方が合わないっていう人はいないんですかね。
自分は関数定義(def)の時のブロックにbeginをつけない所と、
lambda式の記述の仕方がどうも合わなかったんですが…自分だけか…

220:デフォルトの名無しさん
09/05/24 00:45:43
perlのせいでLLを毛嫌いしてたけど、
pythonが出てきてからは何にでも使うようになった。

221:デフォルトの名無しさん
09/05/24 01:07:55
Perlを知ってからは何にでも使うようになったら
後で酷いことになった。

222:デフォルトの名無しさん
09/05/24 01:19:16
>>219
俺は end が嫌だったのと、関数が名前空間違う部分が無理だったな。
Rubistにしては書くときに楽しいのかもしれんが、読みやすさは圧倒的に
Pythonの方が上。Pythonを知らない人にも読める executable pseudocode

223:デフォルトの名無しさん
09/05/24 04:16:30
まじで!?
基本的にpython大好きだけど
ブロック終端記号がないのだけは好きになれない。

224:デフォルトの名無しさん
09/05/24 06:17:22
Pascalのcase-endですらいらついたしRubyもbeginなしendだし
うっとうしいだけ

225:デフォルトの名無しさん
09/05/24 06:18:24
インデント守ってないコードで終端記号なかったら訳分からんけど
Pythonの場合無くても問題にならないだろ

226:デフォルトの名無しさん
09/05/24 07:46:08
Pythonで唯一面倒なのは、テストで途中でブロック追加したり取ったりする場合だな。
まぁ、エディタでブロックごとインデント付けたり消したりできればいいだけなんだけど。

227:デフォルトの名無しさん
09/05/24 07:49:30
>>226
それはEmacsで楽に出来るから問題ないな。

228:デフォルトの名無しさん
09/05/24 07:53:11
Emacsで、ある範囲を指定してインデントを増やす/減らすのはどうしたらいいの?
いまは C-x r t としてスペースを4つ指定しているんだけど、かっこわるすぎる

229:デフォルトの名無しさん
09/05/24 07:56:13
>>228
リージョンを指定して、C-c > で右 C-c < で左インデント

230:デフォルトの名無しさん
09/05/24 09:50:00
>>227
それvimでも簡単だよ!

231:デフォルトの名無しさん
09/05/24 10:25:48
Pythonは読みやすいけどインデントが嫌だ

232:デフォルトの名無しさん
09/05/24 10:28:59
>>231
読みやすさ > 個人の趣味

233:デフォルトの名無しさん
09/05/24 10:31:59
>>232
書きやすさ>読みやすさ>個人の趣味

234:デフォルトの名無しさん
09/05/24 11:11:44
Pythonは基本読みやすいですが、
書籍に載ってるプログラムで次のページにまたいでるとき、
インデントがどうなったのか分かりにくい時があるのがたまにきずですかね。


235:デフォルトの名無しさん
09/05/24 11:19:39
>>233
読む方が多いからそれはないわ

236:デフォルトの名無しさん
09/05/24 11:30:08
ぶっちゃけ、インデントは慣れればそれほど問題じゃないって感じだな。
おまえインデントブロック初めてか?みたいな人にはインパクトはかなりあるがw

結局俺の場合、何で書いてもだいたい同じような見た目になるしw
構造自体が全然違うってのは、関数系言語だな。

237:デフォルトの名無しさん
09/05/24 11:39:43
頼むからインデントに最低スペース4つは使ってくれ

238:デフォルトの名無しさん
09/05/24 12:03:23
GoogleAppEngineでは2つが標準みたいだよ

239:デフォルトの名無しさん
09/05/24 12:11:22
そういう議論はこっちで

Pythonに見られるインデントによる制御構造の是非
スレリンク(tech板)l50

240:デフォルトの名無しさん
09/05/24 12:59:48
ブロックのインデント表現は流行らないと思うわ
括弧とか改行とか、もっと積極的な表現の方が人間が認識しやすいもの

241:デフォルトの名無しさん
09/05/24 13:13:20
>>237
それにこだわるひといるみたいだけど
なんか意味あるのか?

242:デフォルトの名無しさん
09/05/24 13:17:36
>>240
気のせいです

243:デフォルトの名無しさん
09/05/24 13:24:52
>>241
インデントが深くなったときパッと見で判別しづらいからとか?

244:デフォルトの名無しさん
09/05/24 13:36:09
dict1 = {'a':1}
dict2 = {'b':2}

とあったときに、2つをマージした新しい辞書dict3を一発でつくるにはどうしたらいいですか。
dict3 = dict1.copy()
dict3.update(dict2)
とするしかないのでしょうか。
dict3 = dict1 + dict2
とかできませんか?


245:デフォルトの名無しさん
09/05/24 13:39:47
>>244
D1.update(D2)

246:デフォルトの名無しさん
09/05/24 14:00:03
>>241
それにこだわる人と同じ理由ではないと思うけど、個人的には読み難いし、綺麗じゃない
まぁおれがいつも4つ使ってるから慣れてないだけなのかもしれんけど。

247:デフォルトの名無しさん
09/05/24 14:34:01
ところで皆さんインデントはスペース派?タブ派?
作者はスペースを推しているけど。

248:デフォルトの名無しさん
09/05/24 15:00:17
タブ4。

249:デフォルトの名無しさん
09/05/24 15:18:22
vimでSpace4


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

5400日前に更新/79 KB
担当:undef