トップページ⇒tech
1001コメント333KB

Pythonのお勉強 Part16

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2006/12/14(木) 07:57:54
http://www.python.org/
http://www.python.jp/Zope/

http://www.python.jp/doc/release/
http://diveintopython.org/toc/
http://www.python.org/dev/peps/

http://wiki.python.org/moin/
http://python.rdy.jp/

http://www.amazon.co.jp/s/&url=search-alias%3Dstripbooks&field-keywords=Python
http://www.amazon.co.jp/s/&url=search-alias%3Denglish-books&field-keywords=Python

Pythonのお勉強 Part15
http://pc8.2ch.net/test/read.cgi/tech/1163339504/
0002デフォルトの名無しさん2006/12/14(木) 09:04:01
>>1 乙パイ
0003デフォルトの名無しさん2006/12/14(木) 11:26:26
【NGName推奨】Python初心者
0004デフォルトの名無しさん2006/12/14(木) 16:48:29
おっ、Pythonスレですぅ。
0005デフォルトの名無しさん2006/12/14(木) 23:54:01
>5
前スレの巫女Pyナースについて一言
0006デフォルトの名無しさん2006/12/14(木) 23:54:26
>>1
パイ乙
0007デフォルトの名無しさん2006/12/15(金) 00:13:44
まだまだいくよぉ〜〜〜!!

巫女みこナース! 巫女みこナース!
リスト内包 巫女みこナース!!

巫女みこナース! 巫女みこナース!
lambda 一行 巫女みこナース!!

巫女みこナース! 巫女みこナース!
Py本粘着 巫女みこナース!!

巫女みこナース! 巫女みこナース!
初心者(復活) 巫女みこナース!!

巫女みこナース! 巫女みこナース!
print u"文字化け"巫女みこナース!!

巫女みこナース! 巫女みこナース!
メタクラ おっぱい 巫女みこナース!!

巫女みこナース! 巫女みこナース!
巫女みこナース! 巫女みこナース!
巫女みこナース! 巫女みこナース!

巫女みこナース! 巫女みこナース!

最後にもいっちょー、ハイ!
巫女みこナース!
0008デフォルトの名無しさん2006/12/15(金) 00:14:27
ぐぐる八分とは姑息だなw
0009デフォルトの名無しさん2006/12/15(金) 00:32:59
>>前スレ999
> mod_pythonが使えるレン鯖なら、DjangoのBlogとかがつかえるんじゃね?
実際にmod_pythonなレン鯖ってある?
0010デフォルトの名無しさん2006/12/15(金) 00:41:31
三項。

ttp://www.wappy.ne.jp/service/function.html

Googleで検索したらいろいろ出てきたよ。
0011デフォルトの名無しさん2006/12/15(金) 00:46:56
>>9
http://moover.jp/archives/7/
http://www.wappy.ne.jp/service/index.html
http://www.venturenow.jp/news/2006/02/10/2120_011042.html
http://internet.impress.co.jp/rs/detail.php?id=208885430002&server_type=share
いくらでも見つかるだろ
0012デフォルトの名無しさん2006/12/15(金) 00:54:04
なんか自鯖でやった方がいいような。挙げられたレン鯖しょぼすぎ。
0013デフォルトの名無しさん2006/12/15(金) 00:56:14
レン鯖である時点でしょぼすぎなんだから仕方ないじゃん。
自鯖立てたほうがあらゆる意味で良いのは当然。
0014デフォルトの名無しさん2006/12/15(金) 08:22:14
前スレの998です

>> 999さん
pyblosxomとdjangoを調べてみます

自鯖も考えてみます
ありがとうございました
0015デフォルトの名無しさん2006/12/15(金) 09:49:17
>>> class hoge:
...   class moge:
...    class hage:
...      class fuge:
...        class fuga:
...          spam = 42
...
>>> hoge.moge.hage.fuge.fuga.spam
42
>>> s = 'moge.hage.fuge.fuga.spam'
>>> reduce(getattr, s.split('.'), hoge)
42

0016デフォルトの名無しさん2006/12/15(金) 10:20:41
dive into pythonの翻訳って、誰もしてないの?
0017デフォルトの名無しさん2006/12/15(金) 10:23:27
たった今>>16が翻訳することに決まりました。
0018デフォルトの名無しさん2006/12/15(金) 12:39:12
他力本願のクレクレヒキコモリばっかりだなこのスレは。
0019デフォルトの名無しさん2006/12/15(金) 12:40:38
ttp://wataru.aoisakura.jp/tdiary/?date=20061214#p01

なにこのラインナップ(w
作者と同じで読者もアニオタか(w
0020デフォルトの名無しさん2006/12/15(金) 14:03:54
となりの801ちゃんは非常に読みたい
0021デフォルトの名無しさん2006/12/15(金) 15:15:19
>>15
>>>class oOo:
...  def __init__(self,n):
...    self.oOo = 42 if not n else oOo(n-1)
...
>>>s = oOo(8)
>>>reduce(getattr,['oOo']*9,s)
42
0022デフォルトの名無しさん2006/12/15(金) 16:50:12
ナニこれ?
ttp://www.flatz.jp/articles/2006/12/14/python-%E7%A7%81%E3%81%AEpython%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6%E3%81%AEq-a
0023デフォルトの名無しさん2006/12/15(金) 16:54:39
>>22
どう見てもセックル(左下
0024デフォルトの名無しさん2006/12/15(金) 17:01:12
初めてのpythonを読んだ時に、
CGIなどの知識を必要とする最後の章は読み飛ばしてしまったのですが、
Dive Into Pythonも読むのに英語の問題以外で前提とする知識はありますか?
0025デフォルトの名無しさん2006/12/15(金) 17:19:57
一般常識
0026デフォルトの名無しさん2006/12/15(金) 17:44:02
氏ね
0027デフォルトの名無しさん2006/12/15(金) 17:52:18
教えて!goo 「氏ね」と書かれました。2ちゃんねるで。
ttp://oshiete1.goo.ne.jp/kotaeru.php3?qid=1884125
0028デフォルトの名無しさん2006/12/15(金) 17:58:25
>>24
正規表現、HTML、XML、HTTP、SOAPの章があるけど、同様に読み飛ばせば
よいと思う。
あと、読み始めてたら判ると思うが、機能を説明するためにC、Java、Perl、
VBScriptと比較してたりするので、いずれかの言語を知っていると読みやすいと
思うが、初めてのPythonの前半を読んでる人なら問題なく読めると思うよ。

Dive Into Pythonをざっと読んで、Programming Python 3rd Editionか
Python Referenceの必要な個所をじっくり読むのがよいと思う。
0029282006/12/15(金) 18:00:01
あ〜、なんか「思う」がやたら多い文書だなw。
自分もいまDive Into PythonとProgramming Python 3rd Editionを
読んでるところなんで…。
0030デフォルトの名無しさん2006/12/15(金) 18:21:25
と思う。まで読んだ。
0031デフォルトの名無しさん2006/12/15(金) 20:21:34
と思う、まで読んだ、と思う。
0032デフォルトの名無しさん2006/12/15(金) 21:40:14
Python使う奴なんて空気読めない奴ばっかりだよ、な!
0033162006/12/15(金) 21:45:14
と思う、まで読んだ、と思う。まで読んだ。

>>17
まじかよw
既に3から5の頭まで読んだんだが。
英語は苦にならないけど、ちょっと内容検索するのに単語出てこなくて手間取った程度の問題なんだよ。

0034デフォルトの名無しさん2006/12/15(金) 21:52:27
問5. 次のような動作をするプログラム tateyomi.py を作りなさい。
ただし read.cgi は利用しないこと。(ヒント:/tech/1166050674.dat)

> tateyomi.py http://pc8.2ch.net/test/read.cgi/tech/1166050674/28
正
よ
あ
V
思

D
P
0035デフォルトの名無しさん2006/12/15(金) 21:54:16
先生!ヒントが間違っていますw

誤:/tech/1166050674.dat
正:/tech/dat/1166050674.dat
0036デフォルトの名無しさん2006/12/15(金) 22:17:24
>>22
>オブジェクト指向プログラムである為、コードの再利用がしやすい

Pythonの前に日本語の勉強からした方がいいかと。
がんばってくだちい。
0037デフォルトの名無しさん2006/12/16(土) 00:02:53
>>34
先生! いまさらながらつくってみますた

# tateyomi.py
import re
import sys
import urllib

url_parts = sys.argv[1].split('/')
host, test, cgi, category, dat_no, res_no = url_parts[2:8]
dat_url = 'http://%s/%s/dat/%s.dat' ;% (host, category, dat_no)

lines = urllib.urlopen(dat_url).readlines()
body = lines[int(res_no) - 1].split(' <> ')[1].decode('sjis')
body = re.sub(r'<.*?>.*?</.*?>', '', body)
for line in body.split('<br> '):
    print line[0]

Python使い出してから日が浅いので、誰か添削してくれるとウレシス
0038デフォルトの名無しさん2006/12/16(土) 02:42:10
# coding: euc-jp
(ここにはテストを書いたけど省略)
import re, sys, urllib

url_pattern = re.compile('http://(?P<host>[^/]*)/test/read.cgi/(?P<category>[^/]*)/(?P<dat_no>[^/]*)/(?P<res_no>.*)')
dat_url_pattern = 'http://%(host)s/%(category)s/dat/%(dat_no)s.dat'

def do_tateyomi(url, index=0):
  captured = url_pattern.match(url).groupdict()
  dat_url = dat_url_pattern %(captured)
  line = urllib.urlopen(dat_url).readlines()[int(captured['res_no'])-1]
  body = re.sub(r'<.*?>.*?</.*?>', '', line.split(' <> ')[1].decode('shift_jis'))
  return '¥n'.join([line[index] for line in body.split('<br> ')])
  
def _test():
  import doctest, tateyomi
  doctest.testmod()

if __name__=="__main__":
  if len(sys.argv)<2:
    _test()
    sys.exit()
  print do_tateyomi(sys.argv[1])
0039デフォルトの名無しさん2006/12/16(土) 02:43:50
ちなみにテストはこれ。
# coding: euc-jp
"""
>>> print do_tateyomi('http://pc8.2ch.net/test/read.cgi/tech/1166050674/28').encode('euc-jp')
<BLANKLINE>
正
よ
あ
V
思
<BLANKLINE>
D
P
>>> test_url = 'http://pc8.2ch.net/test/read.cgi/tech/1166050674/28'
>>> expected = {'category': 'tech', 'host': 'pc8.2ch.net', 'dat_no': '1166050674', 'res_no': '28'}
>>> captured = url_pattern.match(test_url).groupdict()
>>> captured == expected
True
>>> dat_url_pattern %(captured)
'http://pc8.2ch.net/tech/dat/1166050674.dat'
"""
0040デフォルトの名無しさん2006/12/16(土) 04:19:07
↑なんか2chを愛しすぎててきもい
0041デフォルトの名無しさん2006/12/16(土) 04:26:36
↑ありがとう。
0042デフォルトの名無しさん2006/12/16(土) 08:37:49
>>28
ご丁寧にありがとう
0043372006/12/16(土) 08:42:42
>>38
thx! 勝手に参考にさせてもらいます
モジュールとして使えるようにしてあるとことか、doctestしてるのもためになったけど、
特に(?P<name>...)に'%(name)s' % {'name': 'key' }、groupdictみたいな機能が
あるって知らなかったので、これから勉強してみます
0044デフォルトの名無しさん2006/12/17(日) 01:23:46
lenって変数が定義されてるモジュールで、
len( "hogehoge" )って関数を呼びたい場合、どうすればいいですか?
0045デフォルトの名無しさん2006/12/17(日) 01:37:19
__builtins__.len("hogehoge")

こういう使い方をしないように気をつけるのがPythonic。
0046デフォルトの名無しさん2006/12/17(日) 02:25:44
上書き定義する前に length = len みたいに別名を付けておくとか。
0047デフォルトの名無しさん2006/12/17(日) 02:35:13
__builtins__由来のものは(簡単には)再定義できないようにしたほうが良いのだろうな。
Python 3000ではそうなるのかな。
0048デフォルトの名無しさん2006/12/17(日) 02:36:44
ということは、こんなふうにできるわけか

>>> len("hogehoge")
8
>>> len = 88
>>> len("hogehoge")
Traceback (most recent call last):
File "<stdin>", line 1, in ?
TypeError: 'int' object is not callable
>>> length = __builtins__.len
>>> length("hogehoge")
8

できた。
0049442006/12/17(日) 04:03:29
ありがとうございます
参考にします
0050デフォルトの名無しさん2006/12/17(日) 09:46:50
言語の仕様を変えて副作用を増やすより
当たり前のことを当たり前に気をつけることを開発者に求める
これがPythonic
0051デフォルトの名無しさん2006/12/17(日) 11:26:29
python で書くときに問題があることが分かっていて
len という変数を使うことに拘る意図がわからん
0052デフォルトの名無しさん2006/12/17(日) 12:42:20
なんかホント、みんな無理してPython使ってるよねw
使命感にでも駆られているかのように。あるいは催眠術のたぐいか。
0053デフォルトの名無しさん2006/12/17(日) 12:47:55
>>> from __future__ import braces
File "<stdin>", line 1
SyntaxError: not a chance

ワロス(www
0054デフォルトの名無しさん2006/12/17(日) 13:04:30
>>52
YouTubeとかGoogleとかMicrosoftとか,無理してPython使いすぎだよね
Googleなんて作者タソ雇うなんて無理しすぎ
0055デフォルトの名無しさん2006/12/17(日) 13:51:50
いい物をいいと思って使ってるだけ。無理してPythonの弱点を見つけようと
してるのは藻前だろ(wwww
0056デフォルトの名無しさん2006/12/17(日) 14:00:51
>>54
そこで「俺はこう使ってる。この用途においてPythonはこう便利」っていう体験を語れず、
状況に応じて何だって使いこなす最先端の人間達の例を曖昧に掬い取るしかできない言語が
Pythonなんだねえ。

誰々も使ってる、何処何処も使ってる、なんてレベルで擁護が終わるのって泣けるよね。
PやRとそこが段違いだよね。
0057デフォルトの名無しさん2006/12/17(日) 14:02:17
?
0058デフォルトの名無しさん2006/12/17(日) 14:03:51
>>56
>PやRとそこが段違いだよね。

Python使いは成熟しているんだと思う。
PやRを使っている厨房とは違って、人間的に大人なんだよ。
0059デフォルトの名無しさん2006/12/17(日) 14:04:55
なんだか知らんが仲直りしてこい
http://pc8.2ch.net/test/read.cgi/tech/1099804004/
0060デフォルトの名無しさん2006/12/17(日) 14:10:01
>>58
でもすぐ人格批判に移行するよね
0061デフォルトの名無しさん2006/12/17(日) 14:12:10
>>56
>誰々も使ってる、何処何処も使ってる、なんてレベルで擁護が終わるのって泣けるよね。

プログラミング言語に「養護」という言葉が出てくる理由がわからないなぁ.

俺は便利に使っている.
世界的に実績がある.
そして,オマエには便利さが分からない.

これがすべてだろ.
0062デフォルトの名無しさん2006/12/17(日) 14:13:40
>>60
あ、ごめん。
君自身が「PやRを使っている厨房」だったんだね(www
名指しで君の人格をおとしめてしまってごめんなさい(wwwwwwwwwwwwwwwwwwww
0063デフォルトの名無しさん2006/12/17(日) 14:14:31
>>56
とりあえずメタクラスが便利だから使ってみるといいと思うよ
0064デフォルトの名無しさん2006/12/17(日) 14:18:15
>誰々も使ってる、何処何処も使ってる、なんてレベルで擁護が終わるのって泣けるよね。
だから、自分がいいと思ってるから使ってるって言ってるだろ(wwww
何がいいのか語るものは持っているが、どうせ何言っても捻じ曲げられるから
しない。
0065デフォルトの名無しさん2006/12/17(日) 14:24:02
このスレにPython厨のスキルや人格への様々な疑惑を投下すると、
返ってくる反応がことごとくその裏付けになるのが面白い。

言語の便利さを疑えば「どう便利なのかが返ってこない」ことで疑惑はより強まり、
人格を疑えば「草がいっぱい生えた」レスが返ってきて疑惑が確定する。
速攻で自分の首を絞めるのがPython流?
0066デフォルトの名無しさん2006/12/17(日) 14:26:48
http://www.youtube.com/watch?v=ODshB09FQ8w

spam!spam!spam!spam!spam!spam!spam!spam!
0067デフォルトの名無しさん2006/12/17(日) 14:43:25
44とか47みたいな人は、他の言語を使って経験を積んでからPythonに戻ってくると
新たな発見があって安らぎを感じることができるかも知れない

まあ95%無理だろうけど。センスなさそうだし。
0068デフォルトの名無しさん2006/12/17(日) 14:53:33
>>65
Rubyは知らんけど、自分が使っててPerlよりPythonが勝ってると思うひとつは配列構造の柔軟さだ。

UserData = {('User1','Pass1'): 'User 1', ('User2','Pass2'): 'User 2'}
print UserData[('User1','Pass1')]

これと同様のスクリプトをPerlで書くとどうなる?
0069デフォルトの名無しさん2006/12/17(日) 15:13:04
>>68
自分もPython を使い始めてけっこう経ったので、Perl のことは
かなり忘れてしまったけれど、

そういう部分でPerl へ勝負を挑んでも、リファレンス使えば
Perl でもあっさりおなじように出来たんじゃない?

(たぶん、Python が常にリファレンスを使用してるというだけでしょ)

自分としては、それよりも、Perl がOOP への対応に関して作戦ミスを
したなぁと思う。

OOP を導入する際、既存の文法へ最小限の命令しか加えないと
いう方針を採っため、めちゃくちゃOOP が難しいものになってしまった。

あのとき、大胆に新たな命令セットを導入すれば、
シンプルで明快な形でOOP できるようにすることも可能だったろうに。

そうすれば、僕がPython を使おうと思うこともなかったかもなぁ。
0070デフォルトの名無しさん2006/12/17(日) 15:23:24
プログラム言語なんていくつも使えなきゃだめだよ!
好き嫌いというか道具なんだからいくつ使えたって困らないし
0071デフォルトの名無しさん2006/12/17(日) 15:26:42
>>69
> そういう部分でPerl へ勝負を挑んでも、リファレンス使えば
> Perl でもあっさりおなじように出来たんじゃない?
>
> (たぶん、Python が常にリファレンスを使用してるというだけでしょ)

そこが微妙に違うところで、
確かに>>68の辞書UserDataを作るだけなら、Perlのリファレンスを知ってれば簡単に出来る。
しかし、その辞書(Perlで言うと連想配列)のキーを使う場合には
Perlだと連想配列を作った時と同じリファレンスでないとキーとして使えないんですよ。
だから、Perlで単純に
$UserData[['User1','Pass1']]
としてもPythonみたいに値が得られないんです。
0072デフォルトの名無しさん2006/12/17(日) 15:37:26
漏れは『初めてのPerl』でPerl最高!Larry最高!みたいにかかなり感化されたんだけど
『続・初めてのPerl』読んでリファレンス周りで挫折した。あれは悲しかった・・・

Pythonだと1 < a < 100みたいに書けたりするところも好き
0073デフォルトの名無しさん2006/12/17(日) 15:48:27
Perlはまわりに使える人たくさんいるけどPythonはマイナーってのがいまいち
スクリプトは書き捨てだから自分だけわかればいいけど
0074デフォルトの名無しさん2006/12/17(日) 15:54:49
>>71

Perl で本当に同じことをしようと思ったら
    $UserData{ 'User1' . "\0" . 'Pass1' }
みたいに、各キーの「値」を合成するようなことをしなくちゃいけないってことだよね。これは、アッサリとは言いにくい。(連結文字は、各キーに含まれていないことを確認するとか、機械的にやできん)

リファレンスだと、アドレスを区別するだけだから、同じキー内容だけど、別物の場合、違うモノ扱いになっちゃう。
0075692006/12/17(日) 15:58:24
>>71
うーん、
ハッシュ(連想配列)のリファレンスの話? 
配列のリファレンスではダメなの?

リファレンスっていっても、
ハッシュ(連想配列)でなくてもリファレンスできるわけだから。

配列のリファレンスの場合のデリファレンスは、

なんたらかんたら  [x][y][z]

の形式(x, y, z はそれぞれ添え字)で、3次配列でも100次配列でも
望みの場所のものをどんぴしゃで引き出せたはずだけど。

すでにPerl をインストールすらしてない身で、
あれこれいうのも辛いところながらw
0076デフォルトの名無しさん2006/12/17(日) 16:20:13
Python は最終的な「見やすさ」のために、
あえて不便の道を歩んでいるように見える。

Ruby は Perl の機能を全て「分解」して、
オブジェクト指向の思想の元に「再構築」してる
(構築前後で 1:1 に対応してる)。
だから、Perl で出来たことは Ruby で出来る。
これは正しいやり方の一つだ。
ただ、Perl のゴチャゴチャさを継承してしまっているのも
否めないところだ。

Python は、Perl のあり方をそもそも一旦「忘れた」上で、
1から考え直して「あらたに構築」しているっていう印象がある。
だから、Perl ・Ruby で出来ることが、Python ではなかったり
することも多々あるかもしれない。そのかわり、Perl , Ruby では
考えられなかったような点が見直されていて、新鮮だ。
0077デフォルトの名無しさん2006/12/17(日) 16:20:54
例えば、代入が式ではなく文っていうところ。代入式って、
書く時便利だけど、読むとなった時、実は見辛かったりする。
それを廃したのは、なかなかの判断だと思う。
そのかわり、既存の代入式が必要とされたシーンでは、
それらを使わなくてもよいように、ライブラリとかの方で工夫して、
見やすくなるように配慮する。これは正解のような気がする。

だから、Python のどこが便利だと言われて、答えられないのは、
当然のような気がする。だって、書く時の便利さを捨ててるんだから。
かわりに書き終わった後のソースのスッキリ感や、
書いた本人でなくとも読み易いという長所はデメリットを
補って余りあると思うよ。多分。
(トリッキーなコードを書かれると、引き継ぐ人がたいへんだからね)

# これ、あくまで個人的な見解なんで、そんなことないぞ、
# 便利だという反論も他の Python 好きに言ってもらいたいなぁ。
0078デフォルトの名無しさん2006/12/17(日) 16:24:07
>>72
>Pythonだと1 < a < 100みたいに書けたりするところも好き
をを、知らなかった。サンクス。
0079デフォルトの名無しさん2006/12/17(日) 16:28:02
>>77
ああ、そういや当たり前すぎて忘れてたが、
if X=1:
 ・・・
がエラーになることがうれしいな。
0080742006/12/17(日) 16:30:26
>>75

>>74 だけど、誤読していていた。キーにリファレンスを入れるというのと勘違いした
(>>71 もそうじゃないかな)。
言いたいのは、よくある二次元配列のリファレンスによるエミュレーションの、
n 次元ハッシュ版ね。理解した。
# わしの回避策は、awk の二次元配列エミュレーションの真似

ただ、そうすると、一次元部分のハッシュの初期化を最初にしなくちゃいけないというのはあるよね。
その部分の手間が Python では省けるという認識でオケー? >> 各位
0081デフォルトの名無しさん2006/12/17(日) 16:38:27
日曜日はレベルが低いなぁ
0082692006/12/17(日) 16:42:47
自分もなにか >>71 を誤読していたかな。

要するに、Perl においてはPython と違って、
ハッシュ(連想配列)のキーとして、リファレンスは使えない(使いにくい)だろ、
という話ね。

それに対して、Perlでは
配列でもハッシュ(連想配列)でも、リファレンス作れるし、それの組み合わせも
できる。
3次でも100次でも、n次配列の、どの階層のどの要素でも、
狙い通り取ってこれるよと返事したのだが、

少し話がずれていたね。

自分はもうPerler ではないけれど、たぶんPerler なら、
最初の要素をそういう風にしないで、うまくやると思う。

言語の特性はそれぞれ違うし、それにPerl のリファレンスの仕組みは
Python とは特性が違うけど、十分に柔軟なものと思うよ。

自分としては、Perl の問題点は OOP と思うなぁ。
あれさえ解決していてくれたら、Python は使ってなかった…
0083デフォルトの名無しさん2006/12/17(日) 17:08:26
>>77
>Python のどこが便利だと言われて、答えられないのは、
>当然のような気がする。だって、書く時の便利さを捨ててるんだから。

Pythonは十分書く時も便利。ジェネレータのおかげで内部イテレータとしても
外部イテレータとしても扱える柔軟さが手に入る。(forループに任せず、next()
で手動でデータを取ってきたいことがある)itertoolsとの組み合わせも便利。
翻ってRubyは内部イテレータしかない。Generatorというライブラリはあるが、
スレッドのトランポリンを使っていて、めちゃくちゃ重い。実用にならない。

Rubyの書きやすさとしてよくメソッドチェーンがあげられるが、Pythonにも
内包表記がありデメリットにはならない。Rubyのブロックは複数行かけるが、
そういうメソッドチェーンはあまり見ないし、そういう場合Pythonだと高階関数
をそばに書いて内包表記に組み込むなどすれば、不便を感じない。

Pythonのスライスはa[1:3]のような表記だが、Rubyにはa[1..3]とa[1...3]が
あり、最後の要素を含む・含まないの違いがある。いつも混乱するので、Python
の方がその点で書きやすい。
0084デフォルトの名無しさん2006/12/17(日) 17:10:24
>>77
そんなことないぞ。便利だ。w
つか、おまえ糞なエディタ使ってるとかじゃね?
0085712006/12/17(日) 17:11:04
OOPやってみようって頃は、もうPerlは見限ってた。

>>80
私の言いたかった問題点は、>>74でどんぴしゃですよ。


話は変わるけど、
>>82
> 3次でも100次でも、n次配列の、どの階層のどの要素でも、
> 狙い通り取ってこれるよと返事したのだが、

ただし、もとの配列が全てn次でないと困りますね。
極端な例かもしれないけど、

Python
HASH = {('X','Y','Z'):'xyz', ('X','Y'):'xy'}
print HASH[('X','Y','Z')] #xyz

Perl
$HASH['X']['Y']['Z'] ='xyz';
$HASH['X']['Y'] = 'xy';

print $HASH['X']['Y']['Z']; #データ無し
0086772006/12/17(日) 17:22:15
>>84

あー、いやいや書く手間自体はいいんだw。
俺個人としては、別にそれ嫌がってるわけじゃないから。
(だから、最近、Python 好きになったわけだし)
短く書けるか、長く書く必要があるかというのを
「不便」とか「書く時不便」とかいう表現をしちゃったのが
まずかったな。

漏れはとしては >>83 のような建設的なアピールが
出た時点で、もう思い残すことはない。
0087デフォルトの名無しさん2006/12/17(日) 17:23:11
Python/Tkinterも何気に便利だよね。簡単なGUIツールならこれで十分かも。
Pythonはネイティブスレッドに対応してるからIOみたく重い処理があっても
リスポンス良く組むことが可能だし。
0088デフォルトの名無しさん2006/12/17(日) 17:27:59
安定していて比較的高速なのも嬉しいかも。いくらLLでも、せっかく組んだのに
バグで落ちたりのろのろ動くと悲しい。
0089デフォルトの名無しさん2006/12/17(日) 17:32:58
pyblosxomさいこーです!!
教えてくれたひとありがとーぉ
0090デフォルトの名無しさん2006/12/17(日) 18:16:01
ライブラリ入れなくても最初から色々揃ってるのも嬉しい
あと文字コード関係で悩まなくて済む
0091デフォルトの名無しさん2006/12/17(日) 18:23:12
>>90
それは言えるな。
俺は言語的にはLisp系が好き、Pythonは許容範囲、Perlは論外って感じなんだけど、
ライブラリはPythonが充実してるから、実際の仕事ではPythonが一番活躍してる。
0092デフォルトの名無しさん2006/12/17(日) 19:43:21
正規表現で()グループ化して記憶したものを
使う場合はどうしたらよいのか教えて頂けないでしょうか。

例えばperlで置換する場合ですと

s/(\d)\s(\d)/ $1$2/

といったように $数字 でよいと思うのですが、
pythonではgroupというのを使えばよいらしいことは
分かったのですがどうしたらよいのか分からずにいます。

re.sub((\d)\s(\d),  ??????,     )

誠に恐縮ですがよろしくお願い致します。
0093デフォルトの名無しさん2006/12/17(日) 19:54:17
>>> import re
>>> m=re.search("(\\d)\\s(\\d)"," 2 3 ")
>>> print m.group(0)
2 3
>>> print m.group(1)
2
>>> print m.group(2)
3

置換(sub) では、どうするんかは、知らん
(もしかしたら、できぬ?)
0094デフォルトの名無しさん2006/12/17(日) 19:59:30
置換は1番目の括弧の中身は\1、2番目の括弧中身は\2という感じで
>>> re.sub(r"(\d)\s(\d)", r"\1\2", "5 6")
56
とすればいいんだけど、こんなとこで聞くよりマニュアル読んだほうが分かり易いと思う。
0095922006/12/17(日) 20:09:29
うまくいきました。
本当にどうもありがとうございました。

どうやら自分のにはr"\1\2"の
rがなかったようでそれを入れたところうまくいきました。

ちなみにこの r は何を意味するものなのでしょうか?
私の探し方が悪いのだと思いますがマニュアルでは
みたことがなかったものでして
0096922006/12/17(日) 20:15:47
ちゃんと記述がありました。失礼致しました。

http://iblinux.rios.co.jp/PyJdoc/lib-j/module-re.html

つまり、"r"を前につけた文字列リテラルにおいてはバックスラッシュは特別な扱いを受けることはありません。従って、r"\n"は"\"と"n"を含む2文字の文字列ですが、"\n"はニューラインを含む1文字の文字列です。

0097デフォルトの名無しさん2006/12/17(日) 20:18:08
↓ここでRP言語厨がひとこと
0098デフォルトの名無しさん2006/12/17(日) 20:20:39
RPG最高。なんでこんな便利な言語誰も使わないの?
0099デフォルトの名無しさん2006/12/17(日) 22:29:59
>>98
postscriptで十分だから
0100デフォルトの名無しさん2006/12/18(月) 00:05:21
皆の者、曲者じゃ!1.5.1じゃ!!>96
0101デフォルトの名無しさん2006/12/18(月) 03:07:49
昔の資料ってこと?気が付けばhas_keyとかも無くなってく位だし、時の流れって…。
■ このスレッドは過去ログ倉庫に格納されています