Pythonのお勉強 Part22at TECH
Pythonのお勉強 Part22 - 暇つぶし2ch175:デフォルトの名無しさん
07/12/12 18:18:34
tup = (1, 2)
func(*tup)

176:デフォルトの名無しさん
07/12/12 18:24:41
>>175
ありがとうございました。

177:デフォルトの名無しさん
07/12/12 20:44:17
>>175
これ便利だよね関数にタプル渡して処理してくの

def getSafeText(self, text):
  htmlFixes = [ ("&", "&"), ("<", "<"), (">", ">"), ]
  for fix in htmlFixes:
    text = text.replace(*fix)
  return text

178:デフォルトの名無しさん
07/12/12 20:52:00
なんかと思ったら&amp;、&gt;、&lt;への変換か

179:デフォルトの名無しさん
07/12/12 21:09:58
&amp;amp;と書かないと意味不明

180:デフォルトの名無しさん
07/12/13 00:01:57
ターミナルからpythonインタプリタを呼び出して利用しているのですが、
バッファをクリアする方法はあるでしょうか。

181:デフォルトの名無しさん
07/12/13 02:37:39
指定された条件でファイルを検索し条件にマッチしたファイルがあるディレクトリ上のcallback.pyのimportを行い
その中で定義されてる関数on_matchを呼び出すというような実行可能ファイルをCで書きたいと思っています

ただPyImport_ImportModuleを呼び出すとファイルがあるディレクトリをPythonに伝えていないのでcallback.pyは
もちろんimportされません

$PYTHONPATHをプログラムの中でいじくればimport対象にディレクトリ上のcallback.pyを追加できるとは思うのですが
環境変数をいじらずに同等のことを行える関数はありますでしょうか?

182:デフォルトの名無しさん
07/12/13 03:49:36
>>181
Python Programming Language :: PyImport_ImportModule/embeddin g: surprising behaviors
URLリンク(www.megasolutions.net)

参考になるかわからないけどこんなの見つけた

183:デフォルトの名無しさん
07/12/13 05:08:04
スレち気味ですみません

パイソンのdictが便利なんですが
初期化とかsetitemとかupdateのときに
type checkをしたいんです。

dictをサブクラスしてできるんですが
いちいちやるのがすごくめんどうくさい
なんかいまやってることにパイソンはあんまり向いてないような気がしてきました

なにかお勧めの言語はあるでしょうか?
javaとか?

当方perl/pythonとあとC++をすこしつかいます

184:デフォルトの名無しさん
07/12/13 05:48:29
>>181
import hage.fuga.hoge.callback
じゃだめ?

185:デフォルトの名無しさん
07/12/13 07:13:13
>>171
x << y を int((long(x) << y) & sys.maxint) と直せばよいかと。


186:デフォルトの名無しさん
07/12/13 07:18:10
>>173
まずいということではなくて、2.3以前と2.4以降で << の結果が変わりますよーというお知らせ。


187:181
07/12/13 10:05:16
>>184
それだと実行可能ファイルがあるディレクトリからの相対的な位置指定しかできなく
実行可能ファイルがあるディレクトリよりroot方向よりの指定もできないと思います

パスをなんらかの方法で指定し(最悪 環境変数PYTHONPATH
importにモジュール名のみを渡してimportというのがよいかと思っています

188:デフォルトの名無しさん
07/12/13 10:19:45
rubyとpythonって将来の有望性はどっちが上なんですか?
初心者なんでどっちか片方をスクリプトの基礎を勉強しながら取り組みたいのですが

189:デフォルトの名無しさん
07/12/13 10:24:45
PHPだろ常考

190:デフォルトの名無しさん
07/12/13 10:27:41
んだPHPでもやっとけ
そして二度とPythonスレには来るな

191:デフォルトの名無しさん
07/12/13 11:11:05
>>188
マジレスすると、どっちも有望
WebプログラミングではRails人気もあってRubyが有望
でも企業内ではPythonのほうが広範囲に使われている(Google, Pixar, DreamWorks, Youtube, Sega, etc)


192:デフォルトの名無しさん
07/12/13 11:23:42
>>181
/* 独自の import 関数を定義する */
PyObject* MyImport(const char* name, PyObject* globals, PyObject* locals, PyObject* fromlist) {
 /* 最初に標準でのインポートをこころみる */ 
 PyObject* module = PyImport_ImportModuleEx(name, globals, locals, fromlist);
 if (module && PyModule_Check(module))
  return module;
 PyErr_Clear(); /* Import エラーを破棄 */
 Py_XDECREF(module);
 /* 標準インポートに失敗した時だけ独自インポートを試みる */
 module = 独自にインポートするか、パスを変えてもう一度 PyImport_ImportModuleEx を呼び出す
 return module;
}

この API を、例えば "my" モジュールの "importhook" という名前で登録しておく.
そして、__builtins__['__import__'] を my.importhook で置き換えるようなコードを書く

const char* pysource = "\n\
def replace_import():\n\
 import my\n\
 __builtins__['__import__'] = my.importhook\n"

これを Py_CompileString でコードオブジェクト化してから PyObject_GetAttrString で
replace_import 関数オブジェクトを取り出し、PyObject_CallFunction で実行する。
もしかしたら PyRun_String でそのまま実行してOKかもしれんけど、その場合は globals 引数を
適切に設定しないとダメだと思う。

とりあえず、これで import を実行する度に MyImport が呼ばれるようになるから、あとは
自分でパスを補完するなり独自に取り込むなりすれば良い

193:デフォルトの名無しさん
07/12/13 11:34:29
独自 import を定義する時は、「独自インポートに失敗したら標準インポート」よりも
「標準インポートに失敗したら独自インポート」の方が無駄がなくていいよ。

__import__ は既に import されているかどうかに関わらず、
import 文が実行されたら必ず毎回呼び出されるから、もし独自 import の方を先に処理すると
インポート済みかどうかって事を毎回自分で調べる必要があるので無駄な処理時間が増える。



194:デフォルトの名無しさん
07/12/13 11:41:45
>>191
>企業内ではPythonのほうが広範囲に使われている(Google, Pixar, DreamWorks, Youtube, Sega, etc)

こんなウソを信じちゃダメだ!!
PythonができればGoogleに入社できるなんて嘘っぱちだ!!!

195:デフォルトの名無しさん
07/12/13 11:59:34
>>188
プログラマなら複数言語できてあたりまえだし
必要にせまられれば柔軟に吸収できるもんだよ。
だからとっかかりは将来性とかかんがえずに好みできめていいよ。
(イメージロゴがすきだとか興味あるアプリがあるとか)
あと最初に変なクセがつく危惧もあるけど意識して複数こなせば解消できる。

196:デフォルトの名無しさん
07/12/13 12:01:07
マジレスすると

(C or Java or PHP) + (Python or Ruby)

これ最強。

197:デフォルトの名無しさん
07/12/13 12:02:55
195のレスが情報量ゼロな件。

198:デフォルトの名無しさん
07/12/13 12:22:42
197のレスが情報量ゼロな件。

199:デフォルトの名無しさん
07/12/13 12:46:40
>>183
typecheckていうのをデコレータとして作って、

class mydict(dict):
   __init__=typecheck(dict.__init__)
   __setitem__=typecheck(dict.__setitem__)

200:171
07/12/13 13:24:39
>>185-186
ありがとうございます。
module内で定義している定数全てに、
'L'をつけて対応しました。

201:デフォルトの名無しさん
07/12/13 16:05:50
>196

(C or アセンブラ) and (Perl or Java or PHP or Python or Ruby)

の間違いじゃねーの?


202:デフォルトの名無しさん
07/12/13 16:09:35
>>192 乙 しかしながら181は
"独自にインポートするか、パスを変えてもう一度 PyImport_ImportModuleEx を呼び出す "
という部分に関してPYTHONPATHを使う以外の方法が分からなくて質問してきてると思われる

というわけで
URLリンク(mail.python.org) とか
URLリンク(mail.python.org) を見てみることをお勧めする

203:デフォルトの名無しさん
07/12/13 16:23:45
python unconference とかいうのに行ってきた。


204:デフォルトの名無しさん
07/12/13 16:51:12
(C and C++ and (Java or C#)) and (((Perl or PHP) and (JavaScript) and (Python or Ruby or LISP)) or ((JavaScript) and (Python or Ruby or LISP)))


205:デフォルトの名無しさん
07/12/13 17:11:39
素直に、「PerlとPHPは要らないと思うんだ」と言えんか。

206:デフォルトの名無しさん
07/12/13 17:36:57
Unixをプラットホームに構えるならPerlはツールとして当面必要だろjk
PHPと同列にするセンスに違和感。

207:デフォルトの名無しさん
07/12/13 17:43:00
誰にも必要とされない言語なんて悲しすぎるじゃないですかー

208:デフォルトの名無しさん
07/12/13 18:27:22
(C and (perl or python or ruby)) or Java

209:デフォルトの名無しさん
07/12/13 19:35:48
Perl or Python でいいのにRuby絡ませたがる奴は誰だ

210:デフォルトの名無しさん
07/12/13 20:11:24
>>204
Lisp みたいな括弧の数だな

211:デフォルトの名無しさん
07/12/13 20:14:43
将来も考えてるならPHPとかPerlとかにどっぷりつかるのはやめたほうがいい

212:デフォルトの名無しさん
07/12/13 22:40:58
関数内関数から、外側の関数のローカル変数を更新する方法はないでしょうか?

def f():
  def g():
    z = 3 # fのローカル変数zを更新したい
  z = 0
  g()
  return z # 3を返して欲しい

のようなコードでは、gのローカル変数zの更新になってしまいます。

かといってgの先頭にglobal zを加えると、fのスコープを飛ばしてglobalなスコープを見に行くので
エラーになります。

213:デフォルトの名無しさん
07/12/13 23:03:30
def f(): 
    def g(): 
        f.z = 3
    f.z = 0 
    g() 
    return f.z


214:デフォルトの名無しさん
07/12/13 23:40:57
>>> def f():
...  def g():
...   f.z = 3
...  f.z=0
...  g()
...  return f.z
...
>>> f()
3
>>> h=f
>>> f=0
>>> h()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 4, in f
AttributeError: 'int' object has no attribute 'z'

215:デフォルトの名無しさん
07/12/14 01:20:34
>>201
>(C or アセンブラ) and (Perl or Java or PHP or Python or Ruby)

オッサンは窓際で朽ち果てていてね。

216:デフォルトの名無しさん
07/12/14 02:10:40
ああ、そういうもっと根本的なAPIの質問だったのか。なら
.py ファイルを fopen なりなんなりで開いて文字列読んで
Py_CompileString でコードオブジェクトにしてから
PyImport_ExecCodeModule に食べさせてインポート完了。

.pyc や .pyo の場合は先頭の4バイトから long を読んで、
その値を PyImport_GetMagicNumber と比較してマジックナンバーをチェック。(別にチェックしなくてもいいけど)
次の4バイトは完全無視。
残りのバイト列を PyMarshal_ReadObjectFromString か PyMarshal_ReadLastObjectFromFile に
食べさせればコードオブジェクトが出てくるから、
それを PyImport_ExecCodeModule に渡せばインポート完了。
Py_DECREF とか忘れないように。

217:デフォルトの名無しさん
07/12/14 02:11:28
自分の職場は
(Fortran or C or C++) and (awk or Perl or Python or Ruby)
だな

218:デフォルトの名無しさん
07/12/14 02:13:48
ていうか、ただでさえ Python 日本語サイト少ないのに、 C-API の話となるとほぼ皆無だよね。
標準ドキュメントが充実してるとはいえ、ちょっとした Tips が分からないのは苦労する。
ていうか、C実装の領域まで踏み込んで Python 使ってる人ってどれぐらいいるんだろうか。
みんなは CからPython使ってる?

219:デフォルトの名無しさん
07/12/14 02:25:53
ところで、 PySys_SetPath とか Py_VaBuildValue とかってマニュアルに載ってないよね?
ソース見てて初めて気がついた。PySys_SetPath と同じ機能の関数つくっちゃった後だったよ。。。orz

__import__ 関数を自分定義の関数でオーバーライドできるという事は、
ローカルにライブラリファイルを全く持たないで、import 文を実行したときに
ネットワークから直接ファイルを読んでくるってのが可能だと思うんだ。
どっかのサーバに標準ライブラリその他をまるごと置いておけば、
インストール作業を全くすることなく、なおかつコンパクトなスタートアップスクリプトだけを
配布すればよい。これでなんか面白そうな事できないかな。。。。



220:デフォルトの名無しさん
07/12/14 02:36:58
>>218
SWIG とかで楽できる領域を越えたくない…
標準ドキュメントでいろいろ調べられる点については JNI よりマシだと思った

221:デフォルトの名無しさん
07/12/14 03:08:47
>>218
CからPythonを呼ぶのは、
Cで書くのマンドクセだから
本当にただ呼び出すだけだ。

PythonからCを使うのは、
Cのライブラリが目的だから
これも呼び出すだけだ。

CでPython関数をモリモリは使わんなぁ。


>>219
一般的な問題を話させてもらうと、
ローカルとネットワークはやっぱり違う。

ローカルとネットワークの抽象化をライブラリ層で図ろうとしても、(←やりがいのある作業だ)
必ず実装がアプリ層に漏れてきて、面倒ごとが増える。(←何故か作業が増えている)
上手くいきそうでも、中々うまくいかない。(←みんながイラついてくる)
そしてユーザー層まで漏れていく。(←どうしろというんだ)

例えばだけど、
たかが50行のソースを、
py2exe使って依存ファイルを詰め込んだ
巨大な10MBのexeファイルで配るのは非常に馬鹿馬鹿しいことだ。
つーか馬鹿にされる。

でも一番トラブルが少ない。←これ重要だと思うよ


222:183
07/12/14 04:01:51
>>199
助言ありがとうございます
メタクラス、デコレータとかちょっと真剣に勉強してみます

223:デフォルトの名無しさん
07/12/14 07:08:06
>>219
import hook したいだけならサポートモジュールを作ったことがあるよ

224:デフォルトの名無しさん
07/12/14 10:27:15
何でeasy_installを標準パッケージに入れないんだろ?
入れてこそ真価を発揮すると思うんだけど……


225:デフォルトの名無しさん
07/12/14 10:41:51
>>213
def f():
  z=[0]
  def g():
    z[0] = 3
  z[0] = 0
  g()
  return z[0]


226:デフォルトの名無しさん
07/12/14 13:11:15
>>225
ポール・グレアムはそうやっているね。
URLリンク(practical-scheme.net)
で、↓こういう反論が来たと。
URLリンク(practical-scheme.net)


227:デフォルトの名無しさん
07/12/14 15:18:46
Guidoはレキシカル変数が暗示的な変数に見えたんだろうな。
そして self と __アンダ_バ__ を用意したわけだ。


228:デフォルトの名無しさん
07/12/14 16:01:05
つまり、こう言いたい訳ね。

>>> class F:
  def __call__(self):
    self.z = 0
    def g():
      self.z = 3
    self.z = 0
    g()
    return self.z

  
>>> f = F()
>>> f()
3
>>>


229:デフォルトの名無しさん
07/12/14 16:08:05
Guido van Rossumって
日本語の発音だとどうなるの?
ガイド・ヴァン・ロッサム?

230:デフォルトの名無しさん
07/12/14 16:32:20
>>229
田中太郎です。

231:デフォルトの名無しさん
07/12/14 16:43:52
ジード ファン ロスム

232:デフォルトの名無しさん
07/12/14 17:03:29
URLリンク(slashdot.jp)
グイド・ヴァンロッサム氏

233:デフォルトの名無しさん
07/12/14 17:31:30
ファンデルワールス力とかファンデルヴェルデンとか、オランダ人のvanはファンと読むのが慣例のような気がする

234:デフォルトの名無しさん
07/12/14 17:41:18
ドイツ語だからな

235:デフォルトの名無しさん
07/12/14 18:12:42
ふぁんでるわーるすか!


236:デフォルトの名無しさん
07/12/14 18:16:00
ふるへっへんど

237:デフォルトの名無しさん
07/12/14 18:30:16
ホィド・ファン・ロシューム

238:デフォルトの名無しさん
07/12/14 18:48:25
ドイツ語はvon

239:デフォルトの名無しさん
07/12/14 19:43:54
>>212
○global z
×nonlocal z

まぁ2.5にゃないんですけどね

240:デフォルトの名無しさん
07/12/15 00:35:56
フォン•ノイマン Von Neuman

241:デフォルトの名無しさん
07/12/15 00:45:21
ガイドさん治

242:デフォルトの名無しさん
07/12/15 08:49:58
>>239
○と×、逆じゃない?

243:デフォルトの名無しさん
07/12/15 12:27:13
初めてのPythonの古いほう(初版)を古本屋で買ってしまったんですが
第2版を買いなおした方が良いでしょうか?
2000~2004の間にどれくらい、言語そのものの拡張と本そのものの
項目が追加されたのかが気になって…。

244:デフォルトの名無しさん
07/12/15 12:38:00
基本を覚えちゃって、あとはマニュアルでも読めばいいんじゃね。
プログラム初めてなら新しい方がいいかもしれんね。

245:243
07/12/15 13:06:52
>>244
ありがとうございます。言語の経験はC++ぐらいなんですが、
Sconsを使っているアプリがWindowsでビルドできなくて
困ってました。
とりあえず、まずは買ってしまった本を読み切るようにします。

246:デフォルトの名無しさん
07/12/15 14:17:33
他言語の経験あるなら古い本を読みきろうとか思わずに
公式チュートリアルをバッと読むのがいいとおもう


247:243
07/12/15 14:45:53
>>246
orz…。チュートリアルを先に見てればよかった…。
でもせっかくなんで両方見ながらやってきます。
どうもありがとうございます。

248:デフォルトの名無しさん
07/12/15 16:01:26
チュートリアルには、
他言語との違いについてもっと書いてくれるとありがたかった。

249:デフォルトの名無しさん
07/12/15 21:06:27
Python勉強する人って、他にどんな言語を知ってるんだろう?

Javaが嫌になって流れてきた人とか、Perlの汚なさが嫌になった人とか、PythonにLispに類似したものを
見出した人とか、何もバックグラウンドがない素人とか.... どんな人が多いんだろうね?


250:デフォルトの名無しさん
07/12/15 21:16:57
AWK->Perl->Ruby->Python
Javascript
C
ABEL,AHDL,VHDL
ってとこでつね


251:デフォルトの名無しさん
07/12/15 21:33:39
>>242
うんその通り
今気付いたorz

252:デフォルトの名無しさん
07/12/15 21:35:58
MSX-BASIC → Python

かじってみた言語ならマシン語のハンドアッセンブルから
Smalltalk まで他にもたくさんあるけど
自分の目的で使うために習熟したのはこの2つだけ

253:デフォルトの名無しさん
07/12/15 22:07:29
>>252
オッサン(wwwwwwwwwwww

254:デフォルトの名無しさん
07/12/15 22:29:09
おっさんだからといって馬鹿にしてはいけない。
ゆとりの俺がいうんだから間違いない。


255:デフォルトの名無しさん
07/12/15 22:31:26
(´-`).。oO(hsp...→vb→python

256:デフォルトの名無しさん
07/12/15 22:44:25
>>248 他言語との違い

を挙げる時、どの言語の例を挙げるのが妥当なのか知りたかったんだけど、簡単には決められない気がするよ。
そもそも、チュートリアルなら下手に内容を詰め込みすぎない方が混乱を防げるような気がするね。

Pythonを勉強する時って、他言語での経験って役に立ったりするのかな?Python自体、すごくシンプルな
言語なので、経験はあるに越したことはないのかも知れないけど、必要ないような気もするね。



257:デフォルトの名無しさん
07/12/15 22:45:33
>>249
BASIC(高校の授業)->Fortran77(大学の講義)->C(卒研)->Java(趣味)->Python(生きる目的(ジョーク))
少し体験してみたもの:C++、C#、Scheme、OCaml、その他
色々弄ってきたけどPythonが一番使いやすいね。インデントでブロックを表現する所なんて最高だよ。

258:デフォルトの名無しさん
07/12/15 22:53:50
>>248
スレリンク(tech板:379番)


259:デフォルトの名無しさん
07/12/15 22:56:18
BASIC→VB(講習)→C++→JavaScript→(DSLいろいろ)
→PHP(CGIのため)→Perl(を覚えようとして逃げ帰る)→C++(再覚醒)
→Python(ついに見つけたユートピア)

って感じ。付き合った期間はC++が一番長いかな。
PrologやHaskellも興味はあるんだけど今の所使い道が無いので…

260:デフォルトの名無しさん
07/12/15 23:29:23
>>249
C/C++に疲れたひとですが


261:デフォルトの名無しさん
07/12/15 23:31:07
Ruby->D->Python

262:デフォルトの名無しさん
07/12/15 23:54:30
Pascal(6ヶ月)→ブランク期間(4年半)→Perl(6ヶ月)→Python(2年弱)

263:デフォルトの名無しさん
07/12/16 00:04:00
252は伯爵?

264:デフォルトの名無しさん
07/12/16 01:13:23
C -> (Matlab) -> C++ and Python

265:デフォルトの名無しさん
07/12/16 01:22:04
IronPythonStudioがインストールできん…。
VisualStudio 2008 Shell Isolated Redistributable がないって言われる。入ってるのに…。

266:デフォルトの名無しさん
07/12/16 02:35:32
PL/I->MS-BASIC->アセンブラ(8086/68000)->C->C++->Perl->PHP->Java->Ruby->Python
おじさん(笑)です。

267:デフォルトの名無しさん
07/12/16 02:50:21
辞書を値でソートした上で取り出したいのですが、どういう方法がありますか?

268:デフォルトの名無しさん
07/12/16 02:56:07
>>263
誰?


269:デフォルトの名無しさん
07/12/16 03:11:20
d = {'z':1, 'x':2, 'y': 3}
l = list(d.itervalues())
l.sort()
print l

l = d.items()
l.sort(key = lambda v: v[1])
print l


270:デフォルトの名無しさん
07/12/16 03:44:24
>>> import operator
>>> d = {'z':1, 'x':2, 'y': 3}
>>> sorted(d.iteritems(), key=operator.itemgetter(1))
[('z', 1), ('x', 2), ('y', 3)]

271:デフォルトの名無しさん
07/12/16 05:01:34
HyperTalk->awk,AppleScript->Perl->Ruby,JavaScript,VBA->Python
Pythonは独特だと思う。
Pythonから始めた人はスムーズに習得できたのか知りたい。

272:デフォルトの名無しさん
07/12/16 06:17:53
pythonのforなんでこんなんなの?
オライリー「pythonチュートリアル」にrangeで等差数列生成して回せって書いてるけど
どう考えてもメモリの無駄じゃないの?

273:デフォルトの名無しさん
07/12/16 06:53:17
メソッドの中にselfってつけて変数かくと外からいじれるけれどこれはあんまり良くないことですか??

274:デフォルトの名無しさん
07/12/16 07:10:02
>272
つxrange

まあpython3.0ではrangeもxrange相当になるけどな

275:デフォルトの名無しさん
07/12/16 07:26:08
>>274
ああ、こんなのあるんだ
㌧㌧

276:デフォルトの名無しさん
07/12/16 14:07:31
for i in range(start, end):
 print seq[i]



for i in seq[start:end]:
 print i

はどちらがいいのかな。スライス表記の方が
すっきり記述できるけど、これってコピー操作入ってるんでしょ?

277:デフォルトの名無しさん
07/12/16 14:19:56
>>276
これはコードが簡素すぎるけど
実際ならindexを明示したいかどうかで変わるかな。
どちらもディープなコピーはないのでindexの生成分前者のが損だけど
わかりやすさの前には軽微な事。

278:デフォルトの名無しさん
07/12/16 15:32:09
>>> import __main__
>>> print "Hello"
Hello
>>> print dir(__main__)
['__builtins__', '__doc__', '__main__', '__name__']
を埋め込みで書くと
int main(int ac, char** av)
{
 shared_ptr<void> py(py_initialize(), py_finalize);

 shared_ptr<PyObject> main_(py_incref(PyImport_ImportModule("__main__")), py_decref);
 if(!main_) {
  std::cerr << "ERROR: module __main__ not found" << std::endl;
  PyErr_Clear();
  return 1;
 }

 shared_ptr<PyObject> tmp(
  py_incref( PyRun_String(
    "print \"Hello\"\n"
    "print dir(__main__)"
   , Py_file_input
   , main_.get()
   , main_.get() )),
  py_decref );
 return 0;
}
になると思うのですがうまくうがきません
Exception exceptions.NameError: "name '__main__' is not defined" in 'garbage collection' ignoredと表示されcore dumpしちゃいます
"print dir(__main__)"をコメントアウトするとHelloが表示され正常終了します

279:デフォルトの名無しさん
07/12/16 15:39:45
>>276
seqがタプルで、タプルのスライスの実装が工夫されてたら後者が得かな。
工夫って言うのはスライス元の一部を共有するってことね。ソース見たことないから実際はどうか分からないけど。

280:デフォルトの名無しさん
07/12/16 15:49:24
っ num*


281:279
07/12/16 16:11:01
2.5のソース見てみた。一個一個コピーしてたよ。
特例として、スライス範囲がスライス元タプル全体と一致するならスライス元のタプルをそのまま返してた。

282:デフォルトの名無しさん
07/12/16 18:35:00
リストだったらどうなの?

283:デフォルトの名無しさん
07/12/16 18:41:53
スライスはコピーするとマニュアルに書いてある


284:デフォルトの名無しさん
07/12/16 21:44:03
範囲指定ならseqスライス、ざっくり個数指定ならrangeしか知らなかったw
両方同じように使えるのに驚いて、初めてrange()の正書式読んだ…

xrangeなる省メモリ代替(代わりにDocによれば用途外だと重い?)も知れて、
まっこと有意義な一日

285:デフォルトの名無しさん
07/12/17 01:06:45
URLリンク(www.unixuser.org)
ここにpythonはlispの数十倍遅いって書いてるんですがマジですか?

286:デフォルトの名無しさん
07/12/17 01:36:28
速度は実測が基本


287:デフォルトの名無しさん
07/12/17 02:05:35
日本語訳の時点で5年前の記事だしな

288:デフォルトの名無しさん
07/12/17 04:14:28
LispはCより速いらしいからしょうがないよね

289:デフォルトの名無しさん
07/12/17 04:43:24
関数型だから十分ありえるんじゃね?
プログラム構造やメモリ操作の見通しがたち易いからコンパイル時も実行時も最適化がめっさ効く。
だてに何十年も研究されてないし。

290:デフォルトの名無しさん
07/12/17 04:59:02
Lispってそんなスゲーの?
やってみようかな・・・

291:デフォルトの名無しさん
07/12/17 05:39:55
The Django Book
URLリンク(www.djangobook.com)


292:デフォルトの名無しさん
07/12/17 08:51:57
>>285
あんまり参考にならないけど、それでも数十倍の開きは付いてるね。

URLリンク(shootout.alioth.debian.org)

Python を使うなら速度は気にしない方が良いよ。

293:デフォルトの名無しさん
07/12/17 09:19:10
>>285
しんやまの書く記事を信用するなよボケ(wwwwwwww

294:デフォルトの名無しさん
07/12/17 09:46:41
Lisp が速いというより Python が遅いだけなんだけどね

295:デフォルトの名無しさん
07/12/17 11:13:47
ここに突っ込まないのはお約束ですか
>定性的にみれば、Python はインタプリタ型の Lisp と同じくらいの速度に見える。 だが Lisp をコンパイルしたものと比べると明らかに遅い。

296:デフォルトの名無しさん
07/12/17 11:30:40
なんで今更lispなんだYO!
今じゃ相当なマニアしか使ってねーっつうの

297:デフォルトの名無しさん
07/12/17 11:52:35
>>295
まぁ普通はコンパイルするものだし。


Pythonで速度を上げられないのは、
バイトコードを動かしていることと
名前解決の辺りかな。

仕様と強く結びついている部分だから
これ以上の向上の余地もないと思う。


もっとも他人から否定されるのは嫌なのだがw


298:デフォルトの名無しさん
07/12/17 12:43:14
>>296
30年前よりはマイナーだが、10年前よりはメジャーだ。変な話だが。

299:デフォルトの名無しさん
07/12/17 14:28:42
最近RubyからPythonに移ってきたのですが、初歩の初歩でつまづいています。
よくある正規表現を使った文字列置き換えで、置き換え対象がちょっと複雑な時には
どのように書けばいいんですかね。

import re

s = "jskljaksljaj\njslkajskja\n\n"
lst = re.compile(r'(js|ja)').split(s)

for i, x in enumerate(lst):
 if 'js' in x:
  lst[i] = '$$ js is here $$'
 elif 'ja' in x:
  lst[i] = '$$ ja is here $$'

print ''.join(lst)

とかやってみましたが、どう考えても綺麗ではないように思えます。

300:デフォルトの名無しさん
07/12/17 14:57:53
import re
print re.sub('(js|ja)', lambda mo: '$$ js is here $$' if mo.group(0)=='js' else '$$ ja is here $$', "jskljaksljaj\njslkajskja\n\n")
↓に何とか厨という罵り言葉がくる悪寒


301:デフォルトの名無しさん
07/12/17 15:00:36
ワンライナーとか言ってる奴に限って基本的なことが理解できていないことが多い。
ワンライナー厨は典型的な中二病。
大抵のワンライナーはDQNレヴェルのスクリプトを一行にして得意気になってるアホです。
見づらいとか分かりづらいといった意見を読めないアホが悪いと無視するマジもんのアホです。
別にワンライナー以外が高尚でもなんでもなくただワンライナーがDWNなのです。
というか誰もワンライナーがそんないいもんだと思っちゃいないっていうかなんていうか


302:デフォルトの名無しさん
07/12/17 15:04:08
別に慣れだとおもうけど。sql文なんかは一気にバーッと書くのが普通だし。

303:デフォルトの名無しさん
07/12/17 15:25:22
import re

s = "jskljaksljaj\njslkajskja\n\n"
print re.sub('(js|ja)', lambda mo: '$$ %s is here $$' % mo.group(0), s)

lambdaのとこよくわからんけどまねしてみた

304:デフォルトの名無しさん
07/12/17 17:31:45
ああああ、すいません例示が悪かったです。
if~のところはもっと複雑で、できればメソッドに切り出したいんです。

そういう方法はないんでしょうか。

305:デフォルトの名無しさん
07/12/17 19:26:35
>>300-301
自演にも程があるw

306:デフォルトの名無しさん
07/12/17 21:13:24
pythonでマルチバイトの文字数を取得する方法について調べています。
test=u'日本語'
print len(test)
のように、変数宣言時にuをつけることで、取得できることは確認いたしました。
Ploneなどで、test=request.get('test',None)のように取得した変数を、マルチバイト文字として
カウントするにはどのようにすればよろしいのでしょうか。

よろしくお願いします。

307:デフォルトの名無しさん
07/12/17 21:40:06
>>306
test=u'日本語'
--------------- ←ここで分けて考える。
print len(test)

後ろのtestはどういう性質のものなら適合するのか。(具体的には何Objectか)
戻って u'日本語' はどういう意味のコードか。

308:デフォルトの名無しさん
07/12/17 22:19:55
Ploneって書いてある時点で終了っぽいな。
本当にありがとうございました。

309:デフォルトの名無しさん
07/12/17 22:37:05
306です。
>307
ありがとうございます。
以下のようにやったらできました。
test=request.get('test',None)
print len(unicode(test,'utf-8')

u'日本語'というのは文字列定数を定義する場合で、エンコーディングを明示的に指定
することで、len()関数が判定できるってことなんでしょうか。
とりあえず、できたんでありがとうございます。



310:デフォルトの名無しさん
07/12/18 00:39:50
2.5の日本語のドキュメントってありますか?
翻訳プロジェクト見ても 2.3→2.4 が終了しただけで 2.5については一切書かれていないので・・・

311:デフォルトの名無しさん
07/12/18 01:18:53
おまえに任せた

312:デフォルトの名無しさん
07/12/18 01:39:05
マジか

313:デフォルトの名無しさん
07/12/18 03:18:52
>>310
ボクからもお願いします( ´人`)

314:デフォルトの名無しさん
07/12/18 05:44:25
pythonでchopってどうやるんですか?

315:デフォルトの名無しさん
07/12/18 05:50:59
ここは2.5ドキュメントを1文づつ訳すスレになりました
以下、どうぞ

316:デフォルトの名無しさん
07/12/18 08:15:43
xinetdにサービスを登録しようと思い以下のようなスクリプトを書きました。
サーバに送信した文を[]で囲んで返すというものです。
が、なぜかクライアントのrecvで受信待ちになってしまいます。

クライアントの通信先をechoに変えたところ、recvは正常に受信し、文字はちゃんと表示されました。
またサーバのsyslogには、正しくprint [hogeron]と記録されています。

現象から見ると、どうもサーバのprintで、ちゃんと送信されていないっぽいです。
os.environ['PYTHONUNBUFFERED'] = '1'
で、バッファしないように設定しているのですが…
どうすれば正常に動かせますか?

317:デフォルトの名無しさん
07/12/18 08:16:24
【サーバ】
--
import os,sys,syslog

os.environ['PYTHONUNBUFFERED'] = '1'
line = sys.stdin.readline()
if line.endswith('\n'):line = line[:-1]
result = '['+line+']'
print result
syslog.syslog('print '+result)
--

【クライアント】
--
import socket

host = 'localhost'
port =6363
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect((host,port))
s.send('hogeron')
str = s.recv(1024)
print str
s.close()

318:デフォルトの名無しさん
07/12/18 08:54:04
>>315
>ここは2.5ドキュメントを1文づつ訳すスレになりました

「310の翻訳作業を監視するスレ」の間違いだろう。

319:デフォルトの名無しさん
07/12/18 09:12:55
2.5の翻訳は、差分ツールで2.4との変化分だけみつけて、そこだけピンポイントで訳せばいいよね。
mac で使える差分ツールない?標準で着いてるファイルマージは、
Leopard だと起動エラーが起きる。。。。。。クリーンインストールしたのに。

320:316
07/12/18 11:10:34
クライアントからソケットでsendする時にcrlfを付けてないからでした
unixはlfだけなのにネットワークではcrlfがないと駄目なんですね~

321:デフォルトの名無しさん
07/12/18 11:57:04
>>320
それはたまたまネットワークライブラリがCRLFで一区切りとしてくれただけで
一般的なTCP通信でその前提はなりたたないから。
sokcetを生で使うならあくまでバイト列な非同期通信として扱わないと。

322:デフォルトの名無しさん
07/12/18 12:37:29
>>314
strip?

323:[:-2]
07/12/18 16:47:20
strip は違うだろ

324:デフォルトの名無しさん
07/12/18 17:28:11
>>323
-2じゃなくて-1じゃね?

>>322
まーchompだったらrstrip()だけんど。

325:デフォルトの名無しさん
07/12/18 22:14:27
seq切り落とし処理から見れば、\n文字で一つなのか

326:デフォルトの名無しさん
07/12/18 22:36:55
全くプログラミングした事無いんだが
ちょっと興味があってPython勉強しようと思う。

そこで、おすすめの書籍なぞある?
環境はWin。

327:デフォルトの名無しさん
07/12/18 22:41:12
>>326
「即効!Pythonプログラミング」上平哲著

328:デフォルトの名無しさん
07/12/18 22:41:44
>326
>116

329:デフォルトの名無しさん
07/12/18 22:48:54
>>319
WindowsなのでExamDiffで比較してみたけど
どうでもいい、タグの大文字→小文字とか lay-out → layout みたいな修正が多くて確認が面倒くさそうだった

330:デフォルトの名無しさん
07/12/18 22:50:02
>>327、328
ありがとうございます

本読んで頑張ってみる。


331:デフォルトの名無しさん
07/12/19 01:00:00
chopは

str[:-1]

chompは

str.endswith('\n') and str[:-1] or str

だとおもう。
(実用するかはともかくとして

332:デフォルトの名無しさん
07/12/19 02:28:29
import文を羅列で書いていて、
あるモジュールを使わなくなった時、
そのモジュールのimportを削除し忘れることってあるじゃん
結果無駄な読み込みが発生してしまう
そういうのを防ぐためのいい方法はありますか?

333:デフォルトの名無しさん
07/12/19 02:37:25
>>331
chomp は str.rstrip('\r\n') だろ

334:デフォルトの名無しさん
07/12/19 03:39:23
pythonて組み込みオブジェクトの拡張できるの?
文字列に自家製メソッド追加したり。

335:デフォルトの名無しさん
07/12/19 03:47:01
>>229
pythonチュートリアルによるとグイド・ファン・ロッサム

336:デフォルトの名無しさん
07/12/19 04:28:47
>>334
できない。

337:デフォルトの名無しさん
07/12/19 08:04:43
class str_ex(str) じゃだめなの?

338:デフォルトの名無しさん
07/12/19 09:05:14
>>327
とりあえず書いておくわ。
 
 
作者乙。

339:デフォルトの名無しさん
07/12/19 12:16:48
>>332
pycheckerでチェックできると思う

340:デフォルトの名無しさん
07/12/19 13:08:32
だれかGILを取ろうと考えているチャレンジャーはいないのか?

341:デフォルトの名無しさん
07/12/19 13:09:35
>>337
それでいいと思う

342:デフォルトの名無しさん
07/12/19 15:48:13
>>340
昔やったらかえって遅くなったんじゃなかったっけ?

343:デフォルトの名無しさん
07/12/19 16:20:21
>>340
STGの神プレイヤーがどうかしたのか?

344:デフォルトの名無しさん
07/12/19 17:56:58
>>343
WIZがどうかしたのか?


345:デフォルトの名無しさん
07/12/19 18:32:01
GILといえばKI

346:デフォルトの名無しさん
07/12/19 22:02:52
>>342
URLリンク(www.artima.com)

347:デフォルトの名無しさん
07/12/19 23:30:39
def makecounter():
number=0
def _makecounter(x):
if x=="init":
number=0
elif x=="inc" :
number=number+1
elif x=="dec" :
number=number-1
return number
return _makecounter
counter=makecounter()
print counter("init")
print counter("inc")
print counter("init")
print counter("dec")

ちょいと質問すみません。
こんなことやろうと思ったんだけど出来ません。
pythonじゃ無理?
lispやperlと違ってクロージャの中の変数いじれない?

348:デフォルトの名無しさん
07/12/20 01:16:42
>>212からの流れ参照

pythonではそういう時はCounter classを作る

counter = Counter()

349:デフォルトの名無しさん
07/12/20 01:19:06
>>226が答えに近い

350:デフォルトの名無しさん
07/12/20 01:25:09
def makecounter():
    number = 0
    def _makecounter(x):
        global number
        if x=="init":
            number=0
        elif x=="inc":
            number=number+1
        elif x=="dec":
            number=number-1
        return number
    return _makecounter

counter=makecounter()
print counter("init")
print counter("inc")
print counter("init")
print counter("dec")
print counter("dec")

351:デフォルトの名無しさん
07/12/20 01:49:23
ありがとうございます。
なるほどクラスを作るのか。

352:デフォルトの名無しさん
07/12/20 01:51:36
Python コードを、対応するCソースに変換するツールってない?

for i in seq: print i

ってやると、

for (Py_ssize_t i=0; i<PyObject_Size(seq); i++) {
 PyObject* o = PySequence_ITEM(seq, i)
 PyObject* s = PyObject_Str(o);
 PySys_WriteStdout(PyString_AsString(s));
 Py_DECREF(s);
 Py_DECREF(o);
}
って自動で出力してくれるような。

353:デフォルトの名無しさん
07/12/20 01:58:43
import hoge
def f(a, b): hoge.piyo(a, b)

ってやると

PyObject* f(PyObject* args) {
 PyObject* a = NULL;
 PyObject* b = NULL;
 PyArg_ParseTuple(args, "OO", &a, &b);
 PyObject* module = PyDict_GetItemString(PyImport_GetModuleDict(), "hoge");
 PyObject* func = PyObject_GetAttrString(module, "func");
 PyObject* result = PyObject_Call(func, "(OO)", a, b);
 Py_DECREF(result);
 Py_DECREF(func);
}

って自動で出力してくれるような。

354:デフォルトの名無しさん
07/12/20 02:00:16
これさえできれば、Cコンパイラの力を借りて Python コンパイラが簡単に出来ると思うんだ

355:デフォルトの名無しさん
07/12/20 02:43:06
Pyrexの中身でも調べてみたら

356:デフォルトの名無しさん
07/12/20 09:27:41
つーかPyrexが答えじゃないの?

357:デフォルトの名無しさん
07/12/20 09:37:10
Pyrexはじまったな(ww

358:デフォルトの名無しさん
07/12/20 11:23:31
なにその強化ガラス?

359:デフォルトの名無しさん
07/12/20 15:27:10
何で皆そんなにpythonに詳しいんですか?
そういった仕事に就いてるからですか?
それとも趣味ですか?
もし趣味だとしたら変態です

360:デフォルトの名無しさん
07/12/20 15:35:15
趣味ですよ
あなたが無能なだけですよ

361:デフォルトの名無しさん
07/12/20 15:59:53
wikipedia のリフレクションの項、
python の例がないんだ・・・。

誰かかいてくれないか

362:デフォルトの名無しさん
07/12/20 16:45:34
# リフレクションなし
foo = Foo()
foo.hello()

# リフレクション
class_ = globals()['Foo']
method = getattr(class_(), 'hello')
method()

おれこの種の用語嫌いなんだよな。RTTIって言い方やめたの?

363:デフォルトの名無しさん
07/12/20 16:46:07
>>360
このヘンタイがっ!!

364:デフォルトの名無しさん
07/12/20 17:21:31
>>362
RTTIとリフレクションは意味が違う

365:デフォルトの名無しさん
07/12/20 19:13:32
PyrexよりCythonのほうが書きやすいよ


366:デフォルトの名無しさん
07/12/20 21:48:38
('foo', 1, 'bar', 2, 'baz', 3, )
というtupleから
{'foo': 1, 'bar': 2, 'baz': 3}
というdictを得たいんですが、いい方法ありますか。

367:デフォルトの名無しさん
07/12/20 22:04:30
もっといい方法があるかもしれないけど

lst = list(('foo', 1, 'bar', 2, 'baz', 3, ))
dic = {}
while lst:
  dic[lst.pop()] = lst.pop()

368:デフォルトの名無しさん
07/12/20 22:05:40
T = ('foo', 1, 'bar', 2, 'baz', 3)
D = dict((T[x],T[x+1]) for x in xrange(0,len(T),2))


369:347
07/12/20 22:42:20
def makecounter():
number=[0]
def _makecounter(x):
if x=="init":
number[0]=0
elif x=="inc" :
number[0] +=1
elif x=="dec" :
number[0] -=1
return number[0]
return _makecounter
counter=makecounter()
print counter("init")
print counter("inc")
print counter("dec")

>>226からのリンク先を見てクロージャでカウンタ作れました。
pythonってクロージャの中の変数書きかえれないので
numberに無名配列のポインタを入れてそこを操作するって感じなんですね。
mapの中に副作用持ちのlambda式入れられないとかlispとはかなり違うんだな。
うーん、pythonってなんか変w

370:デフォルトの名無しさん
07/12/20 23:53:17
>>> t = ('foo', 1, 'bar', 2, 'baz', 3, )
>>> dict(zip(t[::2], t[1::2]))
{'baz': 3, 'foo': 1, 'bar': 2}


371:デフォルトの名無しさん
07/12/21 00:25:11
forとかwhileの中で関数作るとクロージャの回避が結構面倒だな
デフォルト引数に入れて解決した

>>369
なんでclassにしないの?

372:347
07/12/21 00:42:06
>>371
lispに馴れてるのでとりあえずクロージャを作ってみたかったのです。

373:デフォルトの名無しさん
07/12/21 00:50:24
>>367,368,370
サンクス。
特に370の方法はいいな。


374:デフォルトの名無しさん
07/12/21 13:35:27
generatorをenumerateすると、generatorとして作った意味がないことに気づいたんですが、
generator用のenumerateみたいなのは標準では付いてないんですかね?

375:デフォルトの名無しさん
07/12/21 13:40:01
>>374
izip + count

376:374
07/12/21 13:55:47
ごめ、調べてたら、すでにenumerateはリスト返してなかった・・・
どうもバージョンの古い脳内pythonの話だったポイ・・・orz

377:デフォルトの名無しさん
07/12/21 14:59:36
pythonてコードの前部分で定義した関数しか呼び出せないの?
phpですら定義の順番に関係なく呼べるのに・・・

378:デフォルトの名無しさん
07/12/21 15:14:56
そうか

379:デフォルトの名無しさん
07/12/21 15:19:46
スクリプト言語のくせにそんなのイモすきない?
みんな許せるの?

380:デフォルトの名無しさん
07/12/21 15:27:07
組込みクラスにメソッドを追加したいのですがどうやればいいのですか?

class int:
 def fuga(self):
   return "fugafuga"

じゃ無理みたいです

381:デフォルトの名無しさん
07/12/21 15:42:06
>>380
・Rubyでやれ
>>337

382:デフォルトの名無しさん
07/12/21 15:46:02
その前になんでそんなことしたいのか、だ

383:デフォルトの名無しさん
07/12/21 16:29:55
>>379
それはエラーになってほしい人もいるからなんじゃない?
Pythonが変数と関数の名前空間が一緒なのと関係あるのかな。
ちなみにRubyもエラーになる。PerlとJavascriptとHaskellはオッケー。

>>382
えー既存クラスにメソッド追加って普通にしない?

384:デフォルトの名無しさん
07/12/21 16:32:04
自前のにならたくさんやるがなぁ

385:デフォルトの名無しさん
07/12/21 16:39:35
ちなみにどうするんですか?チュートリアルを読んだのですがよくわかりませんでした><

386:デフォルトの名無しさん
07/12/21 17:01:28
def fuga(i):
return "fugafuga"

print fuga(42)

387:デフォルトの名無しさん
07/12/21 17:10:12
『Pythonで学ぶプログラム作法』買ってみた
今から読んでみる

388:デフォルトの名無しさん
07/12/21 17:43:48
>>376,383

モジュールがロードされるタイミングでいろいろしたい人がいるからじゃない?

if os.name == "nt":
 def pathnomalization(p):
  ほげほげ
else:
 def pathnomalization(p):
  ふがふが

みたいなコード書いたことあるけど。

389:デフォルトの名無しさん
07/12/21 17:49:09
>>386
全然違うんですけど・・・。
Pythonianの人って、標準とは別名のメソッドを呼びたくなったらどうするんですか?

390:デフォルトの名無しさん
07/12/21 18:04:06
関数使うよ

391:デフォルトの名無しさん
07/12/21 18:13:47
>>389
PEPを書く

392:デフォルトの名無しさん
07/12/21 18:20:21
>>391
ひえーマジすか
Pythonは禁欲的だと聞いていましたがこれほどとは・・・

メソッド定義にself書いたり、気持ち悪い規則が多いなあ
rubyに比べてリスト内包表記と、ライブラリが多いことと解釈系がやたら速いのと、
endを馬鹿みたいに書かなくていいのとhelp()が好きだけど、他はとにかく不便だなあ。
どの言語もいいところと悪いところがありますね。

393:デフォルトの名無しさん
07/12/21 18:24:16
標準とは別名のメソッド呼びたくなる状況がわからん件

394:デフォルトの名無しさん
07/12/21 18:27:01
なんか気持ちイーらしい

395:デフォルトの名無しさん
07/12/21 18:53:41
意味のないことに固執したがるのはバカの特徴だな。

396:デフォルトの名無しさん
07/12/21 18:55:07
一つの言語でやり方を覚えたらそこから抜け出せなくなる脳は不便だ
精進

397:デフォルトの名無しさん
07/12/21 19:26:07
self批判するやつがいるがthisとか暗黙の変数がいきなり出てくる言語とかあり得ないキモイ正気を疑う
反論は認める

398:デフォルトの名無しさん
07/12/21 19:49:03
質問させてください
HTMLParserってShift-jisのページでも使えますか?
urllib2.urlopenで取得した2chのメニュー(左フレーム)をそのままfeedしたら
junk charactersがなんとかってエラーがでました

399:デフォルトの名無しさん
07/12/21 19:53:52
>>398
不可能ではないけどキミにはムリ。

400:デフォルトの名無しさん
07/12/21 20:03:16
unicodeに変換しる。
もっても解析は出来ないと思う。
タグを振ってくれると楽なんだがなぁ。


401:デフォルトの名無しさん
07/12/21 20:06:07
>>397
Σ(´Д` ) 工エー。せっかくスクリプト言語なのに・・・
_doc__とか__name__とかもダメなの?どっちかというと、printキーワードとかのほうが
キモいけどなあ。おまえそれどっから呼んでるのかと。

402:デフォルトの名無しさん
07/12/21 20:06:35
>>398
ずばりなのがココにあるけど
URLリンク(www.freia.jp)

403:デフォルトの名無しさん
07/12/21 20:12:30
>>398
再現コード貼ってちょ

404:デフォルトの名無しさん
07/12/21 20:40:40
>>401
printはビルトイン関数になるし早くなれ
__name__,__file__,__builtins__はモジュールを生成する側がglobalsに突っ込んでるその辺はすまんかった

405:デフォルトの名無しさん
07/12/21 22:43:44
>>377
>pythonてコードの前部分で定義した関数しか呼び出せないの?
>phpですら定義の順番に関係なく呼べるのに・・・
通常は
def main():
 f()
 g()
def f():
 print 'foo'
def g()
 print 'bar'

main()
と書くから、だれも問題と思ってない。

>>379
>スクリプト言語のくせにそんなのイモすきない?
>みんな許せるの?
PHPのは関数の定義、Pythonは関数を生成して変数へ代入、Rubyは関数定義文の実行。
スクリプト言語といえど、それぞれ根本的に思想が違うんだから、どうしようもない。
それが分からないお前がいちばんあわれ。





406:デフォルトの名無しさん
07/12/21 22:45:35
全ての動的言語はLispのスキンにすぎない

407:398
07/12/21 23:10:37
>>399,400,402,403
レスありがとうございます
>>402 に書いてある方法で成功しました
というかこのページ開いてたのに下まで見てなかった・・・
お騒がせしてすいません

408:デフォルトの名無しさん
07/12/22 04:50:36
>>379
>>401
「スクリプト言語」に限定したことではなくルールの問題に過ぎない

409:デフォルトの名無しさん
07/12/22 11:20:43
pythonでオブジェクトのインスペクトってどうやるんですか?

410:デフォルトの名無しさん
07/12/22 11:36:56
>405
よくある相互入れ子型の再帰の練習問題みたいなのを
書こうとして「アレ?どうやんだっけ?」と思ったことはある…

411:デフォルトの名無しさん
07/12/22 11:37:19
インスペクト?
Rubyのobj.inspectのことだとするなら
呼出側はrepr(obj)。自作クラスに定義したいならdef __repr__(self):で。

412:デフォルトの名無しさん
07/12/22 12:03:01
>>411
それです
ありがとうございました
inspectモジュールのところ見て(?o?)となってました

413:デフォルトの名無しさん
07/12/22 12:49:56
EOFをあらわすエスケープシーケンスってないんですか?

414:デフォルトの名無しさん
07/12/22 16:34:57
false

415:デフォルトの名無しさん
07/12/22 18:10:56
>>413
これのこと?
'\x00'
'\0'

416:デフォルトの名無しさん
07/12/22 19:26:25
>>413
DOSじゃないなら、ないんじゃない?
'¥0'は文字列の終わりであって、EOFはまた意味が違うからね。

417:デフォルトの名無しさん
07/12/22 19:31:59
EOFなんて聞いたのは.mag以来だ

418:デフォルトの名無しさん
07/12/22 19:36:16
>>410
> よくある相互入れ子型の再帰の練習問題みたいなのを

それは問題なく何の工夫もなく書ける
関数定義の位置が関係するのは関数やメソッドの外から呼ぶ場合

419:デフォルトの名無しさん
07/12/22 20:23:13
2.3だと
2 << 30が-2147483648なんだけど、
2.5だと2147483648Lになる。

こうなる理屈は分かってるんだけど、
2.2以前の32 bitを前提としたcodeを2.5に移植するときに、
どうやったらうまく動くんでしょうか。

>>185を参考にして
int((2 << 30) & sys.maxint)
としても、結果は0になってしまう。

420:デフォルトの名無しさん
07/12/23 01:08:24
海外じゃ今月はこんな話題で盛り上がっていたみたいだね。
"Python" is not a good name, should rename to "Athon"

421:デフォルトの名無しさん
07/12/23 01:14:29
よく分からないけど下ネタ?

422:デフォルトの名無しさん
07/12/23 01:47:22
URLリンク(groups.google.co.jp)

これかね、

423:デフォルトの名無しさん
07/12/23 02:42:01
>>419
>>> hex(sys.maxint)
'0x7fffffff'
>>> hex(2 << 30)
'0x80000000L'


424:デフォルトの名無しさん
07/12/23 09:40:55
pythonて使用メモリの上限を作ることできますか?
スクリプトと思って気軽に書いてたら永久ループがあったみたいで
out of memoryになってしまい
その影響でmysqlのファイルがぶっ壊れててんやわんやでした(; ;)

425:デフォルトの名無しさん
07/12/23 11:16:32
>>424
OSの仕事。
ulimitしとけ

426:419
07/12/23 12:55:39
>>423
strになっちゃいますよね。
そこからどうすればいいですか?
int()もstring.atoi()もhexになっちゃうと効かないようで。

427:デフォルトの名無しさん
07/12/23 14:31:50
>>426
移植元のコードの意図に寄るんじゃない?

428:デフォルトの名無しさん
07/12/23 14:49:54
よくわからんけど、
eval or int(str, 16) ?

429:デフォルトの名無しさん
07/12/23 14:51:44
先週1週間python-3000に投稿が無かったそうですね。py3大丈夫か?
年末だから忙しいだけかな・・・

430:デフォルトの名無しさん
07/12/23 15:21:56
>>429
アーカイブを見る限り投稿はあるみたいだけど。
順調に開発が進んでいるから投稿する必要がないだけじゃないかな。

まあリリース10日前になって作者が「これ以外に問題点はありますか?」なんていう頓珍漢なメールを投げる、
プロジェクトよりは大丈夫だろwww

431:423
07/12/23 18:15:32
>>426
sys.maxintはMSBをsignにしてるから31bits分しかonにならないと言いたかったんだが分かって貰えなかったようで
マスクしたいなら決め打ちでやれ
intが16bits幅のCコンパイラでビルドされたpythonがあるかも知れないぞ

432:デフォルトの名無しさん
07/12/24 00:24:36
Python でオンラインオセロ大会できないかな?
WEBにスクリプトを投稿すると、
それまでに投稿されている全てのスクリプトと自動的に勝負が進行して、結果がでるみたいな。

433:デフォルトの名無しさん
07/12/24 00:31:46
>>432
そういうプログラムを是非pythonで!

てか「初めてのPython」って本買ったんだが、
いまだにクラスすら出てこないorz

434:デフォルトの名無しさん
07/12/24 00:34:37
Pythonで世界征服できないかな?
WEBにスクリプトを投稿すると、
世界中のサーバをハックしまくって意のままにコントロールできる、みたいな。


435:デフォルトの名無しさん
07/12/24 00:36:19
class Com:
 def step(board):
  """
  board は int[10*10] の配列からなり、
  0行(列)と9行(列)はセンチネルとして常にゼロを保持する
  実際に勝負に使うのは1行(列)から8行(列)の部分。
  -1, 0, 1 の値をとり、0は何もない状態、-1と1はそれぞれ石が置かれている状態を示す
  step 関数が呼ばれたら自分が次ぎに置くX, Y 値をタプルで返す
  ”””
  raise "This method is an abstract"


classOothello:
 m0 = __import__("com0.py")
 m1 = __import__("com1.py")
 com = m0.Com()
 com_ = m1.Com()
 board = [0]*10*10
 while True:
  x, y = com.step(board)
  if x, y == 0, 0:
   print "PASS"
  else:
   board.put(x, y)
  com, com_ = com_, com


  
  



436:デフォルトの名無しさん
07/12/24 00:57:25
Pythonでワンライナーってできる?

437:デフォルトの名無しさん
07/12/24 01:26:47
質問の意味が分からん

438:デフォルトの名無しさん
07/12/24 01:52:58
一行プログラムの事じゃないか



439:デフォルトの名無しさん
07/12/24 02:04:14
perl -eって意味ならpython -c

440:デフォルトの名無しさん
07/12/24 02:08:43
>>439
ありがと。

-cで、普通複数行で書くようなプログラムも1行で書ける?
行の区切りがどうなるのかなと思って。
Pythonはインデント使うから。

441:デフォルトの名無しさん
07/12/24 02:18:25
>>433
俺もその本買って勉強してるが
分厚すぎてめちゃくちゃ重い
机から落として足直撃したときはちょっと泣いた

442:デフォルトの名無しさん
07/12/24 02:34:34
>>440
普通に書けばおk

tests% python -c "f = [1,2,3,4,5]
for i in f :
 if i % 2 == 0 :
  print 'even'
 else :
  print 'uneven'
print 'ところで今日はクリスマスイブですよ、おまえら'"
uneven
even
uneven
even
uneven
ところで今日はクリスマスイブですよ、おまえら


443:デフォルトの名無しさん
07/12/24 04:03:03
>>442
ちっとも一行じゃないワンライナーだね(w。

>>440 じゃないけど、
勉強になりました。ありがとう。

444:デフォルトの名無しさん
07/12/24 06:27:43
いままで Ruby 使ってたんだけど
Python に乗り換えることにする
とりあえず windows の方は
拡張子 .rb で python 起動されるようにした


445:デフォルトの名無しさん
07/12/24 06:29:57
コマンドラインから入力することをワンライナーって言うの?

pythonは、対話型実行が良くできてるから、どんな小さい実験とかでも、
対話型を起動させたほうが良いような気がする。

446:デフォルトの名無しさん
07/12/24 06:32:13
>>444
.py で python が起動されるようにしたほうが良いと思うよ

447:デフォルトの名無しさん
07/12/24 06:34:23
>>446
Windowsならインストール時にそうなってるんじゃないか

448:デフォルトの名無しさん
07/12/24 06:42:37
なんか海より深い勘違いをしてそうだな

449:デフォルトの名無しさん
07/12/24 07:49:35
.rb については今までの負の資産があるので
結構色んな所から呼んでるんですよ
(CGIで後悔してたりとか別のコマンドから利用してたりとか)
しばらくはファイル名はそのまま残しておかないとまずいので
.rb をスケルトンにしてそこから .py 呼んで delegate でもいいんですけど
直接 .rb のナカミを python コードにしてしまった方が早いかなと

450:デフォルトの名無しさん
07/12/24 07:54:32
>>449
ココはあなたのチラシの裏ではありません

451:デフォルトの名無しさん
07/12/24 07:58:05
ln -s hoge.py hoge.rb
で一発ジャマイカ

452:419
07/12/24 09:39:25
>>427, 428, 431
レスありがとうございます。

32bit目まで使う必要があるプログラムです。
ビット演算した結果は、fctrl.ioctl()の第二引数に与えます。

0x80000000L => 0x7fffffff
というような変換さえできればいいんですが、
普通2.5だとどうやって32bitの演算をCのように行うんでしょうか。

>>431
>intが16bits幅のCコンパイラでビルドされたpythonがあるかも知れないぞ
自分の環境でデバイスの操作を考えているので、
他環境では動かなくても大丈夫です(動けばなお良い)
ただし、現在2.3で運用しているんですが、
将来的に2.5で動かそうと改造を考えており、
そのためにLの扱いで躓いています。

453:デフォルトの名無しさん
07/12/24 11:18:23
2<<30がどう使われてるかがわからない。30は変数?即値?
変数だとすると、2<<28,2<<29まではビットはひとつしか立ってないが、
2<<30==0x7fffffffということは、最上位ビットの関係でいきなりビットが
反転するがそれでいいの?即値ならそれこそ0x7fffffffを直接使うところだと思ふ。

454:デフォルトの名無しさん
07/12/24 11:35:43
def c_like(n):
if n & (1 << 31):
n = (1 << 31) - (n % (1 << 31)) - 1
return int(n)

print hex(c_like(0x80000000L))

455:デフォルトの名無しさん
07/12/24 11:36:08
def c_like(n):
    if n & (1 << 31):
        n = (1 << 31) - (n % (1 << 31)) - 1
    return int(n)

print hex(c_like(0x80000000L))

456:デフォルトの名無しさん
07/12/24 11:38:47
>>452
コードに問題がある。書き直せ。

457:デフォルトの名無しさん
07/12/24 12:12:37
たしかに、

>2.3だと
>2 << 30が-2147483648なんだけど、

この動作に本質的に依存したコードってなんか危ない気がする・・・

458:419
07/12/24 12:18:33
>>453-456
元は
URLリンク(pyv4l.sourceforge.net)
なんですが、これをちょこちょこ自分で書き直したものです。
LinuxのCのheaderをそのまんま移植したものなので、
ベタ書きで書き直すとメンテが大変になるので避けたいところ。

こっから落とせます。
URLリンク(internap.dl.sourceforge.net)

Python 2.3だと、
>>> import video4linux
>>> help(video4linux)
(snip)
VIDIOCGAUDIO = -2144963056

2.5だと、
VIDIOCGAUDIO = 2150004240L

となります。

>>454-455
それだと、0x7fffffffを取り出せますが、
long longじゃなくてlong intにしたいんです。
2147483647ではなく-2147483648にしたい。

459:デフォルトの名無しさん
07/12/24 12:59:33
>long longじゃなくてlong intにしたいんです。

これでわかった。

Python 2.5.1 (r251:54863, Apr 18 2007, 08:51:08) [MSC v.1310 32 bit (Intel)] on
win32
Type "help", "copyright", "credits" or "license" for more information.
>>> (-2147483648) & (1 << 31) == (1 << 31)
True

def c_like(n):
    if (1 << 31) <= n < (1 << 32):
        n = -n
    return int(n)

print c_like(0x80000000L)

460:デフォルトの名無しさん
07/12/24 13:31:00
>>449
rubyのどこが気に入らなかったんですか?
pythonはじめたばかりですが
組み込みオブジェクトにメソッド追加したりできるところとか
rubyも魅力的だと思うんですが

461:デフォルトの名無しさん
07/12/24 13:34:18
また君か

462:デフォルトの名無しさん
07/12/24 13:46:01
またって?
rubyに関する質問したのは初めてですよ

463:デフォルトの名無しさん
07/12/24 13:48:26
また(空気の読めないRuby厨)君か

464:デフォルトの名無しさん
07/12/24 14:18:42
>>463
いくらなんでも無理ありすぎw

465:デフォルトの名無しさん
07/12/24 14:45:44
他の言語はじめたばかりじゃわからないだろうから
わかるまで黙ってると良いと思います

466:デフォルトの名無しさん
07/12/24 16:03:41
この板なんでID無いの?

467:デフォルトの名無しさん
07/12/24 16:35:20
技術系の板なので、誰がレスしたかよりもレスの中身を重視しているから

468:デフォルトの名無しさん
07/12/24 17:16:31
Ⅲとか機種依存文字がページに含まれてると
UnicodeDecodeError: 'shift_jis' codec can't decode bytes in position 176-177: illegal multibyte sequence
となって上手くいきません。

import urllib
uconn = urllib.urlopen('URLリンク(pc11.2ch.net)')

for e in uconn.readlines():
    e = unicode(e, 'sjis')
    elem = e.rstrip(u'\r\n').split(u'<>')
    print ''.join(elem)

一度ローカルに保存してテキストエディタなどでutf-8に変換する以外で
この問題を回避する方法はあるでしょうか?

469:デフォルトの名無しさん
07/12/24 17:19:46
>>275
㌧㌧でこけました

UnicodeDecodeError: 'shift_jis' codec can't decode bytes in position 169-170: illegal multibyte sequence

470:デフォルトの名無しさん
07/12/24 17:26:19
Windowsなら'shift_jis'の代わりに'cp932'を使う。とか?

471:デフォルトの名無しさん
07/12/24 17:26:43
>>468
sjisをcp932でいけるんじゃね

472:468
07/12/24 17:39:02
事故解決

新キャラクタセット cp932 / eucjpms
URLリンク(www.mysql-partners-jp.biz)
PHPからMySQL4.1とか5.0とか5.1とかに接続すると文字化けする : ::yossy.blog::
URLリンク(yossy.iimp.jp)
PHPで「髙(はしごたか)」「﨑(たつさき)」が文字化ける(2) : ::yossy.blog::
URLリンク(yossy.iimp.jp)

sjis != cp932
cp932 == sjis + NEC 特殊文字 + NEC選定IBM特殊文字 + IBM特殊文字

なんですね。
というかweb上のサービスはいい加減UTF-8に統一しようよ…

473:デフォルトの名無しさん
07/12/24 18:23:47
>436
python ワンライナー で具具レバ… 超人に会えるでしょう

474:デフォルトの名無しさん
07/12/25 01:29:30
>>468
e = unicode(e, 'sjis', 'replace')
e = unicode(e, 'sjis', 'ignore')

475:デフォルトの名無しさん
07/12/25 02:38:16
>>474
逃げちゃだめだろw


476:デフォルトの名無しさん
07/12/25 03:11:09
拡張子をpywにして
os.system('dir > d.txt')
を実行すると一瞬だけ
DOS窓が立ち上がるんですが
これを出さずに実行する事は可能でしょうか?

477:デフォルトの名無しさん
07/12/25 03:22:05
>>472
ユニコードは漢字文化圏を尊重せずに文字数切り詰めて"統合"したりするから
統一しようにもできないわけで。
コンピュータ中心に世の中回ってる訳じゃないからね

478:デフォルトの名無しさん
07/12/25 04:02:27
>>476
パイプ

479:468
07/12/25 04:17:49
>>474-475 >>477
㌧くす

URLリンク(diary.atzm.org)
何でreplaceやらignoreなんてオプション指定があるんかなと不思議に思って
調べてみたら、フィルタリングするような用途で便利なんですね。
というかクロスプラットフォームを意識するとsjis+replaceで書いた
ほうが汎用性がありそうでした > unicode(elem, 'sjis', 'replace')


480:デフォルトの名無しさん
07/12/25 05:46:02
Python2.5.1のインストーラー版を使っていますがC拡張モジュールをコンパイルするにはVS2003がないと駄目ですか?
VS2008かMingwでコンパイルしたいんですが。

481:デフォルトの名無しさん
07/12/25 06:11:21
The Art of UNIX Programmingに
スピードが必要な時には、PythonはCのプログラムに変換できる
というようなことが書かれていたのですが
どうやればいいですか?

482:デフォルトの名無しさん
07/12/25 06:13:01
FILE* とかやりとりするとダメなんだっけ
オレはDDKに入ってるmsvc8相当でコンパイルしてるけど

483:デフォルトの名無しさん
07/12/25 11:26:55
>>476
import subprocess
subprocess.call("dir > d.txt", shell=True)

484:デフォルトの名無しさん
07/12/25 11:28:45
>>480
漏れはVC6でCOM利用モジュール作って使ってるけど、問題なく使えてる。

485:デフォルトの名無しさん
07/12/25 13:04:47
ところで公式で配布されてるのは何でコンパイルしてるん?
[MSC v.1310 32 bit (Intel)]
1310言われても分からない


486:デフォルトの名無しさん
07/12/25 13:11:14
>>485
VC6 Ver12.00
VC2002 Ver13.00
VC2003 Ver13.10 *これ
VC2005 Ver14.00
VC2008 Ver15.00



487:デフォルトの名無しさん
07/12/25 13:47:31
>>480
MinGW (gcc 3.2.3) で拡張モジュールのコンパイルできてるよ。

488:デフォルトの名無しさん
07/12/25 17:22:32
>>478
>>483
無事に解決する事が出来ました。
ありがとうございました。

489:デフォルトの名無しさん
07/12/25 22:10:44
>>480
URLリンク(python.matrix.jp)


490:デフォルトの名無しさん
07/12/26 01:42:49
Python 使える無料スペースってどこかに無い?

491:デフォルトの名無しさん
07/12/26 01:46:48
xrea

492:デフォルトの名無しさん
07/12/26 01:56:59
seq0 = seq1
seq0[:] = seq[:]
seq0 = [i for i in seq1]
seq0=[]; for i in seq1: seq0.append(i)
ってどれも同じ処理してる?

493:デフォルトの名無しさん
07/12/26 02:17:26
処理は見たまんまでちがうし結果も異なる。
seq0 = seq1は同一オブジェクトを指すことになるが
他はリストを再構築してるので異なるオブジェクト(コピー)になる。

494:デフォルトの名無しさん
07/12/26 04:41:10
seq0[:] = seq[:]

495:デフォルトの名無しさん
07/12/26 06:49:25
seq0 = seq1
浅いコピー

seq0[:] = seq[:]
普通のコピーになってるが、seq0が初期化されてる必要がある。

seq0 = [i for i in seq1]
普通のコピー

seq0=[]
for i in seq1: seq0.append(i)
普通のコピー

496:419
07/12/26 08:48:24
最終的に、演算子を自分で定義しました。
レス下さった方々、ありがとうございました。

class int32(int):
def __int2long(self, n):
if n >= 0:
return long(n)
else:
return long(0xffffffff - n - 1)

def __long2int(self, n):
if n & 0x80000000: # negative
return int(-2**31 + (n & 0x7fffffff))
else: # positive
return int(n & 0x7fffffff)

def __and__(self, y):
return self.__long2int(self.__int2long(self) & self.__int2long(y))

def __or__(self, y):
return self.__long2int(self.__int2long(self) | self.__int2long(y))

def __lshift__(self, y):
n = self.__int2long(self) << y
return int32(self.__long2int(n))

def __rshift__(self, y):
n = self.__int2long(self) >> y
return int32(self.__long2int(n))


497:デフォルトの名無しさん
07/12/26 08:52:16
>>490
オマエのパソコン

498:デフォルトの名無しさん
07/12/26 10:52:27
>>496
>>> from ctypes import c_int as int32
>>> 2 << 30
2147483648L
>>> int32(2 << 30).value
-2147483648


499:419
07/12/26 11:18:35
>>498
ああ、そんなのがあるんですか。
ありがとうございます。知りませんでした。

ただ、2.3でも2.5でも動くようにしたいので、
2.3が消え去るまでは>>496の方法でやろうと思います。

500:デフォルトの名無しさん
07/12/26 16:00:50
2.3が消え去るまでって・・・

オレなんか未だに 1.5.2 で動くコードを書かされてる。
つまり消えない。

501:468
07/12/26 16:53:04
そういえば最近読んだironpythonの本にも>>474
encodeとdecodeの書式で取り扱うみたいに書いて
あったな…物忘れが激しすぎな罠㌧

>>500
ちょっと関連するかもしれないのだけど
PyrexとCythonのコードdiff取って読んでみたら
なんとなくだけどCython微妙

三項演算子、切捨て除算、#ifdef、+=、とか対応してる
けど、なんかコードが助長になってると思う。
error_goto_if_null() とか module.py_result() とか

isingmodel: pyising.pyx@4ecf71b2c0b0
URLリンク(hg.sharesource.org)
Cに変換する用途なんだからそんなの別にいいじゃんとか
言われると、その通りだとは思うけどさ

というかPyrexのドキュメントがわかりにくすぎるのが
いけないと思うんだ。わかりやすく書こうよ... orz

502:デフォルトの名無しさん
07/12/26 16:58:29
ごめん#IfdefはPyrexでも対応してるな

503:デフォルトの名無しさん
07/12/26 20:27:19
>>501
わかりにくすぎる

504:デフォルトの名無しさん
07/12/27 02:07:45
質問です
コードを読むときのエディタは
何を使ってますか?

505:デフォルトの名無しさん
07/12/27 02:20:06
ファイル単位で読むときはVim
プロジェクト単位で読むときはEclipseかな。
われながらつまんない回答だとおもう。

506:デフォルトの名無しさん
07/12/27 08:12:03
自分用ライブラリってどこに配置するのがいいですか?

507:デフォルトの名無しさん
07/12/27 08:38:58
>>506
どこでもいい。$HOME/lib/pythonとか。
あとは$PYTHONPATHを設定するだけ。

508:デフォルトの名無しさん
07/12/27 09:08:54
djangoでファイルのアップロード試してみたんですが
50MBくらいまでならなんとか平気で動くんですけど
100MB近くになるとサーバー自体が重たくなって
500MBクラスのものを試すと数十分固まったあげく
最後にエラーで中断されてしまいます
python恒例のオンメモリで全部処理する罠にはまってるのでしょうか?
どなたかうまく回避しているかたがいらっしゃいましたら教えていただけないでしょうか



509:デフォルトの名無しさん
07/12/27 09:26:10
え…pythonってオンメモリで全部処理するの…?

510:デフォルトの名無しさん
07/12/27 10:08:37
実装依存の問題を言語のせいにするのはゆとり教育の弊害?

511:デフォルトの名無しさん
07/12/27 10:15:25
ヒソヒソ( ゚д゚)パイソン(゚д゚ )オンメモリ…

512:デフォルトの名無しさん
07/12/27 10:20:58
話がよく分からんのだがディスクスワップのこと?
OSの仕事だと思うんだけど


513:デフォルトの名無しさん
07/12/27 10:36:03
これはひどい
URLリンク(www.youtube.com)

514:デフォルトの名無しさん
07/12/27 11:48:07
python の source を色つきでカッコよく印刷するのって
何を使ってますか?

できれば unix 環境で使えるもの希望

515:デフォルトの名無しさん
07/12/27 14:48:57
聞いた場所が間違ってたようですので移動します

516:デフォルトの名無しさん
07/12/27 15:38:31
>>515
つEmacs

517:デフォルトの名無しさん
07/12/27 16:34:17
py2htm

とかてきとーにいってみる

518:516
07/12/27 17:16:51
アンカー間違った
>>514
つEmacs

519:デフォルトの名無しさん
07/12/27 17:22:04
>>517
あー、難しく考えてた。
htmlとcss使えばいいのか。


520:デフォルトの名無しさん
07/12/27 18:42:24
>>519
PyXR: Package c:\python24\lib\site-packages\win32\lib
URLリンク(pyxr.sourceforge.net)

とか見た目がよいかんじなのでおすすめ

[pythonpath]
usePythonpath = 0
exclude =
include = c:\Python25\Lib\xml

という具合にsetting.cfgに指定してあげてpython webserver.pyで
URLリンク(localhost:8088)にアクセスすればすぐ試せるよ

excludeとincludeの指定の仕方がワケわからんからはまると思うけど
たぶん簡単にできるかも。というか俺が知りたい…>>指定の仕方

なんかexcludeで弾いてやらないとsite-pacage下の全ファイルを
ドキュメントに変換し始めて止まらなくなったりすることが…

## pageText.pyも関係あるみたいだったので追記
if __name__ == '__main__':
    pt = pageText("/pysrc", write=open("output.htm", "w").write)
    pt.writeFileText("c:\\python25\\lib\\xml\\__init__.py")
    #pt.writePathText("/c/python25/lib/")
    #pt.writeRootText()

521:デフォルトの名無しさん
07/12/27 23:14:07
>>514
a2ps --prolog color がオヌヌメ。


522:デフォルトの名無しさん
07/12/28 05:57:41
reprって何の略ですか?

523:デフォルトの名無しさん
07/12/28 08:24:53
representation(表現)

524:デフォルトの名無しさん
07/12/28 08:42:33
ありがとうございます

525:デフォルトの名無しさん
07/12/28 09:07:44
環境変数PYTHONPATHをpythonコード内で設定しても効かないのでしょうか?
import os
os.environ['PYTHONPATH'] = パス
って感じにしてからimportしてるのですが
うまくimportできません。
コード内でモジュールサーチパスを指定するにはどうしたらいいですか?

526:デフォルトの名無しさん
07/12/28 09:32:02
sys.path

527:デフォルトの名無しさん
07/12/28 09:47:48
>>526
ありがとうございました

528:デフォルトの名無しさん
07/12/28 12:17:29
MatchObjectオブジェクトとか
RegexObjectオブジェクトとか
くどくね?
何でオブジェクト二回言うの?

529:デフォルトの名無しさん
07/12/28 12:58:47
SCSIインターフェース

530:デフォルトの名無しさん
07/12/28 13:28:40
ということは Object を略して O にすればそんなに気にならなくなるわけだな

MatchO オブジェクト

マッチョ!!

531:デフォルトの名無しさん
07/12/28 13:56:36
>>529
たしかにSCSIインターフェイスっておかしいね

532:デフォルトの名無しさん
07/12/28 14:02:12
リストの末尾への追加が
list.append('hoge')か
list += ['hoge']しかないのって冗長じゃね?
PHPなら
$list[] = 'hoge'
という書き方ができる。
PHPより冗長ってどんだけ~

533:デフォルトの名無しさん
07/12/28 14:15:58
>>531
おかしくはない。

534:デフォルトの名無しさん
07/12/28 14:59:41
import~と
from~import~の使い分けってどうやってますか?
何かコツなどあれば教えて下さい。

535:デフォルトの名無しさん
07/12/28 15:05:45
>>508
Python はリスト処理言語なんだから
そんな低レベルな用途に使っちゃ遺憾

536:デフォルトの名無しさん
07/12/28 15:19:30
ageてるのはみんな釣りなん?

537:デフォルトの名無しさん
07/12/28 15:26:50
urllib.urlopen()でwikipediaのページを取得すると、
Error: ERR_ACCESS_DENIED
というエラーになります。
どうも拒否られているみたいです。
urllib.urlopen()を使ってwikipediaを取得するにはどうしたらいいですか?

538:デフォルトの名無しさん
07/12/28 15:27:23
>>534
後で読みやすい方で書けばおk

from A import X, Y
これは、ソースの先頭を見たときに X と Y を使っていることが分かる。

import A
これだとソース本文を見たときに
A.hoge()
A.boge()
といった処理がAに依存していることが分かる。


539:537
07/12/28 15:43:49
urllibの説明に
現在のところ、以下のプロトコルだけがサポートされています: HTTP、 (バージョン 0.9 および 1.0)
と書かれていました。今時http1.0!?
これってバーチャルホストすらできないプロトコルですよね
もう古いのかと思い
urllib2にしたら、403 forbiddenになりました
googleは問題なく取得できるのですが…
pythonはwikipediaに嫌われている?

540:デフォルトの名無しさん
07/12/28 15:50:46
>pythonはwikipediaに嫌われている?
自分の力量不足をpythonのせいにしやがって。
氏ねよ屑。
User-agentを送ってないから弾かれているだけだろ。


541:デフォルトの名無しさん
07/12/28 16:19:11
>>540
確かにUAをセットしたら取得できました
ありがとうございました

542:デフォルトの名無しさん
07/12/28 16:21:34
HTTPライブラリでデフォのUser-Agentがないのもめずらしなとおもって試してみたら
デフォの"User-Agent: Python-urllib"がブラック扱いされてるようだぜ?
とりあえず>>540は便所掃除で風説の流布は勘弁してやる。

543:デフォルトの名無しさん
07/12/28 16:33:53
やっぱり嫌われてるんじゃん・・・
ブラック扱いってどんだけ~
グイドがgoogleの従業員だからか

544:デフォルトの名無しさん
07/12/28 17:05:24
pyscripterでコード書いてるんですが
エディタ部の色が白いので目が痛いです
色をかえる方法あったら教えて下さい

545:デフォルトの名無しさん
07/12/28 17:08:48
pythonでアタックツール書いた奴がいるんじゃね?

546:デフォルトの名無しさん
07/12/28 17:11:03
uaなんていくらでも詐称可能だから
ブラックリスト入りさせることにどれだけの効果があるのか疑問
やはり嫌がらせ的なものとしか考えられない・・

547:デフォルトの名無しさん
07/12/28 17:39:29
cgiの拡張子を.spamにしたのが効いたんじゃね

548:デフォルトの名無しさん
07/12/28 18:04:49
ホワイトリスト方式なんじゃねーの?

549:デフォルトの名無しさん
07/12/28 18:15:26
pythonに限らず、libwww-perlとかもけっこう弾かれているそうな
URLリンク(www.hazama.nu)

550:デフォルトの名無しさん
07/12/28 18:21:03
>>540
wwwwww

551:デフォルトの名無しさん
07/12/28 23:23:35
Pythonでユニコード文字列という場合、文字コードのutf-8とはまったく関係ないのでしょうか?
一般的にはunicodeの実装がutf-8ですよね?

552:デフォルトの名無しさん
07/12/29 00:23:34
>>551
全く関係ないことはないが、関係ない。
unicodeは文字コード、utf-8はエンコーディング方式。

553:デフォルトの名無しさん
07/12/29 00:24:03
Googleの次はWikipediaか。
バーボン送りにしとけ。

554:デフォルトの名無しさん
07/12/29 00:28:59
from
って予約後?

555:デフォルトの名無しさん
07/12/29 00:32:24
うん

556:デフォルトの名無しさん
07/12/29 00:34:32
>>551
>Pythonでユニコード文字列という場合、文字コードのutf-8とはまったく関係ないのでしょうか?
関係ない。
Pythonでいうユニコード文字列は unicode object と
u'foo' / u'\u1234' 形式のリテラル表現あたりのこと。

>一般的には unicode の実装が utf-8 ですよね?
PerlやRubyとかのエンコーディングはね。
Pythonは UCS-2かUCS-4。
Windows, JavaはUTF-16。
(Python以外はうろ覚えだけど)

557:デフォルトの名無しさん
07/12/29 00:40:34
>>> import keyword
>>> "from" in keyword.kwlist
True

558:デフォルトの名無しさん
07/12/29 02:49:52
>>549
uaを変更することすら出来ない程低レベルなスパマーが多いから
uaのフィルタリングも一定の有効性はあるってことかな

559:デフォルトの名無しさん
07/12/29 08:57:17
>>552 >>556
ありがとうございます。
確認できて安心しました。

unicode(text, "utf-8")
utf-8の文字列をユニコード文字列に変換する

とかで混乱してましたがすっきりしました。


560:デフォルトの名無しさん
07/12/29 09:06:44
他言語だと
長い文字列を、改行を挟んで記述することがありますが
pythonだと改行が意味を持つのでうまく出来ません

$str = "hogehogehoge" .
"mogemogemoge" .
"pogepogepoge"

みたいな記述法をpythonでするにはどうしたらいいですか?

561:デフォルトの名無しさん
07/12/29 09:17:26
>>560
.の変わりに\を使う

562:デフォルトの名無しさん
07/12/29 09:25:53
>>561
oh
ありがとうございました

563:デフォルトの名無しさん
07/12/29 10:21:33
>>558
つまり >>540 は spammer を増やした訳だな

564:デフォルトの名無しさん
07/12/29 11:47:19
ドキュメンテーション文字列って、文字列だから、
中間コードにされても実際にメモリは占有するよね?
コメントの方がよくね?

565:デフォルトの名無しさん
07/12/29 12:22:35
対話環境でhelp()で見れるという利点もある。
まあメモリの占有が問題になるほど大量にドキュメントを書くこともないだろうし。

566:デフォルトの名無しさん
07/12/29 12:25:13
>>564
勝手に -OO オプションでも付けてろよ

567:デフォルトの名無しさん
07/12/29 13:35:32
PythonでCGI書いてるんですが、コンソールにログを出力する方法はないでしょうか?
今は
print "Content-type: text/html;charset=utf-8\n"
の後に出力してHTMLを返すようにしてるんですがこれだと面倒なので・・・

568:デフォルトの名無しさん
07/12/29 15:34:06
content-type:~

書かなかったらCGIじゃないじゃん

569:デフォルトの名無しさん
07/12/29 16:25:33
デバッグで途中の変数の値とか表示させたいだけなんですが。

570:デフォルトの名無しさん
07/12/29 16:32:38
CGIなのにコンソール?

571:デフォルトの名無しさん
07/12/29 16:33:43
WinならOuptutDebugStringに出してODSモニタで見られそうなもんだが
具体的には知らん。

572:デフォルトの名無しさん
07/12/29 17:00:11
>>567
def debug_msg(msg):
  open('/tmp/debug.log', 'a').write('** debug: ' + msg + '¥n')
を定義して debug_msg('var='+repr(var)) とかして使う。
そしてコンソールで
tail -f /tmp/debug.log
とすれば、デバッグメッセージが表示される。
本格的にするにはloggerかなんかを使うんだろうけど。

573:デフォルトの名無しさん
07/12/29 17:15:37
>>569
cgitbって言うの使えば、エラー起きた前後の関係ありそうな変数の中身
自動で表示してくれるよ。

import cgitb; cgitb.enable()

574:デフォルトの名無しさん
07/12/29 18:40:08
>>572
closeはいつすればよいですか?

575:デフォルトの名無しさん
07/12/29 18:44:46
>>572
flush はいつすればよいですか?

576:デフォルトの名無しさん
07/12/29 19:08:48
質問。
ファイルからバイナリデータを読み込んで
1バイト毎の数値のリストとして扱いたいんですが
文字列から数値への変更方法がわかりません。
すいませんが教えてください。

577:デフォルトの名無しさん
07/12/29 19:10:57
chr ord

578:デフォルトの名無しさん
07/12/29 19:24:48
>>577
ありがとうございます! できました!

579:デフォルトの名無しさん
07/12/29 19:37:23
>>574-575
どちらもしなくていいですよ

580:デフォルトの名無しさん
07/12/29 20:12:20
>>574-575
def debug_msg(msg):
open('/tmp/debug.log', 'a', 0).write('** debug: ' + msg + '\n').close()

581:デフォルトの名無しさん
07/12/29 20:20:13
そもそも毎回open()するのが。。。
CGIならstderrに出せばWebサーバのログに残るし
たいがい出力先もサーバの設定で変えられる。

582:デフォルトの名無しさん
07/12/29 20:25:23
Pythonで動くRubyやPerlって誰か作ってないかな。すごく欲しくなってきた。
変態っぽい環境だけど、将来需要ありそうな予感。

583:デフォルトの名無しさん
07/12/29 21:35:12
変態的という以外の利点を教えてくれ

584:デフォルトの名無しさん
07/12/29 21:46:26
execvで充分

585:デフォルトの名無しさん
07/12/29 21:57:31
>>583
Linux/Unixの各所に残っている腐れ縁のPerlのツールをPythonで
動かせれば、Perl猿人を入れなくて済む。
それとCRubyよりCPythonの方が規模というか依存が少ないので
小が大を兼ねる状態になっていい感じと思った。

これが実装できればグーグルに入社できるかもね!

586:デフォルトの名無しさん
07/12/29 22:09:21
>>582
Rubyなんて絶対に必要ないだろwww

587:デフォルトの名無しさん
07/12/30 00:35:14
Is perl interpreter that written in python perl or python ?

588:デフォルトの名無しさん
07/12/30 00:58:34
>>587
その英語ネイティブに言っても通じないわ(wwwwwwwwwwwwwwwwwww

589:デフォルトの名無しさん
07/12/30 01:16:02
ネイティブが書かない英語だが、「まるでわからん」と言い出すネイティブがいたら、
そいつは単なる馬鹿か、あるいは「レスって何ですか?」とか言っちゃうタイプだな。

590:デフォルトの名無しさん
07/12/30 01:22:30
わかりやすく2文に分けろ。

591:デフォルトの名無しさん
07/12/30 01:26:14
perl interpriterの後は
that(which) is written in Python か
writenn in Python
じゃね?
それと、Per、Pythonみたいな固有名詞は大文字から始めるんだぜ。
 
 
 
おまいの英語、中学生からやり直した方がよくね?

592:デフォルトの名無しさん
07/12/30 01:27:24
>>589
文法的に間違っている英語が分からないと馬鹿呼ばわりされるのか.
よい勉強になったよ.

593:デフォルトの名無しさん
07/12/30 01:28:39
なんつーか・・・ム板ってスルー力ゼロだよな・・・

594:デフォルトの名無しさん
07/12/30 01:47:30
高卒の俺が考えてみた。添削おね。
Is it Perl or Python which is a Perl interpreter written in Python?
冗長だから、Is it Perl or Pythonで一回切りたい。見出しっぽく。
Is it Perl or Python, a Perl interpreter written in Python?
みたいな書き方っていかんのだろうか。

URLリンク(jp.youtube.com)

595:デフォルトの名無しさん
07/12/30 02:03:08
インタプリタがどの言語か、ってとこから可笑しいだろ…

596:デフォルトの名無しさん
07/12/30 02:12:26
いや、そんな直訳で受け取られても…。
>>587>>582に対する皮肉として書かれたんだろうし。

597:デフォルトの名無しさん
07/12/30 02:15:56
文法的に間違っている英文なんて直訳すらできないだろ(wwwwwwwwwwwwww

598:デフォルトの名無しさん
07/12/30 02:23:46
firefoxでURLを開くことを試しています。環境はUbuntu7.04です。
成功
os.system("firefox URLリンク(yahoo.co.jp)<)"])
subprocess.call(["firefox", "URLリンク(yahoo.co.jp)<)")
os.spawnlp(os.P_NOWAIT, "firefox", "URLリンク(yahoo.co.jp)")
なぜspawnだとうまくいかないのでしょうか。

599:デフォルトの名無しさん
07/12/30 02:25:17
>>596
だから中学生からやりなおせって(WWWWWW

600:デフォルトの名無しさん
07/12/30 03:49:15
print 'a','b'

ってやるとaとbの間に空白が入って「a b」って出力されるけど
この空白を挿入させないようにする方法ってありませんか?

601:デフォルトの名無しさん
07/12/30 03:55:36
print 'a' + 'b'
区切りで半角スペースが入るのは仕様ってどっかに書いてた。

602:デフォルトの名無しさん
07/12/30 04:15:01
>>601
トンクス。
仕様なら諦めます。

603:デフォルトの名無しさん
07/12/30 04:19:54
printうんぬんの話題を見てて思うのだが、
これって対話モード時のリターン値の"表示"の延長であって、
プログラムの"出力"用途じゃない希ガス。


604:デフォルトの名無しさん
07/12/30 04:54:00
>>598
質問からは少しずれるけど
標準ライブラリにwebbrowser.open(url)っていうのがあるよ。
2.5からはブラウザのタブにも対応してる。

605:デフォルトの名無しさん
07/12/30 07:25:37
前スレ
スレリンク(tech板)

547 :デフォルトの名無しさん:2007/11/18(日) 21:51:04
printで一文字ずつ表示させると、間にスペースであいてしまうのはなぜ?

例)
x="hoge"
for y in x:
print "%c" % ord(y),

出力:
h o g e

548 :デフォルトの名無しさん:2007/11/18(日) 21:56:38
print i, j, k, l としたときに見やすいから


549 :デフォルトの名無しさん:2007/11/18(日) 22:10:06
printは主にデバッグ用だから


くっつけたいなら、print''.join("%c" % ord(y) for y in x)

550 :デフォルトの名無しさん:2007/11/18(日) 22:15:11
sys.stdout.write()でもいいよ


606:デフォルトの名無しさん
07/12/30 13:20:54
Python3.0では

print(1,2,3) # 1 2 3
print(1,2,3,sep='') # 123
print(1,2,3,sep='|' # 1|2|3

607:デフォルトの名無しさん
07/12/30 14:34:19
)

608:デフォルトの名無しさん
07/12/30 14:37:01
python で書かれた 2ch ブラウザってありますか?

609:デフォルトの名無しさん
07/12/30 14:46:45
昔あったな

610:デフォルトの名無しさん
07/12/30 16:02:26
webprogramを書くにあたっての
python特有の強みって何ですか?

611:デフォルトの名無しさん
07/12/30 16:03:10
特にありません

612:デフォルトの名無しさん
07/12/30 16:56:29
WebアプリケーションでPHPとPythonどっちがいい?

613:デフォルトの名無しさん
07/12/30 17:16:26
PHPに決まってるだろハゲ

614:デフォルトの名無しさん
07/12/30 17:23:36
PHPはなんちゃって仕様が多すぎていややもう

615:デフォルトの名無しさん
07/12/30 17:24:11
あえて挙げるならASP

616:デフォルトの名無しさん
07/12/30 17:31:46
>>614
kwsk

617:デフォルトの名無しさん
07/12/30 20:52:49
外人のPythonの発音がどうしてもパイパンにしか聞こえません><

618:デフォルトの名無しさん
07/12/30 21:04:20
>>617
耳がわるいもしくは脳内エロ辞書が充実しすぎ。

619:デフォルトの名無しさん
07/12/30 21:13:01
>>480
VS2008だとRuntimeErrorが発生してVS2003でコンパイルしてくださいというエラーメッセージが表示される。

620:デフォルトの名無しさん
07/12/30 21:17:56
>>600どれでも好きなの使へ
print 'a''b'
print 'a' 'b'
print 'a'+'b'
print '%s%s'%('a','b')

621:デフォルトの名無しさん
07/12/30 22:07:35
Microthreadを使いたいんだけど、Stackless Pythonとgreenletだとどれぐらい速度が違うの?
たぶんStacklessのほうが速いと思っているんだけど。

622:デフォルトの名無しさん
07/12/30 22:15:48
>>612
URLリンク(q.hatena.ne.jp)

623:デフォルトの名無しさん
07/12/30 22:18:22
またruby厨かよ、もういいよ


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