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

Pythonのお勉強 Part14

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2006/10/20(金) 00:34:56
日本 Python ユーザ会
http://www.python.jp/Zope/
Python オフィシャルサイト
http://www.python.org/
Python 2.5
http://www.python.org/download/releases/2.5/
IronPython
http://www.codeplex.com/Wiki/View.aspx?ProjectName=IronPython
まとめ wiki
http://www7a.biglobe.ne.jp/~yasozumi/python/wiki/
Pythonの入門書「みんなの Python」
http://www.amazon.co.jp/gp/product/479733665X/

Pythonのお勉強 Part13
http://pc8.2ch.net/test/read.cgi/tech/1157984472/
0446デフォルトの名無しさん2006/10/29(日) 01:56:17
(a,)としないとタプルにならないんだよね
意外とはまりポイントになりやすい

そのかわり、次のどっちも同じ戻り値になるわけだが

return a
return (a)

0447デフォルトの名無しさん2006/10/29(日) 02:00:44
>>445
(a) == aにならないのはおかしいって言いたいのか?

要素1個のタプルを作りたかったら、
(a,)って書かないとダメなのが気持ち悪い、とかじゃなくて?
04484472006/10/29(日) 02:01:33
かぶった。鬱氏。
0449デフォルトの名無しさん2006/10/29(日) 02:03:25
タプルの本質は ',' なんだよね
'(' ')' はダミーだと思え
0450デフォルトの名無しさん2006/10/29(日) 02:27:05
マニュアルには
> 一つの要素を持つタプルは、値の後ろにコンマを続ける
> (単一の値を丸括弧で囲むだけでは不十分です) ことで構築できます。
> 美しくはないけれども、効果的です。
とあるね。

The Zen of Python の
> Special cases aren't special enough to break the rules.
> Although practicality beats purity.
あたりだろうか。
0451デフォルトの名無しさん2006/10/29(日) 04:38:22
バックスラッシュを使わずに行を継続するのに便利かなと思ったり・・
return ( a
+ b
+ c )
(a)がタプルにならないおかげでこういう行継続が可能に・・・
(使い方間違ってるのかな・・・
0452デフォルトの名無しさん2006/10/29(日) 07:52:23
>>449
その自慢の「本質」とやらで空タプルを作ってくれ。
0453デフォルトの名無しさん2006/10/29(日) 08:09:21
「() と書けば空タプルが作れる」って例外が設けられてるだけじゃね?
0454デフォルトの名無しさん2006/10/29(日) 08:15:28
例外は(a, )のほうだろ
()、[]、{}で空のが作れるのは統一されてる
0455デフォルトの名無しさん2006/10/29(日) 08:19:03
(a,)が気持ち悪いひとは「','がタプルを作るんだよ」と思えば気にならないよ
程度の意味しかないな。
0456デフォルトの名無しさん2006/10/29(日) 09:45:23
>>454
別に括弧で括らなくても、カンマを付けるだけでタプルになるんだよね。

>>> t = 1,
>>> t
(1,)

そういう意味で >>449 は「',' がタプルの本質」って書いたんじゃないだろうか。
んで、本来は括弧が不要である以上「()で空タプルができる」ってのが例外かな、と思ったんだけど。

まあ、あんまりグダグダと議論しても、Guidoにでも聞かない限り答えはでないか。
0457デフォルトの名無しさん2006/10/29(日) 11:32:19
>>456
答えは言語仕様で厳格に規定されていると思うけど
0458デフォルトの名無しさん2006/10/29(日) 11:38:19
タプルにカッコが必須でないおかげで、以下のように書けるんだよな

def foo():
  return 1, 2, 3

a, b, c = foo()

気が利いてるよな
0459デフォルトの名無しさん2006/10/29(日) 11:56:02
そもそも式をまとめるのと関数の引数の範囲を表すのとタプルを作るのに同じ小括弧を使っているのがまずいよ
だから、タプルには 〔きっこう括弧〕 でも使う事にすれば良かったんだ
0460デフォルトの名無しさん2006/10/29(日) 11:58:33
特に関係ないが きっこうかっこ って微妙にすわりが悪いな
0461デフォルトの名無しさん2006/10/29(日) 12:07:05
「」 『』 【】 《》 とかいろいろ使えそうだな
0462デフォルトの名無しさん2006/10/29(日) 13:10:10
配列の最大値をとるには、max(list)を使えばいいのは分ったんだけど、
indexの値と一緒にとりたい場合って、組み込みの関数ってあるんすかね?
(val,index)=max(list)見たいな感じで、list内の最大値と、そのインデックスが帰ってくると嬉しい。
0463デフォルトの名無しさん2006/10/29(日) 13:21:13
(1, 2, 3, 4, 4)みたいに、最大値が複数ある場合を考えないとならないので
アドホックな方法は存在しえないかもな
max()で帰ってきた値をindex()に渡せばインデックスは得られるよ
0464デフォルトの名無しさん2006/10/29(日) 13:38:32
自明な解

a=(1, 2, 3, 4, 4)
[i[0] for i in enumerate(a) if i[1] == max(a)]
0465デフォルトの名無しさん2006/10/29(日) 13:58:43
こういうのは?

>>> def trev(t): return t[1], t[0]

>>> a = [1.0, 2.0, 3.0, 4.0]
>>> trev(max(map(trev, enumerate(a))))
(3, 4.0)
0466デフォルトの名無しさん2006/10/29(日) 14:26:10
素直にやるならこう?

def where_is_max(L):
  for index, value in enumerate(L):
    if value == max(L):
      return (index, value)
04674622006/10/29(日) 14:32:51
色々なやりかたありがとうです。
0468デフォルトの名無しさん2006/10/29(日) 15:48:47
引数リストも内部ではタプルとして持ち歩くから、別な物と考えるのは微妙かも。
0469デフォルトの名無しさん2006/10/29(日) 17:37:22
実装はそうかもしれないが、

hoge(a, b, c)

を

hoge a, b, c

と書いたりは出来ないので表記上は別物になるでしょう
0470デフォルトの名無しさん2006/10/29(日) 18:59:01
value, index = max(zip(L, range(len(L))))
0471デフォルトの名無しさん2006/10/29(日) 19:02:17
>タプルには 〔きっこう括弧〕 でも使う事にすれば良かったん
459でもすぐに思いつく程度のことをGuidoが考えなかったとでも?
0472デフォルトの名無しさん2006/10/29(日) 19:11:58
そりゃGuidoがJIS記号文字を日常的につかっていればちょっとは思いついたかもね。
0473デフォルトの名無しさん2006/10/29(日) 19:49:25
from operator import itemgetter
index, value = max(enumerate(a), key=itemgetter(1))
0474Python初心者2006/10/29(日) 20:47:08
>>422
>初心者ですが、Programming Python, 3rd Edition 買ってみました。
>ページ総数1596に圧倒されてます。買う前から判ってたけどさ。
重かったろうねぇ…
「初めてのPython」->715ページの倍!
私は現在ようやく476ページまで読破したところです。

ところでLuts先生がPythonの講義をすると、必ず受講者の
半分がオブジェクト指向プログラミングのところで
脱落するそうです。ー>(熟睡する人もいるとか…)
「Pythonの」オブジェクト指向で脱落した人は本当に
「半分で」済んでいるのだろうか?
結構奥が深いというか、複雑怪奇というか、脱落するのは
ある意味必然的な結果のように感じる。
先生は他の言語でオブジェクト指向によるシステム開発
経験の有る無しが受講生の覚醒と熟睡を分けると書いて
いるが、返って有る人の方が熟睡度が深いかもね?
0475デフォルトの名無しさん2006/10/29(日) 20:50:47
Sugeee勉強になったよ。ありがとさん。
0476デフォルトの名無しさん2006/10/29(日) 21:01:05
>>472
Unicodeにはいろんな括弧があるから今後設計される言語は楽しみだなw
0477デフォルトの名無しさん2006/10/29(日) 21:05:03
色んな括弧を華麗に使い分ける言語なんて使いたくないけどな
0478デフォルトの名無しさん2006/10/29(日) 21:49:06
perl みたいにワケワカメな記号を沢山覚えないといけないのはイヤ
0479デフォルトの名無しさん2006/10/29(日) 21:49:18
<タプル>でいいじゃん
0480デフォルトの名無しさん2006/10/29(日) 21:57:00
括弧だけで構成されたBlainF*ck系実装って絶対あるだろーなー
0481デフォルトの名無しさん2006/10/29(日) 22:05:48
>>478
それも嫌だが、
begin-tuple 1, 2, 3, end-tuple
みたいなのもちょっと鬱陶しいぞw
要はバランス感覚だね
0482デフォルトの名無しさん2006/10/29(日) 22:06:09
>>479
http://www.python.org/dev/peps/pep-0318/

<...>の導入はデコレータの時にも検討されているので読んでみれ。
言語の仕様策定の難しさといったら、常人の想像を越えているな。
0483デフォルトの名無しさん2006/10/29(日) 22:12:11
>>474
本は最後まで読んでから物を言え、と
何度言われれば分かるの?
0484デフォルトの名無しさん2006/10/29(日) 22:25:40
>>483
いい加減、放置したらええんでないの
0485デフォルトの名無しさん2006/10/29(日) 22:43:32
これだけ人の言うことを無視する人も珍しいね。なんとゆーか、暖簾に腕押し。
0486デフォルトの名無しさん2006/10/29(日) 22:45:01
キチガイだもの。
0487デフォルトの名無しさん2006/10/29(日) 23:02:26
俺の、俺の、俺の話を聞けぇぇぇ〜〜〜〜♪
0488デフォルトの名無しさん2006/10/29(日) 23:07:25
>487
あー、交渉人が主役のエロゲでそれが決め台詞な奴いた。
0489デフォルトの名無しさん2006/10/29(日) 23:07:55
「応援する」とかいうやつも怪しいもんだな(WWWW
0490デフォルトの名無しさん2006/10/29(日) 23:32:32
逆に
hoge((a,b,c))
を
hoge(a,b,c)
と書くこもとも出来ない、
この辺の仕様の関係で、引数の*valっていうのが抜かせないんだと思う・・
0491デフォルトの名無しさん2006/10/29(日) 23:49:23
キチガイは、「はじめてのPython」を陥れようとする工作員なんだぜ。
0492デフォルトの名無しさん2006/10/30(月) 00:47:20
hoge(*(a, b, c)) となら書けるね。args = (a, b, c); hoge(*args) でも可。
0493デフォルトの名無しさん2006/10/30(月) 00:51:44

♪ ∧,_∧
   (´・ω・`) ))          Simple, fun, and indented〜♪
 (( ( つ ヽ、   ♪
   〉 とノ )))
  (__ノ^(_)
0494デフォルトの名無しさん2006/10/30(月) 00:55:40
不定個の引数を受け取りたい場面を普通にある。
そのための仕様だろ。
0495デフォルトの名無しさん2006/10/30(月) 01:38:53
この*argsとか**argsが出るたびに、背中がむずむずっとする。凡人の成果じゃないなと。
0496デフォルトの名無しさん2006/10/30(月) 10:40:11
不定個数の引数を受け取る仕様は他の言語にもあるしPython以前からもあった。
0497デフォルトの名無しさん2006/10/30(月) 11:23:18
>>496
こういうピンボケがいるからこのスレはダメになる
0498デフォルトの名無しさん2006/10/30(月) 11:31:13
>>495
>*argsとか**args

異なる引数に同じ名前をつけたらダメだよ。
基本から勉強しようね。
0499デフォルトの名無しさん2006/10/30(月) 11:33:37
>>497
お前がピンボケと思うのなら、「いや、そうじゃなくてね」と話を続けるのが大人ってもんだ.
このコミュニケーション不全野郎が.
0500デフォルトの名無しさん2006/10/30(月) 11:56:12
>>498
そういう事じゃないだろ
hogeって書いてあったら全部同じ変数かよ
0501デフォルトの名無しさん2006/10/30(月) 12:01:06
つーか普通 ** ときたら kws とかだろ? args はねえよ
495 = 497 = 500は世間を知らないお子ちゃま決定(WWWWWW
0502デフォルトの名無しさん2006/10/30(月) 12:04:18
やれやれだぜ・・・
0503デフォルトの名無しさん2006/10/30(月) 12:08:29
おれはkeywordsかkeys派。
ハンガリアンなツワモノはいますか?
0504デフォルトの名無しさん2006/10/30(月) 12:17:44
>>495には、どういう理由でどうむずむずするのか説明希望
0505デフォルトの名無しさん2006/10/30(月) 12:18:57
しかしkwsってヘンだよね(www

V I P P E R か (wwwwwww
0506デフォルトの名無しさん2006/10/30(月) 12:24:25
*a と **k だろ?
0507デフォルトの名無しさん2006/10/30(月) 12:26:05
>>504
>502
0508デフォルトの名無しさん2006/10/30(月) 12:51:14
>>496
誰もPythonが初めて実装したなんて言ってないと思うよ
0509デフォルトの名無しさん2006/10/30(月) 13:09:48
対話型インタープリターのの新しい終了の仕方見つけた。
>>>type(exit)("death note")()
0510デフォルトの名無しさん2006/10/30(月) 13:18:53
>509
カッコが多くてムズムズッとするぜ
0511デフォルトの名無しさん2006/10/30(月) 13:39:31
>>509

>>496 は天然だからほっとこう。
0512デフォルトの名無しさん2006/10/30(月) 13:49:56
>>509
>type(exit)("death note")()

TypeError: 'str' object is not callable
0513デフォルトの名無しさん2006/10/30(月) 13:50:39
>>511
>502
0514デフォルトの名無しさん2006/10/30(月) 13:58:28
>>512
>>type(exit)("death note")()
NameError: No. I wrote your name. You die.
0515デフォルトの名無しさん2006/10/30(月) 14:09:14
エスパー能力を総動員して真性厨房と和むスレはここですか?
0516デフォルトの名無しさん2006/10/30(月) 14:18:59
>>515にはタプルが不足しています
0517デフォルトの名無しさん2006/10/30(月) 14:22:27
こんなときにバレバレ仮面がいてくれたら。。。
0518デフォルトの名無しさん2006/10/30(月) 14:33:06
>>512
ん?もしかして古いpythonだと、exitが文字列だったりするんですかね?
type(exit)だけだと何になりますか?
0519デフォルトの名無しさん2006/10/30(月) 14:46:22
>>518
/path/to/lib/python2.5/site.py

class Quitter(object):
  def __init__(self, name):
    self.name = name
  def __repr__(self):
    return 'Use %s() or %s to exit' % (self.name, eof)
   :
0520デフォルトの名無しさん2006/10/30(月) 14:48:22
(続き)
/path/to/lib/python2.4/site.py

def setquit():
  """(ry
  """
  if os.sep == ':':
    exit = 'Use Cmd-Q to quit.'
  elif os.sep == '¥¥':
    exit = 'Use Ctrl-Z plus Return to exit.'
  else:
    exit = 'Use Ctrl-D (i.e. EOF) to exit.'
  __builtin__.quit = __builtin__.exit = exit
0521デフォルトの名無しさん2006/10/30(月) 15:46:48
もう誰が基地外で誰が基地外でないのかすら分からなくなってしまった
0522デフォルトの名無しさん2006/10/30(月) 16:40:11
おやおや、>>521は自分以外に「でない人」などいないことに気づいていないようですよ。
0523デフォルトの名無しさん2006/10/30(月) 16:43:51
そんなの些細な問題ですよ
0524デフォルトの名無しさん2006/10/30(月) 16:46:44
>>522
二重否定の構文は分かりづらく、メンテナンス性が悪いと思ったので
リファクタリングしてみました

> おやおや、>>521は自分だけが「基地外」であることに気づいていないようですよ。
0525デフォルトの名無しさん2006/10/30(月) 16:48:28
わかりやすいな
0526デフォルトの名無しさん2006/10/30(月) 16:58:27
まさに Pythonic !
0527デフォルトの名無しさん2006/10/30(月) 17:06:45
print "Simple is better than complex."
0528デフォルトの名無しさん2006/10/30(月) 17:25:29
あれ、ほんとにそうなるのか?
0529デフォルトの名無しさん2006/10/30(月) 17:30:13
志村〜、うしろ〜〜!、うしろ〜〜!
0530デフォルトの名無しさん2006/10/30(月) 17:39:33
>>519>>520
途中でPythonのバージョンが変わってるようですが???w
ソース確認してきたけどやっぱり2.4のexitはただの文字列で、
2.5のexitはQuitterクラス(という終了用のクラス)になってる模様。
だから2.5だと>>509みたいな遊び(?)が可能
0531デフォルトの名無しさん2006/10/30(月) 18:00:00
>>530
>ソース確認してきたけどやっぱり2.4のexitはただの文字列で、
>2.5のexitはQuitterクラス(という終了用のクラス)になってる模様。

519と520に該当コードが張ってあるじゃん。
君は分裂症とかそういう病気の人かな?
0532Python初心者2006/10/30(月) 18:25:58
>>483
>本は最後まで読んでから物を言え、と
>何度言われれば分かるの?
ご忠告により昨日頑張って525ページまで読みました。
Lutz先生がそのページにおいて、
「Pythonという言語のコア部分の解説は終わりです。
ここまで読んだ方は、十分に自分はPythonプログラマ
であると名乗る資格があるでしょう。」
と認証されました。「履歴書」にそう書けって…
0533Python初心者2006/10/30(月) 18:28:01
ところで、この前だれかPythonでインターフェースを
実装する方法を書いてましたよね?以下、私も考えましたが、
今一ぴったり来ない。他に良い手はあるでしょうか?

class Interface:
  
  def virtual_method(self):
    
    self.name = 'Python!'
    self.act()
    
  def act(self):
    
    assert 0,'act must be defined!'

class Sub(Interface):  
  
  def act(self):
    
    print 'Let us act with '+ self.name
    
if __name__=='__main__':

  s = Sub()
  s.virtual_method()

>>>
Let us act with Python!
0534デフォルトの名無しさん2006/10/30(月) 18:34:53
>>531
ああ、日本語がまったく書いてないから>>519>>520の意図が全然読めてなかった。
しかし、これで分裂症に見られるわけか。なんかもう書きたくない。
0535デフォルトの名無しさん2006/10/30(月) 18:49:59
じゃあねバイバイ
0536デフォルトの名無しさん2006/10/30(月) 18:57:22
アワワワワワ。
0537デフォルトの名無しさん2006/10/30(月) 20:03:48
O/Rマッピングツールというか、オブジェクトをそのまんまXMLとして
吐き出すようなモジュールってありますか?

あるいは、そんなものって需要ありますか?作ろうとしてるんですが。
0538デフォルトの名無しさん2006/10/30(月) 20:29:27
>>533
zope3は自前でインターフェースを実装している
0539デフォルトの名無しさん2006/10/30(月) 20:31:30
>>533
そゆのは Template Method パタンとゆーのでは。

_________________________
    <○ノ
     ‖
     くく
しまった!デザパタはNGワードだった!
オレが止めているうちに他の話題に移れ!
早く!早く!オレに構わず逝け!
0540デフォルトの名無しさん2006/10/30(月) 20:37:03
ttp://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/355487
ttp://www.dezentral.de/warp.html?http://www.dezentral.de/soft/XMarshaL/
ttp://xmlobject.base-art.net/
0541デフォルトの名無しさん2006/10/30(月) 21:16:33
>>540
ありがとうございます、たくさんあるんですね。
さっそくさわってみようと思います。

他に、XMLObjectなるものを見つけました。
http://xmlobject.sourceforge.net/
0542デフォルトの名無しさん2006/10/30(月) 21:18:41
構ってクンの言語クソオタとか
ひたすらソース貼るだけで日本語では罵倒以外出来ない奴とか…。

Pythonに興味を持った人がこのスレ見て
「Pythonプログラマは人格破綻者ばっかりだ」とか思われたら
悔しくてたまらないわあ。
0543デフォルトの名無しさん2006/10/30(月) 21:33:11
工作員乙。
0544デフォルトの名無しさん2006/10/30(月) 21:49:53
>>542
このスレだけ見てそういう判断をするのは問題だし、そういう人間はおらんだろう。
0545デフォルトの名無しさん2006/10/30(月) 22:41:44
>>542
真っ先に指摘すべきは
空気が読めず何度言われても態度を改めない「Python初心者」だろ(w

お前わかりやすすぎるんだよ、馬鹿が(wwwwwww
■ このスレッドは過去ログ倉庫に格納されています