1 名前:デフォルトの名無しさん mailto:sage [2012/03/21(水) 13:41:13.16 ] このスレッドは、他のスレッドでは書き込めない超低レベル、 もしくは質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。 へび使いが優しくコメントを返しますが、お礼は Python の布教と初心者の救済をお願いします。 エラーを解決したいときはエラー表示や環境(バージョン/IDE or command line)を略さずに書き込んで下さい。 騙りが頻発しています。質問する方は一時的なトリップをつけることを検討して下さい。 次スレは >>985 辺りで 前スレ くだすれPython(超初心者用) その12 toro.2ch.net/test/read.cgi/tech/1322115727/ 関連スレ Pythonのお勉強 Part45 hibari.2ch.net/test/read.cgi/tech/1321189773/ 【実験台】 Python 3.0 のお勉強 Part 1 【非互換】 toro.2ch.net/test/read.cgi/tech/1235050215/ ◆関連リンク Python の Home Page ttp://www.python.org/ ┌─┐ │●│ └─┤ _ ∩ ( ゚∀゚)彡 ┌─┬⊂彡 │●│ おっぱい!おっぱい! └─┘
252 名前:208 mailto:sage [2012/04/15(日) 20:05:39.26 ] >>243 迷惑メール相談センター www.dekyo.or.jp/soudan/
253 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 20:21:58.06 ] 何でこんなになるんだろうね(2.7.2) >>> abc = ["a", "b", "c"] >>> "a" in abc True >>> "a" in abc == True False >>> "a" in abc == abc True >>> "a" not in abc == abc False
254 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 20:30:04.23 ] >>253 演算子の優先順位
255 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 20:34:33.05 ] >>253 www.python.jp/doc/2.5/ref/summary.html
256 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 20:34:38.75 ] >>> "a" in abc == True False >>> "a" in (abc == True) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: argument of type 'bool' is not iterable
257 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 20:35:06.66 ] >>254 具体的にはどこが優先されているの?
258 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 20:58:38.50 ] これ、優先順位というか比較の連鎖か。 比較の連鎖ってのは x < y < z みたいな書き方のことね。 だから "a" in abc == True は "a" in abc and abc == True とほぼ同じ。(正確には上だとabcが一回しか評価されない) abc == True は偽だがらFalseが返る。
259 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 21:04:36.84 ] >>258 勉強になった
260 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 21:05:05.53 ] inでも有効なのか。知らんかったわ
261 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 21:16:32.54 ] >>> [] in [[]] == True False >>> [] in [[]] True >>> [] in [[]] == [] False >>> ([] in [[]]) == [] False >>> [] in ([[]] == []) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: argument of type 'bool' is not iterable
262 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 21:17:31.07 ] >>> [] in [[]] and [] == [] True
263 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 22:43:38.57 ] >>259 pythonドキュメントにまるっきり同じことが書いてあるわけだが。
264 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 22:48:46.76 ] >>263 勉強になった
265 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 22:52:10.61 ] >>263 へーpythonドキュメントにまるっきり同じことが書いてあるのか。勉強になった。
266 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 23:17:43.33 ] ドキュメント厨か
267 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 23:41:38.27 ] DQM
268 名前:デフォルトの名無しさん mailto:sage [2012/04/15(日) 23:42:56.16 ] >>267 採用
269 名前:デフォルトの名無しさん mailto:sage [2012/04/16(月) 00:06:59.64 ] pass
270 名前:デフォルトの名無しさん mailto:sage [2012/04/16(月) 01:42:10.33 ] >>269 おい!なんで俺のパスワード知ってんだよ
271 名前:デフォルトの名無しさん [2012/04/16(月) 13:35:30.05 ] >> 208 $ sudo chmod -R 0775 /usr/local $ sudo chgrp -R bpbook /usr/local これやらなくていいです。こんなことしなくてもsudoしてるので、distributeのインストールに問題ありません。
272 名前:デフォルトの名無しさん mailto:sage [2012/04/16(月) 14:44:24.70 ] >>271 そもそも>>208 みたいに手動でdistributeを入れなければいけないのかどうかを先に論じるべき。
273 名前:デフォルトの名無しさん mailto:sage [2012/04/16(月) 14:51:47.15 ] 258 名前:デフォルトの名無しさん [sage]: 2012/04/15(日) 20:58:38.50 これ、優先順位というか比較の連鎖か。 比較の連鎖ってのは x < y < z みたいな書き方のことね。 だから "a" in abc == True は "a" in abc and abc == True とほぼ同じ。(正確には上だとabcが一回しか評価されない) abc == True は偽だがらFalseが返る。 実行結果が異なるんですけど >>> [] in [[]] == True False >>> [] in [[]] and [] == [] True
274 名前:デフォルトの名無しさん mailto:sage [2012/04/16(月) 15:16:37.73 ] >>275 docs.python.org/reference/expressions.html#not-in [] in [[]] == True は [] in [[]] and [[]] == True といっしょということだろう ( [] in [[]] ) == True ではない こういう書き方は混乱の元だからやらないほうがいいと思う >>271 そんなことをするとどんな危険性がありますか?
275 名前:デフォルトの名無しさん mailto:sage [2012/04/16(月) 15:17:47.45 ] >>273 どこが?
276 名前:デフォルトの名無しさん mailto:sage [2012/04/17(火) 02:25:28.81 ] くだらんけど chgrpするならchmodでグループのスティッキービットたててほしい。
277 名前:デフォルトの名無しさん mailto:sage [2012/04/17(火) 03:50:05.54 ] $ sudo rm -Rf /
278 名前:デフォルトの名無しさん mailto:sage [2012/04/17(火) 04:50:23.93 ] はいはい ステマステマ
279 名前:デフォルトの名無しさん mailto:sage [2012/04/17(火) 23:27:22.37 ] 本も質問者もひどいもんだな。
280 名前:デフォルトの名無しさん mailto:sage [2012/04/18(水) 17:24:56.56 ] pass
281 名前:デフォルトの名無しさん mailto:sage [2012/04/19(木) 10:42:32.51 ] Pythonチュートリアル第2版の10.12節に「電池付属です」と銘打った説があって、「Pythonには『電池付属』の哲学がある。」と書いてあるのですが、これってどういう意味なんでしょうか? 「電池付属」って、英語特有の慣用表現みたいなもの?
282 名前:デフォルトの名無しさん mailto:sage [2012/04/19(木) 10:48:21.90 ] >>281 すぐ使えるようにする、ってこと
283 名前:デフォルトの名無しさん mailto:sage [2012/04/19(木) 12:00:15.04 ] おもちゃのCMとかで最後に必ず「Each sold separately, batteries not included.」 みたいな注意書きがはいる(たいてい1秒程度でしゃべる)。そのもじり。
284 名前:281 mailto:sage [2012/04/19(木) 12:31:15.81 ] 勉強になりました。thxです。
285 名前:デフォルトの名無しさん mailto:sage [2012/04/19(木) 14:24:02.38 ] 核電池
286 名前:デフォルトの名無しさん [2012/04/19(木) 20:03:53.82 ] 電池付属もいいんだが、Python付属のは液漏れしてる
287 名前:デフォルトの名無しさん [2012/04/19(木) 21:26:21.55 ] 電池で思い出したけど、電池で動くような小型の端末で、ちまちまPythonのコードを書いたり動かしたりできるもんって無いのかなあ???
288 名前:デフォルトの名無しさん mailto:sage [2012/04/19(木) 21:55:19.17 ] >>287 www.disinterest.org/NDS/Python25.html
289 名前:デフォルトの名無しさん mailto:sage [2012/04/19(木) 22:26:34.61 ] >>287 android電話でsl4a
290 名前:デフォルトの名無しさん [2012/04/19(木) 23:19:48.82 ] おおおお、いつの間にかいろんなのあるんだなあ。 最近でたっぽい、Python for iOSを買ってみるか。 電池じゃ動かないけど・・・・
291 名前:デフォルトの名無しさん mailto:sage [2012/04/20(金) 01:09:06.94 ] えィ
292 名前:デフォルトの名無しさん [2012/04/20(金) 15:50:03.15 ] pythonでGUIプログラムを作ろうと思って情報収集していたのですが code.google.com/p/pysta/ このようなものを見つけました そもそもプログラミング初心者の上英語もちんぷんかんぷんで何がなんだかなのですが これはpythonのGUIをvistaっぽくする何かってことでいいんでしょうか? もしそうであった場合、こういったデータの使い方は学習サイトのどういう項目で勉強すれば良いのかまでご教示して下されば幸いです
293 名前:デフォルトの名無しさん mailto:sage [2012/04/20(金) 16:05:25.12 ] >>292 どんなものを作りたいのか具体的に書いた方がアドバイスしやすいと思う リンク先は2009年に更新が止まっているので論外
294 名前:デフォルトの名無しさん mailto:sage [2012/04/20(金) 16:24:46.68 ] ぱっと見では全然開発が進んでないように見える Vistaの部品を模してとりあえず4つwidgetができて、その後半年かけてバグ取ったと書いてあるが 多分使い物にならんだろう しかしここにもないものを wiki.python.org/moin/GuiProgramming よく見つけてきたな〜
295 名前:デフォルトの名無しさん [2012/04/20(金) 17:11:26.00 ] 返答ありがとうございます 個人的にはvistaのようにウィンドウを透かす感じのデザインにしたいのですが そういったことは可能なのでしょうか? それともそれの開発が滞っているように難しいことなのでしょうか?
296 名前:デフォルトの名無しさん mailto:sage [2012/04/20(金) 17:46:16.40 ] Windowsネイティブの部品を使うライブラリならある程度見た目は 似せられるだろうけど、透明度の変更とか細かいことをやりたいなら Win32APIを直接操作するしかないと思う >>294 のサイトで言うと"venster"、"Win32All"というあたり ただこれらは、WindowsのAPIを直接呼ぶはずなので、PythonというよりCやC++でプログラムを 書くのに近い作業になると思う Win32APIの資料も必要 また日本語ドキュメントが揃ってないとくじけると思うけど、こういうマイナーなライブラリには 日本語資料がほとんどないはず Windowsはあんまり詳しくないんで詳しい人補足お願いします
297 名前:デフォルトの名無しさん mailto:sage [2012/04/20(金) 18:00:34.91 ] >>295 具体的にどこを透かせたいの? あと、実行環境も書いてね
298 名前:デフォルトの名無しさん mailto:sage [2012/04/20(金) 18:04:13.96 ] >個人的にはvistaのようにウィンドウを透かす感じのデザインにしたいのですが >そういったことは可能なのでしょうか? それだけならかなり簡単 あなたの言うリンク先のモジュールとかもいらない
299 名前:デフォルトの名無しさん mailto:sage [2012/04/20(金) 18:19:02.57 ] 具体的に
300 名前:デフォルトの名無しさん [2012/04/20(金) 18:27:38.69 ] 実行環境とはOSのことでいいのでしょうか? だとすればwindowsですが、やはりLinuxで類似のデザインにしたい場合は勝手が変わってくるのでしょうか? 窓の後ろがどうなってるのかわかるようにしたいのでフレームの透明度変更の遣り方が知りたいです
301 名前:デフォルトの名無しさん mailto:sage [2012/04/20(金) 19:01:11.37 ] Aero Glass効果が欲しいんなら、DWMAPIってやつを使うようだ ただし、API一つ呼んで終わりじゃなくて自分で半透明で描画しないといけない 既存のコントロールを透過させたいんならWM_CTLCOLOR、オーナードローや カスタムドロー 原理的にはウィンドウハンドル取る手段さえあればツールキットは問わないはず あとはpure Pythonコードでやりたいならctypesで CやC++でのAPIレベルのプログラミングの経験が無いなら無謀
302 名前:デフォルトの名無しさん mailto:sage [2012/04/20(金) 19:41:12.03 ] Pythonって関数定義やクラス定義の終わりを明示しないのっ!? ソース見てたら、インデントが入ってることから判断すると内部クラスっぽいのがあんだけど 他の言語やってる経験からするととてもそうには見えない これ、どうやって内部クラスかそうでないかを判別するんだよ おせーて、そこのナイスな変態さん!
303 名前:デフォルトの名無しさん mailto:sage [2012/04/20(金) 20:33:46.18 ] API3つくらい呼んで終わりなんだけどなぁ
304 名前:デフォルトの名無しさん mailto:sage [2012/04/20(金) 21:07:57.33 ] >>302 折り畳むかアウトライン解析かな vimならpython_fold.vim,tagbar.vim 手元にある他のエディタでは SPE,eclise+pydev,geanyなどは 標準で備わってる機能だね
305 名前:デフォルトの名無しさん mailto:sage [2012/04/20(金) 22:18:06.58 ] >>302 インデントレベルが浅くなる、という形でしっかり明示されてると思うが
306 名前:デフォルトの名無しさん mailto:sage [2012/04/20(金) 22:24:06.39 ] >>302 from __future__ import braces
307 名前:デフォルトの名無しさん mailto:sage [2012/04/20(金) 22:27:03.04 ] なんて親切なスレなんでしょう(棒
308 名前:302 mailto:sage [2012/04/21(土) 00:42:38.92 ] どういう誤解なのかわからないが いやいや、パッケージをインポートするとかどうとかって話じゃない あるクラスが定義されていてそいつが 内部クラス(インナークラス)なのか、そうではないただのクラスなのかって話だ Pythonには内部クラスの概念がないってのならまあ、それで解決するんだが だが、 ttp://d.hatena.ne.jp/hiratara/20080123/1201073976 によると、できるらしい で、そのソースを見てもやっぱり区別がつかないというわけだ >>305 そんな曖昧すぎる言語仕様があってたまるか
309 名前:デフォルトの名無しさん mailto:sage [2012/04/21(土) 00:47:53.36 ] >>308 もう面白くないから帰っていいよ。
310 名前:302 mailto:sage [2012/04/21(土) 01:18:33.18 ] 内部クラスについて聞いているだけなのに、 どうして俺がさもふざけてるような扱いをされるのか おこちゃまなガラスの自尊心がブロークンハート状態なんですねわかります 君が今回得るべき教訓は、『そういう態度をとる事こそ真に恥ずかしい』だ この質問を続けていると荒れてしまいそうだから、 ここでの質問は打ち切って2ちゃんねる以外の掲示板で聞くことにする もし、ム板の「Pythonのお勉強」スレで訊いたら同じやつに絡まれるからな
311 名前:デフォルトの名無しさん mailto:sage [2012/04/21(土) 01:25:38.24 ] 内部定義が一見してわからんソース(長かったり空行挟んでないとか)は、 書いたやつがクソって世界だから。 強制力はないけど言語仕様でそういうの排除できるって頭よくない?
312 名前:デフォルトの名無しさん mailto:sage [2012/04/21(土) 01:34:22.96 ] >>310 >>305 が的確に回答してるのに >そんな曖昧すぎる言語仕様があってたまるか で返すのみたら誰だってふざけてると思うよ。 もしまだ不満なら何が気に食わないかを具体的に書けばいいだけ。 それ以前にまともに相手して欲しかったら普通の文体で淡々とやり取りすればいい。 それができないことこそ真に恥ずかしい。
313 名前:デフォルトの名無しさん mailto:sage [2012/04/21(土) 02:13:50.23 ] まあどこで訊いても>302の答えは>305だから、 >302,310はどこ行っても「自分の欲しい答え」は貰えないんじゃない? Pythonだけがプログラミング言語じゃないんだし、勝手に他の言語使ってれば? と思う。 視野は狭くなるけど、自分で狭めてるんだからそれはしょうがない。
314 名前:デフォルトの名無しさん mailto:sage [2012/04/21(土) 02:24:25.94 ] emacsのPython Modeでは [1]def foo(): [2]def bar(): ... [3]def baz(): ... [3]でC-c C-u (py-beggining-of-block) すると[1]には飛ばず[2]に飛ぶ [3]から[1]に直接飛ぶコマンドがあってもよさそうだ。ちらし
315 名前:デフォルトの名無しさん [2012/04/21(土) 03:37:30.62 ] ちらしage
316 名前:デフォルトの名無しさん mailto:sage [2012/04/21(土) 10:17:00.93 ] >>308 >そんな曖昧すぎる言語仕様があってたまるか 曖昧でも何でもない Pythonでは自由なインデントは認められてなくて インデントの仕方について厳密な規定があるからな だからインデントレベルが下がるのは必ず何らかの構造の終わりを示す
317 名前:デフォルトの名無しさん mailto:sage [2012/04/22(日) 10:05:29.48 ] すんません Windows XP環境で、コマンドラインからNTPサーバーに接続して時刻あわせをするスクリプトが欲しいのですが どうやれば良いか試行錯誤しています。 見本を見せてもらえませんか?
318 名前:デフォルトの名無しさん mailto:sage [2012/04/22(日) 10:11:16.04 ] lmgtfy.com/?q=python+ntp+client
319 名前:デフォルトの名無しさん [2012/04/22(日) 10:29:15.46 ] >>317 XP なら w32tm でいいんじゃないかな ttp://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/time_w32tm.mspx ttp://itpro.nikkeibp.co.jp/article/COLUMN/20060907/247379/
320 名前:デフォルトの名無しさん mailto:sage [2012/04/22(日) 11:31:29.12 ] >>318 NTPサーバから現在時刻を取得する ttp://saekiyoshiyasu.org/pblog/programming/python/gettimefromntp-2007-06-13-00-34.html IronPythonでも書いてみる。 (略) あれれー? 原因を探す(pyがPython、ipyがIronPythonでの挙動)。 (略) この辺に原因がありそう。IronPythonでは、エポックが西暦1年になっている様だ。 従って、time.ctime()の引数に、西暦1年1月1日0時0分0秒から 西暦1970年1月1日0時0分0秒までの秒数を加えてやれば、Pythonと同じ挙動をするはず。 >>> print time.ctime(t - TIME1970 + time.mktime((1970, 1, 1, 0, 0, 0, 3, 1, 0))) 水 6 13 00:28:26 2007 糞ワロタ
321 名前:デフォルトの名無しさん mailto:sage [2012/04/22(日) 11:41:37.65 ] >>317 はPythonの話ではなくてXPの話 AD (Active Directory)に参加している端末なら強制的にADの時計に同期させられる (Kerberos認証のため) 参加していなければ、Admin権限で net time /setsntp:[NTPサーバ] を実行する Pythonからやりたければこのコマンドをsubprocess.Popen()で呼び出す
322 名前:デフォルトの名無しさん mailto:sage [2012/04/22(日) 12:14:17.62 ] だれか性能の良い隔離スレ立ててくれ
323 名前:デフォルトの名無しさん mailto:sage [2012/04/25(水) 00:55:31.53 ] そもそも、ここが隔離スレだというのに。
324 名前:デフォルトの名無しさん mailto:sage [2012/04/25(水) 09:58:08.20 ] 「自分は頭が良くて詳しいです」的な自己満足レスの典型だぞ。 相手は超初心者なんだからもう少し優しく教えてあげないと。 さもなくばスルーでOK
325 名前:デフォルトの名無しさん mailto:sage [2012/04/25(水) 18:51:31.58 ] hardwayのPracticeをeclipseのPydevでやってるんだけど、 どうやってEclipseで実行したらいいのかわからない python ex13.py first 2nd 3rd これをコマンドプロンプトとかで打つと別ファイルの内容が 出力できる問題なんだけどEclipseで確認したいです。 初心者すぎる質問だけど教えてください ttp://learnpythonthehardway.org/book/ex13.html
326 名前:デフォルトの名無しさん mailto:sage [2012/04/25(水) 19:59:01.28 ] >>325 実行の構成>引数>プログラムの引数 first 2nd 3rd
327 名前:デフォルトの名無しさん mailto:sage [2012/04/25(水) 21:34:15.24 ] >>326 できました!ありがとう
328 名前:デフォルトの名無しさん mailto:sage [2012/04/26(木) 01:18:32.94 ] ファイルのreadについて質問させてください file = open("aaa.txt") file.read() #一度目のreadではファイルの内容が返ってくる file.read() #二度目のreadでは空が返ってくる これは二度以上はreadをしないように自分で気をつけるしかないのでしょうか?
329 名前:デフォルトの名無しさん mailto:sage [2012/04/26(木) 01:22:55.38 ] 1回closeするクセをつければいいのでは
330 名前:デフォルトの名無しさん mailto:sage [2012/04/26(木) 01:23:37.95 ] >>328 何で空が帰ってくるかわかってる? www.python.jp/doc/release/library/stdtypes.html#file.read
331 名前:デフォルトの名無しさん mailto:sage [2012/04/26(木) 01:30:03.87 ] たぶん>>328 はそれを読んでも分からないんじゃないかな 言語をとわず、一般にファイルから読み込むread()みたいな関数は、 ファイルの現在の位置(カーソルみたいなもんだと思ってくれ)から データを読み始めて、読んだ分だけカーソルが移動するのがふつうなんだわ read()は引数を指定しないとファイルの現在の中身全部読み込むので、 その時点でカーソルは終端に移動する もう一度read()を呼んだら、もう先には何も無いわけだから空が返ってくる どうしてももう一度読み直したいんなら、seek()でカーソルを先頭まで持っていけば いいんだが、本当にそれがしたいことなのか考えたほうがいい
332 名前:328 mailto:sage [2012/04/26(木) 02:38:25.88 ] ありがとうございます、ファイル読み込みの概念は理解できました Pythonに限らずどの言語でもファイルを読み込んだ後にcloseしている例が多いので、 なんとなくcloseするのがお行儀のいいやり方だとはわかっていたのですが二度readすると空になるとは思いませんでした
333 名前:328 mailto:sage [2012/04/26(木) 03:26:00.02 ] 何度もすみません。 実は自分で直接ファイルを扱っているわけではなくて、 MongoDBにファイルを格納できるGridFSという仕組みをPython上で扱える「MongoEngine」というライブラリを使っていまして、 そこで前述した問題にぶち当たりました(readthedocs.org/docs/mongoengine-odm/en/latest/guide/gridfs.html )。 ライブラリのコード見てみると、内部でファイルをreadした後に閉じていない?ようでポインタがEOFに到達したままになっているみたいです。 そこで、あまり行儀のいいやり方ではなさそうですが>>331 さんの提案してくださったseek()で解決しました。 本当にありがとうございます。
334 名前:デフォルトの名無しさん mailto:sage [2012/04/26(木) 04:01:26.09 ] 先頭に戻すのが目的ならrewind()がいいんじゃない?
335 名前:デフォルトの名無しさん mailto:sage [2012/04/26(木) 04:50:08.69 ] 馬鹿には無理
336 名前:デフォルトの名無しさん [2012/04/26(木) 05:18:24.59 ] IDはいらねーかなここ
337 名前:デフォルトの名無しさん mailto:sage [2012/04/26(木) 06:43:49.28 ] もう全板強制IDにして欲しいわ
338 名前:デフォルトの名無しさん mailto:sage [2012/04/27(金) 20:48:30.72 ] 馬鹿には無理
339 名前:デフォルトの名無しさん mailto:sage [2012/04/28(土) 03:27:31.94 ] a = 1 print "OK" if a == 1 else print "NG" これを実行すると else printのtのところでSyntaxErroeになります。 どこが悪いのでしょうか。
340 名前:デフォルトの名無しさん mailto:sage [2012/04/28(土) 04:30:13.32 ] 式のなかに文は置けない。なので条件式の中にprint文は置けない print "OK" if a == 1 else "NG" なら動く
341 名前:デフォルトの名無しさん mailto:sage [2012/04/28(土) 04:54:56.95 ] >>339 print "OK" if a == 1 else "NG" が正解。elseの後ろのprintが不要。 ("OK" if a == 1 else "NG") printの後ろに来るのはあくまで一つの値であるのが原則だから、 上のカッコ内全体が単一の値にevaluateされるためには、 printが無いほうが自然とわかると思う。つまり if a == 1: "OK" else: "NG" ここで、elseの後ろにprintがあるとアンバランスということ。 別の言い方をすれば、普通のif-else statementでは、あるblockが 実行されるための条件を評価しているのに対し、ここではprintの目的語を if-elseによって定めている、って感じかな。
342 名前:デフォルトの名無しさん mailto:sage [2012/04/28(土) 06:39:08.47 ] なるほど、2つの式のどちらかの値を返してもらうだけの 限定されたifなのですね。 ありがとうございました。
343 名前:デフォルトの名無しさん mailto:sage [2012/04/28(土) 08:58:35.49 ] 条件式のifの方が優先順位が上なのか
344 名前:デフォルトの名無しさん mailto:sage [2012/04/28(土) 09:58:10.80 ] 優先順位がどうのじゃなくて、ifって2種類あるんだよ ステートメントのifと条件演算子のif これらは優先順位じゃなく文脈によって定まる
345 名前:デフォルトの名無しさん mailto:sage [2012/04/28(土) 10:00:19.52 ] 『カッコをつけなさい』 - 神の声
346 名前:デフォルトの名無しさん mailto:sage [2012/04/28(土) 10:01:21.90 ] こっちが演算子if conditional_expression ::= or_test ["if" or_test "else" expression] expression ::= conditional_expression | lambda_form こっちが分岐文if if_stmt ::= "if" expression ":" suite ( "elif" expression ":" suite )* ["else" ":" suite]
347 名前:デフォルトの名無しさん mailto:sage [2012/04/28(土) 10:04:02.89 ] しかし条件演算子ifの導入には一悶着あったらしいね 俺は2.6からしか使ってないからよく知らないけど
348 名前:デフォルトの名無しさん mailto:sage [2012/04/28(土) 10:06:01.15 ] >>345 今回のは結合度や左/右結合の話じゃないのでそれはあてはまんない
349 名前:339 mailto:sage [2012/04/28(土) 12:35:59.22 ] 以下のように書いたら動いてしまいました。 これは関数名が式として解釈されるために 関数の中に文があっても問題ないということでしょうか? 「別にあんたのために動かしてあげたんじゃないんだからね 関数は式だから仕方ないでしょ」って言ってるみたいで Python可愛いw def A(): print "OK" def B(): print "NG" a = 1 A() if a == 1 else B()
350 名前:デフォルトの名無しさん mailto:sage [2012/04/28(土) 13:04:34.00 ] その通り 3.xだとprint文はprint関数になってるので print('XXX') if a == 1 else print('yyy') これも通る
351 名前:デフォルトの名無しさん [2012/04/28(土) 14:27:55.70 ] IDはいらねーかなここ
352 名前:デフォルトの名無しさん mailto:sage [2012/04/28(土) 15:22:09.19 ] >>339 わかってるかもしれないけど一応補足しとくと、339が定義した AやBという関数は、outputとしてはNoneを返しているってのに注意。 だから (A() if a == 1 else B()) は全体として値はNoneとなり、標準出力には(関数のoutputではなく) side effectとして文字列が現れているということ。 このことを明確にするには、 print (A() if a == 1 else B()) としてみればよい。