Pythonのお勉強 Part2 ..
116:デフォルトの名無しさん
07/12/10 10:10:42
>>113
全くプログラミング経験が無い相手なら『Pythonで学ぶプログラム作法』一択
プログラミング経験がある相手なら「チュートリアル読め」で以上
117:デフォルトの名無しさん
07/12/10 11:09:59
俺も >116 に一票
118:デフォルトの名無しさん
07/12/10 18:07:53
PIL.image.show()
がxv以外を使うようにできないでしょうか?
119:デフォルトの名無しさん
07/12/10 19:09:57
Python3000a1からa2に上げてみました。
なーんか前、うちの環境でだけでる
utf-8関係でエラーが出たなぁと思っていじってて
また遭遇。
C:\> python
>> help()
help> modules sys
これでエラーが出ちゃった。
前はhelp(なんか)で出てたっぽいけど
今回、help(sys) はちゃんと動いている
XPなんだけど、他にも出る人いる?
120:デフォルトの名無しさん
07/12/10 19:35:03
windowsで2.5と3.0って両立できるの?
怖くて試せない。
121:デフォルトの名無しさん
07/12/10 19:56:22
両立?インストールパス変えるだけでいいんじゃないの?
122:WinXP, 32bit, 2.5.1installed
07/12/10 20:05:39
とりあえず入れてみた。
と、書きたいところだが、
そこに行き着く前にインストーラがこけた。
以上
123:デフォルトの名無しさん
07/12/10 20:12:11
カクタス=サボテン
124:デフォルトの名無しさん
07/12/10 20:47:27
>>123
僕の名前を知ってるかい?
125:デフォルトの名無しさん
07/12/10 21:14:40
MinGW 5.0.2 のインストール
URLリンク(www.rouge.gr.jp)
C:\mercurial-0.9.5>dllwrap --driver-name gcc -dllname executer.dll example.o C:\Python25\libs\libpython25.a
dllwrap: no export definition file provided.
Creating one, but that may not be what you want
カレントディレクトリにexecuter.dllは作成できたけどインポートできないよ
そろそろ心が折れてしまいそうです…もうダメぽ
126:デフォルトの名無しさん
07/12/10 21:31:18
TortoiseHG使えばいいのに。
あとマルチやめろ。
127:デフォルトの名無しさん
07/12/10 22:21:10
>>126
webベースじゃないと嫌です
マルチポストの件は反省しています
もう二度とマルチポストしません…orz
128:デフォルトの名無しさん
07/12/10 22:31:31
>>127
今回は諦めましょう
129:デフォルトの名無しさん
07/12/10 22:44:05
>>128
諦められません!
片っ端から忘れていけばいいじゃない。 VistaにMinGWを入れる場合の参考資料
URLリンク(0xc000013a.blog96.fc2.com)
K-na TechNotes | MinGW のインストール
URLリンク(www.knatech.info)
コンパイル通ってるのにPythonから呼び出せないのは
納得できません…
130:デフォルトの名無しさん
07/12/10 23:50:12
URLリンク(www.python.org)
- On Windows, .DLL is not an accepted file name extension for
extension modules anymore; extensions are only found if they
end in .PYD.
131:デフォルトの名無しさん
07/12/11 00:17:24
関数呼び出す時に
a=hogehoge(x=10,y=20,z=30)
なんつーふうにできるじゃないですか。
この引数一式を変数に入れとくって出来ないんですかね?
par1=("x=10","y=20","z=30")
a=hogehoge( par1 )
じゃもちろん駄目なんですが…
132:デフォルトの名無しさん
07/12/11 00:28:25
kwargs = {'x':10, 'y':20, 'z':30}
a=hogehoge(**kwargs)
133:デフォルトの名無しさん
07/12/11 01:08:46
なんたら代入とか名前あったなぁ
134:デフォルトの名無しさん
07/12/11 08:17:02
Perlでいう
$| = 1(出力バッファリングの停止)をやりたいんですが。
ググると、
起動オプションに-uを付ける、
あるいは環境変数PYTHONUNBUFFEREDに何らかの値を代入する。
という方法があるのは分かったのですが、
なんかやり方が美しくないように思います。
コードの中だけで完結しておきたいんですが、
そういう方法はないでしょうか?
135:デフォルトの名無しさん
07/12/11 08:57:21
pythonプログラム中で環境変数を設定すればいいんじゃないかな
136:デフォルトの名無しさん
07/12/11 09:01:12
バッファサイズを0にして開けばおk
sys.stdout = os.fdopen(sys.stdout.fileno(), 'wb', 0)
137:デフォルトの名無しさん
07/12/11 10:00:48
ありがとう
138:デフォルトの名無しさん
07/12/11 10:15:29
PythonでwxPythonを使いながら色々と勉強しているのですが
wxPythonのDemo等でイベント関連のところでBind関数を使って
いますが、詳細を知ろうと思いwxPythonのドキュメントでこの関数を
探しているのですが見つかりません。
どのあたりに書かれているかご存じの方いらっしゃいませんか?
139:デフォルトの名無しさん
07/12/11 10:30:34
すいません。
自己解決しました。
ドキュメントの最初に
wxWidgets 2.8.4: A portable C++ and Python GUI toolkit
ってあるからてっきりこれがwxPythonのドキュメントかと思ってしまいました。
別の所に、 Package wxのドキュメントがあり、Bind関数の記述を
見つけることが出来ました。
お騒がせしました…
140:デフォルトの名無しさん
07/12/11 11:21:14
Windowsのcmd上で使っています。
ファイルのパスに日本語が含まれているときに限ってなのですが、
sys.argv[0]を表示させようとすると
hoge.py と直接実行したときと
python hoge.py とコマンド指定して実行したときとで動作が違います。
後者はそのままうまく表示されるのですが
前者はunicode(path, 'mbcs')しないと例外が出てしまいます。
どこが違うのでしょう?
141:デフォルトの名無しさん
07/12/11 12:33:08
誰かー。yahoo apiを使うならこれ使えってモジュール知らないか?
142:デフォルトの名無しさん
07/12/11 13:41:45
>>141
URLリンク(developer.yahoo.com)
本家みてもurllib, httplib, xml.*でしこしこ書いてるから
スタンダードなRESTライブラリってないんだと思う。
通信自体は大したことないしAPI毎の解析は結局個別に実装が必要だし
単純にそういうのでいいんじゃないかな。
URLリンク(pysearch.sourceforge.net)
それかこれをJapan対応にするのも有意義かもだけど。
将来的にxmlrpclibみたいにrestlib?が標準でつくといいね。
143:デフォルトの名無しさん
07/12/11 14:19:58
情報ありがとー
144:デフォルトの名無しさん
07/12/11 16:37:03
Linuxでioctl使いたくて↓を読んだんですが、
URLリンク(www.python.jp)
termios関連のものしか引数に渡せないんでしょうか。
URLリンク(home.mag.cx)
にあるLogitechのwebcamのLinux用デバイスドライバーの動作を、
Pythonで呼び出したい、というのが目的です。
linux/videodev.hに定義されているVIDIOCGCAPなどを使って、
URLリンク(www.gelato.unsw.edu.au)
ioctl(fd, VIDIOCGCAP, &vidcap);
// fdはfile descriptor
// vidcapはvideo_capability構造体
のようなCから呼べる動作をPythonで出来ないものでしょうか。
CでモジュールをPython用に書くしかないですかね。
145:デフォルトの名無しさん
07/12/11 17:10:09
>>140
再現しなかったよ。
C:\temp\テスト>pwd
c:/temp/テスト
C:\temp\テスト>type test.py
import sys
print sys.version
print sys.argv[0]
C:\temp\テスト>test.py
2.5 Stackless 3.1b3 060516 (release25-maint, Oct 4 2006, 12:32:12) [MSC v.1310
32 bit (Intel)]
C:\temp\テスト\test.py
146:144
07/12/11 17:16:06
自己解決。
URLリンク(sourceforge.net)
ここを参考にしたら出来そうです。
挫折したらまた来ます。
147:デフォルトの名無しさん
07/12/11 18:46:45
>>140
複数の python が入ってるんじゃね?
148:デフォルトの名無しさん
07/12/11 18:59:07
3p
149:デフォルトの名無しさん
07/12/11 23:08:15
行頭で
#-*- coding: shift_jis -*-
というように記載しているcodingの指定って変数とかに
格納されていたりするのでしょうか?
二箇所もかいたりするのを省略したいのですが。
150:デフォルトの名無しさん
07/12/11 23:53:49
行頭の一ヶ所に書いておけばいい
151:デフォルトの名無しさん
07/12/12 00:33:29
そうじゃなくて、行頭で書いたコードをプログラム中でも使いたいってことじゃね?
変数に入ってるかどうかしらんけど、なんかの関数で取得することはできそうだな。
152:デフォルトの名無しさん
07/12/12 01:07:24
以下のコードを使って独自の import を定義しようとしたんだけど:
import my_api # C によって実装した独自import関数を含むモジュール
def set_import():
__builtins__.__import__ = my_api.my_import
実行すると __builtins__ に __import__ メンバが存在しないっておこられるんだけど
dir(__builtins__) してみたら、確かに __import__ だけが存在しない。
このコード、
Py_InitModule("my_api", APIの宣言テーブル)
PyObject* mo = Py_CompileStringFlags(上記コード, "hoge", Py_file_input, NULL);
PyObject* ret = PyObject_CallFunction(mo, "set_import", "()");
Py_DECREF(ret);
Py_DECREF(mo);
て感じで実行させてるんだけど、このやり方だと __builtins__.__import__ が定義されなかったりするのかな?
153:デフォルトの名無しさん
07/12/12 01:13:27
出来たとしてもキモイものが出来そうだ。
・ASCII
・Shift_JIS
・euc-jp
・utf-8
・スウェーデンなキャラコード(よーわからんw)
5つあったとして、importした時とかは、
どういう動作を期待してるんだろ?
Shift_JISモジュールがShift_JISを吐き出して、
euc-jpモジュールがeuc-jpを吐き出すのか?
Shift_JISモジュールをimportしたeuc-jpモジュールは、
何を吐き出すんだ?両方混ざるのか?
俺は
ソースが何語で書かれているか
何語を入力・処理・出力するのか
この2つは、別のものだと考えているけどね。
154:デフォルトの名無しさん
07/12/12 06:39:40
simplejsonのコンパイルって簡単にできないですか?win
155:デフォルトの名無しさん
07/12/12 08:22:34
>>145
追試ありがとうございます。
確かにそのコードだと問題出ませんでした。
自分のところで書いてたコードを晒します。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
import os
a = unicode(sys.argv[0], 'mbcs')
b = os.path.abspath(os.path.dirname(a))
print a
print b
print u'%s/ほげ' % (a)
try:
print u'%s/ふが' % (b.decode('mbcs')) # testpath.py のときだけエラー
except UnicodeEncodeError, (e):
print sys.exc_info()[0]
print e
print e.args
try:
print u'%s/ふが' % (b) # python testpath.py のときだけエラー
except UnicodeDecodeError, (e):
print sys.exc_info()[0]
print e
print e.args
156:デフォルトの名無しさん
07/12/12 08:23:08
C:\日本語>testpath.py
C:\日本語\testpath.py
C:\日本語
C:\日本語\testpath.py/ほげ
<type 'exceptions.UnicodeEncodeError'>
'ascii' codec can't encode characters in position 3-5: ordinal not in range(128)
('ascii', u'C:\\\u65e5\u672c\u8a9e', 3, 6, 'ordinal not in range(128)')
C:\日本語/ふが
C:\日本語>python testpath.py
testpath.py
C:\日本語
testpath.py/ほげ
C:\日本語/ふが
<type 'exceptions.UnicodeDecodeError'>
'ascii' codec can't decode byte 0x93 in position 3: ordinal not in range(128)
('ascii', 'C:\\\x93\xfa\x96{\x8c\xea', 3, 4, 'ordinal not in range(128)')
157:デフォルトの名無しさん
07/12/12 08:24:21
>>147
pythonは1つだけ(2.5.1)です
158:デフォルトの名無しさん
07/12/12 08:34:52
Python3000で組み込み関数から file が削除されてるのはなぜ????????
159:デフォルトの名無しさん
07/12/12 08:38:51
open()使いなさいよってことかと
160:デフォルトの名無しさん
07/12/12 08:38:57
testpath.pyのみのときは元々実行ファイルのパスが判明しているが
(エクスプローラでダブルクリックするとさらに状況が違うかも知れない)
python testpath.pyのときは、実行ファイルがカレントディレクトリにいるため
プログラム中の
os.path.abspath
または
os.path.dirname
の内部でパスが補完されている
おそらく
C:\>python C:\日本語\testpath.py
を実行すれば前者(testpath.pyのみ)と同じ結果になるだろう
os.path.abspath
または
os.path.dirname
のUNICODEの取り扱いに問題があると思われ
161:デフォルトの名無しさん
07/12/12 08:47:28
>>159
file は2.2か2.3で新しく追加された関数(というかコンストラクタ)で、
むしろ open の方が古い仕様で file のエイリアスって
扱いじゃなかったっけ。。。。。。
162:デフォルトの名無しさん
07/12/12 09:05:31
整理)
b = os.path.abspath(os.path.dirname(unicode(sys.argv[0], 'mbcs')))
の状況で(この段階↑で既に変なことしてるように見えるが)
1) print u'%s/ふが' % (b.decode('mbcs')) # testpath.py のときだけエラー
2) print u'%s/ふが' % (b) # python testpath.py のときだけエラー
1)になるパターン
・C:\日本語>testpath.py
・エクスプローラからダブルクリック
・C:\>python 日本語\testpath.py
・C:\日本語>python ..\日本語\testpath.py
・C:\日本語>python C:\日本語\testpath.py
2)になるパターン
・C:\日本語>python testpath.py
のみ?
結論)
とりあえず
a = sys.argv[0]
b = unicode(os.path.abspath(os.path.dirname(a)), 'mbcs')
print u'%s/ふが' % (b)
という書き方なら(1)(2)共に問題ありませんでした
本当にありがとうございました
163:デフォルトの名無しさん
07/12/12 09:55:33
WindowsXP+Python3.0a2でIDLE起動したんだが
プルダウンメニューとコンテキストメニューが派手にバグっててorz
一瞬何が起こったのか分からんかった
164:デフォルトの名無しさん
07/12/12 10:11:11
こんな流れか?
(1). iterator導入。
(2). 新規にfile()作ったぜ。みんなコレ使え。
(3). iterator浸透。generator導入。
(4). なんだかもう、open()はfile()のエイリアスでいい気が……
(5). マニュアル『open()はfile()のエイリアス。過去互換です。』..._〆(゚▽゚*)
(6). file()いらねーだろ。統一感ないし。"みんな"使ってないし。←いまここ
(7). じゃあfile()は廃止ね。(5)をまじめに実行した奴m9(^Д^)プギャー
165:デフォルトの名無しさん
07/12/12 10:20:01
変数名に file 使いたいから file() 使いにくいんだよね……
def f():
file = file("/dev/null") # ここで UnboundLocalError が飛ぶ
166:デフォルトの名無しさん
07/12/12 11:17:45
>>160
>>162
解決しました。
ありがとうございました。
167:デフォルトの名無しさん
07/12/12 14:20:08
なんだよマニュアルに open() は過去互換とかいうから
file() 使っていたのにヽ(`Д´)ノ
168:デフォルトの名無しさん
07/12/12 14:47:54
import urllib
conn = urllib.urlopen("test.txt")
data = conn.read()
conn.close()
みたいなかんじでIO関連の処理はopen+closeでやる
ものだと何となく認識してた俺は大丈夫だったようだ…
169:デフォルトの名無しさん
07/12/12 15:46:30
Python 2.4:
以前の関数名である open() は互換性のために残されており、 file() の別名となっています。
Python 2.5:
When opening a file, it's preferable to use open() instead of invoking this constructor directly.
ファイルを開くときは、このコンストラクタ(file)を直接実行するより、open()を使う方が望ましい。
170:デフォルトの名無しさん
07/12/12 17:25:58
>167
オレモオレモ… orz
171:デフォルトの名無しさん
07/12/12 17:33:15
Python 2.3でこの関数を呼ぶと、
def _IOC(dir, type, nr, size):
return ( dir << _IOC_DIRSHIFT) | ¥
(ord(type) << _IOC_TYPESHIFT) | ¥
( nr << _IOC_NRSHIFT) | ¥
( size << _IOC_SIZESHIFT)
/usr/lib/python2.3/site-packages/video4linux/__init__.py:112: FutureWarning: x<<y losing bits or changing sign will return a long in Python 2.4 and up
return ( dir << _IOC_DIRSHIFT)
って、出るんですけど、
何を修正すればこのwarningは消えますか?
172:デフォルトの名無しさん
07/12/12 17:40:54
URLリンク(docs.python.org)
URLリンク(www.python.jp)
173:デフォルトの名無しさん
07/12/12 18:11:07
>>172
単にwarningが表示されないようにするのではなく、
warningの原因自体を取り除きたいです。
>>171の書き方のどこがまずいんでしょうか。
174:デフォルトの名無しさん
07/12/12 18:16:18
def func(a, b):
pass
という関数があったとして、
func(1, 2)
と書くかわりに
tup = (1, 2)
func(tup)
みたいにしたいんですが、
どうやったらいいでしょうか。
func自体は修正できないものとします。
175:デフォルトの名無しさん
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
なんかと思ったら&、>、<への変換か
179:デフォルトの名無しさん
07/12/12 21:09:58
&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
ああ、こんなのあるんだ
dd
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)のように取得した変数を、マルチバイト文字として
カウントするにはどのようにすればよろしいのでしょうか。
よろしくお願いします。
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
5502日前に更新/217 KB
担当:undef