1 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 19:09:55 ] Pythonオフィシャルサイト www.python.org/ 日本Pythonユーザ会 www.python.jp/Zope/ まとめWiki python.rdy.jp/ 関連スレ find.2ch.net/?BBS=ALL&TYPE=TITLE&STR=python 前スレ pc11.2ch.net/test/read.cgi/tech/1223543412/
357 名前:デフォルトの名無しさん mailto:sage [2008/12/04(木) 12:41:44 ] >>353 CからCです。 いくらなんでも遅すぎですよね。
358 名前:デフォルトの名無しさん mailto:sage [2008/12/04(木) 12:45:06 ] >>352 file1 -------- class foo(object): CON = [('const%d' % n) for n in xrange(1000)] -------- file2 -------- from file1 import foo.CON as CON for n in len(CON): print 'CON%d = %s' % (n, CON[n]) --------
359 名前:デフォルトの名無しさん mailto:sage [2008/12/04(木) 12:47:22 ] >>357 早めにディスクのバックアップ取っとけw
360 名前:デフォルトの名無しさん mailto:sage [2008/12/04(木) 13:51:33 ] sage使ってる人います? numpy単独よりも便利なのかな
361 名前:デフォルトの名無しさん mailto:sage [2008/12/04(木) 14:13:38 ] pythonのコードをdllや.soにする方法ってあるのかな
362 名前:デフォルトの名無しさん mailto:sage [2008/12/04(木) 14:17:33 ] 3.0のWhat's Newは短いなぁ
363 名前:デフォルトの名無しさん [2008/12/04(木) 14:21:57 ] >>362 変更点は全て列挙してあると思うけど、例を載せてほしいってこと?
364 名前:デフォルトの名無しさん mailto:sage [2008/12/04(木) 15:05:48 ] 2.6に多くの機能が入ったからその分短くなったね
365 名前:デフォルトの名無しさん mailto:sage [2008/12/04(木) 15:43:10 ] そういう問題なのか??? ありすぎて書けない… わけじゃなく段差の分結果的に "what's new" の項目数は少なくなったって感じ?
366 名前:デフォルトの名無しさん [2008/12/04(木) 15:44:05 ] >>365 いやいや、十分長いがなw 参考文献へのリンクも含めて読んでみろよ。
367 名前:736 mailto:sage [2008/12/04(木) 15:59:14 ] >>359 ちなみに正常な環境だと shutil.move()の実行速度って何秒くらいですか? テスト条件はできれば同じくらいの環境で
368 名前:デフォルトの名無しさん mailto:sage [2008/12/04(木) 16:16:05 ] shutil.move("C:\test.txt", "C:\Test")みたいにdstにディレクトリを指定すると 実装のos.renameでOSErrorが発生してcopy2の方が呼ばれてるから遅くなってるのかな? shutil.move("C:\test.txt", "C:\Test\test.txt")みたいにファイル名を追加するか os.renameを直で使ってみたら?
369 名前:368 mailto:sage [2008/12/04(木) 16:17:10 ] ↑のはWindowsでの話。他のOSは分からない
370 名前: 株価【52】 mailto:sage [2008/12/04(木) 16:29:59 ]
371 名前:デフォルトの名無しさん mailto:sage [2008/12/04(木) 17:37:20 ] >367 0秒
372 名前:デフォルトの名無しさん mailto:sage [2008/12/04(木) 19:02:54 ] 具体的にはどの段階で3.0にいこうすればいいのかね?
373 名前:デフォルトの名無しさん mailto:sage [2008/12/04(木) 19:35:22 ] >>372 お前の使ってるライブラリが対応したときだろ。
374 名前:デフォルトの名無しさん [2008/12/04(木) 19:59:37 ] まだ 3.0 リリースせずにユーザーがもうちょっと 2.6 に慣れてから リリースすればよかったような気がする。 でも、3.0は長い移行期間が必要とされるから、逆に早めにリリース しておきたかったんだろうね。
375 名前:デフォルトの名無しさん mailto:sage [2008/12/04(木) 20:17:04 ] >>352 ... class a: ... CONST1=1 ... CONST2=2 ... for x in dir(a): ... if x.startswith("CONST"): ... exec(x + "=" + "a." +x) ... print CONST1 どうよ?
376 名前:375 mailto:sage [2008/12/04(木) 20:18:06 ] インデントがめちゃめちゃだ。 ごめんよ。
377 名前:デフォルトの名無しさん mailto:sage [2008/12/04(木) 20:57:18 ] printのカッコが地味に面倒だな。 こっちの方が言語的にいいのは、頭では理解してんだけどさ。 いままでの癖がなかなか抜けなくて、ぱいそんたんに怒られてばっかりだ。
378 名前:デフォルトの名無しさん mailto:sage [2008/12/04(木) 21:26:41 ] 3.0が出たので入れてみた(Vista) 早速起動した。 > help() 打ってみた。動く。 そこで出た文章に従って > modules spam 打ってみた。 エラー出た。 uft-8 ってエンコーディングが見つからないって。 ・・・・あたりまえじゃああああ どこが間違ってるのかよく分からんです。 Python30のディレクトリ下をgrepして出てくるのは Lib/test/bad_encoding.py だけ。これは想定通りだろうが・・・
379 名前:デフォルトの名無しさん mailto:sage [2008/12/04(木) 21:35:52 ] ・・・もしかしてLib/testはインストール後に 除去するのが正しい使い方? 別んとこによけておいたら、↑も通った。
380 名前:デフォルトの名無しさん mailto:sage [2008/12/04(木) 22:38:47 ] print("a%s%s" % ('b', 'c')) なんかキモイな…
381 名前:デフォルトの名無しさん mailto:sage [2008/12/04(木) 22:42:12 ] Py3kはユニコード指定しなくていいのが嬉しい。 これでフレームワークが対応してくれれば・・・。
382 名前:デフォルトの名無しさん mailto:sage [2008/12/04(木) 22:52:02 ] つーか2.5とかでも別に def printf(fmt, *args): print fmt % args, def fprintf(f, fmt, *args): print >>f, fmt % args, とか定義すりゃ printf("a%s%s\n", 'b', 'c') とか書けるわなあ print()関数は、%とカッコがC風のprintf()より冗長に見えてしまうね
383 名前:デフォルトの名無しさん mailto:sage [2008/12/04(木) 23:03:10 ] setuptoolもまだ対応してないのかな?
384 名前:デフォルトの名無しさん mailto:sage [2008/12/04(木) 23:06:11 ] 3.0わしょーい
385 名前:デフォルトの名無しさん mailto:sage [2008/12/05(金) 00:17:30 ] >>380 boost::format みたいだ
386 名前:デフォルトの名無しさん mailto:sage [2008/12/05(金) 00:28:39 ] print("a{0}{1}".format('b', 'c')) print("a", 'b', 'c', sep="")
387 名前:デフォルトの名無しさん mailto:sage [2008/12/05(金) 00:32:32 ] >>386 それもキモいな あまり意味の感じられない多様性 Perlみたい
388 名前:デフォルトの名無しさん mailto:sage [2008/12/05(金) 00:44:15 ] string template は
389 名前:デフォルトの名無しさん mailto:sage [2008/12/05(金) 00:53:59 ] print文なんて一発プログラムでしか使わん。 ちょっと込み入った規模ならファイルオブジェクトにwriteするか loggingを使ってる。 潔癖症にかかってる人は 変える必要など無い所まで変えやがるから 迷惑この上ない。
390 名前:デフォルトの名無しさん mailto:sage [2008/12/05(金) 01:03:49 ] 一貫性に拘りすぎるのはバカみたいなことを Pythonの中の人言ってなかったっけか
391 名前:デフォルトの名無しさん mailto:sage [2008/12/05(金) 01:06:36 ] >>390 それは本当にそう思うけど print()関数は、後方互換性潰してまで導入したのがこれか、とは思う
392 名前:デフォルトの名無しさん mailto:sage [2008/12/05(金) 01:07:24 ] printは最初っからキモイ
393 名前:デフォルトの名無しさん mailto:sage [2008/12/05(金) 01:09:51 ] >>392 全くだw
394 名前:デフォルトの名無しさん mailto:sage [2008/12/05(金) 01:12:03 ] 自演オワタ
395 名前:デフォルトの名無しさん mailto:sage [2008/12/05(金) 01:15:56 ] 単要素のタプルもキモイ
396 名前:デフォルトの名無しさん mailto:sage [2008/12/05(金) 01:21:54 ] >>389 じゃぁお前はprintの変更の影響受けて無いじゃん。 Python開発者は潔癖症なんかじゃないよ。 print文の変更も議論の上だよ。 print文でファイルに出力する方法とか、最後に改行しない 方法とか、その為だけに構文を増やしていたのを、普通の関数呼び出しにして柔軟に 使えるようになった。 数タイプを削減するためだけに構文増やしまくってたprint文がキモ過ぎただけで、 print関数は素直で自然な姿。
397 名前:デフォルトの名無しさん [2008/12/05(金) 02:15:03 ] 後方互換性潰してまで導入したのがこれか
398 名前: mailto: [2008/12/05(金) 02:22:59 ] それが何か?
399 名前:デフォルトの名無しさん mailto:sage [2008/12/05(金) 04:52:48 ] Cとの互換性を重視して文法がカオスになってるC++を見てると、 どこかで切り捨ては必要だなって思う。
400 名前:デフォルトの名無しさん mailto:sage [2008/12/05(金) 09:11:27 ] printの構文くらいしか噛みつくとこないんですね
401 名前:デフォルトの名無しさん mailto:sage [2008/12/05(金) 10:00:42 ] デバッグプリントしようとしてエラー吐いたときのイラつきは異常
402 名前:デフォルトの名無しさん mailto:sage [2008/12/05(金) 10:32:16 ] >>400 printの構文くらいしか噛みつくとこないということにする以外に噛み付く方法無いんですね
403 名前:デフォルトの名無しさん mailto:sage [2008/12/05(金) 10:41:21 ] print以外に互換ない所ってどこ?
404 名前:デフォルトの名無しさん mailto:sage [2008/12/05(金) 10:44:28 ] そもそも、printの構文なんて存在しなくなったというのが正しい。 printが関数になって、関数の構文で呼び出せるようになり、 Pythonの構文がいっそうシンプルになった。
405 名前:デフォルトの名無しさん mailto:sage [2008/12/05(金) 10:46:27 ] >>400 ぶっちゃけPython3.0の新機能なんざ、後方互換性の破壊による 二重保守や移行の手間に見合うほどのもんじゃないよ、どれもこれも Python3.0のほうがより良い仕様だということは認めるが、 別に言語仕様だの性能だのの明白な強化に繋がる仕様じゃないし 単なる切り落としも多い 例えば、reduce()がbuiltinから消えて喜ぶ奴がいるか? はっきりしているのは、それでスクリプトを書き換える必要が生じる ユーザだけは沢山いるということだ 周辺ライブラリとか作ってる人たち、今後は二重保守やテストを強いられることに なんのかね 当たり前のようにC APIも仕様変わってんだろ ぞっとするぜ
406 名前:デフォルトの名無しさん mailto:sage [2008/12/05(金) 10:47:36 ] >>403 文字列の扱いは全く完璧に変わった 例外のハンドリングも構文が変わった シンタクスレベルの変更なので、スクリプト内で動的にバージョンを判断して 分岐することはできない バイトコンパイルの時点でシンタクスエラーになるからな
407 名前:デフォルトの名無しさん mailto:sage [2008/12/05(金) 10:49:24 ] 変化に対応できないじじいは史ねってことですね、分かります。
408 名前:デフォルトの名無しさん mailto:sage [2008/12/05(金) 11:02:43 ] >>405 移行したくないならどうぞそのまま Python 2.x をお使いください。 だれもあなたに移行しろと言ってませんし、俺もまだ移行しません。 1年や2年は様子見で良いよ。 ライブラリが揃いだしてから、新規のコードは Python3.0 用に書き始めれば良い。
409 名前:デフォルトの名無しさん mailto:sage [2008/12/05(金) 11:09:44 ] > ライブラリが揃いだしてから、新規のコードは Python3.0 用に書き始めれば良い。 なるほど、使ってる全部の端末に2種類のPythonインタプリタをインストールして 二重運用するわけかw そして今までのコードベースはそのやり方じゃ、3.0からは使えない、と うっかりミスでトラブル続出だな boost.pythonとかどうなるのやら
410 名前:デフォルトの名無しさん mailto:sage [2008/12/05(金) 11:11:52 ] >>409 俺は1.9、2.4、2.5、2.6、3.0全部入れてるぞ
411 名前:デフォルトの名無しさん mailto:sage [2008/12/05(金) 11:13:16 ] >>410 >1.9 Ruby厨乙(ww
412 名前:デフォルトの名無しさん mailto:sage [2008/12/05(金) 11:13:56 ] 流石反応はええな
413 名前:デフォルトの名無しさん mailto:sage [2008/12/05(金) 11:51:49 ] hoge.cppからhoge.hppを自動生成するschemeのprogramが format文(pythonのprint文)のきもい使い方駆使しまくってたんだけど 似たことpythonでもできるようになるのかい?
414 名前:デフォルトの名無しさん [2008/12/05(金) 11:59:32 ] >>405 C APIについてはどうなのか知らないけど、 通常のPythonスクリプトのプロジェクトでの2重保守のコストは、 テストを自動化してるかどうかによると思う。 変換ユーティリティ 2to3 の利用もテストを前提としてるみたいなので。 ttp://www.artima.com/weblogs/viewpost.jsp?thread=208549 より、簡単に抜粋すると。 0. テストを書く。 1. python 2.6 へ移植。 2. py3k 警告モードでテスト。 3. 警告がなくなるまで修正を繰り返す。 4. 2to3で 3.0 向けに変換。 5. 3.0 でテスト。 6. エラーがあれば変換前のコードを修正する。 7. release 手作業が必要なところ以外を自動化してしまえば、 保守コストが2倍掛かるなんてことにはならないはず。 移植コストは 2to3 がどの程度の変換をサポートしてるかに拠るのかな。 8割程カバー出来ればいいや、みたいな事言ってたを何処かで読んだけど。ソース失念。
415 名前:デフォルトの名無しさん mailto:sage [2008/12/05(金) 12:05:31 ] ttp://gihyo.jp/dev/feature/01/python3000/0004 に2to3の適用範囲についての説明はあるな その後もっとマシなものになっているのかどうかは分からんが その辺は、要求品質にもよるだろうな 業務としてやってるようなものなら、テストだって全自動で終わりとかありえねえし ゲームの自動テストでも書いてみるか?w
416 名前:デフォルトの名無しさん mailto:sage [2008/12/05(金) 12:32:19 ] C apiの変更はboost.pythonに吸収してもらえないのかねえ
417 名前:デフォルトの名無しさん mailto:sage [2008/12/05(金) 12:47:45 ] docs.python.org/3.0/c-api/concrete.html を見ると、Sequence ObjectsからString Objectsの記述は無くなって、 Bytes ObjectsだのByte Array Objectsだのが登場している。 Unicode Objectsは残っている。 strはUnicode Objectsにマップするのだろうか。 docs.python.org/3.0/c-api/arg.html を見ると、相変わらずフォーマット"s"が存在し、 「string or Unicode Objects」とか書いてある。 そしてそれが「char*に」変換する。 byteからのフォーマット指定子も追加されているが。 正直何がしたいんだか良く分からないんだが。 上っ面だけ整理して、C APIはカオスに見える。 ドキュメントが追いついていないだけか?
418 名前:デフォルトの名無しさん mailto:sage [2008/12/05(金) 13:38:36 ] まあ3.0移行とか関係なく、普通にテスト書くだろ。 テスト書かないハゲは消えろや。
419 名前:デフォルトの名無しさん [2008/12/05(金) 15:34:22 ] python 2.5/2.6 を使っているんですが、 この段階では print 文でなくて print 関数を使うようにはできませんか? future import なんとかでできたらいいなぁ、と。 いずれ python 3.0 に移行するまでのつなぎとして 今からそう書いておきたいんですが・・・
420 名前:デフォルトの名無しさん mailto:sage [2008/12/05(金) 15:36:26 ] 2.6なら from __future__ import print_function
421 名前:デフォルトの名無しさん [2008/12/05(金) 15:44:51 ] >>419 >>382
422 名前:デフォルトの名無しさん [2008/12/05(金) 16:26:39 ] いつのまにか2.6.1
423 名前:デフォルトの名無しさん [2008/12/05(金) 17:42:43 ] >>420-421 ありがとうございました. めでたく print("aiueo") できました. ところで,Python でメッセージを標準エラー出力 に出す時に簡便な方法といえば何でしょうか? やはり os.write などを使って出すのでしょうか? print2("aiueo") のような関数は標準的にはありませんか? 自分で便利関数を作ってもその存在を忘れてしまうほど 頭が弱いので,与えられたものがあればそれを使おうと思います.
424 名前:デフォルトの名無しさん mailto:sage [2008/12/05(金) 17:45:34 ] sys.stderr.write(...) print >>sys.stderr, ... print(..., file=sys.stderr)
425 名前:デフォルトの名無しさん mailto:sage [2008/12/05(金) 17:47:20 ] >>424 > print >>sys.stderr, ... これは非推奨。
426 名前:デフォルトの名無しさん [2008/12/05(金) 18:02:02 ] logging
427 名前:デフォルトの名無しさん [2008/12/05(金) 19:03:20 ] おお,logging なんてのがあるんですか. >>425 のような書き方も知りませんでした. もう一つ質問があります. 設定ファイルであれこれ設定する必要があるのですが, できれば UNIX/Windows で共通に使えるように したいと思っています.こういうときホームディレクトリ 直下に .myapplication ファイルでも用意して, その中に ConfigFile 形式や JSON 形式で設定を 書くようにすればいいのでしょうが, Windows の 場合だったらプロファイル直下かなぁ,とか, ポータブルにするための手間は惜しみたいとか考えてしまいます. アプリケーションの個人用の設定ファイルの扱い方, 特にその配置場所について,Python 流のお決まりの やり方というのはあるのでしょうか?
428 名前:デフォルトの名無しさん mailto:sage [2008/12/05(金) 19:14:45 ] レンタルサーバーでもpython3.0対応してくれたら 移行してもいいんだがな
429 名前:デフォルトの名無しさん mailto:sage [2008/12/05(金) 19:58:03 ] >>427 os.path.expanduser()
430 名前:デフォルトの名無しさん [2008/12/05(金) 20:23:29 ] >428 自分で入れればいい
431 名前:デフォルトの名無しさん mailto:sage [2008/12/05(金) 20:32:07 ] ブロックの終わりを示すキーワードを強要するオプションがほしかったな
432 名前:デフォルトの名無しさん mailto:sage [2008/12/05(金) 20:39:22 ] >>427 Pitおすすめ d.hatena.ne.jp/a2c/20081016/1224097042
433 名前:デフォルトの名無しさん mailto:sage [2008/12/05(金) 23:56:09 ] 以下の呼び出しはaがアサインされてないよと言われて失敗してしまうんですが そういうものなんですかね? def maker(a): # return lambda(c): a + c def f(c): a = a + c return a return f f = maker(3) print f(4) 左辺値のaを別の変数にすれば動きます。
434 名前:デフォルトの名無しさん mailto:sage [2008/12/06(土) 00:07:22 ] 俺はBeautiful Soupが3.0に対応するまで移行するのは待っていよう
435 名前:デフォルトの名無しさん mailto:sage [2008/12/06(土) 00:08:36 ] Python3.0ならnonlocalで出来たかと
436 名前:デフォルトの名無しさん mailto:sage [2008/12/06(土) 00:09:04 ] >>433 docs.python.org/reference/executionmodel.html#naming-and-binding If a name binding operation occurs anywhere within a code block, all uses of the name within the block are treated as references to the current block. This can lead to errors when a name is used within a block before it is bound. This rule is subtle. Python lacks declarations and allows name binding operations to occur anywhere within a code block. The local variables of a code block can be determined by scanning the entire text of the block for name binding operations. と書いてあるので、仕様だろう 結局のところletのような構文は無いのだし、それがPythonなのだと思うしかない 俺は最近はletだのvarだのmyだのが無いことの不便さのほうを感じることが 多いな
437 名前:デフォルトの名無しさん mailto:sage [2008/12/06(土) 00:19:56 ] 64になって困るのだろうか?
438 名前:デフォルトの名無しさん [2008/12/06(土) 00:30:47 ] pythonでswitch文書くにはどうしたらいいの?
439 名前:デフォルトの名無しさん mailto:sage [2008/12/06(土) 00:32:02 ] switchなんてものは無いが、別にいらんだろ パターンマッチもないよ ifで頑張れ
440 名前:436 mailto:sage [2008/12/06(土) 01:38:31 ] すまん、ちょっと意図を勘違いしていた。 >>433 は左辺も右辺も自由変数を参照したいわけだな? ならPython3ではnonlocal文でいいはずだが、 それ以前のPythonでは、自由変数に代入することはできない。 global変数にはglobal文を使うことで代入することはできるが global変数を使うこと自体稀だろう。 Schemeなどのlet文では左辺がローカルな束縛で右辺が自由変数という ケースも良く出てくるが、それもPythonではできない。 できない理由は>>436 の引用に説明されている通り。 いずれも変数宣言を持たないことによる帰結だな。
441 名前:デフォルトの名無しさん mailto:sage [2008/12/06(土) 01:41:19 ] let「文」はおかしいな まあいいか
442 名前:デフォルトの名無しさん [2008/12/06(土) 01:44:19 ] py3kについてkwskかかれた日本語まだー?w viewってなんだよviewって・・・
443 名前:デフォルトの名無しさん mailto:sage [2008/12/06(土) 01:54:06 ] >>440 ありがとうございます! エラーもはいてくれるし、ローカル変数を使うつもりが初期化を忘れて 勝手にネームバインディングされるよりはわかりやすくていいのかな。
444 名前:デフォルトの名無しさん mailto:sage [2008/12/06(土) 01:56:51 ] >>443 本当はletなどで明示したほうがいい、と俺は思うんだけどね まあ、letの3文字をタイプする手間と、それを省くことによる仕様面での制限の トレードオフを考えたときに、Pythonは手間を省く方を選んだということだ
445 名前:デフォルトの名無しさん mailto:sage [2008/12/06(土) 02:33:08 ] >>433 def maker(a): # return lambda(c): a + c def f(c, a=a): a = a + c return a return f とすればいいと思うよ。
446 名前:デフォルトの名無しさん mailto:sage [2008/12/06(土) 02:45:50 ] a += c でもだめなんかなぁ。。。
447 名前:デフォルトの名無しさん mailto:sage [2008/12/06(土) 04:45:34 ] >>438 caseが全て定数なら、辞書を使うと高速。 パターンマッチが必要なら ttp://code.activestate.com/recipes/410692/ みたいなのを拡張して使うといい。 制御構造の為に標準構文以外の独自拡張を取るのが、 可読性を損ねるという考えもあるので、無難なのは if/elif... かな
448 名前:デフォルトの名無しさん mailto:sage [2008/12/06(土) 08:40:20 ] >>442 きっと一年後ぐらいに出ます。
449 名前:デフォルトの名無しさん [2008/12/06(土) 10:07:05 ] >>431 キーワードのデフォルトはpassですねわかります
450 名前:デフォルトの名無しさん mailto:sage [2008/12/06(土) 11:16:12 ] debug=sys.stderr.write ... debug("ほげ〜")
451 名前:デフォルトの名無しさん mailto:sage [2008/12/06(土) 11:38:27 ] >>449 そうそう。対象ファイル内ではpass/return/break/continueを強要するの。だめ?
452 名前:デフォルトの名無しさん mailto:sage [2008/12/06(土) 14:37:18 ] @hoge ってどういう意味なの @の使い方がわからない
453 名前:デフォルトの名無しさん mailto:sage [2008/12/06(土) 14:43:17 ] きっと"python デコレーター"とかで検索す
454 名前:デフォルトの名無しさん mailto:sage [2008/12/06(土) 15:12:22 ] >>451 素直に、インデントによるブロックを折畳表示してくれるエディタの支援を使おう。
455 名前:デフォルトの名無しさん mailto:sage [2008/12/06(土) 15:45:10 ] wwwww wwwww wwwww wwwww wwwww ww wwwww wwwww www wwwww wwwww wwwww wwwww wwwww wwwwwww wwwww wwwww wwwwwwww wwwww wwwww wwww wwww wwwww wwwww wwww wwww wwwww wwwwwwww wwwwwwww wwwwww wwwwww wwww wwww ww ww
456 名前:デフォルトの名無しさん mailto:sage [2008/12/06(土) 18:07:31 ] a=[1,2,3,4,5] b=[5,4,3,2,1] for c,d in a,b: print c,d これできないのって仕様?
457 名前:デフォルトの名無しさん mailto:sage [2008/12/06(土) 18:21:29 ] ZIPを要求する! for c,d in zip(a,b): print c,d