いちおつ
s = 'abcdefgh' のとき ['ab', 'cd', 'ef', 'gh'] みたいに2文字ずつ切り出すには どう書くのがスマートですか?
it = iter('abcdefgh') map(operator.add, it, it)
pythonのインタラクティブシェルで日本語入力できないんだが…どうすれば… ググたけどもうお手上げ
ALT+半角全角でとりあえず入力はできるけど・・
>>6 >>7 のは上手いなぁ。それよりも愚直にはなるが、
[s[2*n:2*n+2] for n in range(len(s)/2)]
って方法もある。
環境はpython2.6.2でwin32 インタラクティブシェル開くと言語バーが消えてしまうんっすよね だからalt+半角/全角にしても切り替わってくんない
方々、すいません 設定が米国語になってましたorz にぽん語にして再起動したら入力でけるようになりました おさわがせいたしましたぁ
14 :
デフォルトの名無しさん :2010/04/26(月) 12:18:59
同じイテレータの.next()が呼び出されるからこうなるんだよね 端的だけどすぐには思いつかないから、分かりやすいかは微妙に感じる operator.add() って引数全部足すのかと思ってたらもちろん違った 3つだったらこんな感じか map(lambda *a: ''.join(i for i in a if i), *(it, ) * 3) ワンライナーだな―これは
>>11 *2はダサイから、
[s[n:n+2] for n in xrange(0, len(s), 2)] かな。
他には、 [t + u for t, u in zip(s[::2], s[1::2])] とか、
map(operator.add, s[::2], s[1::2]) とか
でも、
>>7 はイテレータの神
特にお勧めはしないが re.findall('..', s) でもいいよ
19 :
デフォルトの名無しさん :2010/04/26(月) 15:12:02
Cだと互いに影響しあうようなものを引数にするのはタブーだけど Pythonは関数の引数の呼び出し順は決まってるん?
>>20 >>7 のことを言っているのなら、何か誤解していると思う
func(expr1, expr2)
CやPythonのような正格な言語では、式expr1, expr2が評価されてから
funcが呼ばれる
expr1とexpr2のどちらが先に評価されてかは(少なくともCでは)決まっていないので、
それに依存するプログラムは邪悪とされる
>>7 の場合、式it, itをmap()に渡しているので、iteratorオブジェクトitが
そのままmap()に渡るだけなので、上の問題とは無関係なことに注意して欲しい
勿論map()の実装には依存しているけどね
ええっ map(operator.add, it, it) のことなら 左のitが先に評価されて右のitが後から評価されているからこそ それがmapでうまく処理される訳で 右が先で左が後なら正しい結果にならないでしょ?
>>22 iteratorオブジェクトitがそのままmap()に渡るだけなので
24 :
21 :2010/04/26(月) 16:59:54
>>22 言葉が足りなかったかな
it.next()を評価して、itから値を取り出すのは「map()の中」なんだよ
勿論左の引数から先に値を取り出すようにmap()が実装されていなければ
望みの結果にはならないけど、
関数の引数として渡した式が、関数を呼ぶ前にどういう順序で評価されるかが
不定である、という問題とは関係が無いわけさ
25 :
20 :2010/04/26(月) 17:33:53
>>21 ありがとう。言われてみれば確かにそうだ。
引数で渡した時点では副作用はないね。
26 :
22 :2010/04/26(月) 18:17:46
>>24 ありがとう。言われてみれば確かにそうだ。
引数で渡した時点では副作用はないね。
10分
29 :
27 :2010/04/26(月) 22:53:46
orz
30 :
11 :2010/04/26(月) 23:38:19
>>15 lambdaでも可変長引数とれたんだ。知らなかった、ありがとう。
>>16 そういやrangeってステップ指定できたなぁ。いつも必要なときに忘れるんだ
このスレ知らないことがたくさんでてきて勉強になります。
ただ
>>15 だけ試してみたけど
なんでそうなるのか分からなかったので、
初心者にも分かるように教えてもらえませんか?
map(lambda *a: ''.join(i for i in a if i), *(it, ) * 3)
すいません、途中でおくってしまいました。
このスレ知らないことがたくさんでてきて勉強になります。
ただ
>>15 だけ試してみたけど
なんでそうなるのか分からなかったので、
初心者にも分かるように教えてもらえませんか?
よく分かっていない部分
1. map(lambda *a: ''.join(i for i in a if i), *(it, ) * 3)
は構文的に通るのに
print i for i in aが通らない理由
2. map(lambda *a: ''.join(i for i in a), *(it, ) * 3)
ではダメな理由
3. 処理が行われる順番
4. *(it, ) * 3はどんな意味?
以上です。よろしくお願いします。
1.引数はタプルだから 2.nextじゃなくてforの場合はStopIterationにならないから if i はいらないんじゃないの 3.括弧の中からっぽい 4.同じ1つのイテレータの入ったタプルを展開 自分も初心者なんで適当
訂正 4.同じ1つのイテレータが3つ入ったタプルを展開
35 :
34 :2010/04/27(火) 07:24:12
すんません map(lambda *a: ''.join(a), *(it, ) * 3) これでも同じ結果になるような気がするんですが、 間違っていますか
36 :
34 :2010/04/27(火) 07:28:08
lambda *a: ''.join(i for i in a)の(i for i in a)はジェネレータ表記になっている必要性がありませんよね lambdaは*aで、タプルの引数としてイテレータから3つ要素を取ってきてそのままjoinに渡すんですよね 間違っているのかどうかわからん
37 :
15 :2010/04/27(火) 09:25:24
俺のが一番魔術的だったわけだ
1. 引数に渡すときは()を省略してジェネレータ表記に出来る
2. 余りが出たときのため。例外出すかこういう風に処理するかは場合によるよね
3. どこのこと?
4.
>>33 の通り
>>33 for は StopIteration で終了してるよ
38 :
34 :2010/04/27(火) 09:50:31
>>37 引数がタプルになるのは、星があるときだけでしたね
ジェネレータの括弧が省略可能ってことか
forは裏でStopIterationをtry exceptみたいな感じか
>>33 は適当すぎましたね
すみません
39 :
34 :2010/04/27(火) 09:54:44
というかjoinがどうなっているのかわからん以上、 引数のタプルがどうとかは言えないんだった
要素が足りなくなったときに(itがStopIteration吐いたときに)Noneを補完してるのはどの部分? it=iter('abcdefgh');map(lambda *a: a, *(it,)*3) ---> [('a', 'b', 'c'), ('d', 'e', 'f'), ('g', 'h', None)]
41 :
40 :2010/04/27(火) 10:54:06
ごめん、自己解決した。mapの仕様ですね。 map(lambda a,b: (a,b), range(3), range(5)) ---> [(0, 0), (1, 1), (2, 2), (None, 3), (None, 4)]
ひょっとしてこのスレは2.6が標準なのかな
Oh,Yes!
44 :
デフォルトの名無しさん :2010/04/27(火) 11:55:37
Python2.6、IDLEを使ってGUIアプリを作ろうと目論んでます。 F5でモジュールを起動してチェックしてるのですが、出てきたウィンドウを閉じると次回起動させる時に Exception in Tkinter callback 中略 AttributeError: ModifiedInterpreter instance has no attribute 'interp' とでて一度IDLEを閉じてから起動させるハメになります。 自分に何か足りないんだと思いますがいい方法はないものでしょうか?
45 :
44 :2010/04/27(火) 13:04:11
自己解決デストロイ
解決方法教えて
47 :
44 :2010/04/27(火) 13:40:02
del root
50 :
44 :2010/04/27(火) 13:57:27
>>48 ありがとうございます。調べてみます。
>>49 マジすか。
普通にウインドウの×ボタン押して閉じてたりdestroyだけした時にこうなるので何かの記述が足りないのかなと。
self.quitだと全部閉じちゃうしなーorz
自分で調べるより最小限の再現手順(コード含む)と環境貼って 誰かに調べてもらったほうがいいと思うぞ Tcl/Tk, Tkinter, IDLE と登場人物が多くて切り分けるのが大変だし
52 :
44 :2010/04/27(火) 14:20:30
ttp://paison.hp.infoseek.co.jp/paison/tkinter/pytk2.html より下記コードを引用(不要部分は削除)
from Tkinter import *
class App(Frame):
def init(self):
b = Button(self, text="Bye", command=self.cmd_clicked)
b.pack(side=TOP)
def cmd_clicked(self):
self.master.destroy()
def __init__(self, master=None):
Frame.__init__(self, master)
self.pack()
self.init()
if __name__ == "__main__":
app = App()
app.mainloop()
このコード(他もですが)でウインドウの×ボタンで閉じた場合とdestroyした場合にもう一度起動する時に
>>44 のエラーがでてモジュールを起動できません。
OS:Ubuntu9.10 64bit
Python2.6
モジュールをアンロードしてからリロードするようにしてみたら?
54 :
44 :2010/04/27(火) 14:39:41
>>53 すみません、どうやればいいかわかりませんorz
ちょっとは自分で調べろ オウム返ししてると返事もらえなくなるぞ
>>44 別ウインドウを出すコードは、WindowsのIDLEから実行すると
おかしくなることが多いね。
普通のコマンドライン版から試してみるといいかも。
matplotlibとかturtleとかはIDLEだと駄目でコマンドラインだといける。
二回目からは app = App() を消して app.mainloop() だけにして動かすと動くと思うよww
58 :
44 :2010/04/27(火) 15:33:47
>>49 今2.5も入れてやってみましたが同じく失敗しました。
何が違ったんでしょう…
>>55 調べましたがimport→reloadのではないですよね?
私の勘違いだと思いますがPython Shellを閉じてもう一度だと本末転倒なので…
>>56 おぉ!一気に楽になりました!
本当にありがとうございます。
59 :
32 :2010/04/27(火) 19:26:30
>>33 ,37
答えてくれてありがとうございます。
色々勉強になりました。
ジェネレータ表記はよく分かってなかったので、
これを気に勉強します。
また分からないことがあったらよろしくおねがいします。
>>58 IDLEを -n オプションをつけた状態で起動したら (Shell に No Subprocess と表示)
そのエラーがでたけど、つけない場合エラーはでなかったよ
61 :
44 :2010/04/28(水) 09:43:38
>>60 ショートカットを確認したら確かに -nと付いていたので消したら治りました。
ありがとうございます。
今作ってるのが一段落したら何故こうなったのかも調べてみたいと思います。
勉強になりました。
>>7 name 'operator' is not defined
>>18 も同じく定義してないってエラーが
何かimportせにゃならんとかですか?
>>15 は動きました
>>7 は
import operator
>>18 は
import re
が必要
親切だな
大学の図書館にはクックブックとpythonプログラミング入門しかなかったから それぞれをパラパラ読んで後者を借りてきた。これでGWにCでやったアルゴリズムをpythonで書き直したりしようと思う 情報がかなり薄いけど、不満があるとすればそこじゃなく、変数にやたらと l を使って、わざわざコメントで「←これは小文字のエル」と注意してること
pyExceleratorを使って、Excelからデータ読みこんで 適当なテキストファイルに書き写したんだけど データに改行があった場合、\nを削除しても勝手に改行される どうすればいい? あと、変数の中身をraw文字には出来ないの?
small LはPEP8でも使うなって言ってんのに…
Pythonでアップロードを行った時進行状況を知る方法はありますか? ダウンロードであればファイルオブジェクトをread(1000)とかでループすることで知ることができるようですが アップロードの場合がわかりません
>>67 \x0D\x0A じゃなくて
\x0D だけのところを消さないといけない
>>70 どうやってアップロードをしているのか書いてくれないと答えようがないぞ
mime-multipart です
>>71 ありがとうございます
でも結局良くわからなくて、別の方法で回避しました
ごめんなさい
取り込みたいファイルはshift-jis形式のcsvロガーファイル getdefaultencoding()は'mbcs'のWindows環境 みんなのPythonで勉強しているのですが、コード内部ではなるべくユニコードをってところでつまづいています。 csvファイルの1列目に日本語タグがある為、csv.reader()でユニコードへ変換しつつ取り込もうとすると リストには対応していないとエラーになり… open()でreadlines()を使いunicode()でユニコード化しても、リストのインデックス取り出しが1文字ずつになり不便に… csv.reader()みたいにコンマ区切りにする方法か、csv.reader()でユニコード変換する方法はないのでしょうか; それともユニコード化は別処理で考えたほうがいいのかなぁ…
>>75 csvパーサの本体はCで実装されてて、かつstr(char*)を期待してるみたいなんで、
その時点でunicodeにするのは無理
stream = codecs.getreader('cp932')(open('foo.csv'))
みたいなのをcsv.reader()に渡すことは可能ではあるが、
csvパーサに渡るときに、どのみちstrに変換される
なので、uniocdeにしたければ自分で変換すると良いよ
row = [ col.decode('cp932') for col in row ]
程度で済む話だ
>csvパーサの本体はCで実装されてて、かつstr(char*)を期待してるみたいなんで、 糞だな こういうあホガイるから Python3 での決断が必要になったんだろうな
ホガイほすい
>>76 ありがとうございます。
自分で変換する方法でいきますね。
日本語と英語が混ざっている箇条書きの文が書き連ねられた ファイルinput.txtがあります。 input.txtの中身は WINDOWS, WINDOWS CE(9X系およびNT系は最新版、WINDOWS 3.1およびMS-DOSは旧版のみ) MACINTOSH(OS 9以前およびOS X以降ともに) 各種UNIX LINUX(LINUX STANDARD BASE3.2で標準仕様となった) PLAN 9(PYTHON 3.Xは未移植) PALMOS S60 JAVAプラットフォーム (JYTHON) .NET FRAMEWORKプラットフォーム (IRONPYTHON) です。 このinput.txtの書く行に対して, 各英単語の先頭だけを大文字にする処理をしたいのですが、 適当な標準関数などありますでしょうか? よろしくお願い申し上げます。
ありません 次の方どうぞ
>>81 無理だったけど(Os, Ironpython, .Net になる)せっかく書いたので
# coding: sjis
import re
for line in open('input.txt', 'rb'):
line = line.decode('sjis')
line = re.sub(ur'\b([A-Z(][A-Z]+)', lambda m: m.group(0).title(), line)
print line,
>>83 ありがとうございます。
いただいたコードで大分良くなります。
本番用のテキストに適用して、微妙なヵ所は手動で直します。
大変助かりました。
f=open("foo") x=f.readlines() myfunction(x) の様にxを使用した後、もうxはこれから先 一切 使用しないのですが、 fooが巨大なファイルであるとき、メモリ上にx(が指す先のメモリ領域)が残っている と物理メモリを圧迫しそう(正確にはプロセス毎の領域ですが。)なので、 GCをxに対して発動させる事はできますでしょうか? 実際には上の状況に限らず、一般的に 変数xが巨大なデータ過ぎて、でももう使わない等という時に そのメモリ領域を開放したいのです。 C++で長年プログラミングしていると無駄なメモリ領域を明示的に開放する 処理を書きたくなってくるのです。 よろしくお願い申し上げます。
>>81 import re
def shuffle(xs, ys):
while True:
yield xs.next()
yield ys.next()
toks = iter(re.split(r'(\W+)', open('input.txt').read()))
print ''.join(shuffle((x.capitalize() for x in toks), toks))
87 :
86 :2010/04/30(金) 01:20:51
書いたはいいが、これはShift JISみたいなエンコーディングだと駄目だな その場合は、open('input.txt').read()を codecs.getreader('cp932')(open('input.txt')).read()とでもしてね
>>85 Pythonはリファレンスカウントなので、xは誰も参照してなければすぐ消される
が、C++プログラマなら知ってるだろうが、Pythonプロセスのヒープにメモリが
返却されたからと言って、OSにメモリが返却されるとは思わないほうがいい
readlines()で一気に全行読む必要は本当にあるの?
>>88 >物理メモリを圧迫しそう(正確にはプロセス毎の領域ですが。)なので、
とか
>実際には上の状況に限らず、一般的に変数xが巨大なデータ過ぎて、
とか言っているようだが。
詳細は本人が来るまで知らん。
>>86 それだと
you're the best.
が
You're The Best.
になってほしいのに
You'Re The Best.
になってしまわないか?
92 :
85 :2010/04/30(金) 01:35:46
>>88 >>90 ありがとうございます。
xを指していた先を指している他のオブジェクトが存在していない時、
明示的にそのメモリを破棄する方法が無いとしても、
参照カウント方式でしたら、
x = None
とすればそれだけでGCが発動してくるって理解でよろしいでしょうか?
>>92 いや通常そんな必要は無い
xがローカル変数で、その参照をreturnするなどしなければ、
普通はその関数から抜けるなどすれば、すぐGCされる
明示的に消したい時は
del x
>>91 ああ、そういうケースまでは真面目に考えてない
pythonで文字列mystrの末尾に改行コードがあったら 削除するっていう操作はどうすれば可能でしょうか?
mystr.rstrip(r'\r\n')
98 :
85 :2010/04/30(金) 01:53:59
>>93 del x
まさにそれが知りたかったです。
ありがとうございます。
99 :
85 :2010/04/30(金) 02:02:20
>>92 前半のコード
f=open("foo")
x=f.readlines()
myfunction(x)
後半のコード
の形をしている時、C++では{}でくくる事によって
明示的にスコープを新たに作る事ができました。
すなわちC++ライクに擬似コードを書くと
前半のコード
{
File_type f=open("foo") ;
Line_type x=f.readlines() ;
myfunction(x) ;
}
後半のコード
とすれば、{で新しいスコープに入り制御が}に達した瞬間に
ローカル変数であるfとxのデストラクタが発動します。
しかしPythonでは上述
>>99 のC++の{}に相当するような方法が良く分かりませんでした。
例えば
前半のコード
if True :
File_type f=open("foo") ;
Line_type x=f.readlines() ;
myfunction(x) ;
後半のコード
のように意味のないifブロックをわざと作ってみても、
そのifを脱出した後の後半のコードの部分でも x や f が有効なようです。(ですよね?)
まあPythonを使っていてメモリがどうとか言う方がおかしい(センス無い or C++に毒されすぎ)のかもしれませんが。
>>99 Pythonでスコープを作りたければ、明示的にdefで関数にするしかないけど
その例なら、単に
myfunction(f.readlines())
と書けばすぐ回収されると思うよ
>>101 ああなるほど、確かに一時的にxを用意する必要はありませんでした。
そもそも、メモリ使用量を意識する場合は、リストではなくてイテレータを使う
1パスで済まない仕事なら仕方ない 行位置だけ覚えて、要求されたら ファイルから行を遅延fetchするようなクラスを書くのが理想
つlinecache
>>100 前半のコード
def block():
File_type f=open("foo") ;
Line_type x=f.readlines() ;
myfunction(x) ;
block()
後半のコード
def reverse(data): print 1 print data for index in range(len(data)-1, -1, -1): yield data[index] print 2 reverse("golf") print 3 と言うのを試してみたのですが、 何故かprint 1, print dataが表示されません。 (2,3は表示されます。) 理由が分からないのですが、教えていただけないでしょうか?
print reverse("golf")してみるといい yieldがあるから呼ばれてない for inとか明示的に.next()を呼ぶとかlist()とかに渡すとか ジェネレータを使う処理をしないとダメ
そのreverseは普通の関数ではなくてジェネレータだからな reverse("golf")は、ただgenerator objectを返すだけで その中身はまだ実行されないんだよ g = reverse("golf") g.next() のように、next()呼ぶと、yield一回分中身が実行されて、yield式の値が 返る まあ普通は単に for x in reverse("golf"): print x みたいに書いて、next()を自分で明示的に呼ばないことが多いが
111 :
108 :2010/05/02(日) 14:07:51
>>109 ,110
なるほど、next()を行うまでは呼ばれないのですね。
すごくよく分かりました。
ありがとうございます。
>>108 ちなみに、もし後じゃなくて今表示したいなら、こういう方法もある。
def reverse(data):
def gen():
for index in range(len(data)-1, -1, -1):
yield data[index]
print 1
print data
return gen()
ごめんよ、インデント崩れた。 def reverse(data): def gen(): for index in range(len(data)-1, -1, -1): yield data[index] print 1 print data return gen()
114 :
108 :2010/05/02(日) 15:52:10
>>113 なるほど、関数の中にyieldを入れることもできるのですね。
色々教えて頂きありがとうございます。
シーケンスから最大要素のインデックスを取得する方法について seq.index(max(seq))だと無駄がありそうなので よりいい方法があれば教えてください
>>115 >>> from operator import itemgetter
>>> max(enumerate([2,5,3,4]), key=itemgetter(1))[0]
1
numpy.argmax(seq)
クラスについて教えて欲しいんですが。 恥ずかしいんですが、クラスってなんだろう。
役職
オブジェクト指向について解説してある記事を嫁
オブジェクト指向信者にはなるなよ 痛いだけだからな
オブジェクト指向って名前がカッコイイよな
「まさか、後罪(オブジェクト指向)の触媒(パラダイム)を<讃来歌(メタプログラミング)>無しで?」
124 :
デフォルトの名無しさん :2010/05/04(火) 01:19:51
モジュールの読み込みについて質問です。 dir/ hoge.py package/ __init__.py piyo.py fuga.py とあって、hoge.py の中で import package.piyo としてpiyoをインポートしています。さらに piyo.py の中で import .fuga としてfugaをインポートしているのですが、この形だと piyo.pyを直接実行したときに、 ValueError: Attempted relative import in non-package と怒られます。 hoge.pyとpiyo.pyどちらを実行した場合でも、正常にインポート出来る ようにするには、どのようなインポート文を書いたらいいのでしょうか?
import .fuga でなく import fuga でいいんじゃまいか
126 :
デフォルトの名無しさん :2010/05/04(火) 01:45:12
ありがとうございます。 import fuga だとhoge.py実行時に ImportError: No module named base というエラーが出てしまいます。
baseってなんだ?
128 :
デフォルトの名無しさん :2010/05/04(火) 02:29:57
すみません。base=>fugaです。
129 :
デフォルトの名無しさん :2010/05/04(火) 03:43:40
sys.path.append
from package import piyo としてpiyoをインポート さらに piyo.py の中で from . import fuga
from . import fuga だと ValueError: Attempted relative import in non-package といわれます。sys.pathについては、ディレクトリ移動したときに 変更が必要になりそうなので使わないようにしてましたが 最終手段として考え直してみます。
132 :
124 :2010/05/04(火) 13:19:54
とりあえず__name__つかって分岐させてました。 スレは継続してチェックさせていただくので、なにかいい方法があればお願いします。 ありがとうございました。
piyoを直接実行って、どうやってる?ちゃんと python -m package.piyo ってやってる?
ケリー・クラークソンって素敵じゃね
とっくに おぺvbs炭
python超初心者です つかプログラミング自体超初心者 django使ってwebアプリ作ろうとしているのですが views.pyの行数がドンドン増える。 サイト配下のアプリを複数にするべきですか? それともアプリ一つで長いviews.pyでOK? アホな事聞いてごめん
>>136 django使ったこと無いからどんなもんかは分からないが、
一般にファイルの行数がどんどん増えるような実装はしない。
メンテナンスが大変になるから。
容易さにつられて、本来とは違う使い方してるんじゃないの?
ありがとう models.pyでデータベースに格納するデータを views.pyで処理を urls.pyでURLを それぞれ管理するんだけど、今は"ユーザ登録"っていう一つの処理を views.pyにそれぞれ書いて(defによる宣言)いってる。 つまり"ユーザ削除"とか"ユーザ変更"やその他各種情報に関する処理毎に 関数作ってそれをurls.py経由で読み出すって感じなんだ。 サイト配下のアプリ毎に分ければ、すっきりはするんだけど、アプリ間でのリレーションとかも気にしないといけないから、皆どうしてるんだろうなぁと。 views.pyを分割する事も出来るみたいだけど...
>>138 MVCフレームワークのコントローラみたいに機能ごとにアプリで分けるのが恐らく普通
141 :
デフォルトの名無しさん :2010/05/04(火) 18:53:04
144 :
デフォルトの名無しさん :2010/05/05(水) 10:15:37
┌─┐ │●│ └─┤ _ ∩ ( ゚∀゚)彡 ┌─┬⊂彡 │●│ おっぱい!おっぱい! └─┘ おっぱい!おっぱい!
>>133 Pythonスクリプトを直接実行するときは、普通shebangじゃないの
少なくともUnix likeな環境で、スクリプトをそんな風に実行する人は
いないと思うけど
>>145 shebangを使うようなコマンドとして直接実行されることを目的としているファイルは、
そもそもパッケージに入れたりしないよ。
__name__ が '__main__' になってしまうから、例えばどこかで import package.piyo したら、
同じモジュールを別の名前で2重にロードすることになってしまう。
モジュールをスクリプトとして実行する場合は、 Python -m モジュール名 ってする。
例えば、 python -m doctest とするとdoctestができたり、 -m cProfile とか、いろいろ例がある。
モジュール内の main() などを関数をコマンドとして直接起動できるようにしたい場合は、
ブートストラップとなるスクリプトを手動で別に用意するか、setuptoolsの機能を使って
ブートストラップを自動生成する。
>モジュール内の main() などを関数をコマンドとして直接起動できるようにしたい だったら os.system("python hogehoge") で起動すればいいんだお 簡単だお
だれもそんな話はしとらんぜ
# -*- coding: utf-8 -*- import re data = ur"""1 998.7 1003.1 -- -- -- 6.0 10.9 1.8 36 16 2.6 4.8 北西 9.4 北西 6.9 -- -- 晴後一時曇 快晴 2 1014.6 1019.1 -- -- -- 7.0 12.1 2.7 43 24 2.5 5.0 北西 9.4 北北西 9.0 -- -- 快晴 晴後曇""" for rec in [reduce(lambda r,(i,v): r + [v] if i in [0,5] else r, enumerate(line.split()), []) for line in data.split('\n') if not re.search('^\d{1,2}$', line)]: print rec[0], "\t", rec[1] 分からない事があるので教えてください。 上記のr,i,v変数がよく分かっておりません。 動きから想像するとrは[]で iはenumerate(line.split())の0,1,2… vはenumerate(line.split())の998.7,1003,1… となるような気がするのですが 私のイメージでは lambdaの引数はenumerate(line.split())の値なので 0,1,2…のシーケンシャルな値と998.7,1003.1等のdataから作成される値 で構成されているのかなと思っていたので ちょっと分からなくなってしまいました。 お手数ではございますが、解釈の仕方を教えていただけないでしょうか?
眠いのでまたあとで
昼飯食って眠いのでまたあとで
>>150 そのコードは1行に詰め込み過ぎなので、要素ごとに分解してみれば分かるかと。
あと、lamdaの部分を適当な関数にして、r, i, vをprintさせてみるとか。
>>150 reduce()のことは知ってるの?
reduce(f, xs, init)は、ループで書くと
acc = init
for x in xs:
acc = f(acc, x)
のような計算を行う
accの初期値はinitで、計算の結果が次々に積まれていくので、
「累積変数」「アキュミュレーター」と呼ばれる
そのコードで言うと、rは累積変数で、
(i, v)にはenumerate(line.split())の要素が最初から順番に渡されることになる
iはenumerateで付加された0からはじまるindex
vのほうが、line.split()で得られる実際のデータ(スペース区切りの語)だね
pythoner(通称パイソナ) どうよ?
>>153 ,154
なるほど、ありがとうございました。
アキュム(^^;)
158 :
デフォルトの名無しさん :2010/05/09(日) 12:25:11
すいません、linux(Ubuntu)のターミナルから grg とか greagerag とか適当にコマンドを打ったら、 /usr/bin/python: can't find '__main__.py' in '/usr/share/command-not-found' と表示されるようになってしまったんですが、これ一体なんなんでしょう?? どなたか教えていただけると嬉しいです。
159 :
158 :2010/05/09(日) 12:28:14
bashの時だけなるようです。zshに変えたら普通に command not found と出るようになりました。 bashrc見てみたのですが、変な記述は見当たりません。 どなたかおたすけください。。
160 :
158 :2010/05/09(日) 12:41:26
sudo apt-get install command-not-found で解決しました。 どうやら打ったコマンドが見つからない時に「sudo apt-get install 〜〜〜」すれば そのコマンドが使えるようになるよって教えてくれるpythonのプログラムがあったのですが、 python2.6を一回全部アンインストールした時にそのプログラムも削除されてしまっていたのが原因だったようです。 失礼いたしました。
質問です 背景を黒にしたり文字の色を変えたりってのはtkinterなどのGUIの領域でしょうか? なにか特別なものをimportすること無しに文字の色変えるなんてことは可能でしょうか?
質問するときは OSのバージョン ツールのバージョン 環境を書けと教わらなかったか?
>>> import urllib >>> urllib.quote(u'東京'.encode('utf8')) '%E6%9D%B1%E4%BA%AC' とかすれ
ありがとうございます
167 :
デフォルトの名無しさん :2010/05/11(火) 14:52:03
マルチ
変換する方法があればそれでいいし、それはpythonに限ったことじゃないから文字コードスレに書いて それ以外に方法があれば、それはpythonの話になるからこっちに書いたのですが マルチとみなされたようでしたら、すみませんでした
>>162 OS、環境など垣根なしの普遍的な質問かと考えましたもので
winxp、python2.6ですが、回答に何か影響あるでしょうか?
>>163 どもです
GUIか。。。どれでいこうか検討します
wxなあ。。。
>>170 なんの背景なのか
>>161 からはわからないから環境を聞かれてるんだよ
コマンドプロンプトの背景色なのか、Tkinterで出したウインドウの背景色なのか
それともそれ以外なのか
>なにか特別なものをimportすること無しに文字の色変える この時点で少なくともtkinterは消えるわけで
何が「特別」かは人それぞれだろう
>>171 OSに限定せずテキスト周りの色変更は可能か否かを聞きたかったのです
例えばどこに描画されたテキスト?
>>176 訂正
IDLEで実行して出力されるshell上にて現状出力されるのは青一色かと思いますが
それをこの文字は黄、この文字は赤、この文字の背景は黒など変更出来るものか
どうかってことです
IDLEの使い方の質問ってム板じゃなくてマ板の方だっけ?
>>177 Options -> Configure -> Hilights
おまえらわざとだろw
解答者の質低すぎねえか?ww
解答者はとりあえず
>>1 嫁www
>>179 それだとshell stdoutで変更できてもさらにその中身を細かく変更はできないですね
とりあえず意思疎通の仕方が難しいんだと言うことはよく分かりました
つまらない水掛け論になりそうなんで去ります さようなら
おまえら大人げないな
というか回答者の根気強さに涙した
最初にプログラムの内の話なのか外の話なのか説明できなかったのが そもそもの原因だな
結局いまだに何をしたかったのか理解出来ていないんだけど みんなは分かったの?
質問者は知識が少ないのと自分の思い込みがあるから どうしても説明が足りなかったりその道筋が正しいと 勝手な解釈をしてしまう傾向がある 一方で回答者はあれかもしれないこれかもしれないと 変に気を回しすぎるため質問者がどこで詰まっているかを 深読みすればするほどエスパーするのが面倒になる
でっていう
>>185 勝手な想像だが、Pythonでの文字出力に
色々色を付けたいってことじゃね?
【テンプレ】
PC ASUS Eee PC 4G-X (eMobile契約)
OS WindowsXP Professional
Tool Python 2.6 + IDLE
環境 2DK
質問 (40字以内)
検索 ぐぐる × やふー ×
OKWave × 発言小町 △
import sys from ctypes import * from ctypes.wintypes import * GetStdHandle = windll.kernel32.GetStdHandle GetStdHandle.argtypes = [c_int] GetStdHandle.restypes = c_int SetConsoleTextAttribute = windll.kernel32.SetConsoleTextAttribute SetConsoleTextAttribute.argtypes = [c_int, c_int] SetConsoleTextAttribute.restypes = c_int SetConsoleCursorPosition = windll.kernel32.SetConsoleCursorPosition SetConsoleCursorPosition.argtypes = [c_int, c_int] SetConsoleCursorPosition.restypes = c_int def cursor(h, y, x): SetConsoleCursorPosition(h, (y << 16) | (x & 0x0000FFFF)) def conattr(h, bg, fg): SetConsoleTextAttribute(h, (bg << 4) | (fg & 0x0F)) def puts(s): sys.stdout.write(s) def cls(h, t, b, l, r, c): for j in xrange(t, b): for i in xrange(l, r): cursor(h, j, i) puts(c) def beep(): puts('\a') h = GetStdHandle(-11) cls(h, 0, 25, 0, 80, '.') conattr(h, 1, 13) cursor(h, 12, 30) puts('abc') cursor(h, 24, 0) beep()
オブジェクト指向のクラスのイメージが湧かない…Orz みんpy買って読んでるけど意外にもわかりにくいな、この本 オレが頭悪いだけなんだろうなw なんかオススメの入門書ってある?
>>190 こだわらなくていい。オブジェクト指向信者はうざいだけなので。
>>190 無理に湧かそうとしなくてもいいから安心すれ
Pythonでは名前空間や属性って考え方のほうがよっぽど大事だ
>>190 無名の日本人が書いた本とIBMのサイトで記事を書いたりPythonの講習を何年間も行っている人が書いた本とどちらが良いと考えられるかは分かるんじゃない?
虫が瞬殺されてて笑う(www
>>192-195 ごめんなさい
超初心者なもんで勉強のしかたすらわからなくて…
無理にオブジェクト指向にこだわらなくてもいいんですな
>>193 名無しのチンカスの言うことを信じる奴は居るの?
>>190 むしろPythonなんて、ほとんどのライブラリがオブジェクト指向だから
自然に覚えられないかな?
っていうより、オブジェクト指向でないものを知らないから、逆に
オブジェクト指向が何なのか分からないというのはあるかもしれんが。
むしろPythonって、関数もオブジェクトだし、モジュールもオブジェクトだから、、、 っていうと、クラスとメソッドがオブジェクト指向と考えている人が混乱するなw
いやーメソッドと関数をわけてみたらなんとなく頭の中で整理できてついでにオブジェクトがなんたるかが理解できてきた
自分はなんとなくこれがオブジェクト指向かなとは思ってる気分でいるが全然違うかもしれない
だがイテレータとかジェネレータとか出てきてまた混乱してきたwwww
考えすぎて頭がイテレータ
>>190 非オブジェクト指向から考えるといいよ。
例えば住所録の入ったcsvを読み込んで、XMLを吐き出すプログラムをライブラリを使わないで作る場合を考えると、
非オブジェクト指向だと
array = CSV読み込み(fileName)
addressList = アドレスリスト変換(array)
xml = XML生成(addressList)
書き込み(xml)
見たいにメインの入り口を作って、サブルーチンを作っていく感じになる。
またサブルーチンも、必要に応じてもっと細かいサブルーチンに分割していく。
単純明快で分かりやすく、短時間でちょっとしたツールを作るときは大抵このやり方になる。
まずはこのやり方を覚えてからオブジェクト指向の本を読めば、何が違うのかわかると思うよ。
>>205 横からですまんがありがとう。つかマジ感謝
なんかこーなんだかあと少しで分かりそうな気がする
ちなみにそのXML吐き出すプログラムをオブジェクト指向でやるとするとどんな感じになるんでしょう?
救いの一手をざっくりでおねがいしまする
>>206 # CSVを読み込んで任意のインスタンス変数に格納
xml = Foo(fileName)
# CSVを変換し任意のインスタンス変数に格納
Foo.アドレスリスト変換()
# XMLを生成して任意のインスタンス変数、self.xmlに格納
Foo.XML生成()
# 処理が終わったFoo.xmlを参照
書き込み(Foo.xml)
みたいな感じで処理を一つのクラスにまとめたりする
こういうのはコーダーによって違うからコード書いたり読んだりした方がいい
これくらい短いとあんまりオブジェクトの恩恵ないような気がする
例だw
SmallTalkについてはどうなのか知らないが、少なくともC++とかLLとかに載ってるオブジェクト指向は
「こうあるべき」って理論から来てるんじゃなくて「こうできたら便利だよね」から来てる。
そこらへんを知らずに、いきなり「犬がワン、猫がニャー」の説明をされても分かるわけが無い。
まずはある程度プログラム組めるようになってからだと、すんなり受け入れられる。
そういう意味で
>>205 の考え方はすごくわかりやすい。
>>206 設計は人それぞれだけど、1つ例を挙げるなら
addressList = AddressList(fileName)
xml = addressList.toXML()
xml.write(outputFileName)
こんな感じかな。
住所録っていう実在するもの(エンティティという)に対応したクラスを作って、
そのクラスに必要な操作を追加していく、って感じ。
プログラムの規模が大きくないと、メリットがあまり無いうえ、設計がキモで、
設計によって良いプログラム(再利用性が高い)にも糞にもなりうる。
他に継承やオーバーライドというキーワードがあるので調べておこう。
多少分かったら、次はポリモーフィズムやデザインパターンを勉強するといい。
これがオブジェクト指向が何たるを理解するための最短ルートだと思う。
どんだけ横文字使いたいんだ そういう気持ち悪いレスするから食わず嫌いがでるんだろ。
206です 皆さん感謝 いやもうほんとなんか今ちょっと自分の中で何か分かりそうな のどから手が出そうな感じになってます これ見ながら参考書なんぞ片手にコード書きまくることにしまする
>>211 デザパタはあくまでJavaのものだしなぁ。
C++とかじゃわりと使えるけど、Python的には使えないのも多い。
ポリモーフィズム(多態性)を継承によるものじゃなく、同じ方法でできるかどうかにまで拡張したのがダックタイピングだね。
オーバーライドは、Pythonみたいに変数(やメソッド名)が名前の束縛に過ぎず、ダックタイピングな考え方の言語では
特別なことしてるってよりはむしろ、普通の代入と同じ。
オブジェクト指向って言葉自体が抽象的なものだから、これがオブジェクト指向だ!ってのはない。
けど重要なのは、処理とデータをまとめてしまうこと、似たことは同じ方法でできるようにすること、
似たものを作るには、違う部分だけを作り直せばいいということ。
>>212 この世界じゃ、横文字の単語が普通に使われてるから、知らないと
苦労するだけだよ。
しかも単語を日本語に直せば分かりやすくなるわけじゃないし。
↓みたいになっても分かりやすくはならないし、一般に使われていない
単語を使っても後々混乱するだけだよ。
住所録っていう実在するもの(実体という)に対応した級を作って、
その級に必要な操作を追加していく、って感じ。
算譜の規模が大きくないと、利点があまり無いうえ、設計がキモで、
設計によって良い算譜(再利用性が高い)にも糞にもなりうる。
他に継承や覆しという重要単語があるので調べておこう。
多少分かったら、次は多態性や設計類型を勉強するといい。
これが物指向が何たるを理解するための最短経路だと思う。
直訳しかできない英語力でプログラミングするのはどうかと思う
そんなに難しく考える必要ないよ Pythonでは構造体やレコード型が無いし、そういうの使いたい時は クラスだ (まあ最近はnamed tupleってのがあるけど) クラスはデータだけでなくデータの操作/手続きを一緒に持てるから、 そうしたほうが自然な手続きは一緒に持たせましょうというだけのことだ 逆に言えば、関数で構わないものは関数でいいんだよ Pythonで必要も無いのにOOPにこだわる意味はゼロ
自演(w
横文字なら各自好きに翻訳すれば大意は伝わる 犬がワン猫がニャーは翻訳しようがない どちらがいいかと問われたら前者を推す
自演(w
今夜は自然薯でとろろ飯だな・・・
アルファベットがいいならローマ字にすればいいじゃない まさにCOBOL!
自演(w
import random def testR(): return random.randint(1, 100) class Test(): random.seed() aaa = random.randint(1, 100) a = testR() b = testR() c =Test.aaa d =Test.aaa print testR() print testR() print testR() print a print b print testR() print '-------' print Test.aaa print c print d print Test.aaa seed()について質問です def:今までseed置いてましたが今外してみると4つとも違う数字を吐く 初期化は不要ということでしょうか? class:色んな所にseed置きましたがどの印字も同じ結果 (実行する度に違う乱数を吐く) 4つの結果を違うものにしたい場合何処にseedを置けば良いのでしょう というかそもそも初期化の考え方が間違ってるのでしょうか?
import random def testR(): ____return random.randint(1, 100) class Test(): ____random.seed() ____aaa = random.randint(1, 100) インデントはこんな感じってことで
>>225 randomはimportするときにrandom.seed()も実行されてるから初期化は不要
>>227 そうでしたか
classのほうはclassを理解できてないからってことですかね
何から手を付けたらいいのかすら分からない状態でして
質問です。 キーが全て整数の辞書dがあるとします。 ここでもしfor i in d:とやった場合、iにはキー値が小さい順に入る事が保証されてますか?
no 試せば分かるだろ
(i) < そんな大きいの・・・入りません・・・
dictの取り出し順はランダムだと思って使う 順序関係が欲しいならsorted()に渡すなりなんなりする 2.7/3.1にはodictだかOrderedDictだかが入るらしい
これで使いやすかった日にはnamedtupleちゃんの立場がなくなるのか
namedtupleちゃんにはimmutableって存在意義があるだろ
namedtupleちゃんはimmutableなこと自体に意義があるっていうか 順序保持する辞書のように使えることに意義があったんじゃないのか 本物が出てきたらお役ごめんだろう と思うんだが素敵な使い方があるのかもしれない
>>230 保証なしでしたか。
試してみたら順番に出てきたっぽかったので・・・
また別件なんですが、リスト内包で、例えば[str(i) for i in range(10)]とやると、このiは内包の外に出てきちゃうんですね。
内包はスコープ作ってくれた方が良いのに。
for i in...とやってるfor分の中でうっかりこんなことしたらおかしくなりました。
>>227 228です
となるとseedというのはどういう時に使うのでしょう?
毎度違う乱数を得たいときに使うものだと思ってたのですがこの考え方は間違ってるのでしょうか?
なお、その後継承して新しいクラスを作って実行すればどうにか違う結果が出ました
どうにも遠回りな感じがするのですがこれ以外に解法はないんでしょうか
>>237 横だが
> となるとseedというのはどういう時に使うのでしょう?
同じseedを与えると乱数を発生させたときにいつも同じ値が返る。
>>> import random
>>> random.seed(100)
>>> random.randint(1, 100)
15
>>> random.seed(200)
>>> random.randint(1, 100)
5
>>> random.seed(100)
>>> random.randint(1, 100)
15
>>> random.seed(200)
>>> random.randint(1, 100)
5
Pythonの辞書はソートされて出てくるよ
>>238 自分もそのつもりでいたんですが
>>225 において書いた通り
seedを置かなくてもdef testR():は呼び出す度に違う数字を返します
(自分はずっとseed置いて毎回初期化してるつもりでいました)
一方class Test():は何度呼び出しても同じ数字を返してきます
seedの置き場所がまずいのかそもそもなにか根本的に間違ってるのか
seed()はシステム時計から値をとるなら呼び出す度に違う数字になるかと思うのですが
> python Python 2.6.5 (r265:79096, Mar 19 2010, 21:48:26) [MSC v.1500 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> d = dict() >>> d['a'] = 100 >>> d['z'] = 200 >>> d['b'] = 300 >>> d.keys() ['a', 'z', 'b'] ('A`)
デマ乙 >>> d['c'] = 400 >>> d.keys() ['a', 'c', 'z', 'b']
>>242 は
>>239 に対してね
>>241 randomが生成する乱数の列は「決定論的」
例えばseed(1)で初期化したrandomは毎回同じ数列を返す
>>> import random
>>> random.seed(1)
>>> for i in range(10): print random.randint(1, 100),
...
14 85 77 26 50 45 66 79 10 3
>>> random.seed(1)
>>> for i in range(10): print random.randint(1, 100),
...
14 85 77 26 50 45 66 79 10 3
あとクラスの中の文はクラスオブジェクト生成時に「一度」実行される
>>> class Foo(object): print 'in Foo'
...
in Foo
>>> Foo()
<__main__.Foo object at 0x02567490>
>>> Foo()
<__main__.Foo object at 0x0256EF90>
>>244 なるほど
非常にわかり易い解説ありがとうございます。感謝
246 :
243 :2010/05/17(月) 20:30:45
プログラムすら初心者なんですが、最近ようやく勉強の仕方がわかりだした 文献も大事だけどウェブ上のほうが噛み砕いた説明をしてくれてる人が多いから初心者にもわかりやすい
248 :
デフォルトの名無しさん :2010/05/17(月) 22:11:44
実際みんなのPython半分読んだけど、具体的に役に立つ事ができる気がしなかった(汗 仕事で使うわけではないから、諦めるのもありなんだけど・・・ただセンスないだけか・・・ まだ学習不足?
みんなのPythonの著者のセンスがないだけ
スクリプト言語なんて構えて勉強するほどのもんじゃないでしょ ○○作りたいって思いついたらライブラリカジってなれればいつの間にか身についてる
だよな 趣味ならますますそうだわ 自分のペースで何作ってもいいんだから 本なんて読んでる暇があったら何か作ればいいのに
>>248 センスが悪いと自分にレッテルを貼るのはやれることを全部やってからにしる
役に立つプログラムを書いてる連中だって
本一冊読んですぐ書けるようになったわけじゃないんだ
253 :
248 :2010/05/17(月) 23:01:28
マジですか とっても参考になりました。 ありがとうございます。 基本的なルールだけは身につけて、あとはライブラリで頑張ります。 趣味なのでゆっくりじっくりとやってみます。
虫が瞬殺されてて笑う(ww
虫(バグ)は潰されるためにあるのです。
256 :
デフォルトの名無しさん :2010/05/18(火) 00:06:28
RubyにPythonを仕込みたいのですがどうすればよいのでしょうか
>>248 自分もみんパイは意味がわからなかったスw
多分著者にセンスがないw
ウェブ上で調べてみんパイ見て自分なりの解釈をする→自分なりにみんパイを元にいろいろ試してみる
を繰り返してボカァなんとか理解してきました
実際に何か作ってみたいんですけどねぇ・・・どんなことができるのかが分からないのが初心者でもアルんですw
本を買うのは、買うこと自体がモチベーションになる人だけでいいよ
>>250 みたいにとりあえず手を動かした方が早い
別に汚くても目的が達成できればいい
虫が瞬殺されてて笑う(ww
俺もwxpythonでオブジェクト指向の利便性を理解できたな pygameなんか関数で作ってたけどクラスにした方が早かった
学習と実践は別だよね。 Python以前の話ではないでしょうか。
>>235 namedtupleは順序付き辞書の代わりじゃなくて、構造体の代わりだろ……
関係ないけどみんpyってなんで評価されてんの? こんな支離滅裂でまとまってない本が売れてる意味がわからん 日本語の文法おかしすぎすし
Pythonの手ごろな入門書が手薄なところに たのしいRubyと同じサイズの版型でソフトバンクから出したから
>>263 評価されてるように見えるのは
著者の自作自演だからw
>>263 >日本語の文法おかしすぎすし
>日本語の文法おかしすぎすし
>日本語の文法おかしすぎすし
>日本語の文法おかしすぎすし
>日本語の文法おかしすぎすし
>日本語の文法おかしすぎすし
虫が瞬殺されてて笑う(www
日本語の文法がおかしすぎすキチガイはjava-jaとか勉強会詐欺に騙されてろ(WW
しゃれの解らん人が多すぎてw そんなに>日本語の文法おかしすぎ寿司を連発しなくてもいいですよw 日本語の文法→おかしすぎ寿司で…まぁいいや アホは揚げ足と言葉遊びの区別がつかんのだろうからw そんなこと指摘されると思ってなかったから度肝抜かれた感100ですわw
虫が言い訳してて笑う(ww
キチガイは詐欺価格のケーブルでも売ってろ(wWwwwWWwww
勉強会詐欺とかいう単語、こことお勉強スレでしか見ないんだけど、 誰か1人が頑張ってFUDしているようにしか見えない。
虫虫言ってるアホとキチガイしか言えないアホ 以上をremoveメソッドで味わってください
ガチ初心者が見たら気持ち悪がるから本スレでやっておくれ
うん、キモいね。
java-jaの出番が訪れたようだな・・・
このスレはガベージコレクション内蔵してないの?
>>273 >以上をremoveメソッドで味わってください
日本語がジューシーすぎる。
enumerateって、どんな時に使うと便利なの?
foo = ["bar", "baz", "bax"] for f, i in zip(foo, range(len(foo))): print f, i enumerate使うとスッキリする
emumerate使ってないがな!
すみません。ここで聞いていいことかどうか分かりませんが、教えてください(ご誘導ください)。
利用サーバー:さくらインターネット プレミアム(さくら質問スレよりここへ来ました。)
SSH接続して、サイトマップを生成しています。(cronでも毎日一回実行)
<こちらを参考にしました>
http://senrioka-info.net/0_google_sitemap/sitemap_generator.htm python sitemap_gen.py --config=config.xml
ところが、冒頭に警告メッセージが出るようになりました。ただし、サイトマップは生成できます。
sitemap_gen.py:65: DeprecationWarning: the md5 module is deprecated; use hashlib instead import md5
「md5モジュールは非推奨で、代わりにhashlibを使いなさい」ということだと思うのですが、
具体的にどうすればよいのでしょうか?
確かに、sitemap_gen.pyの65行目には、import md5とあります。
今までずっと気付きませんでしたが、
過去のcronメールを見ると、2009/6/25以降からずっとこの警告メッセージが冒頭につくようになっていました。
サーバーの仕様が変わったのかもしれませんが、よく分かりません。
サイトマップ自体の生成に問題はないような気もしますが、警告が毎回出るのはすっきりしません。
よろしくお願いします。
import md5 -> import hashlib md5.new(...).digest() -> hashlib.md5(...).digest() -> の左を右に変えればたぶん動く よくわかんなかったら親切な人がパッチくれるのを待って
import hashlib as md5 ですべて解決
しないぞ hashlibとmd5じゃnewの引数がぜんぜん違う
じゃあ
>>285 に
md5.new = md5.md5
を追加
déjavèw?
pyscripter1.9.9.7の補完リストのフォントを変更する方法ってわかる方いますか? できればフォントサイズだけでも大きくしたいんですが…
291 :
デフォルトの名無しさん :2010/05/28(金) 09:40:27
ほ
デストラクタが呼ばれることと、 名前が無効になることは別問題だな。 デストラクタがやりたいなら少々面倒だが、with statement という構文がある。 名前束縛を消したいならちょっと上で出てる del を明示的に使うしかないかな。 Pythonのスコープはグローバルと関数内ローカルの2つしか無かったと思う。 (クラスメンバはどうだったか忘れた)。 少なくともブロック全てがスコープになるC++と同じにはできない。
リバースエンジニアリング ―Pythonによるバイナリ解析技法が欲しい
import re re.search = 'uhouho' のように書くとモジュールの中身を破壊できてしまいますが、こういう仕様なんですか? ちょっと怖いです。
そんなもんです。書き換える方がおかしいので
モジュールの中身を書き換えるというのはおかしい。 Pythonの現行プロセスのみだよ、それが有効なのは。 reload すれば元に戻る。
変更されんの? モジュールオブジェクトが属性の書き換えを禁止してないだけ すんなの一言で済むから妙な実装しなかっただけだと思ってる
>>294 どこが「怖い」のか良く分からない
自分で外部モジュールをインポートしておきながら、
事故やミスでそのモジュールの属性を上書きするようなコードを記述することは
無いと思うんだが
意図的だとして、そういうこと(モンキーパッチ)が「出来る」のは普通に便利だぞ
例えばeventletは、そうやって組み込みのソケットやそれを利用するライブラリに
実行時パッチを当てて、ソケット操作を非同期でコルーチン上で実行するように
している
だったらその辺のモジュールファイルを全部読み取り専用にしたらどーなんだろ
>>294 が ruby の Rails なんか見た日には卒倒するだろうな
rubyは言語の中身を破壊できてしまうのでpythonより上。
del __builtins__ dir() # NameError
誘導されたんだけど、 Ubuntu10.04なんだけど 最初 django-admin.py startproject xxxx が実行できなくて しょうがないから PATH 通して実行したんだけど 今度は作成したプロジェクトフォルダで manage.py runserver ってやっても 実行できない これって何が原因なの?Pythonスレで聞くような事じゃ無いのかもしれないけど なんか設定必要?
django使ってる人ってなんでこんなにバカっぽいの?
>>303 どんなエラーが出てるか略さずに書いた方がいいよ
>>303 Pythonルートとsite-packagesのPATH通して.pyに関連付けしてあるか確認しろ
2006年のpart1(x まぁpygameよりはマシか
>>303 質問するときには、「エラー」とか「動かない」とかだけじゃだめ。
実際に実行したコマンドと、表示されたエラーメッセージをそのままコピペして。
BlenderでPythonを使いたいのですが おすすめの解説サイトなどございませぬでしょうか。 わたくしは、Blenderのコマンドをどうやって調べるのかすら知らない程の初心者ですが 宜しくお願い致します。
311 :
310 :2010/05/31(月) 00:04:40
大変申し訳ございませんでした↓↓ blenderのスレに行って自己解決しました↓↓ 何も考えずにレスしてしまってごめんなさい↓↓
↓↓
どういたしまして↑↑
↑↑↓↓←→←→
ニア必殺技 ←→← キー入力ミス!
blenderってネーミングがかっこいいわ
planterみたいでかっこわるい 蘭のプランター、なんつって
蘭のプランター 何それかっこいいいいいいいいいい!!!!!!!!!!!!
Pythonダウンロードしました。 最初に打つ基本的なコードを幾つか教えてください!
import this
>>320 やって見ました!!もう感動です!
ありがとうございます。
a = [[0] * 5] * 5 a[0][0] = 1 print a 実行結果 [[1, 0, 0, 0, 0], [1, 0, 0, 0, 0], [1, 0, 0, 0, 0], [1, 0, 0, 0, 0], [1, 0, 0, 0, 0]] これが納得いきません 普通の2次元配列なら[0][0]の要素だけが1になるはずだし *で単純にコピーされてるなら全部1になるはずですよね?
自分で分かってるじゃん aはリストのリストであって2次元配列ではないし *はディープコピーは行わないから、そうなるんだよ
>>> a = [[[]] * 5] * 5 >>> a[0][0].append(1) >>> print a [[[1], [1], [1], [1], [1]], [[1], [1], [1], [1], [1]], [[1], [1], [1], [1], [1]], [[1], [1], [1], [1], [1]], [[1], [1], [1], [1], [1]]]
んむむ…
326 :
323 :2010/05/31(月) 20:20:25
よく読んでなかったw それ、本質的には以下と同じだよ a = 0 b = a a = 1 (bは0のまま) a = [ 0 ] b = a a[0] = 1 (b[0]は1になる) a = [ 0 ] b = a a = [ 1 ] (bは変わらず)
理解するには図を書くといいとおもう a -> [ b, b, b, b, b ] b -> [ c, c, c, c, c ] c -> 0 こうなってるのが、 a -> [ b, b, b, b, b ] b -> [ d, c, c, c, c ] c -> 0 d -> 1 こうなる
a = [[0] * 5 for _ in range(5)] これでよくね?
どっちを値渡し・参照渡しと呼ぶべきかいつも一瞬わかんなくなる…
>>> x = [ set()] * 5 >>> x [set([]), set([]), set([]), set([]), set([])] >>> x[0].add(1) >>> x [set([1]), set([1]), set([1]), set([1]), set([1])]
仕方ないから b = [[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]] これ使います
行列計算みたいなのやりたければ numpy超オススメ 無理に標準のlistでやることないよ
>>329 Pythonは全て参照渡し
変更不能オブジェクトなら
>>322 の(a[0][0] = 1)とかできないから
問題が起きないだけ
入門書嫁。
チュートリアルの該当ページのURL貼ってよ
>>333 それどこに書いてあったのか教えてくれ
intに収まる範囲なら即値でやってると思うんだが
intobject.c
うーむ横からだが 上の話でなんとなく理解した気でいたが >>>a = [[0] * 5] * 5 >>>a[3][4]=5 >>>a [[0, 0, 0, 0, 5], [0, 0, 0, 0, 5], [0, 0, 0, 0, 5], [0, 0, 0, 0, 5], [0, 0, 0, 0, 5]] なんでこーなるのかが分からん list index out of rangeならまだ何となく納得出来るんだが
>>> map(id, a)
>>338 >>>a = [[0] * 5] * 5
↓
>>>b = [0] * 5
>>>a = [b] * 5
>>>a[3][4]=5
↓
>>>b[4] = 5
>>339 なんか混乱したけどなんかわかってきた!
>>340 なるほど納得トン
なんかややこしいなあw
結論としては俺もnumpy入れるわ
Enthought Python Distribution入れてるから重いのかな
全くのプログラミング素人なのですがPythonを勉強してみようと思い、 チュートリアルの和訳や書籍「初めてのPython」を読み始めてから いろいろ調べてみますと、Pythonに関わらず言語の習得前には C言語の習得が基本のような気がしてきました。 遙か以前、学生の頃購入し挫折したC言語の入門書を開いてみたのですが、 どの程度までC言語を勉強したあとPythonに移行すれば良いのでしょう? Python等はメモリ管理や変数の型など、C言語に比べ自動化されて 便利になっているが、初心者はC言語によるPCの動作原理を知っておけと言う 意味だと解釈しているのですが・・・
無理にC言語を覚えるのもあれだけど PCのリソース関連だったり基本的な仕組みくらいは知っておいた方がいい もしC言語やってからPythonに挑みたいなら、構造体あたりまでは学習した方がいい。 なぜならそこら辺まではPythonにも似てる所が結構あるし、C言語より使い易くて感動したりできる。
>344 なるほど、構造体ですか。 手持ちの入門書の最終章一つ前が構造体の章でした。 とりあえずC言語の入門書一冊分を読んで理解できてから Pythonを勉強してみようと思います。 レスありがとうございました。
効率の良いプログラムを書くのにメモリのことを把握しておいた方が良い それで静的型付けでポインタもあるCの学習は最適 でもPHPやJavascriptの方が見た目はCっぽい
買う本間違えると,遠回りをするだけでなく変な虫まで付いてくるという例。
>>343 「プログラミング言語C」
この一冊マスターしとけばオケ。
普通PythonなんてASMやらCやらJAVAやらマスターしてから使うよな。
マスターはしなくてもいいと思うがその言語での考え方とかは知っておいたほうが良いよね。
プログラム言語全般に言えることだろ 使えないより使えた方がいいし、たまに応用の知識も得られてお得
352 :
デフォルトの名無しさん :2010/06/01(火) 20:37:42
別にCやってからPythonじゃなくて いきなりPythonで良いと思うが Cも理解出来ないような頭じゃ 遅かれ早かれPythonでも挫折するだろうな
Rubyでいいよ
>>348 K&Rを初心者に勧めるのはやめたほうがよさげ。
あれの場合Unixの知識まで必要になるし、内容も初心者向けではない。
なるほど、勉強になる オレもCから入ることにする
Pythonの本って読んだこと無いんだけど、あんましっかり書かれた本が無いのかね
昨日の
>>322 のような問題は、他言語経験者なら簡単に理解できるだろう
(ポインタや参照型、といった概念を通して)
でもPythonでプログラミングに触れる本物の初心者が理解するには、
Lispの本でよく出てくるconsセルのボックス表記みたいな図を通して
Pythonの変数とオブジェクトのモデルを理解させる必要があるように思う
そういうしっかりした学習ルートが無いのなら、確かに他の言語から入ったほうが
近道かも知れないね
いや、Cから入るのは多分望ましくない気がする。 Cで「コンピュータ・アーキテクチャ」を知っておくというのならお勧めできるのだが。 『プログラムはなぜ動くのか』という本にあるような事柄を知るためにね。 まあ、PythonとCを並行して勉強するのが理想なのかもしれない。
前の質問を引き合いに出すとかタチ悪いわ
>>357 こういう風にやたらと改行するやつなんなの?
361 :
357 :2010/06/01(火) 21:48:52
>>360 すまん。普段折りたたみ表示で書いているので、コピペミスでこうなった。
>>359 ありがとう、その辺がちゃんと書いてあるんなら、問題ないかも知れないね
ありゃー…wxPythonの日本語解説サイト消えちゃったのか…
/:::/::::::::;: --- 、:::::::::|::::::::ヽ |::::|:::::::├――┤:::::::l::::::::::| |:::」.ィ ┴――┴‐- L::::::::| |´ : | , -‐ 、 ‐- 、| `T ト、 ありゃー l: : : |{ じ じ }: : :V::::::} 解説サイトとうとう死んじゃったのか・・・ 〃!: : | ー ー | i: : }_/ / |:i ; | u ' jイ : ハ l:ト、:ト . ^TTIト .イ/: /: :ヽ | ヾ ィ>イl川´}∨∠ェー ´ _.. ヘ ヽ 川||/ ハー- ._ , ィ''´ } ンrtく { /ヽ / l 、\ {_/ |o| \_} / , {、 l >--\ |o| 、 ,′ 、 ハ_} / _二ヽ \ Ll V/ ヽ { / -- 、ン‐ヘ {i __} に7 ‐ァ-一'’_¨二\二二¨ `Y⌒ヾ_-―‐ノ // /ヽ、<´ ミ=三ゝ=ミ `>ノ ノ `ヽ |
>>356 間接参照の概念の理解という点に関しては、、Cが一番理解しづらい(というか面倒くさい)と思う。
ポインタの本はいっぱい出てるのに間接参照の本が出てるのは見たことがない。
ポインタには余計な機能がいっぱいついてる分、理解しづらい側面があるんだろう。
機械語の知識があれば一目瞭然だからだろ
まあ具体的物理的メモリレイアウトの理解無しでは結局Cのコードは書けんし そういう意味でアセンブラからやった方が早いぜと考える人は多いかも知れんね 別にCから入るのも「無理」ではないけど Cの場合は具体と抽象の両面を理解する必要がある
いや、普通はCから入るから。識者ぶって意味不明なこと言わないように
別に意味不明なことは書かれてないようだが?
まあ、たしかに電子系・組み込み系の人なら普通はCからだろうね。
あと、段階的にカリキュラムを進めていける大学の授業とか
(それでもあのMITとかでも最近はPythonから教えるみたいだけど)。
それにしても、(超?)初心者用にしては厳しすぎる
コメントが多いなあこのスレって。
こんなんじゃ
>>353 みたいなのに客を取られてしまうぞ。
本スレ(?)が荒らされてるから 初心者以外がここで暇つぶしてるんでしょ
実際、日本の初心者はRubyで良いよ。MITで教えるとか言ってる方が寒いから
プログラミング自体初心者で日本語しか読めない人はそうかもね
R し! _ -── ‐- 、 , -─-、 -‐─_ノ R 小 u // ̄> ´  ̄  ̄ `ヽ Y , ´ ) u え 学 b L_ / / ヽ b | 生 y / ' ' i y マ ま が / / く !? ジ で 許 l ,ィ/! / /l/!,l /厶, だ さ i ,.lrH‐|'| /‐!-Lハ_ l /-!'|/l /`'メ、_iヽ よ れ l | |_|_|_|/| / /__!__ |/!トi i/-- 、 レ!/ / ,-- レ、⌒Y⌒ヽ ね る _ゝ|/'/⌒ヽ ヽト、|/ '/ ̄`ヾ 、ヽト、N'/⌒ヾ ,イ ̄`ヾ,ノ! l の 「 l ′ 「1 /てヽ′| | | 「L! ' i'ひ} リ は ヽ | ヽ__U, 、ヽ シノ ノ! ! |ヽ_、ソ, ヾシ _ノ _ノ -┐ ,√ !  ̄ リ l !  ̄  ̄ 7/ レ'⌒ヽ/ ! | 〈 _人__人ノ_ i く //! 人_,、ノL_,iノ! /! ヽ r─‐- 、 「 L_ヽ r─‐- 、 u ノ/ / / lト、 \ ヽ, -‐┤ ノ キ 了\ ヽ, -‐┤ // ハ キ { / ヽ,ト、ヽ/!`hノ ) モ |/! 「ヽ, `ー /) _ ‐' ハ ャ ヽ/ r-、‐' // / |-‐ く | > / / `'//-‐、 / ハ ハ > /\\// / /ヽ_ ! イ ( / / // / `ァ-‐ ' ハ ハ / /! ヽ レ'/ ノ > ' ∠ -‐  ̄ノヽ / { i l ! / フ / -‐ / ̄/〉 〈 \ /!
>>370 お前こそ2ch初心者か?ここは合わなさそうだな、さっさと出て行け。
376 :
370 :2010/06/02(水) 19:13:12
>>371 そうか。教えてくれてありがとう。
>>375 すまん。書き込み内容が寒い、ここに合わないことは確かだ。
いや、初心者ではないのだが久々だったので。
さっさと出て行くことにする。どうか、これ以上荒れないように頼む。
本スレでやれ
とりあえずみんなのPythonだけは超初心者には意味が解らなかった オライリーの初めてのPythonのほうがまだ意味が解る
チュートリアルはC++知らなかったら多分投げてた
>>333 じゃあこれは嘘書いてるの?
The actual parameters (arguments) to a function call are introduced
in the local symbol table of the called function when it is called; thus,
arguments are passed using call by value (where the value is always
an object reference, not the value of the object).
http://docs.python.org/tutorial/controlflow.html
いわゆる「すべてはオブジェクト」ってやつだろ
>>7 map(add, it, it)
>it.next() + it.next()
ab
cd
ef
gh
>StopIteration
どこに参照がでてくるの?
>>> map(operator.add, it, it) ['ab', 'cd', 'ef', 'gh'] >>> map(operator.add, iter('abcdefgh'), iter('abcdefgh')) ['aa', 'bb', 'cc', 'dd', 'ee', 'ff', 'gg', 'hh']
>>385 >>383 ではないが
itと、mapに渡ってくる第2、第3実引数が同じオブジェクトインスタンスを
「参照」してるから、そういう動きになるんだろ
Python使うとなんでも参照になっちゃうな この程度なら小学生でもわかるだろうし、いちいち意識してたらやってられんぞ
薄いCのラッパーで参照が絡むとイケてないよね
俺は分かっている子! そう思っていた時期が(ry
import csv reader = csv.reader(file("a.csv", "rb")) for name, body in reader: print name, body csvモジュールを使ってcsvファイルからデータを読み込んでprintするプログラムですが、 130行以上のファイルだと下記のエラーが出ます。 ValueError: too many values to unpack 130行以上のcsvファイルの場合はどう対処すればいいんでしょうか?
んー、それは129行ずつに分割するしかないなー
130行以上でなくてa.csvの130行目が2要素以上あるんでしょ for row in readerみたいに一つの変数で受けて len でチェックすれば?
>>394 ありがとうございます。
ちゃんと確認したらcsvファイルの130行目のデータが間違った形式になってました。
直したら問題なく処理できました。
お前はなんも分かってないおっさん
別に7は単純なコードだけどとても参考になるのは違いない だからといって強引に流れに絡めるのは低脳Ruby厨に違いない
こだわってるわけじゃなく深い感銘を受けたってことじゃないの
>>402 そこから400近くなるまで、ずっと出てこなかったのに?
関連してる話が出てきたら、前の方で出た良レスを引っ張ってくるのはごくごく当たり前のこと。
じゃあ
>>7 をテンプレ化して次スレにも貼りつけることだな
>>405 お前自分で言ってることがおかしいってわかってるんだろw
それともあれか
>>385 あたりの理解できずに文句いわれた人?
だったら完全にお門違いだろ
>>399 別に馬鹿な流れじゃない
むしろ今こそ馬鹿な流れだ
○○は出来る子とか○○は理解してる人とか、つまりいかにも自画自賛する幼稚な流れを馬鹿だと言ったんだが
おまいらほかでやってくれよ
本スレが腐り過ぎてこっちにも浸食してきたか
いろんな言語のスレあるがpyてょnは間違いなくひどい部類だな 天下のググるが使ってるって本当なのかと疑いたくなる
まずは自分の頭がひどくないかを考えてみた方が良いよ
Ruby最強ということでFA?
それはない
つーか結局、このスレを荒らしてた奴はRuby厨かよ。敵対心強過ぎw
ここで颯爽とjava-jaが登場
java-jaって何?
そういうコミュニティがあるんだが まあ気にするな
ジャバじゃ
ジャルーザダマジャの兄さんかなんかじゃね
Come Cleanの人か なつかしいな
pygameを使いたいんだけど。 idle ではコード補完が利いたり効かなかったりするんですけど pygame. の後に候補が出てほしい わかるひとおしえてください
はじめまして 他言語からPythonをちょっとかじってつまづいてます。 def get_location(): if self.is_gps: str = 'これはGPS' else: str = 'これはGPSなし' return str def is_gps(self): list = ('841SHs','942SH','943SH') return self.model in list のような関数を内蔵したクラスを外部から呼んでmodelに'V801'を代入してからget_location()を呼ぶと これはGPSって言われます。なにかまずいことやってますでしょうか?教えてください。 よろしくお願いします。
あ・・・インデントが消えてしまった・・・ すみません脳内補完お願いします。orz
>>422 self.is_gps 関数オブジェクトなので True
self.is_gps を呼びたいのなら self.is_gps()
ほかの言語使えるなら公式チュートリアルお勧め
>>424 うあああ ありがとうございます!! 文化の違いってほんとたいへんですね・・・
なんだ、括弧が省略できる方面の人か
一目でわかるだろって思ったが、そんな方面があるのか
正しくは、括弧を省略できるようにしたばっかりに呼び出し可能オブジェクトが変数に代入できなくて困ってた方面の人だね
関数呼び出しで括弧が省略できるのなら関数そのものを指したいときってどうするんだろ
前に何か記号つけんじゃね?
呼び出し可能オブジェクトなんてないから。 関数そのものもないから。 さすが Python 初心者スレだなw
>>431 Python 初心者スレなんてないから。
431が自分の世界にひたっていて羨ましい。
ここでは ruby ってワードはタブーなのですか?
あるとかないとか初心者の俺は混乱するんですけど 初心者向きのスレで誤情報はホント勘弁して欲しいんですけど
だよね
したらば辺りに避難所作ることを考えんといけない時期かもね
>>431 は俺も何言ってるか分からない。Rubyの話なのか?
自治気取り死ねカス
リアルの鬱憤ここで晴らすなよ 迷惑だし不愉快だわ 飯食って屁こいてとっとと寝ろ
どんだけ効果あるか正直怪しいと思うが、それでもID欲しいなー
IDって有って困るものじゃないと思うんだけど、なんか問題でもあるのかね 他のIDない板でも、あった方が良いって話題は必ず出る
>>436 細かいことなので、初心者のうちは気にしなくていい。
>>431 の内容についてまともに答えるなら、
呼び出し可能オブジェクトって名前だったかどうかはさておき、オブジェクトの後ろに()って付けて__call__メソッド呼び出せるオブジェクトはいくらでもある。
関数だって所詮、__call__メソッドを持ってるオブジェクトにしか過ぎないって意味では、純粋な関数なんてない。
ということなんだけど、細かいことは詳しくなるにつれて自然についてくる。
詭弁
体言止め
>443 友達いないだろ?
ともだちならあたりまえ
おしえてください。 rssで取得したデータなんですが、titleの中を日本語にパースする方法がわかりません。 <item> <title>kabuwakitahama: イラン人たちが国内で 覚醒剤を製造していた というニュース。警察 の話では終戦直後はと もかくその後国内では 製造されていないとい うことです。でも私が 昔覚醒剤について取材 した時には国内で製造 していました。国内で の製造はないと信じて いるためいつまでも根 絶出来ないのでは。株 以外の話でした。</title>
英語なら出来んの?
すいません、勘違いしてました。 そのままでいいみたいでした。 "北"ってそのままマルチバイトなんですね
>"北"ってそのままマルチバイト どういう事か分からんです
中国漢字に置き換えられるらしく1バイトもあるんだって
SJISの半角カナみたいなものじゃろか
454 :
デフォルトの名無しさん :2010/06/14(月) 23:35:09
ctypesのソースを見ると Python-2.6.5/Lib/ctypes/__init__.py 383 if _os.name in ("nt", "ce"): 384 385 class WinDLL(CDLL): 386 """This class represents a dll exporting functions using the 387 Windows stdcall calling convention. 388 """ 389 _func_flags_ = _FUNCFLAG_STDCALL Python-2.6.5/Modules/_ctypes/callproc.c 777 #if defined(MS_WIN32) && !defined(MS_WIN64) && !defined(_WIN32_WCE) 778 if ((flags & FUNCFLAG_CDECL) == 0) 779 cc = FFI_STDCALL; 780 #endif みたいな感じでcygwinでSTDCALLなWin32API呼出しはできないようにされてる風に見えるのですが >>> import ctypes >>> user32 = ctypes.CDLL('user32.dll') >>> user32.MessageBoxW(0, u'波浪ワールド', u'てすと',0,0) で呼び出せています。 私のPCはメッセージボックスを表示させるたびに死へと近づいてるのでしょうか? それとも私の知らないなにかが良きに計らってくれて安全が保たれてるのでしょうか? 教えてください
良きに計らってくれて安全
死ぬよ win版だと普通にエラーでるよ
win版はcdeclとstdcallの両方サポートしてなかったっけ?
サポートはしてるけどcdllとwindllを使い分けないといけない
ctypesの使い方をよく見ろ
libffi的には問題なしだと思うのだけど、どういう理由なのだろう
java-ja の宣伝してたひと居なくなって良かった
月間PythonとかPyCon Japanとか,一過性のネタが多くなってきた。 java-jaと似てる。
Actually, there is the Python Japan User's Group like java-ja I said don't make User's Group were slepted in Japan
>>463 怪しい外人はウザいからなんとかしたほうがいいよね。
英語がおかしい日本人も一緒になんとかなってくれ
slepted(wwWwwwWWWwwwWwwww
間違ってはないだろ おかしいだけで
高卒でも許されないレベルの間違い
You is fool.
soo fuulish you are
Wherever it is, we is, I love it truly
本スレでやれ
java-jaの出番だな・・・
この粘着さんとjava-jaのあいだでなにがあったん?
寂しがり屋さんなんあぢょ
なかまにいれてもらえなかった
低学歴の粘着がひどすぎる
あまりに高学歴過ぎても低学歴過ぎても 視野の狭い経験で語っちゃうとプログラマとして終わり
プログラマ(笑)
プログラマを笑ってるようじゃ、IT土方以下ですね。
ドカタのみなさん、低賃金で土日もお仕事ご苦労様です。
はい
賃金低いの?
本スレ巡回から外したのにここでもやんのかよ…
巡回しなくていいよ。いやマジで
くだすれではやんないでほしいわ
Python巡礼の地
反省しろよ低学歴
相手してるのも低学歴?
低学歴のために学歴板があるんだよ
thinkの発音は「進化」に似てて、 アメリカだと(端折られて)「しんっ」になる。 イギリスなら(淡白に)「しんく」 thankは「みっつのキウイ」って感じで、 アメリカなら「さんきう」 イギリスならもちろん「さんきうい」 問題のthrillerは アメリカなら「左様なら」みたいに「さやぅぬらー」でいい イギリスなら「サウナなら」みたいに「さうぬあーら」
494 :
493 :2010/06/20(日) 00:33:12
すいませんすいません英語板と間違えましたすいません!
pycryptoで作った公開鍵をpickle.dumps(key)して送りたいんだけど、 linux→windowsだとpickle.loads(key)したときにこける。 _fastmathがwindowsにないのが問題みたいなんだけど、どうしたらいいかな? ・・・って書いてる途中にpycryptoのソースを覗くことを閃いた。 import Crypto.PublicKey.RSA Crypto.PublicKey.RSA._fastmath = None Crypto.PublicKey.RSA.generate = Crypto.PublicKey.RSA.generate_py Crypto.PublicKey.RSA.construct = Crypto.PublicKey.RSA.construct_py 送る側のimportのところに3行追加。 _slowmathってのがあるらしいけど、インストールしたpycryptoにはなかったんで。 他に悩む人がいるかどうかわからないけど、 解決してうれしいのでとりあえず書いときます。
pgr
飛ぶ鳥おとす勢いのGOOGLEが採用してるからさぞかしここも盛り上がってるの かと思って覗いてみたが随分寂しいことになってるんだな 業務に携わる人達ってのはこんな所には来ないってことなんだろうか
ニューカス民さんお勤めご苦労、帰っていいよ
ニューカスって何?
人間の屑が集まる所
人間の屑ってあの人のことでしょ?
σ(゚∀゚ )
503 :
デフォルトの名無しさん :2010/06/23(水) 20:59:28
Windows XP Service Pack 3 Python 2.6.4 です。 str1="ディレクトリのパス" str2=".jpeg" str3="piyo" となっている時、 str1の中およびそのサブディレクトリ以下のファイルで、 ファイル名がstr2で終わる物、ファイル名にstr3が含まれる物 を一気に削除するようなpythonプログラムは どう書けばよいでしょうか? str3の方はファイルを1つずつ回って、 if str3 in ファイル名 : で行けそうですが、str2はどうすればよいでしょうか。 よろしくお願い申し上げます。
504 :
503 :2010/06/23(水) 21:13:56
あ、endswithなんてものがあるのですね。
>>503 if ファイル名.endswith(str2):
506 :
503 :2010/06/23(水) 21:20:04
仕事上の関係者が個人で作った module を使用すると、 内部的に C++ の例外が投げられます。 python で C++ の例外を適切に catch するにはどうしたら良いのでしょうか。 try: hoge() except HisEception, e: print e とすると、 ~~~~~~~~ (C++ exception) のように表示されて、そのまま abort します。 try: hoge() except: pass だと問題ないのですが。
>仕事上の関係者が個人で作った module を使用すると、 >内部的に C++ の例外が投げられます。 って書いてあるのに・・・
C++部分のソースコードを一切改造できないと仮定するなら 1. C++製Python用モジュールとPythonインタプリタの間に1つ噛ませて そちらでC++例外を処理して、Python例外にする。 2. PythonインタプリタをC++の例外を処理できるように改造する。
>>507 それで問題なくなるならPythonも例外を投げてるはずなんだけど、何投げてる?
それか、諦めてexcept:で受けてしまうのがいいのかも。
512 :
デフォルトの名無しさん :2010/06/27(日) 03:09:43
なんでpassがいるのですか? 空の関数でも、コンパイラはインデントで判断できるのでは?
513 :
デフォルトの名無しさん :2010/06/27(日) 03:26:30
最初に実行される.pyファイルも モジュールと呼んでいいのでしょうか? それとも他のプログラムから読み込まれることを前提としたファイルのみがモジュールでしょうか?
win,linuxで動くGUIアプリで作るなら、tkinter, pyqt, pygtk, wxpythonどれがいいの?
手軽さからtKinterを使ってたけど、DnDできないのでwxに移行した。 最初大変だったけど、慣れてしまえばどってことない。 デモが便利で助かる。webにもサンプルいっぱい落ちてるし。
516 :
デフォルトの名無しさん :2010/06/27(日) 09:39:44
Blender.exe中にパイソンのスクリプトを使うのですが Blender.exeのフォルダにGANGu.dllを入れてBlender.exe中でそれを使うスクリプトを使うと pyのパス line 15 in <module> import GANGu Import Error : No module named GANGu と出ます。これはGANGu.dllのパスが間違っていて見れないと言う意味でしょうか? Python25です。どうすればできますか?
>>515 tkinterだとdndできないんだ・・
参考にさせてもらいます
>>512 def func1(hoge):
fuga
def func2(hoge):
def func3(hoge):
hige
どうだろう
PythonでWebプログラミング覚えるのに良い本ありますか?
質問が漠然としすぎだろ Pythonはどの程度できるのか Webプログラミングって具体的にはどんなことがしたいのか そういうこと書かないとまともな答えは返ってこないと思うよ
>>522 そうですね。
まだちょっと勉強不足なので
>>521 は
無視して下さい。
ありがとうございました
djangoでもやっとけ
526 :
デフォルトの名無しさん :2010/06/28(月) 16:49:57
オーナーがrootのpythonのライブラリを /usr/local/に配置して、 一般ユーザで実行したら、 pycファイルが生成される時に問題になりますよね。 pycファイルが生成されるディレクトリは一般ユーザにも書き込み可にしておくのでしょうか? それともrootで一度全部実行してpycファイルを生成しておくのでしょうか?
>>526 事前にコンパイルするもの。
python -m compileall /path/to/lib
で、再帰的にコンパイルできるはず。
>pycファイルが生成される時に問題になりますよね。 ならない 毎回pycが作られずに実行されるだけ
python3はいつごろ主流になりますか
>>530 去年も同じこと聞いた。
来年も同じこと聞くのかな。
python4はいつごろ?
3-5年後
>>532 ちゃんと前進しているよ。
PyQt、CherryPy、Cython、lxml、docutils、etc... がPython3対応しているし、
今年のGSoCでもいろいろな有名プロダクトがPython3対応プロジェクトを
上げてるし、Python2最後となるPython2.7のリリース目前で、すでに開発者
MLはPython3への移行をどうやって加速するかの話題で一杯。
>>533 10年後くらいに登場して、15年後くらいに普及するんじゃない?
月間Pythonはいつ出ますか?
月間
月刊「桃井かおり」の次
>>535 おれも自分のプログラムをいくつか、3.1で動くようにしてみた。
が、やってみて、ふと思ったのは、3.1に対応するメリットって
なんだろう?ってこと。
3.1で欲しい機能のほとんどは、2.xにバックポートされてるし、
対応ライブラリもとぼしいのにって考えたら、何のためにやって
んのか、よくわからなくなってしまった…
>>540 でも、それは2.7で終わりで、これからは新しい機能はPython3にしか導入されない。
New GIL はPython3.2から搭載されるし、unladen swallowで開発されたLLVM JITは
Python 3.3 で configure オプションになるべくPython3用に開発が継続している。
context.Dr7 |= condition << ((available * 4) + 16) これは context.Dr7とconditionで論理和をとり、その値をcontext.Dr7に 代入してさらに((available * 4)+16)分だけ左にビットシフトするという 意味ですよね?
>>542 context.Dr7 |= condition << ((available * 4) + 16)
は
context.Dr7 = context.Dr7 | condition << ((available * 4) + 16)
と等価
<< と | の優先順位は << のほうが先なので
condition を avaialbe * 4 + 16 で左シフトしてから
context.Dr7 と論理和とって context.Dr7 に代入するって意味
545 :
544 :2010/07/02(金) 11:08:05
typoがひどいが煽られても泣かない
>>543 サーセン;; c言語ちょっとかじったレベルで挑戦してます;;
>>544 ああ なるほど優先順位が高いんですね ありがとうござます><
>>544 結果的に正しいけど、
context.Dr7 = context.Dr7 | (condition << ((available * 4) + 16))
とした方がいいと思うよ。
a *= 2+1 と等価なのは、
a = a * 2+1 じゃなく
a = a * (2+1) だから。
いちいち()が面倒だから a *= 2 + 1 で言いと思うぞ っつーかここらは C でも同じはずなんだが
なんでpythonにビット演算子入れようとしたんだろう 高級言語だとそこまで需要高くないと思うし、関数かメソッドで十分じゃね?
>>550 さすがに a *= 2 + 1 を a = a * 2 + 1 と解釈するアホはおらんだろ
>>549 なんでSQLにビット演算子入れなかったんだろう
>>551 じゃあ
context.Dr7 |= condition < ((available * 4) + 16)
だったら?
>>555 class context:
Dr7=7
condition=100
available=0
context.Dr7 |= condition < ((available * 4) + 16)
# ==> context.Dr7 = 7
context.Dr7 = context.Dr7 | condition < ((available * 4) + 16)
# ==> context.Dr7 = False
PyScripterで実行を停止するにはどうしたら良いかわかりますか? 止め方がわからないと無限ループに入ったときに為す術がないので聞きたいです。
559 :
544 :2010/07/03(土) 06:20:16
>>547 ああ本当だ。考え方が完全に間違っていた
<< と | の優先順位を云々するまでもないね
指摘ありがとう
>>> import cairo Traceback (most recent call last): File "<pyshell#9>", line 1, in <module> import cairo File "C:\Python26\lib\site-packages\cairo\__init__.py", line 1, in <module> from _cairo import * ImportError: DLL load failed: 指定されたモジュールが見つかりません。 ???
エラーメッセージを書かないのは論外だが、エラーメッセージだけをかくのもいかんだろ。 どうやってインストールしたかぐらいは書け。
python初めて三日の俺にも指定されたモジュールが見つからなかったっていうエラーなのはわかる どこが???なんだ
ここまで答える気が失せる質問も珍しい
GTK+がインストールされてないと予想してみる
GTKは糞
gtkのbinフォルダが環境変数のPATHに加わってないんじゃない?
>>566 _cairo.dllも入ってるはずなのに、どういうわけか入ってないって内容のエラー。
身に覚えがないなら、よそからpycairo拾ってきたらいいと思う。
_cairo.pyd が依存している DLL (多分 libcairo-2.dll) が見つからないってエラーでしょ
570 :
568 :2010/07/04(日) 01:57:39
>>569 ごめん。俺が間違ってた。
>>568 なら
ImportError: No module named _cairo
って出るはずだな。
プログラム自体超初心者です。ある入門書に下記のように書いてありました。 何度も読み返し、丸二日自力で考えたのですが、どうしても書いてある意味が分かりません。 特に”実際のデータ”、”実体”が何なのか分かりません。 結局”初期化メソッド”、”インスタンス”とは何なのでしょうか? datetime.date(2030,4,14) ところで、dateはデータ型の名前そのものですが、見方を変えると、datetimeが持っているdateという関数のようにも解釈できます。 つまり、ある型”の実際のデータ”を用意するには、その型と同じ名前のメソッドを呼び出せばいいのです この”型と同じメソッド”の事を、特に初期化メソッドと呼びます。また、このように生成されたデータ型の”実体”の事を、特に、インスタンスと呼びます。
>ある入門書 さっさと捨てろ
インスタンスは型を具象化させたもので、具象化させるプロセスが初期化メソッドかな まあその本はさっさと投げ捨ててプログラム書いてみた方が早いよ
>>572 ほんとはオブジェクト指向なんて、初心者のうちから叩き込まれても何が嬉しいのか分からないんだよ。
だから今はあっさり流して、いつかプログラムが自分でも結構かけるようになった日に見返して、
なるほど、そういう意味だったんだと気づけたらそれでいいのだけど。
※上級者の方へ: 以下、厳密でないのは分かっている。間違いの指摘や補足は、初心者を困らせないような前置きをしてから頼む。
君は、日付を扱いたい。
君が簡単に日付を扱えるように、Pythonの作者たちが日付を扱うための「型」としてdateを用意してくれている。
「データ型」と「型」は同じものと考えていい。
そして、date型を作るためにはどうすればいいか? datetime.dateを関数呼び出しのように使えばいい。
それが「見方を変えると、datetimeが持っているdateという関数のようにも解釈できます」の意味。
別に、makeDate()でもdateFactory()でも名前なんて何でもよかったんだけど、
Pythonでは、型の名前を関数呼び出しのようにすると型を作れる、というルールになっている。
(他にもそういうルールになってる言語も結構あるから、そこそこメジャーなルールと言えるけど)
date()を呼び出しのようにすると、Pythonでは、
1. date型を作り出す
2. date.__init__()って関数を、最初の引数に1で作り出した型、第二引数以降にdate()の引数を入れて呼び出す
ということが行われる。
ここで、date.__init__()関数は、dateを使うための準備をするための関数で「初期化メソッド」と呼ばれている。
ところで、dateがどういう風にできているのか、というのを見ると、
dateはこんな関数を持ってるよ、といった内容の「クラス定義」だけが書いてある。
実際に日付のデータを持っているのはdateそのものではなく、「date()で作り出したもの」のみ。
そういう「クラス定義」から作り出したものを「インスタンス」と呼んでおり、インスタンスが日付のデータを実際に持っている。
つまり、「クラス定義」という作り方マニュアルを使って、作り出した「実体」が「実際のデータ」を持っているインスタンス、ということだ。
……って、わっかんねーよなぁ。
140字以内でお願いできますか
その本は漏れも捨てたほうがいいと思うけど、それはさておき
>>572 datetimeはモジュールで、その中にはdateというクラスが入っている
クラスは「呼び出し可能」であり、関数のように呼び出すことができる
呼び出すことでクラスはインスタンスを生成して返す
下はdateクラスからインスタンスd1, d2を生成し、属性の参照とメソッド呼び出しをする例
>>> import datetime
>>> d1 = datetime.date(1945, 8, 15)
>>> d2 = datetime.date(2000, 1, 31)
>>> d1.year, d2.year
(1945, 2000)
>>> d1.isoformat(), d2.isoformat()
('1945-08-15', '2000-01-31')
初期化メソッド(たぶん__init__のこと)については自分でクラス定義するようになったらわかるよ
とりあえずプログラムを書け。小難しいことは後で必要があったら考えろ
579 :
572 :2010/07/05(月) 02:20:25
>>575 ,577
本当に本当にありがとうございます!!!
クラスやinitなどまだ勉強していない部分なので詳細は理解できませんが、中で何をやっているのか仕組みは分かってきました。
明日早いのに感動して色々調べてたらこんな時間に・・
入門用の本はやさしい書き方なのですが、自分のように論理的に納得できないと前に進めないタイプは
ちょっと難しくても詳しく書いてある本の方がいい気がしてきました。
何のためにコンストラクタが一つと決まってるのか分からん。Javaはいくつもできるじゃん
>>580 理由1(実装による理由)
Pythonでは名前空間がname manglingもしない単純な辞書になってるから、それをしようと思ったらすごく面倒になるし、
関数の引数に型をつけないから、引数の数でしか曖昧性を排除する手段がない。
けど、引数の数だけでいいんだったら、可変数引数をとればいいだけのこと。
理由2(ややPython信者めいた理由)
そもそもコンストラクタを複数作る必要はない。
どうせどれも似たような処理だったり、似てはいなくても共通部分が多く存在することは多い。
C++やJavaで、別のコンストラクタを呼び出すだけのコンストラクタを作ったことがある人も多いのでは?
もともとコンストラクタ(に限らず、同名の関数)を複数作らなければならないのは、
型に縛りがあることや、可変長引数が扱いにくい/扱えないことにあるので、
それが可能なPythonには、コンストラクタ(や関数)をいくつも作る必要がない。
俺もCを学校で習った程度の者なんだけど
>>572 の"初期化メソッド"ってつまり、コンストラクタの事?
そう取るのが妥当じゃね? コンストラクタに複雑な引数渡すくらいならclassmethodからインスタンス返した方がいいよ win32apiみたいなのはごめんだ
いわゆるファクトリ関数だな
最適化アルゴリズムをpythonで組んでるのですが 10000回反復し、10〜100回くり返し試行するため 実行時間が数時間かかります 無駄な処理を省き8時間かかっていたものを4,5時間までに短縮できましたが まだまだ遅すぎます。 そこでcythonなどを使おうと調べてるのですが、 解説サイトが少なく(英語読めませんごめんなさい)、使い方がほとんどわかりません わかりやすい解説サイトもしくは使い方を教えてください。 まずは、簡単なやつから作ろうと思ってます。 その次の段階としてルーレット選択は全てcythonなどで実行できるようにしたいです。 ちなみにpython3使っていて、2.xにする気はほとんどないです。
>>585 そのルーレット選択とかいう、Cythonで書きたいコードの元になるPythonコードを貼って。
コードを一切見せずに日本語でやりたいことだけ言われても、どう返していいかわからない。
>>586 # 次の都市決定
def next_city(self,tau,eta):
""" 評価値計算 """
val_L = [ (tau[self.pre][omega]**self.alufa)*eta[self.pre][omega] for omega in self.omega_list ] # 未訪問評価値リスト作成
s = sum(val_L) # 評価値の合計
""" 評価値が0の時 """
if not s: # 評価値の合計が0なら
val_L = [ eta[self.pre][omega] for omega in self.omega_list ] # 距離の評価値のみでリスト作成
s = sum(val_L) # 評価値の合計更新
""" 相対値 """
val_L = [(i/s) for i in val_L] # 相対的な評価値
#s = sum(val_L) # 評価値の合計更新
""" ルーレット選択 """
tmp_sum = 0 # 合計
val_prob_L = [] # 評価値の確率リスト
for val in val_L: # 評価値リスト
tmp_sum += val # 評価値加算
#tmp_sum += val/s # 評価値加算
val_prob_L.append(tmp_sum) # 評価値確率リスト作成
self.pre = self.omega_list[bisect.bisect(val_prob_L,random.random())] # 次の都市
とりあえずはこの部分をcythonで書きたいです
tau,eta は、n*nの二次元リストです。 今、nは51です。
self.pre:現在の場所,omega未訪問の場所
eta:現在地と未訪問の場所との距離(の逆数)
あとわかりづらい部分あったら言ってください
基本的に独学なので変なコードですいません
コメントは自分でわかりやすいように書いてあるやつなので表現が間違ってることもあります
インデント… # 次の都市決定 def next_city(self,tau,eta): """ 評価値計算 """ val_L = [ (tau[self.pre][omega]**self.alufa)*eta[self.pre][omega] for omega in self.omega_list ] # 未訪問評価値リスト作成 s = sum(val_L) # 評価値の合計 """ 評価値が0の時 """ if not s: # 評価値の合計が0なら val_L = [ eta[self.pre][omega] for omega in self.omega_list ] # 距離の評価値のみでリスト作成 s = sum(val_L) # 評価値の合計更新 """ 相対値 """ val_L = [(i/s) for i in val_L] # 相対的な評価値 #s = sum(val_L) # 評価値の合計更新 """ ルーレット選択 """ tmp_sum = 0 # 評価値の合計 val_prob_L = [] # 評価値の確率リスト for val in val_L: # 評価値リスト tmp_sum += val # 評価値加算 #tmp_sum += val/s # 評価値加算 val_prob_L.append(tmp_sum) # 評価値確率リスト作成 self.pre = self.omega_list[bisect.bisect(val_prob_L,random.random())] # 次の都市
糞どうでもいいけど、Cythonってなんて発音すんの?
サイソンでしょ
アメリカ:サイソン イギリス:シーソン ロシア:スサン ドイツ:サイスン イタリア:シッスナ フランス:スーさん 中国:シェンシゥン 韓国:サアソン 日本:なんて読むの?
カイソン
ちぃちぃょん
糞どうでもいいけど、数あるプログラミング言語がある中で、 Pythonを選んだ理由を教えてください。
名前がかわいい
Guidoさんが好みのタイプなので
括弧が少ないから
2タブが気に食わなかったから
$があまり出てこないから
インストールとかモジュールの追加が楽だから
Perlが嫌いだったから
インデント強要ウザいとかいうバカがいないから
hello.pyx def say_hello_to(name): print("Hello %s!" % name) C:\Users\test\>python C:\Python31\Scripts\cython.py hello.pyx Error converting Pyrex file to C: ------------------------------------------------------------ ... def say_hello_to(name): ^ ------------------------------------------------------------ C:\Users\test\hello.pyx:1:23: Unrecognized character こんなエラーが出るんですがどうしたらいいですか?
>>604 BOM付きUTF-8で書いてるんじゃない?
>>605 ありがとうございます
どこで、BOM付きUTF-8に設定しているのかわからずに、
とりあえず、適当にエンコードしてみたら、
UTF-8 - Win(CR +LF) にしたら、同じエラー
UTF-8 - Unix(LF) にしたら通りました。
で新たなエラーが
thon setup.py build_ext --inplace
running build_ext
cythoning hello.pyx to hello.c
building 'hello' extension
error: Unable to find vcvarsall.bat
調べた結果
http://pythonlife.seesaa.net/archives/200909-1.html >MSVCかMinGWまたはCygwin上のgccが必要となる。
とあり、MinGWは入っているので、これを利用し、
>後で判ったことだが、PythonでMinGWをdefaultで使いInstallする場合には、Python26/Lib/distutilsに
>次の内容distutils.cfgとして作成しておくと良いそうだ。今後は概ね「setup.py install」だけで大丈夫かもしれない。
>[build]
>compiler=mingw32
Python31/Lib/distutils/distutils.cfgを追加し、エラーもなくコンパイル出来ました。
import helloとし、実行した結果なんとかできました。
あとは、setup.pyの書き方がいまいち理解してないので、もう少し勉強してみます。
まずBOM有無が決められるエディタを探すのが先じゃないかな?
tmp.py ---- import hello ---- C:\Users\test>python tmp.py Traceback (most recent call last): File "tmp.py", line 1, in <module> import hello UnicodeDecodeError: 'utf8' codec can't decode byte 0x8d in position 22: unexpected code byte 対話モードだと出来るのですが、テキストで.pyを作成して実行すると上記のエラーが起きます これは何が問題になっているのでしょうか? C:\Users\test>python Python 3.1.2 (r312:79149, Mar 21 2010, 00:41:52) [MSC v.1500 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> import hello >>> hello.say_hello_to() Hello! >>>
>>607 emacs23使ってます
.emacs.elを書き換えて
デフォルト保存をutf-8から,utf-8-auto-unixにしたらコンパイルは問題なくなりました
>595 マジレスすると、numpyとmatplotlibが使いたかった そんだけ
cursesでstdscrの画面右下(24 x 80のコンソールなら23, 79)に書き込もうとすると ERRが返ってくるんだけど、うちだけ? import curses stdscr = curses.initscr() maxy, maxx = stdscr.getmaxyx() stdscr.addch(maxy - 1, maxx - 1, 'A') curses.endwin() File "bugtest.py", line 4, in <module> stdscr.addch(maxy - 1, maxx - 1, 'A') _curses.error: addch() returned ERR stdscr.addstr()でも同じ。 Cからだといけるんだけど、Pythonで回避法ってある? Python 2.5.1と2.6.1で確認済。Macです。
うちもなる。 Cの方は単に返り値を無視してるだけでは? scrollokとかするとエラーでないっぽい。
Cでは確かに返り値をチェックしてない。 try:〜except: passでとりあえず回避。Thx。
>>611 unicodeデコードエラー
解読出来ませんでした。
どうやったら直るのでしょうか・・・・?
文字コードをいくつか変えて実行してもダメで、どうすればいいかわからないです。
UnicodeDecodeError: 'utf8' codec can't decode byte 0x8d in position 22: unexpected code byte 要点は utf8' codec can't decode byte 0x8d と unexpected code byte
対話モードで、 >>> repr(open('tmp.py', 'rb').read()) を実行してみて。
618 :
名無しさん@そうだ選挙に行こう :2010/07/10(土) 20:36:35
window.pyという名前で保存したのに、ダブルクリックで起動できません 何が原因でしょうか?
>>620 というか起動はしてるんだけど
処理を終えたかエラーで止まったかでプロンプトが閉じちゃってるんだと思うよ
これ以上はwindow.pyの内容と何がしたいのか(どういう結果がほしいのか)が
わからないとなんともいえない
お礼は?
三行以上で?
>>617 C:\Users\test>python tmp.py
Traceback (most recent call last):
File "tmp.py", line 1, in <module>
import hello
UnicodeDecodeError: 'utf8' codec can't decode byte 0x8d in position 22: unexpected code byte
C:\Users\test>python
Python 3.1.2 (r312:79149, Mar 21 2010, 00:41:52) [MSC v.1500 32 bit (Intel)] onwin32
Type "help", "copyright", "credits" or "license" for more information.
>>> #utf-8 Win
>>> repr(open('tmp.py', 'rb').read())
"b'import hello\\r\\nhello.say_hello_to()\\r\\n'"
>>> #utf-8 Unix
>>> repr(open('tmp.py', 'rb').read())
"b'import hello\\nhello.say_hello_to()\\n'"
>>>
でした。
>>616 >UnicodeDecodeError: 'utf8'コーデックは位置22でバイト0x8dを解読できません: 予期していなかったコードバイト
>'utf8'コーデックはバイト0x8dを解読できません。
0x8d がどれを指してるのかが・・・
>予期していなかったコードバイト
0x8dがダメなんですよね?
utf8自体がダメなんですかね
飯食って、グレープフルーツゼリー作って、そのあと意識があれば調べてみます
なんだ中学生か
627 :
625 :2010/07/11(日) 02:20:59
う〜ん・・・ 結局よくわからないです hello.pydがいけないんですか? この中なら\x8d は何回か出てきてます でもそしたら、対話モードでもimport出来ないはず...? 今度こそ飯を
バイト数が問題なんですか><
まずBOM有無が決められるエディタを探すのが先じゃないかな?
>>629 そのためにpyscripter入れたけどダメでした
馬鹿には無理
notepad++オヌヌメ
結局どうしたいいんですか?
>>627 pycじゃなくてpyd?
よくわかんないから関連ファイル全部まとめてzipでうpしてくれると話が早い
>>627 対話モードと直接実行時でロードしている hello モジュールが違ってる気がする。
tmp.py で
try:
import hello
except UnicodeDecodeError as e:
print(repr(e.object), (e.start, e.end))
import os, imp
print(os.path.abspath(imp.find_module("hello")[1]))
BOMって関係あんの?
>>604 の Unrecognized character のエラーは codecs.open 使ってるのに
'\r' を読み取る事を考慮していない Cython のバグ
俺が体験してきた中で 一番最初に出会って、頻繁に出るのはBOM関連のエラーだな たまにBOM付きじゃないとダメってのがあるけど基本なしですれば問題ない まずBOM無しUTF-8を既定にできるエディタをさがすべき
>>638 で、そのBOM関連エラーでどうやって0x8dが出るんよ。
ソースコードエンコーディング絡みなら SyntaxError が出るはず
こんなprintの段階でググる能力すらないのが終わってる どうしても答えが欲しいなら別言語に移ったほうがよさそう 恐らく、このまま甘やかすとこのスレに日記帳のように書き込まれる
訂正。CPythonじゃなくてcython
PyQt4を試してるんですが Qt4(C++)の方でQHogehogeクラスを継承して定義したQHagehageクラスを PyQt4から使用するにはどのような使い方をすればよいのでしょうか?
PyQTは糞なので WxPythonかGTK使ってください。
おっPyQT
おっPyQTとはどういう意味ですか?
QHagehageをラップしたC拡張ライブラリを作らないと駄目じゃないの?
649 :
648 :2010/07/11(日) 15:32:22
C拡張ライブラリ => C拡張モジュール
sip使って自分で拡張モジュール作る。
652 :
625 :2010/07/11(日) 21:38:48
>>635 ありがとうございます
C:\Users\test>python tmp.py
b'C:\\Users\\test\\hello.pyd' (22, 23)
C:\Users\test\hello.pyd
でした
Python3とPython2が混じってるのかな? Python2はインストールしていない?
ウィンドウズのコマンドプロンプトだと↑キーを押すと以前入力した文字が入力されますが Python Shellで、同じような事は出来ないでしょうか?
漏れも知りたい鯛
IDLE だったら Options -> Keys の history-next, history-previous で Alt+n, Alt+p じゃない
つrlwrap
>>654 ipython便利だよ。windowsだとpyreadlineといっしょにいれるとよろし。
661 :
デフォルトの名無しさん :2010/07/12(月) 01:18:27
ズバリtwitterクライアント作ろうと思ったら、何が必要ですか? 右も左も分からない初心者です
189 デフォルトの名無しさん [] 2010/07/12(月) 00:13:57 ID: Be: Twitterクライアント クリップボード監視に向いてる言語は何ですか?
お前の頭骨に入ってる塊より百段上等な脳みそ
Python3.12 の Windows 版で日本語を含むフォルダ内のC拡張モジュールを インポートするスクリプトを実行するとUnicodeDecodeErrorが発生するみたい。 おそらく Python3 のバグ。 (importdl.c の _PyImport_LoadDynamicModule => _PyImport_FindExtension => PyDict_GetItemString等 => ... => PyUnicode_DecodeUTF8 の流れで cp932 のバイト列が utf8 で変換されてエラーになる) 再現例: D:/ほげほげ/winsound.pyd, D:/ほげほげ/a.py の状態で a.py を実行する。 winsound.pyd は Python31/DLLs のをコピー a.py の中身は import winsound のみ
>>653 混じってます
Vista HomeBasicSP1とwindows7の2台で利用していますが
VistaはCygwinの中にPython2.4と2.5が入っています。
cygwinは普段利用していなく、コマンドプロンプトを利用しています。
windows7では、最近2.7と2.6を入れました。
このエラーが起きてから入れたような気もします。定かではないですが・・・
Vista
C:\Python31 , C:\cygwin\lib\Python2.4 , C:\cygwin\lib\Python2.5
windows7
C:\Python31 , C:\Python27 , C:\Python26
こんな感じの場所にいます
>>665 ありがとうございます
直りました
>>653 色々教えていただきありがとうございます
時間を取らせてしまって、ごめんなさい。
ここにレスするときに、ディレクトリ名が乗せられなくて、勝手に手で消してからレスしていました。
そのディレクトリ名の中に日本語が含まれていました。
申し訳ありません
一言、消していることを明記すべきでした。
b'C:\\Uers\\test\\******\\\x8d(ry
ごめんなさいごめんなさい....orz
センスないな
670 :
デフォルトの名無しさん :2010/07/14(水) 17:34:50
クラスにメソッドを後付けすることはできますか? 継承せずに、メソッドを定義したいのですが
>>670 できます。
class Foo(object):
pass
def _bar(self):
pass
Foo.bar = _bar
>>671 そんな簡単にできるのですね
ありがとうございました
けどbuiltinなクラスには後付けできないという... これって、できないようにする積極的な理由あるの?
継承すれば済む話だろ
builtin typeに追加できてもカオスになるだけだと思うわ
それどこの Ruby on Rails www
>>673 変更不可能にすることで、メモリ消費量を削減したり、呼び出しを高速化したりできる。
基本的に変更可能な属性は dict 型のオブジェクトを使って管理されているので、
その呼び出しはハッシュテーブルからの検索とかオーバーヘッドが少し大きい。
あと、基本型を弄るとどこに副作用が起こるかわからないという理由もあるな。
基本的に直接弄るんじゃなくて継承しろという方針。
>>677 なんだ、実装上の都合なのか。
Pythonは理想追い求めるより現実的な落としどころ見つける言語だってのは知ってるけど、
それでも一貫性のなさを感じる。
読解力のなさに絶望した
680 :
デフォルトの名無しさん :2010/07/16(金) 05:00:38
builtinクラスに後付けしたいケースってありますか? ちょっと思いつかないな
list.joinしたいんだろ
file.foo = 1 はできないのに、 StringIO.StringIO.foo = 1 ができる合理的理由が見当たらない。
__slot__
aiueo = input() import aiueo みたいに読み込むモジュールを入力して与えることって出来るの?
Yes, we can.
imp モジュールもあるよ
質問です dictが入れ子になってるdictの構造だけをコピーしたいのですが copyで浅いコピーをしているつもりが、入れ子の中までは担保されません In [2]: a = {"a":{"b":"con_b","c":"con_c"}} In [3]: b = a.copy() In [4]: a Out[4]: {'a': {'b': 'con_b', 'c': 'con_c'}} In [5]: b["a"].update({"b":"hoge"}) In [6]: b Out[6]: {'a': {'b': 'hoge', 'c': 'con_c'}} In [7]: a Out[7]: {'a': {'b': 'hoge', 'c': 'con_c'}} これを a["a"]["b"] == "con_b" としたいのですが updateというアプローチは間違っているのでしょうか
>>> a = {"a":{"b":"con_b","c":"con_c"}} >>> b = a.copy() >>> b["a"].update({"b":"hoge"}) >>> a {'a': {'c': 'con_c', 'b': 'hoge'}} >>>
>>> import copy >>> a = {"a":{"b":"con_b","c":"con_c"}} >>> b = copy.deepcopy(a) >>> b {'a': {'c': 'con_c', 'b': 'con_b'}} >>> b["a"].update({"b":"hoge"}) >>> b {'a': {'c': 'con_c', 'b': 'hoge'}} >>> a {'a': {'c': 'con_c', 'b': 'con_b'}}
>>692 おー、ありがとうございます
こういうケースはcopy.deepcopy()しないといけないんですね
>dictが入れ子になってるdictの構造だけをコピーしたいのですが >copyで浅いコピーをしているつもりが、入れ子の中までは担保されません 質問の仕方が変だ
>>693 浅いコピーってのは、
b = {}
for key in a:
b[key] = a[key]
と同じだから、この場合
b["a"] = a["a"]
ってしたことになる。ここで、 a["a"]は辞書型なのでmutable。
浅いコピーでも完全にコピーされるのは、
・要素が全部immutable(int, float, str, tupleなど)
・要素の要素、要素の要素の要素、...が全部immutable
のときのみ。
もちろん、完全にコピーされないことを知った上で大丈夫だと分かっててコピーするのはOK
要素の要素がmutableで浅いコピーがうまくいかない例:
a=(1,(2,[3,4]))
b=a
b[1][1][1]=0
print b
# ==> (1, (2, [3, 0]))
print a
# ==> (1, (2, [3, 0]))
pythonの初心者参考本を見て、elseを使おうとしたのですが SyntaxError: invalid syntax というエラーが出てしまいます。何か間違ってるところがあったら教えてください。コードはこんな感じです。 color = '緑' score = 20 if color == '赤': bonus = 0 ここでelseを入れるとエラーが出ます。あとインデント幅も妙です。 参考本ので説明に使われているpythonのバージョンと今使ってるバージョンが違うので 書き方に違いがあるのかと思ってぐぐってみたんですが分かりませんでしたorz
>>696 こんな感じで普通に動くと思うけど。
インデントは全角スペースにしてるから気をつけてね
color = '緑'
score = 20
if color == '赤':
bonus = 0
else:
bonus = 20
print bonus
elseの後に:を入れ忘れているんじゃないかと予想。
>>697 if color == '赤'
bonus = 0
この後改行するとbonusの"b"と同じ列から入力するようになっていてelseを入れてみると
bonus = 0
else:
SyntaxError: invalid syntax
というエラーが出てしまいます。丸々コピーしてみても駄目でしたすみません。
何かすごい根本的な問題のような気がするのでこのままスルーして頂いても結構です。ありがとうございました。
>>698 elseを打つときはデデント(インデントの反対)して
ifと同じ桁から始めなきゃだめだよ
あともし統合環境使ってるのであればPythonに慣れるまでは凍結して
シンプルなテキストエディタとコンソール(コマンドプロンプト)を使ったほうがいい
>>699 デデントしたらできました!ありがとうございます。
なんだ自演か
なんだかうまい方法を思いつかない before =[ {"id":"0","aaa":"fdafdsadafdas"}, {"id":"0","bbb":"dafdgdfagdfsg"}, {"id":"0","ccc":"dafdgdfagdfsg"}, {"id":"1","aaa":"gdfagdfsgdsaf"}, {"id":"1","bbb":"dgfagdsdaffsg"}, {"id":"1","ccc":"dadfgdfddfasg"}, {"id":"1","ddd":"dadfgdfddfasg"} ] という要素として辞書を持ったリストを after =[ {"id","0","aaa":"fdafdsadafdas","bbb":"dafdgdfagdfsg","ccc":"dafdgdfagdfsg"}, {"id":"1","aaa":"gdfagdfsgdsaf","bbb":"dgfagdsdaffsg","ccc":"dadfgdfddfasg","ddd":"dadfgdfddfasg"} ] のように"id"を共通のキーにしてまとめたい どのようにすればいいだろうか
[dict(reduce(operator.add, map(dict.items, b))) for a, b in itertools.groupby(before, operator.itemgetter("id"))]
>>703 動きました。いいワンライナーですね!
itertools と reduce、 まだ怖くて使ったことがないです…
自分も使いこなせるようになろう
ワンライナーにおしこめないで判りやすくするにはこんな感じかな。 t = defaultdict(dict) for item in before: t[item['id']].update(item) after = t.values()
でもそういう便利機能を使いこなしちゃうとあとで読みにくかったりするわな
tkinterの良い勉強サイトや本ってない? 可能ならば3に対応してる奴で、英語か日本語のもの
あるよどっかに
pythonを勉強してたんだが全く意味がわからんのでまずはプログラムのイロハを学びたいと思います LINUXでC言語でも勉強したいと思います
こう言っては何ですがプログラミング自体を諦めたほうがいいのではないでしょうか
pythonで学ぶプログラム作法おすすめ
どうでもいいけど、このスレに居る奴って英語読めなさそうだな
#!/usr/bin/python # -*- coding:utf-8 -*- if __name__ == '__main__': print 'java-ja great!!!'
>>719 1. class は import しない。 import test としたら、 class test と全く別の test モジュールが import され、 test クラスは消え去る。
2. self.a = 0 では、クラスではなく、クラスのインスタンスに属性を追加しているので、インスタンスを作らないと a は見えない。
class test:
def __init__(self):
self.a = 0
t = test()
t.a
>>719 importはモジュールを読み込み、初期化する文。
classとは関係ない。
その例だと、testという名前でクラスを定義した後に、
testというモジュールをimportしている。
>>720 ,721
なるほど!ありがとうございます。
askopenfilenameって3.0以降でどう書けばいいの? tkFileDialogのimportの変更点も分かってないから誰か解説してくれ
2to3.py
neetossan.py
助かった、tkinterも変えてくれるのね アスキーコード云々もsitecustomize.pyに2行足しただけですんなり行った
__init__ とか__がやたら目につくのはなぜ? 気持ち悪いんだけど
728 :
デフォルトの名無しさん :2010/07/27(火) 01:51:47
誰かいる??
(゚Д゚≡゚д゚) 今ぱいスレには俺様しかいない!
居ないけど何よ?
731 :
デフォルトの名無しさん :2010/07/27(火) 02:03:38
pythonでmsecまでを表示したいんですが、 何か良い方法は無いでしょうか?? 例えば 2:00:44.009727 の時だと 7244.010 みたいなかんじです。 マイクロsecをとって//1000すると、9 とかになるので、 マイクロsecから丸める方法でも3桁にしたいです・・ お知恵をお貸し下さい。
俺じゃ答えはわからないけど一緒に考えることなら出来るよたぶん
>>731 >>> sec = 12345.12345
>>> print "%.3f" % (sec,)
12345.123
python] ミリ秒まで表示させる
■[python] ミリ秒まで表示させる 00:35 ミリ秒まで表示させる -
With skill and creativeness を含むブックマーク はてなブックマーク - ミリ秒まで表示させる - With skill and creativeness ミリ秒まで表示させる - With skill and creativeness のブックマークコメントCommentsAdd Star
参考URL
import datetime
now = datetime.datetime.now()
print now.strftime("%Y%m%d%H%M%S.") + "%04d" % (now.microsecond // 1000)
→ '20081118003037.0479'
これは?
ttp://d.hatena.ne.jp/shohu33/20081117/1226936130
735 :
デフォルトの名無しさん :2010/07/27(火) 02:11:21
ありがとうございます。
datetime.datetime.now()とかで、
秒換算して取得することって出来ますか?
それと、
>>733 を組み合わせると、完璧の予感!
>>> datetime.datetime.now() datetime.datetime(2010, 7, 27, 2, 14, 21, 705000) 日本語が理解できない これで秒取って、足したり引いたりじゃだめなの?
737 :
デフォルトの名無しさん :2010/07/27(火) 02:27:16
d = datetime.datetime.now() sec = ((d.hour*60 + d.minute)*60 + d.second) print sec print "%.3d" % (d.microsecond // 1000) 数値型で sec.msec にするには、あと、どうしたらいいですか・・・ 行き詰まってしまいました
738 :
デフォルトの名無しさん :2010/07/27(火) 02:39:45
d = datetime.datetime.now() sec = ((d.hour*60 + d.minute)*60 + d.second) msec ="%.3d" % (d.microsecond // 1000) print sec + float(msec)/1000 これでいいか。
readで引数を細かくとったり、urllib.urlretrieveを使うことで ダウンロードの進捗状況を知ることができるのは分かったのですが アップロードの進行状況(POST)を知る方法は標準ライブラリでありませんか? urllib2とかurllibを使って
740 :
デフォルトの名無しさん :2010/08/02(月) 00:12:41
windowsでeasy installを使いたいのですが、 c:\Python25\Scriptディレクトリ自体がありません どうしたらいいでしょうか
>>740 なくてもインストールできるからさっさと入れればいいだろ
は?
743 :
デフォルトの名無しさん :2010/08/02(月) 00:29:38
>>739 その方法で本当にDL進捗状況がわかるのか気になる
socket使えばアップ・ダウン両方できる
>>744 そうじゃない
まずeazy_installをいれろよアホがっつってんだよカス
えっ、easy installは最初から入ってるものではなかったのですか? その方向で調べてみます ありがとうございます。
>>743 すいません後出となって申し訳ないのですが、ソケットを直接つかうの以外で
無いだろうかと探していました
eazy_installをeazy_installでインストール出来ないのは大問題だな
今はsetuptoolsじゃなくてdistributeだから気をつけなよ>easy_installの入手
750 :
デフォルトの名無しさん :2010/08/02(月) 03:17:27
一度タイムゾーンを設定したら 以後、時刻関係の関数は一律そのタイムゾーンで値を返してくるようにしたいのですが そういうことできますか?
環境変数で TZ=hoge する
''' プログラム超初心者です ↓のようなことをするときにbreakは書いたほうがいいのでしょうか、、、 あともっとスマートに書ける方法があったら教えてください。 ユーザーから続けて数字の入力を受け付け 合計が100に近づくまでその数値を足し続けるプログラムを書きなさい ''' hundred = 100 value = 0 def numint(x): while True: try: y = raw_input(x) z = int(y) return z #break ←ブレイクは書いたほうがいいのでしょうか? except ValueError: print u'Error : 文字ではなく数値を入力してください' value += numint('数値を入力してください>> ') while value < hundred: print value, u'まだ足りないみたいです' value += numint('もっと大きな数字を入力しましょう>> ') print value, u'合計が100以上になりました'
また突っ込み所満載のネタを・・・
>> 752 です
http://www.python.jp/Zope/intro/instant_hacking_jp プログラムの練習に↑のInstant hacking をしていたのですが
例外処理を加えようとして pylint が到達不能code を警告していたので
どうしたもんかなぁと思って書き込みしてみたところです
ぐぐったところ while True はあまり書かない方がいいみたいなので
他の手を使ってみます、、、
while True したら break を書くものとばかり思っていたので
頭が混乱してしまいました…
昔PHPにループからreturnするとメモリリークするというバグがあった
>>752 質問に答えるなら、returnの後の行はどうせ実行されないのだから、breakは不要。
けれどこれ、except節はtry節が終わった直後に置かないといけないからSyntaxError出ると思うよ。
そしてお説教。
> hundred = 100
こういう名前の付け方は意味が無い。
変数は、
・いちいち書くと長ったらしい/処理を分けたいから名前をつけたい
・今後変更される可能性に備えて、名前をつけておきたい
ときに使うものだから。仮に200に変更したとき、
hundred = 200
にするわけにはいかないでしょう。
これもあんまりいい名前じゃないけど、俺ならNにしちゃうかな。
numintの引数xも、一目でxが何か分からないから問題あり。
例外が出なかったときに処理したいのなら、Pythonでは例外の後のelse節でそれができる。
N = 100
value = 0
def numint(msg):
while True:
y = raw_input(msg)
try:
z = int(y)
except ValueError:
print u'Error : 文字ではなく数値を入力してください'
else:
return z
>>756 ありがとうございます!!! めちゃくちゃスッキリしました!!
なぜかerrorを出さずに実行できてしまっていたのでどうしよう…ってなっていたところでした
みんなのPythonを1/3ほど読み終えたところですが、変数の名前は適当でいいのかなぁとか思っていました、、、
もっと基礎を勉強したほうがいいですねorz
多謝です!!
>>757 >みんなのPythonを1/3ほど読み終えたところですが、変数の名前は適当でいいのかなぁとか思っていました、、、
そんなことが書いてあるの!?
酷い本だ。
今までプログラムを触ったことがないならまずはC言語からの方がいいと思う、教材の良とか質とかもあるし。 オライリーのヘッドファーストシリーズお勧め
handred = 100は教材以前の問題じゃないだろうか。 自分の子供に「息子」という名前を付けるのと同じだ。
なんとかjr
handredってなに、手が赤いの?
>>758 いえ、変数の名前のつけ方とかはみんなのPythonには書いてなかったので、、、
読んでみた感想は、なんとなくプログラムを大雑把に理解できる感じでした
ビット演算の項でつまずいてますけどorz
変数の名前にhundredを使ったのは私ですのでみんパイは悪くないです
図書館で借りたので文句のつけようがないです、、、
>> 759
「みるみるプログラミングがわかる本」掌田津耶乃
「 C言語プログラミング入門―C99対応―」田中敏幸
[改訂新版] これからはじめるプログラミング基礎の基礎]谷尻 かおり
あたりを図書館で借りて勉強しようと思います
「エキスパートPythonプログラミング 」Tarek Ziade
「Head First JavaScript」Michael Morrison
は買ってみます
確かに みんパイ読んだけどちんぷんかんぷんだった で、Cの本を適当に読んだら非常に解りやすい やっぱプログラム初心者にパイソンはむついのかなーと何気に感じた今日この頃
みんなのPythonは前半は実践編が無いからな〜
Webにあるチュートリアルじゃむずいの?
数千円でプログラミングのエッセンスが身につくと思っているとかおめでたいな。
ビッド演算で躓く子が、ポインタを理解できるのかい?
771 :
デフォルトの名無しさん :2010/08/04(水) 00:42:50
>>770 整数はbit幅が固定じゃないからcよりも理解しにくいんじゃない?
>>770 ビッド演算とか言ってないからたぶん大丈夫だろう
>>764 命名規約だけで大議論が起こるくらいにはネーミングは重要だよ。
Pythonの命名規約は「PEP8」でググれば出てくるから調べてみな。
「2の補数」でぐぐれ >>> ~26 -27 26(10) = 11010(2) -27 = ~26(10) = 1111...(ここの1が論理的に無限に続く)...111100101(2) これで 26 + (-27) = -1 になることを考えてみるとわかりやすい 111111 = -1 111110 = -2 111101 = -3 111100 = -4 ... 100111 = -25 100110 = -26 100101 = -27
>>775 ありがとうございます!! めちゃくちゃ助かりました!!
なんとなくですけど、理解できたような気がします!
~(not)はビットを反転させて、1の補数をとっているんですよね。
>>format(26, 'b')
11010
>> ~ 26
-27
>>format(-27, 'b')
-11011
単行演算子 - は2の補数をとるので、表示は1111..(32列)..1100101ではなく
-11011となっていたのですね!
この理解であっているでしょうか、、、
血が牛
>>776 format(n, 'b')はnを2進表記にした文字列を返すってだけだよ
整数の内部表現を返すわけではない
一応補足しておくと b って意味は、 2進数表記の際に、頭につける 0b からきてる。 これは16進数の0xと一緒の意味。 format(num, 'b')は単純に 数字を変換、どんな物かというとb、bの意味は2進数。
それは補足じゃなくて蛇足
なんでbなんだ
binary
なんでxなんだ
hexともしました
つまり6進数か。
786 :
デフォルトの名無しさん :2010/08/05(木) 01:01:11
2進数16進数はわかるけど8進数の存在意義がよくわからん. 言語によっては数値リテラルを0から始めると8進数として扱ったり 16進数で十分じゃん
787 :
デフォルトの名無しさん :2010/08/05(木) 01:18:52
chmod 755
788 :
786 :2010/08/05(木) 03:25:08
そういえばそれは8進数だな けどソースコードを書く上での存在意義がよくわからんのだよ>8進数 わざわざ8進数を記述する文法があるわけだから何かしら意義はあるのだろうけど
分かった。16進だと記号が入ってウザいから
790 :
デフォルトの名無しさん :2010/08/05(木) 03:46:54
10進数のつもりが8進数でした・・・になるより記号付きの方がいいと思うんだけど
8進数は64bitと相性が良い
>>790 2進数 0B01234567
8進数 0O01234567
16進数 0X01234567
>>793 2進数 0b01111111
8進数 0o01234567
16進数 0x01234567
すみませんGAEでpythonいじってます。 サンプルコードにconfig.pyってのがあって、グローバル変数の初期化をしています。 そこにBASE_URL =とあってURLを設定します。 で、これだとローカルテストとデプロイでいちいちURLを変えないといけないので改造したいわけです。 しかし、grepしてみてもどこからもconfig.pyを明示的に呼び出したりしてません。 pythonはアプリケーション起動時にアプリケーションディレクトリ以下のすべてのpyファイルを読み込むのでしょうか? だとするとself.request.urlの戻り値が期待できないタイミングだと予想されます。 requestのタイミングで毎回セットするならグローバル変数にする意味ない気がするし・・・ こんなとき、自分のドメインを調べてグローバル変数にセットする一番標準的な方法を教えていただければ幸いです。 よろしくお願いします。
BASE_URL = os.path.split(os.path.abspath(__file__))[0]
>>797 これはローカルのパス・・・・ですよね?
>サンプルコード どこの?
「新規」という名前のフォルダを作りたいのですが以下だとダメでした。 アドバイスいただきたいです。 import os dir_name = '新規' os.mkdir(dir_name)
普通に作れると思うけどソースにencoding指定がないとかだろうか とりあえずOSとPythonのバージョン 実行形態(スクリプトとして実行、あるいは対話型シェルから等) あとエラーメッセージとどう「ダメ」だったのかをどうぞ
import os dir_name = u'新規' os.mkdir(dir_name)
作れなかったから例外が発生すると思うのだが
コンソールからでなくアイコンをダブルクリックで起動してるとかかも
>>801 にソースコードの文字コードも追加で
作成権限ある?
806 :
デフォルトの名無しさん :2010/08/06(金) 04:18:42
組み込み関数のソースコードを見ることはできないのでしょうか?
807 :
デフォルトの名無しさん :2010/08/06(金) 04:56:46
エロリおかず用HDDが逝ってからどうでもよくなった エロサイトのブクマ外したり内臓HDDのエロ全消去して エロ禁&オナ禁初めて現在14日目 最近ではIVやティッシュはもちろん、テレビでもエロイ事してる人がいるから テレビも部屋から出した。 徹底してるぜ俺
実況乙
なんで?
812 :
デフォルトの名無しさん :2010/08/06(金) 10:36:01
Windows XP SP3 Python 2.6.4 です。 ファイルのフルパスを受け取った文字列があります。 これを ディレクトリパスとファイル名(拡張子なし)と拡張子名に分割し、再び結合する というPythonプログラムはどうかけるでしょうか? 例えば full_p_str = "D:\Dir1\Dir2\Dir3\filename.html" のようにファイルのフルパスを受け取ってfull_p_strに格納し、 full_p_str_result = os.path.join(ディレクトリパス, 拡張子のないファイル名 + "." + 拡張子名) のようにしたいのです。 よろしくお願いいたします。
813 :
812 :2010/08/06(金) 10:40:33
os.path.split でフルパスをフルパス名を分割できるようですが、 ファイル名を拡張子とそうでない部分に分割するにはどうしたらよいでしょうか?
それ専用なものは無いので正規表現をつかえばいいんじゃないですか?
>>814 正規表現ですか。
ありがとうございます。
>>> import os >>> fullpath = r'D:\Dir1\Dir2\Dir3\filename.html' >>> dirname, filename = os.path.split(fullpath) >>> filename_wo_extension, extension = os.path.splitext(filename) >>> os.path.join(dirname, filename_wo_extension + extension) 'D:\\Dir1\\Dir2\\Dir3\\filename.html' >>> 'hoge.piyo.fuga.html'.rsplit('.', 1) ['hoge.piyo.fuga', 'html']
os.path.basepath os.path.filepath
818 :
デフォルトの名無しさん :2010/08/06(金) 12:13:47
みなさんありがとうございます。 それで解決できました!!
#bbb から#eeeの話だよな? + で繋ぐ部分はインデントどうやっても構わなくなるはずなんだけど 怒られてるの違う部分じゃないの?
TypeError: bad operand type for unary + って言われます・・・。
s = 'aaa' + \ ', ' + foo + \ ', ' + bar + \ ... 文字列リテラルだけなら s = ('aaa' 'bbb' 'ccc')
+ \ ですか。 ありがとうございます。 それで解決します!
824 :
819 :2010/08/06(金) 12:34:57
+ \ で解決するかと思ったのですが、 SyntaxError: unexpected character after line continuation character と言われてしまいました。 各行にコメントを後ろに付けたいので、そういう場合はどうすればよいでしょうか?
a = (1 + # one 2 + # two 3) # three
826 :
819 :2010/08/06(金) 12:56:08
>>825 ありがとうございます。
それで完全解決いたしました。
感謝申し上げます。
827 :
812 :2010/08/06(金) 13:05:43
>>812 です。
環境は
Windows XP SP3 Python 2.6.4です。
Shift-JISのファイルを読み込んでUTF-8に変換し、
そのファイルを加工した後
再びShift-JISに戻したいのですが、どのようにすればよいでしょうか?
import codecs
f = codecs.open(ファイルのフルパス,"r", "utf_8", "ignore")
とすると元のファイルがUTF-8でないと開けず、
かといって
f = codecs.open(ファイルのフルパス,"r", "shift-jis", "ignore")
とすると開いたファイルがShift-JISのままです。
どなたか解決策を教えていただけますでしょうか?
codecsの挙動わかってる? f = codecs.open(ファイルのフルパス,"r", "shift-jis", "ignore") この状態でreadすればUnicode文字列として読み込まれるから普通に加工できる。書き出すときも w = codecs.open(ファイルのフルパス,"w", "shift-jis") とやってwriteにUnicode文字列を渡せば、shift_jisに変換して書き込んでくれる UTF-8相当のstrにして何かやりたいならencodeメソッドなりご自由に
似たような質問をどこかで見たぞ??
>>828 ありがとうございます。
codecsってそういう動作なのですね。
助かりました。
s = 'aaa' + \ # hoge ', ' + foo + \ # fuga ', ' + bar + \ # hage ... s = 'aaa' + # hoge \ ', ' + foo + # fuga \ ', ' + bar + # hage \ ... どっちもだめなのか
>>828 f = codecs.open(ファイルのフルパス,"r", "cp932", "replace")
w = codecs.open(ファイルのフルパス,"w", "utf-8", "replace")
が良くね?
833 :
デフォルトの名無しさん :2010/08/06(金) 19:22:15
>>831 何スレか前に似たような内容を書き込んだ覚えがある
前者のような書き方は許して欲しいんだけどねぇ
Python 2.6.4です。 <tab>単語1<tab>単語2 という形式の文字列が延々と羅列されてるtxtファイルで、 単語1の部分が以前の行で既出で重複している場合に、その行を消すにはどうしたらいいでしょう?
tsvファイルからデータを読み込んで重複除去したいんでしょ 順序は維持しないとだめ?
>その行を消す この場合消すのは今見ている行なのか 既出で重複していた方の行なのか あと2行じゃなくて3行以上の複数行が既出だったらどうするのかとか
既出の単語1が単語2の位置にあっても既出とみなすのか 同じカラムのときだけ既出扱いするのか
単語1同士の重複を処理するだけでいいなら、単純に: fr = open("sample.txt", "r") fw = open("output.txt","w") catch = [] for line in fr: if line[1] not in catch: catch.append(line[1]) fw.write(line)
レスありがとうございます。
>>839 さんの試してみます。
<tab>*STD_PAUSED<tab><tab><tab>"一時停止"
<tab>*STD_GAME<tab><tab><tab>"ゲーム"
<tab>*SYS_SHADERMODE0<tab><tab>"Auto"
<tab>*SYS_SHADERMODE1<tab><tab>"0.5"
<tab>*SYS_SHADERMODE2<tab><tab>"1.1"
<tab>*SYS_SHADERMODE3<tab><tab>"1.1"
<tab>*STD_PAUSED<tab><tab><tab>"Paused"
<tab>*STD_GAME<tab><tab><tab>"Game"
こういう感じの形式で、タブ、*から始まるタグ、不定数のタブ、"文字列"という行が延々と続いています。
上記の例だと*STD_PAUSED、*STD_GAMEのタグが重複しているので、
<tab>*STD_PAUSED<tab><tab><tab>"Paused"
<tab>*STD_GAME<tab><tab><tab>"Game"
の2行を削除したいのです。
行にあるタグが既出の場合その行を消すと言ったらいいのでしょうか。
import sys tags = [] for line in sys.stdin: tag = line.split('\t')[1] if not (tag in tags): tags.append(tag) print line, C:\tmp> type src.txt | python hoge.py > dest.txt
>>842 ありがとうございます。
ですがエラーが出てしまいます。
C:\Users\HOGE>type src.txt | python hoge.py > dest.txt
Traceback (most recent call last):
File "hoge.py", line 5, in <module>
tag = line.split('\t')[1]
IndexError: list index out of range
プロセスが、存在しないパイプに書き込もうとしました。
となります。
ここまで来たら自分でやれよ!ってレベルなんでしょうがほんとすいません・・・
\tがない行がある 最後の行とか大丈夫か? 何行もあるなら例外処理だな
なるほど\t(タブ)でsplitしようにもTabがねーよってエラーメッセージですか。 改行しか無い行が割とあってその最初でエラーが出てます。 他にもコメントだけの行などあるので、 行頭のタブと*付きのタグから始まらない行は例外処理したほうがよさそうですが その処理も書けませんのでお願いします・・・ 情報を後出しにしちゃってすいません。 txtファイルは5000行くらいで*付きのタグは3000種類くらいあると思います。 行によっては <tab>*tag<tab><tab><tab>"str" のstrが長く200文字くらいの場合もあります。
あらほんとだ。ごめん for line in sys.stdin: if not line.startswith('\t*'): continue tag = line.split('\t')[1] ... こんな感じでひとつ
tags = [] じゃなくて tags = set() とでもしたほうがいいと思うよ ほかは同じでいいけど 毎回わざわざリニアサーチする必要は無い
ごもっともです 痛いところをつかれたので書き直しますね import sys tags = set() for line in sys.stdin: if not line.startswith('\t*'): continue tag = line.split('\t')[1] if not (tag in tags): tags.add(tag) print line,
できました!!長々とありがとうございました! 例外の行はそのまま残したかったので以下のようにしました。 import sys tags = set() for line in sys.stdin: if not line.startswith('\t*'): print line, continue tag = line.split('\t')[1] if not (tag in tags): tags.add(tag) print line,
The winner takes it all.
すいませんまた質問させてください。
>>840 のようなタブ、*から始まるタグ、不定数のタブ、"文字列"の形式で書かれている(例外もある)ファイルが2つあって、
例えばfile_en.txtには
<tab>*STD_PAUSED<tab><tab><tab>"pause"
<tab>*STD_GAME<tab><tab><tab>"game"
のように、file_jp.txtには
<tab>*STD_PAUSED<tab><tab><tab>"一時停止"
<tab>*STD_GAME<tab><tab><tab>"ゲーム"
となっている場合に、タグが同じところから文字列を引っ張ってくるといった処理は
どうやったらできるでしょうか。
852 :
デフォルトの名無しさん :2010/08/07(土) 12:36:40
ちったぁ自分で考えろやボケ
853 :
デフォルトの名無しさん :2010/08/07(土) 12:48:40
>>851 まず二つのファイルを1つに合わせて、ライン別に処理。
重複を見つけたらその行を " で割って文字列の部分だけ取り出す
やりたい事がわからんので違ってたらスマソ
>>851 records_en = dict()
fields = '<tab>*STD_PAUSED<tab><tab><tab>"pause"'.split('\t')
tag, text = fields[1], fields[-1]
records_en[tag] = text
あとはがんがれ
いちいち質問してたら時間もったいないよ
855 :
851 :2010/08/07(土) 14:00:09
その通りです、楽しようとしすぎだ俺。 Pythonの初歩としてちょうどよさそうだから勉強がてらやってみます
>>827 2.6以降でファイルを加工するなら、codecs.openより、ioモジュールの
io.openを使ってみるのはどうかな。
文字列とバイト列の扱いがPython3と同じでわかりやすくなっているし、
ファイルオブジェクトと同じように扱えて全改行文字サポートもある。
こっちの方が便利なんじゃないかな。
質問する側がちゃんと質問できてればそうはならんと思う ちょっと煽るくらいで情報引き出さないと想定できる問題点が多すぎて回答できないとかどうなのよ? 質問者は 素人判断で問題点を想像してそれを根拠に質問するな 大本の判断材料からすでに間違ってることが多すぎる 素直に最終的にやりたい事と現状どうなってるかを明確書け
それが書ける奴なら質問しねーよバーカ
質問者は回答するのに必要な情報を小出しながらも的確に提示し エラーの原因を特定する能力もあったね 問題は単に丸投げしようとしてたこと
質問者は、とりあえず 挙げた内容でわかる範囲の答えが欲しいだけ。 それで望む答えが得られなけば、掘り下げて 質問を続ける。または打ち切る。 いたって普通の2chの使い方じゃねーの。
>>845 > \t(タブ)でsplitしようにもTabがねーよってエラーメッセージですか。
それは違う。
tag = line.split('\t')[1]
を
fields = line.split('\t')
tag = fields[1]
に変更すると、どの行でエラーが出るだろうか。
>>851 は、俺ならこんな感じで実装するけど、こういうのって正直どうよ?
def add_dict(dic, item, value, overwrite=False):
if overwrite or item not in dic:
dic[item] = value
tags = dict()
for line in sys.stdin:
if not line.startswith('\t*'):
print line,
continue
line_sp = line.split('\t')
if not (tag in tags):
add_dict(tags, fields[1], fields[-1])
>>834 ,840,851とかです。
今やってることをはっきり言うとThe Chronicles of Riddick Escape from Butcher Bayという
PCゲームの日本語化ファイルが公開されているのですが、
私が買ったThe Chronicles of Riddick Assault on Dark Athenaでそれを流用したいのです。
AoDAにはEfBBの内容も含まれているのでそのままでも一応日本語化は出来ますが完全ではありません。
なのでAoDAの字幕ファイルにうまいことEfBB日本語化の成果をマージ出来ないかとやっていたんです。
しかしいろいろいじっているとそういう作業をしなくても割と綺麗に表示されるようになってしまいました。
Pythonの勉強はまた今度だな・・・!
ちなみのこのゲーム
http://store.steampowered.com/app/9860/
リディックって映画で見たような。なつかしす つかほかのゲームでもPythonはよく使うから勉強続けなさいYO
Pythonの悩みはjava-jaがなんとかしてくれるよ。
866 :
デフォルトの名無しさん :2010/08/09(月) 01:51:26
>local variable 'recent_tweet' referenced before assignment ローカル変数「recent_tweet」に値が代入されるまえに参照されています. recent_tweetまわりを確認
>>866 ありがとうございます。ほぼいじり始めたばかりなので理解があやふやなのですが、
「recent_tweet」は def run(name, pswd, search_term): の中で初めて出現し、
36行目で出現と同時にs.textが代入されています。値が代入される前に参照されていると
言うことはないように思うのですが…
>>867 最初、webプログラミングのあるスレで聞いてたんですが
いくらなんでもレベルが低いかな、と思ったのでこちらで…
エラーメッセージもpythonに一般的なことかと思ったので。
GAEに本質的に関わることは向こうで聞くつもりですがダメでしょうか?
半年ROMってろ
870 :
デフォルトの名無しさん :2010/08/09(月) 03:25:48
くだらない質問スレなんだからpython関係ならとりあえずいいっしょ
だから
>>868 ぐらいでいいんでねーの?
>>865 そのコードだと、statusが空もしくはRTから始まるデータが1つもないときに
recent_tweetが初期化されない。
# for s in status: # if s.text.startswith("RT"): # recent_tweet = s.text # break # else: # print "The following tweet would be posted by hand, so skipped it." # print "Tweet: " + s.text.encode('utf8') # print # # print "Recent Tweet: "+recent_tweet.encode('utf8') status の中で s.text.startswith("RT") が 真 のものがひとつもなければ referenced before assignment になるだろう
かぶった(笑 しかもこんな時間に orz
>>871 >>872 あ、そうか…なるほど。ありがとうございます。
つまりfor文の前にrecent_tweetに適当なダミーの値でも入れておけばいいですか?
作法としてはどうすべきなんでしょうか。
python 的にはこんなんでどうか for s in status: if s.text.startswith("RT"): recent_tweet = s.text break else: print "The following tweet would be posted by hand, so skipped it." print "Tweet: " + s.text.encode('utf8') print else: recent_tweet = 'None' print "Recent Tweet: "+recent_tweet.encode('utf8')
ちょっと力を貸して欲しいんですけど linuxでbash scriptからpython scriptを起動しようとしてます。 すると、print()行でIOErrorが出てpython scriptは終了しちゃうんです。 IOError: [Errno 5] Input/output error terminalで実行すると問題ないので、出力先が無いためのエラーだと 思うんですが、print()行を消さなくちゃ解決できない問題でしょうか?
┌─┐ │●│ └─┤ _ ∩ ( ゚∀゚)彡 ┌─┬⊂彡 │●│ おっぱい!おっぱい! └─┘
878 :
デフォルトの名無しさん :2010/08/10(火) 02:53:46
print関数だよな? def print(*args, **keys): pass で関数を上書き
printは関数じゃなくね?3系列ならできるんだろうか import sys sys.stdout = open('bbbb, 'a') print "aaa bbbb ccccc" 的なものではどうだろうか
もしくは起動するときに >/dev/null しておけ。
881 :
876 :2010/08/10(火) 12:32:24
>>878 , 879
確かに上書きできませんでした。
879はログを作るってことですよね。
IOError現象は初めて気づいたのですが、
結局アウトプット先を明示する処理を挟まないと
エラーになるってことなんですかね。
そこらへん自動でやってくれる方法があるものだと
思い込んでました。
なぜかバックグラウンドでプログラムが落ちまくるので
変だなーと思ってました。
>>880 自分も/dev/nullでイケるかと思ってたんですが
なぜか、同じ結果になりました。
>>875 ありがとうございます!ダミーでもよさそうでしたけど
そっちの方が綺麗なのでそうします。
>>881 stdoutが上流で閉じられてるが、エラーにはしたくないということかな
とりあえず__builtins__.print()にモンキーパッチでいいんじゃないかな
builtins_print = print
def myprint(*a, **w):
try:
builtins_print(*a, **w)
except:
pass
__builtins.print = myprint
こんな感じでエラーを握りつぶすものに置き換える
ああ最後の行__が足りないかも ごめんそこは適当に直してw
こまりますん
886 :
デフォルトの名無しさん :2010/08/13(金) 23:10:46
pdbは対話的なデバッグなのでウェブアプリには使えませんよね ウェブアプリのデバッグはどうするのがいいでしょうか?
Firebug
>>886 java-jaに質問を投げろ。ここでweb開発の質問は厳禁だカス
LinuxのシステムファイルをWeb経由でいじれるようにroot権限でCGIを実行させたいのですが、 pythonにsuidperlみたいなものはありますか?また、他に良い方法があればそちらもご教示お願いします。 よろしくおねがいします。
Cで汎用の安全に配慮したwrapper書いてる
891 :
889 :2010/08/15(日) 03:29:29
自前でhttpdを書くことで解決しました。
import cgi f = cgi.FieldStorage() aaa = f.getvalue('val', 'no data')
ありがとうございました
ShiftJISをUTF8に変換する方法をおしえてください。
s.replace('ShiftJIS', 'UTF8')
文字コードです><
>>898 '死ね'.decode('cp932').encode('utf-8')
'死ね'.decode('cp932', 'replace').encode('utf-8', 'replace')
java-jaならやさしく教えてくれるのに><
本スレで氏ね
>>883 遅れましたが、ヒントをありがとうございます。
その手でいこうとおもいます。
from __future__ import print_function
builtins_print = __builtins__.print
def myprint(*a, **w):
try:
builtins_print(*a, **w)
except:
pass
__builtins__.print = myprint
こんな感じにしたら思い通りになりました。
正規表現でヒットした文字列だけ取り出すやりかた教えて
re.search re.findall re.match
すみません。質問させてください。 環境 OS:WindowsXP バージョン:Python2.6 開発環境:エディタ+コマンドライン やりたいと思っていること: WEBページでHTTPの応答としては正常で HTMLのページ内に"エラーが発生しました。" と表示されているページでエラーを検知したい。 描いたコード一部 //ヘッダの部分に下記追加 # -*- coding: utf-8 -*- req = urllib2.Request(url) rawdata = opener.open(req).read() chk = re.search(u"エラーが発生しました。",rawdata) if chk: print("失敗") sys.stdout.flush() downo = open( os.path.basename(savename) ,"wb") downo.write(rawdata) というようなコードを書きました。この方法ではページ上のエラーが発生しましたという文字を検知できませんでした。 どなたかアドバンスをお願いできませんでしょうか?ちなみに、書き込んだhtmlファイルはUTF8で書き込まれておりました。
utf8でかかれてたなら検索時に re.search(u"エラーが発生しました。",rawdata.decode('utf-8')) が必要じゃないかな ユニコードとutf8の違いがわかってないと思われる
re.search(u"エラーが発生しました。",rawdata.decode(req.header['Content-charset'])) 見たいに書ければいいんだけどな
アドバンスって釣りか?w
911 :
デフォルトの名無しさん :2010/08/19(木) 16:56:22
>>911 この場合はPythonでの扱いの話なんだからそっちに行ったら余計混乱しそうだ
u""とかdecodeによって作られるユニコード文字列は、utf8とは又違う文字コードだと考とけば大体大丈夫だろう
返答ありがとうございます。 UnicodeとUTF8の違いわかってないですね。 調べてみました。 u指定での文字指定はUnicode型(符号化がUCS-2/4)で、UTF8とはちゃうんだよ ってことですね。 てかそもそもの自分の勘違いはヘッダのcodingですね。 これソースを単にUTF-8で読み込みますってだけなのか。よく調べてみたら。 内部的に全部UTF-8になるものだと思ってました。 結果を得るまでに時間がかかりそうですが試してみます。 ありがとうございます。
914 :
デフォルトの名無しさん :2010/08/19(木) 17:15:31
すみません あるディレクトリにある xxx.png ファイルをすべて *.gif に変換したいのですが python ではどのように書けば出来ますか?
915 :
デフォルトの名無しさん :2010/08/19(木) 17:17:07
丸投げは宿題スレでも行ってろカス
PIL
917 :
907 :2010/08/19(木) 17:33:15
ほんとだ アドバンスになってたわww
夏
920 :
310 :2010/08/21(土) 03:06:48
凄い初歩的な質問で申し訳ないのですが Pythonで1行に複数の変数を定義しようと思って a=0 \n b=1\n こんな感じで書くとエラーになるのですが どうしたら1行内に収めることが出来ますでしょうか
a=0; b=1 pythonぽくないけど
>>921 おお、ほんとだ
そう言えばPythonでも;って使えるんでしたね
ありがとうございます!
a, b = 0, 1 こっちのほうがPythonぽい
多重代入も知らんのか
知ってましたよ
Explicit is better than implicit. Simple is better than complex. Sparse is better than dense.
訳: ドイツの女よりもスペインの女のほうがよかった
Young is better than old.
畳じゃねえんだぞw
e s s e esse
Young is better than old. 画像でググった俺に隙はなかった
When I was younger, so much younger than today!
Oh, java-ja nice!!
Java-ja is so neat. but they are some hot shit.
java-ja night開催をクリスマスに向け企画中
Windows VistaでPython 2.6です。 質問しようと思ったら 自己解決しました。
お礼くらい言えよ
わろた
941 :
デフォルトの名無しさん :2010/08/22(日) 20:53:00
>>939 大丈夫です
すでに直接言っておきました
Windows XP SP2 で Python2.6です。 lis = ["aaa", "bbb", "ccc"] の様に、文字列がいくつか格納されたリストがあります。 これを引数argとして受け取り "aaabbbccc" のように全てつなげた文字列として返す関数func(arg)を書きたいと思います。 lis.join()で行けるかと思ったら AttributeError: 'list' object has no attribute 'join'とエラーになりました。 lisの要素数は確定していませんので、len(lis)で取得せねばなりません。 len(lis)==0である可能性と、lisの各要素がまた空文字列である可能性もあります。 しかしlisの要素がもしあるならそれは全て文字列であることだけは確定しています。 こんな関数func(arg)はどのように書けば良いでしょうか? あるいはそれをしてくれる組み込み関数はありますか? よろしくお願い申し上げます。
943 :
デフォルトの名無しさん :2010/08/22(日) 22:49:56
reduce()
944 :
デフォルトの名無しさん :2010/08/22(日) 22:50:44
''.join(lis)
ありがとうございます。 lis = ["aaa", "bbb", "ccc"] print 'lis' print lis print '"".join(lis)' print "".join(lis) はうまく動作しました。 print 'lis' print lis print 'reduce(labmda x, y: x+y, lis)' print reduce(labmda x, y: x+y, lis) だと reduce(labmda x, y: x+y, lis) ^ SyntaxError: invalid syntax というエラーになります。 これはなぜでしょうか??
lambda
某サイトよりコピペしていました。 ありがとうございました。
すみません、ランブダってなんですか?
本当はもう気づいているのでしょう、ランブダが何であるかを。
深いな
ランブダは始まりであり全てである
952 :
Perl忍者仙人モード ◆M5ZWRnXOj6 :2010/08/23(月) 09:16:56
なにこのキモイスレ
pythonって日本語弱いんですか?
>>954 そんなことはない。
Windowsで使うならR*byよりいいと思う。
私だ
>>954 自分の経験から言うと日本語の文字列を扱う際に文字コードなんかを曖昧なまま処理した場合
Perl や Ruby は間違ってても「なんとなく」動くが Python はきっちりエラーになる
エラー出さずに勝手に文字化けするか例外出して中断するかの違いだな
特にパス関係については他の追従を許さないぜ
Javaのヌルポみたいなもんですね
漏れはちなみにそこは Python の弱点じゃなくて利点だと思っている
でも、WindowsのIDLEでは u"ほげ" ができない。 (Python3では直る) sys.argv もUnicodeじゃなくてcp932なので、渡せないファイル名があり、 対策するには自分でGetCommandLineWしてコマンドライン解析しないといけない。 (これもPython3では直る) WindowsのUnicode対応に関して言えば、Python3が最強だと思う。
>sys.argv もUnicodeじゃなくてcp932なので、渡せないファイル名があり、 kwsk
>>963 Python2 は int main(int argc, char *argv[]) で受け取った引数をそのバイト列のまま sys.argv
に入れてる。
Python3 は int _wmain(int argc, wchar *argv[]) で受け取った引数をそのUTF-16のまま
sys.argv に入れてる。
urllib,urllib2を試してるんですが なんで2つに分かれてるんですか? あとcookieはどうしたら使えますか?
os.path は UTF8 と Unicode がごちゃ混ぜ実装。 文字列の置き換えとか文字列処理用途には使えないや
969 :
デフォルトの名無しさん :2010/08/24(火) 10:02:50
これは糞スレ
Pythonスレの遅い初夏ですね
971 :
デフォルトの名無しさん :2010/08/24(火) 11:05:54
>>965 import cookielib
cookielib.CookieJar() を変数に保存しておいて必要に応じて
urllib2.build_opener(urllib2.HTTPCookieProcessor())
に渡す
>>967 ありがとうございます
2つの違いについては答えが見つかりましたが
そもそも2つに分かれている理由が判りません
>>971 ありがとうございます
やってみます
>>972 >そもそも2つに分かれている理由が判りません
後方互換性を維持するためかなあ。
>>> import re >>> r = re.compile(r'hoge(.*)', re.I) >>> for m in r.findall(u'hogefuga\nhogehage\nhogehoge\n'): ... print m ... fuga hage hoge 各行毎に出て来ますが 'fuga\nhogehage\nhogehoge\n' を出力として欲しいときはどうすれば良いでしょう?
>>974 import re
r = re.compile(r'hoge(.*)', re.I)
x = r.findall(u'hogefuga\nhogehage\nhogehoge\n')
print u'\\n'.join(x)
でもお前正規表現における.と改行の扱い勘違いしてないか?
r = re.compile(r'hoge(.*)', re.I | re.S)
>>975 それだと
fugahagehoge
になっちゃいますよね
>>976 出来ました
ありがとうございました
>>> import re >>> r = re.compile(r'hoge(.*)hoge', re.I | re.S) >>> for m in r.findall(u'hogefuga\nhogehage\nhogehoge\n'): ... print m ... fuga hogehage hoge これは 'fuga\nhogehage\nhoge' が検出されているということだと思いますが re.S をつけたままで 'fuga\n' と 'hage\n' と '' が出て来るようにするにはどうすれば良いでしょう?
>>978 それは最大一致になってる
(.*) → (.*?)
>>979 出来ました
ありがとうございます
でも
'fuga\n'
と
'hage\n'
と
''
じゃなくて
'fuga\n'
と
''
しか取れません
981 :
デフォルトの名無しさん :2010/08/24(火) 14:11:06
知らんがな
hoge(.*?)(?=hoge)
コマンドの返り値がabcだとして select = コマンド select.replace('ab','cc') これだと上手くいかないのは何故
そんなに氏ねって言われたいのか
>>985 >コマンドの返り値がabcだとして
kwsk
988 :
デフォルトの名無しさん :2010/08/25(水) 19:58:18
┌─┐ │●│ └─┤ _ ∩ ( ゚∀゚)彡 ┌─┬⊂彡 │●│ おっぱい!おっぱい! └─┘ おっぱい!おっぱい!
select = select.replace('ab','cc') じゃね?
あまりの過疎スレぶりに(ry
ume
ume
うめ
うめ
ほっとけばおちるのに
人格の問題でしょ
この板、dat落ち早すぎね? 最後まで拾えない事もしばしば もっと速い板もありゅ 981を越えて落ちる時間は、もしかして板によらず一定なのかも。 運営のどこかに希望を持ってけば変えられるかなぁ? dat落ちの条件って、確か ・一定レス数未満のスレで、一定時間書き込みが無い ・一定レス数以上(981?)のスレで、一定時間書き込みが無い ・板別に設定されたスレ保持数を超えた際、最終書き込み日時が古いもの の3つだったっけ? あ、でも最後のは定期的にチェックしてるだけで新スレが立った瞬間じゃないんだっけ 1ヶ月ルールがある板もある
うめ
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。