Pythonのお勉強 Part35
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2009/09/21(月) 21:11:49http://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://pc12.2ch.net/test/read.cgi/tech/1246454599/
0153デフォルトの名無しさん
2009/10/23(金) 19:03:37これ使うと何が便利なんでしょう?
例えば
n = decimal.Decimal(str(n))
って式を見つけたんですか
この場合のnは代入前と後で何が違うんでしょう?
0154デフォルトの名無しさん
2009/10/23(金) 20:00:02>>> sum([0.1] * 10)
0.99999999999999989
>>> sum([decimal.Decimal("0.1")] * 10)
Decimal('1.0')
0155デフォルトの名無しさん
2009/10/23(金) 20:49:21'1.0'
とは違うの
0156デフォルトの名無しさん
2009/10/23(金) 21:04:02http://www.python.jp/doc/nightly/tut/node16.html
0157デフォルトの名無しさん
2009/10/23(金) 22:03:47そもそも型が違うやん
0158デフォルトの名無しさん
2009/10/23(金) 22:35:20最後の行に
raw_input()
を追加する
0159デフォルトの名無しさん
2009/10/23(金) 23:57:11サクラ使ってるんだったら、外部コマンド実行で標準出力〜にチェック入れればいい
0160デフォルトの名無しさん
2009/10/24(土) 02:36:09どっちも同じぐらいに簡単に書けるし
どっちもモジュールが豊富
0161デフォルトの名無しさん
2009/10/24(土) 02:42:46Javaほど速くもないが
0162デフォルトの名無しさん
2009/10/24(土) 02:46:13その辺の他の言語と比べたpythonの立ち位置ってどこになるんだろ
0163デフォルトの名無しさん
2009/10/24(土) 02:58:200164147
2009/10/24(土) 04:37:29できました!ありがとうございます!
調べてみたら、DOS窓からキーボードの入力を受け付ける関数みたいですね。
こういう使い方もあるのかー、と驚いてしまいました。
>>149さん、>>151さん、>>152さん、>>159さん、
みなさんありがとうございます!
ここは親切なインターネッツですね><
0165デフォルトの名無しさん
2009/10/24(土) 09:32:510166デフォルトの名無しさん
2009/10/24(土) 11:32:330167デフォルトの名無しさん
2009/10/24(土) 11:42:32msvcrt.getch()
import os
os.system('pause')
0168デフォルトの名無しさん
2009/10/24(土) 11:44:06http://d.hatena.ne.jp/kwatch/20080305/1204743236
0169デフォルトの名無しさん
2009/10/24(土) 12:04:57http://d.hatena.ne.jp/kwatch/20080305/1204743342
0170デフォルトの名無しさん
2009/10/24(土) 12:13:340171デフォルトの名無しさん
2009/10/24(土) 12:19:340172デフォルトの名無しさん
2009/10/24(土) 12:27:100173デフォルトの名無しさん
2009/10/24(土) 14:49:19「例外的な規則とかが少なくて洗練されている」あたりじゃね?
C++やPerlの例外だらけな仕様と比べるとさ。
0174デフォルトの名無しさん
2009/10/24(土) 16:20:43pythonからClojureに乗り換えても不便ないかと思って
0175デフォルトの名無しさん
2009/10/24(土) 19:37:12これ実はPythonの場合でも
出来ない関数/メソッド多いんだよな
self返せばいいのにNone返しやがる
0176デフォルトの名無しさん
2009/10/24(土) 19:54:09そーいうクソみたいなコード書くなってことだろ
0177デフォルトの名無しさん
2009/10/24(土) 20:08:220178デフォルトの名無しさん
2009/10/24(土) 20:09:57hogehoge.addHogeHage(hogehage)
.addHageHage(hagehage)
……
こんな感じに10行くらい続いてるコード思い出した
0179デフォルトの名無しさん
2009/10/24(土) 20:23:13こういうのはまぁしょうがないかと思うけど……
// func.optX(x).optY(y).optZ(z).exec()
inplaceな処理で戻り値返しちゃうと、
戻り値の意味がわかりづらくなっちゃうよねぇ。
0180デフォルトの名無しさん
2009/10/24(土) 20:28:39// func(hoge,huga).optionX(x).optionY(y).run();
こんな感じ。pythonでいうなら
# func(hoge, huga, x=x, y=y)
こんな感じのことをやっている。
0181デフォルトの名無しさん
2009/10/24(土) 20:28:42途中のどこかでNoneにならないか心配
正規表現のマッチングが足りないとかでよくやってしまう
0182デフォルトの名無しさん
2009/10/24(土) 20:30:230183デフォルトの名無しさん
2009/10/25(日) 03:36:25Clojureはライブラリが多ければLisp触りたいなって人向け
0184デフォルトの名無しさん
2009/10/25(日) 12:46:310185デフォルトの名無しさん
2009/10/25(日) 19:00:450186デフォルトの名無しさん
2009/10/25(日) 19:32:21意外に便利だぜ
0187デフォルトの名無しさん
2009/10/25(日) 22:12:01with Condition(x, y, z):
## 条件がTrueのときだけここを実行
print x, y, z
今はこんな感じでやっている処理があって、これをもっと格好よく書きたいというのが動機です。
@condition(x, y, y)
def block1():
print x, y, y
block1()
0188デフォルトの名無しさん
2009/10/25(日) 22:30:330189デフォルトの名無しさん
2009/10/26(月) 00:16:180190デフォルトの名無しさん
2009/10/26(月) 00:20:290191デフォルトの名無しさん
2009/10/26(月) 21:10:07def skip(): raise TypeError
def condition(x,y,z):
condition.f = lambda inner if x + y == z else skip()
return condition
condition.f = lambda : inner
condition.__enter__ = lambda : condition.f
condition.__exit__ = lambda type,val,trace : isinstance(val,TypeError)
def inner(): return inner
inner.__enter__ = lambda : True
inner.__exit__ = lambda type,val,trace : True
x = y = 1
z = 2
with condition(x,y,z) as f:
with f():
print x, y, z
こんなんしか思い浮かばない
0192デフォルトの名無しさん
2009/10/28(水) 18:34:25@
の使い方ってそう使うんだ
ちょっと勉強になった
0193デフォルトの名無しさん
2009/10/29(木) 18:26:40def hoge():
global a
a = 999
#hoge()
--------main.py-------------
a = 111
from sub import *
hoge()
print a
結果は、111
でも、コメントを外して、
sub.py内で、hoge()を実行してやると
結果は、999
誰か親切な人、どういう事なのか教えてください
それと、hoge()をmain.pyから呼び出して、
aの値を999に変える方法も知りたいです
0194デフォルトの名無しさん
2009/10/29(木) 19:38:390195デフォルトの名無しさん
2009/10/29(木) 20:01:11main.py で hoge() を呼んでも
sub.py の a = 999 してるつもりが
print a で 111 になるっつー話でそ
きっと質問者は ruby のひとだと思う
0196デフォルトの名無しさん
2009/10/29(木) 20:06:440197デフォルトの名無しさん
2009/10/29(木) 20:07:34--------sub.py--------------
def hoge():
global s
s = 999
--------main.py-------------
s = 111
import sub
sub.hoge()
print s
print sub.s
0198デフォルトの名無しさん
2009/10/29(木) 20:15:30s = 0
def hoge():
global s
s = 999
#hoge()
--------main.py-------------
s = 111
from sub import *
hoge()
print s
0199デフォルトの名無しさん
2009/10/29(木) 20:25:06hoge()した場合のfrom sub import *はmain.aをsub.aで上書き
hoge()してない場合のfrom sub... はsub.aが定義されてないからmain.aがそのまま残る
0200デフォルトの名無しさん
2009/10/29(木) 20:29:41だから sub.py の hoge() をコメント取って 999 になるのは
hoge() で main.py の a を書き換えた訳じゃなくて sub.py の a しか書き換えられていない
from sub import * で main.a が隠れて sub.a が前に出てきただけ
0201デフォルトの名無しさん
2009/10/29(木) 20:55:58これ試してみ
--------sub.py--------------
def hoge():
global a
a['hoge'] = 999
#hoge()
--------main.py-------------
a = {'hoge': 2, 'fuga': 3}
a['fuga'] = 111
from sub import *
hoge()
print a
0202デフォルトの名無しさん
2009/10/29(木) 20:57:31まで読んだ
0203デフォルトの名無しさん
2009/10/30(金) 00:18:420204デフォルトの名無しさん
2009/10/30(金) 09:47:440205デフォルトの名無しさん
2009/10/30(金) 13:53:180206デフォルトの名無しさん
2009/10/30(金) 14:04:320207デフォルトの名無しさん
2009/10/30(金) 14:07:130208デフォルトの名無しさん
2009/10/30(金) 14:45:210209デフォルトの名無しさん
2009/10/30(金) 15:27:000210デフォルトの名無しさん
2009/10/30(金) 15:42:280211デフォルトの名無しさん
2009/10/30(金) 17:47:51親切な方々レスありがとさんです
「辞書」と「リスト」は、可変性なので、
インポートで読んだ後も、mainとsubで共有されてるから
hoge()で、subのを更新したらmainのも更新されるけど、
それ以外の数値、文字列とかは、パイソンには
モジュール間をまたぐグローバル変数が無い以上
インポート時に一度代入されておしまいって事であってる?
--------sub.py--------------
a = [0,0]
b = 0
def hoge():
global a,b
a[0] = 999 #リストなので、効果ある
b = 999 #数値なので、効果なし
--------main.py-------------
import sub
a = sub.a #共有される
b = sub.b #代入されるだけ
sub.hoge()
print a,b
----------------------------
結果は、
[999,0] 0
0212デフォルトの名無しさん
2009/10/30(金) 18:04:27変数自体が実体を持ってるCとかとは違う扱い方になる
main.a -> sub.a -> [0,0] じゃなくて main.a -> [0,0] <- sub.a
a[0] = 999 は sub.a に代入する訳ではないので参照はそのまま
同じく main.b -> sub.b -> 0 じゃなくて main.b -> 0 <- sub.b
b = 999 で sub.b の参照が書き換えられる。でも main.b は 0 を参照したまま
0213デフォルトの名無しさん
2009/10/30(金) 20:22:10このスレの Part 26 の 244 辺りですこし試したことあるよ。
http://www.bookshelf.jp/2ch/tech/1209480428.html
0214デフォルトの名無しさん
2009/10/30(金) 23:54:540215デフォルトの名無しさん
2009/10/31(土) 05:37:46Cの3倍遅いのを3台で動かしても無意味。
単一プロセスであまりCより遅くもない(2割り増しくらい??)
なら簡単にクラスタに持っていくとかイイすよな。
内製の古い因子分析プログラム(ゲロ遅い)をPython/Numpy/PyCuda/Parallel Python
などで書き換えられたらいいなぁ。でもソースが悲惨なんだよな…20年位前からあるんだわ。
0216デフォルトの名無しさん
2009/10/31(土) 17:38:27数値や文字列は、使い勝手は値渡しのようだけど、
実際は全部参照渡しなのか
勉強になりますた
execで、名前空間指定してやれば
他のモジュールから数値でも変更できるんだね
あんまスマートじゃないのかな
--------sub.py--------------
def hoge(b):
exec('a = 999',b)
--------main.py-------------
import __main__,sub
a = 0
sub.hoge(__main__.__dict__)
print a
----------------------------
結果は、999
0217デフォルトの名無しさん
2009/10/31(土) 19:14:09__main__.__dict__をhogeに渡すのは反則でしょう
0218デフォルトの名無しさん
2009/11/01(日) 20:59:54ひょっとしたら、他にいい方法がありますかね?
0219デフォルトの名無しさん
2009/11/05(木) 01:38:00別スレッドで走らせるにしてもTkinter側のデータの受け取りをTkAfterでポーリングするとか
微妙なのしか見つからなかったので・・・
socket側で何か起きたらTkinterのイベントが起動するみたいな実装は出来ないでしょうか・・・?
よろしくおねがいします
0220デフォルトの名無しさん
2009/11/05(木) 01:58:260221デフォルトの名無しさん
2009/11/05(木) 03:23:24asyncore
0222デフォルトの名無しさん
2009/11/05(木) 15:59:470223219
2009/11/05(木) 19:31:28レスありがとう
スクリプトの配布も検討しているのでPythonのパッケージのみインストールされている環境で
動くようにしたいので標準で同梱されているライブラリ以外は出来るだけ使いたくないのですが・・・
たびたびすいませんが、よろしくお願いします
0224デフォルトの名無しさん
2009/11/05(木) 19:50:010225デフォルトの名無しさん
2009/11/05(木) 20:36:570226デフォルトの名無しさん
2009/11/06(金) 09:50:21Pythonで学ぶプログラミング作法を読んで興味を持ちました
が、3.01を入れたらハローワールドもできず…
2.x系と3.x系でだいぶ違うようなのですが、初めてのPython第3版で勉強して3.x系でやれますか?
英語のは第4版出てるみたいなのですが、日本語化は来年以降でしょうし…
新規で始めるので、3.x系を覚えていった方がいいとは思うのですが、どの書籍で勉強すればいいか迷ってます
諸先輩からのアドバイス待ってます
0227デフォルトの名無しさん
2009/11/06(金) 10:13:02python 2.xならhttp://diveintopython.org/
0228デフォルトの名無しさん
2009/11/06(金) 10:19:442chで遊んでないで早く翻訳やれよ。
0229デフォルトの名無しさん
2009/11/06(金) 10:59:04新規なら 2.5.x/2.6.x だjk
0230デフォルトの名無しさん
2009/11/06(金) 12:41:01俺じゃないよ...
0231デフォルトの名無しさん
2009/11/06(金) 14:02:56今のところは2.x使っておいたほうがいいよ。
3.xを使っている人はまだほとんどいない。
そもそも2.xと3.xは細かいところが違うだけだから、
2.6をフルにつかっていれば3.xにもすぐ対応できる。たぶんきっと
0232デフォルトの名無しさん
2009/11/06(金) 16:06:430233デフォルトの名無しさん
2009/11/06(金) 16:20:28絶妙な例えだなw
>>226
今はまだ情報が少なかったりで圧倒的に2系がお勧め
0234デフォルトの名無しさん
2009/11/06(金) 16:44:15いや必要なだけの情報はちゃんと公式にドキュメント化されている。
そこらへんはRubyと違い、Pythonのいいところ。
ただ、そのドキュメントはすでに2.xでPythonをマスターしている人むけだから、
>>226のような初心者が既存の書籍で勉強するにはまだ2.xのほうがいい。
0235デフォルトの名無しさん
2009/11/06(金) 16:48:090236デフォルトの名無しさん
2009/11/06(金) 17:02:09urllib使ってベーシック認証のWWWサイトに入るのに
1日掛かった。まぁ、オレは馬鹿だってのは認めるけど?
0237デフォルトの名無しさん
2009/11/06(金) 18:04:020238デフォルトの名無しさん
2009/11/06(金) 18:11:48馬鹿って言うな。経験の差だろ。
他言語のサンプルを見ていれば要領がわかるもの。
良いサンプルはあればあるだけよいよ。
0239226です
2009/11/06(金) 22:08:583.x系はこれから発展していくみたいですね
その頃には俺もある程度慣れてればいいなぁ
みなさんのアドバイスすごく参考になりました
初めてのPython第3版買って、2.x系で勉強しようと思います
0240226です
2009/11/06(金) 22:28:02リスト内包表記やディクショナリってすごい便利ですね。
Cしか知らない無知な僕ですけど、目からうろこでした。
これからもよろしくお願いします。
0241デフォルトの名無しさん
2009/11/06(金) 23:02:310242デフォルトの名無しさん
2009/11/07(土) 00:07:430243デフォルトの名無しさん
2009/11/07(土) 01:08:03urllib basic認証 でぐぐれかす
って感じが多いな俺は。
だれかしらサンプル的コードを書いてる。
まぁ間違ってたり古かったりも多いが。
0244デフォルトの名無しさん
2009/11/07(土) 01:15:150245デフォルトの名無しさん
2009/11/07(土) 02:05:210246デフォルトの名無しさん
2009/11/07(土) 02:15:450247デフォルトの名無しさん
2009/11/07(土) 03:11:20FTPLibだったかな、コマンドを手書きするやつ。
どうしてretrbinaryに'RETR xxxxx'って書かないといけないんだろう。
0248デフォルトの名無しさん
2009/11/07(土) 14:47:000249デフォルトの名無しさん
2009/11/07(土) 14:55:01こんなの?
>>> 'hoge\n'.strip()
'hoge'
0250デフォルトの名無しさん
2009/11/07(土) 15:00:56そんなの。
ありがとう。
0251デフォルトの名無しさん
2009/11/07(土) 15:08:470252デフォルトの名無しさん
2009/11/07(土) 17:36:44b 付きのヤツは decode しとけばいいのかな
■ このスレッドは過去ログ倉庫に格納されています