Pythonのお勉強 Part75 (973レス)
1-

790: (ワッチョイ ade0-3/RT) 08/25(月)17:18 ID:CxzN3iJP0(3/3) AAS
mapレベルならジェネレータ式で書くけど
特殊な操作は明示的にmore-itertoolsつかうんで結局mapなスタイルは残るな
791: (ワッチョイ 3e01-ChDN) 08/25(月)17:47 ID:d3/9MASU0(1) AAS
内包表記もlambdaも使うのはごく単純な処理でかつside-effect freeの場合だけ
特にlambdaは関数の引数としてインラインで書けるくらいシンプルじゃなければ基本使わない

個人的にはこれが基本原則だと思ってるけどlambdaのside-effectについて明記してるstyle guideないね
792
(1): (ワッチョイ 41e8-ZAtR) 08/25(月)19:04 ID:8weJ9FR00(2/2) AAS
一般論として副作用のない式の方が望ましいのはそうだろうけど、内包表記やlambdaについて、そういう一般論を超えて副作用を避けるべき固有の事情って何かあったっけ。
自分は内包表記では(たまにlambdaでも)結構長いコードになっちゃうことがあるな。別のところに書いて名前で参照する方が分かりやすくなるならもちろんそうするんだけど、結局ここにそのまま書いた方がまだマシかなとなることが結構ある。
793: (ワッチョイ dd0f-hBFX) 08/25(月)20:04 ID:pqTCwzR00(2/2) AAS
>>792
内包表記や、lambda を引数に取るmapなどの関数は、本来的には実行順序に依存しない
副作用のある式を突っ込んでくるバカを想定するならその前提は破綻し、利用側の既存コードを破壊しないように関数の実装者は注意深く実行順序を維持しなければならなくなる
794
(1): (ワッチョイ 8610-ZAtR) 08/25(月)21:38 ID:a/zkXuf60(1) AAS
それは一般論の範囲内の話だし、そもそも高階関数の実装者側が注意深く実装すれば副作用の影響を回避できるというものでもないような。どんな副作用かも分からないんだし。
一般論として副作用を持つ式というのは可能な限り避けた方がいいよねというのは前提とした上で、たとえば自分以外がコードに手を入れることはないということが分かっているようなケースでも副作用を避けないといけない具体的な理由みたいなものがあるのかなというのが知りたかったんよ。
795: (ワッチョイ bebd-hBFX) 08/25(月)23:52 ID:N2pfjYln0(1) AAS
>>794
一般論もクソも、副作用を考慮することで複雑性が高まることは自明であり、書くのが自分だけだろうと関係ない。
account.deposit(amount)
これが実はaccountはCatクラスのインスタンスで、depositは引数に応じた声色でスピーカーから鳴き声を鳴らすメソッドで、amountには声色を指定する文字列が入っている可能性は否定できないだろう?
accountとは本当に銀行口座なのか、実はディズニーランドではないのかなどと常に疑ってかからなければならない。
しかしお前は普段そんな心配はしていない。何故か?それはお前自身や周囲の人間がそこまでのバカではないとお前が信じているからだ。
同様に、lambdaに副作用書くバカは自分含めチームにいないと信じることにするなら、lambdaを見るたびにどんな副作用があるのか、同じ引数で2度呼び出されても問題ないのか、
といった余計な心配に脳のリソースを割く必要がなくなり、生産性が向上する。
796
(3): (ワッチョイ 8610-ZAtR) 08/26(火)07:53 ID:lpW4FrXI0(1) AAS
生産性の向上っていうのが誰視点なのかって話。
高階関数の実装者側は、そもそも渡される関数の副作用に対してできることは何もない(どんな副作用かも分からないんだから当然)のだから、元々「余計な心配にリソースを割く」こと自体がない。引数として渡される関数には副作用がないか、副作用を持つとしても高階関数の処理に影響は与えないという前提で書くだけでしょ。引数として副作用のあるlambdaを渡して、それが原因で高階関数の処理に影響を与えたら、それは呼び出し側が悪いってスタンスで書くしかない。
高階関数の呼び出し側は、特に高階関数のコードが読める状況なら(典型的には自分だけで書いている状況なら)、引数として渡す関数・lambdaに副作用があったとしても、それが高階関数の処理に影響を与えるか否かを判断できる。高階関数の処理に影響を与えない副作用がある関数・lambdaを与えるのは別に問題はないのではないか、それでも何か避けた方が良い固有の問題点があるのかどうかというのか792の疑問ね。
コードを読む人は、高階関数に引数として渡される関数・lambdaには副作用がないか、副作用を持つとしても高階関数の処理に影響は与えないという前提で読むだけ。

実際に副作用のあるlambdaを書くことはほとんどないけれど、780みたいな単純な代入処理はたまにlambdaで済ませたくなることもある。そういうときに、一般論とか教条主義的なスタンスを超えた問題が何があるのかなという疑問だったんだが。
797: (ワッチョイ 6a1a-uCg5) 08/26(火)09:39 ID:tZRcIfkk0(1/2) AAS
>>796
他人とちゃんと話し合って決めろよ
798: (ワッチョイ dd8d-hBFX) 08/26(火)09:58 ID:qtH/IdiV0(1) AAS
>>796
皆がお前のようにいちいち小難しいことを考えているわけではない、ってことだ。
一定以上のレベルのプログラマであればlambdaで副作用書いてるのを目にした時点で一般常識に照らして「こいつバカじゃないのか」という疑念を持つ。
お前のように細かいことを深く考えた上でやっているとは普通は思わない。
そしてバカを疑いながらのリーディングは通常よりも注意力を要し、結果的に時間がかかる、即ち可読性は低下する。
799: (ワッチョイ 6a1a-uCg5) 08/26(火)10:13 ID:tZRcIfkk0(2/2) AAS
>>796 は仕事じゃないんだろうな
800: (ワッチョイ a9f6-ut8q) 08/26(火)11:02 ID:GdDdRaCq0(1) AAS
800get
801: (ワッチョイ 7954-IRdO) 08/28(木)07:37 ID:yOq6T87r0(1) AAS
デフォルト名前空間付きタグがどうやっても取得できない
802: (ワッチョイ 29eb-ZAtR) 08/29(金)09:32 ID:sEZGPQSB0(1) AAS
dataclassは比較的新しいモジュールだけど、急速に普及した印象がある。namedtupleより分かりやすいので良い。
803
(1): (ワッチョイ 4ad1-Y9fL) 08/30(土)18:55 ID:hbOtSRYd0(1) AAS
goやrustみたいな最初から型がある言語のほうが良かったなぁ(´・ω・`)
804: (ワッチョイ 7954-IRdO) 08/30(土)19:03 ID:qOwp6KvW0(1) AAS
むしろもっとperlみたいにゆるゆるな方が好み
805: (ワッチョイ c6b3-ZAtR) 08/30(土)19:07 ID:9+bLWO6W0(1) AAS
パフォーマンスの点と他者の書くコードに型指定を強制できないという点は仕方ないけれど、それ以外は、型で実現したいことって概ねPytnonでもできるようになってない? そうでもない?
806
(1): (ワッチョイ ca02-NWkk) 08/30(土)19:57 ID:Inltr+l10(1/2) AAS
>>803
型を明記しないと、パッと見でわからないよね
実行してデバッグしないと
807: (ワッチョイ ca02-NWkk) 08/30(土)19:58 ID:Inltr+l10(2/2) AAS
>>806
ただ、
コンパイルしないのはラクだな
808: (ワッチョイ feeb-VoZ8) 08/30(土)20:59 ID:LdU2fVxg0(1) AAS
Pythonが出てきた頃はPerl全盛だったけどCGIとかP言語はもう死語だろうな
809
(3): (ワッチョイ 132b-482X) 08/31(日)10:31 ID:GjhCFU0W0(1) AAS
python出てくる前はpython的な言語ってなんだたの?
lisp?
810: (アウアウウー Sae7-8tKF) 08/31(日)10:48 ID:8dn8jVHLa(1) AAS
当時から既に広く使われていて最もpython的と言うならTcl/Tkだよ
811: (ワッチョイ 6f6c-O/rL) 08/31(日)20:58 ID:aib5LYmb0(1/5) AAS
>>809
シェルスクリプト
もしくは
rexx
812
(1): (ワッチョイ 6f76-P3Uo) 08/31(日)21:10 ID:yW7onUoP0(1) AAS
立ち位置的にはPerlでしょ
$とか%とかだりーなーとか思いつつ、ライブラリあるしみんな使ってるから使うかーって感じだった
今もオフサイドがとかうるせーなーとか思いつつ、結局Perlの時と同じでまあ言語なんかなんでもいいかに落ち着いて使ってる
813
(1): (ワッチョイ 738e-Uwoy) 08/31(日)21:34 ID:1n2Iv0Hx0(1) AAS
シェルスクリプトの代わりにはならんかったよ
初期導入されてたのってRedHatくらいだったし
Luaみたいな組み込み言語の側面はあったから
Tcl/Tkはしっくりくる
814: (ワッチョイ a327-jRKo) 08/31(日)21:38 ID:Uf/mN+Cj0(1/4) AAS
>>809
シェルスクリプト
VBScript
815
(2): (ワッチョイ cfc5-O/rL) 08/31(日)21:38 ID:pHIfhBnQ0(1/3) AAS
awkだろにわかどもが
816: (ワッチョイ a327-jRKo) 08/31(日)21:39 ID:Uf/mN+Cj0(2/4) AAS
Pythonの言語仕様はクソだが、とりあえず無償だったのでいろんな製品に採用されただけ。
817
(2): (ワッチョイ 6f6c-O/rL) 08/31(日)21:40 ID:aib5LYmb0(2/5) AAS
>>812
>>813
perlの前がなんだったかって話だぞ
わかってんのか?
ラリーウォール自体が話してるんだが

なんだこいつらキチガイか?
818
(1): (ワッチョイ a327-jRKo) 08/31(日)21:41 ID:Uf/mN+Cj0(3/4) AAS
>>815
それはシェルスクリプト内で使うもの

なんでもawkでやるやつは昔から嫌われている。

いまでもawkで作り込まれていてメンテナンスがたいへんな業務システムがえるわ。
819: (ワッチョイ 6f6c-O/rL) 08/31(日)21:41 ID:aib5LYmb0(3/5) AAS
>>815
sed awk シェルスクリプトだな
ちゃんと書くと
1-
あと 154 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ

ぬこの手 ぬこTOP 0.012s