23/09/20 09:14:07.15 u6xixiUt0.net
●関連スレ● 自称初心者は↓へ
【まず1嫁】くだすれPython(超初心者用) その58
スレリンク(tech板)
〇前スレ〇
Pythonのお勉強 Part69
スレリンク(tech板)
次スレの建立は>>985が挑戦する。(980通過して24h後も落ちなくなった)
### END of TEMPLATE ### ?
VIPQ2_EXTDAT: default:vvvvv:1000:512:: EXT was configured
3:デフォルトの名無しさん (ワッチョイ 7ffb-p/wP)
23/09/20 09:16:07.33 u6xixiUt0.net
前スレ間違えた
Pythonのお勉強 Part70
スレリンク(tech板)
4:デフォルトの名無しさん (アウアウウー Sa53-9C00)
23/09/20 09:19:24.04 R98wQa7Ya.net
>1
先頭の三行全部消えてるぞ
やり直せ
5:デフォルトの名無しさん (ワッチョイ cf54-VRQG)
23/09/20 09:44:04.60 VS2jxSdT0.net
前スレの時点で無くなってたんだけどな
!extend:default:vvvvv:1000:1024
!extend:default:vvvvv:1000:1024
!extend:default:vvvvv:1000:1024
↑スレ立てる毎に減るので、減ってたら3つに補充すること。
6:デフォルトの名無しさん (ワンミングク MM9f-gAwE)
23/09/20 12:26:44.56 Srz1WE4FM.net
ワッチョイ知らないのに立てるやつら…
7:デフォルトの名無しさん (ワッチョイ 0f05-xDIo)
23/09/20 14:10:48.76 UfpBE+4Y0.net
ついてるから最後の一行だったんだ
それか一行だけ付けたか
8:デフォルトの名無しさん (ワッチョイ cf54-VRQG)
23/09/20 14:22:33.61 VS2jxSdT0.net
ワッショイありスレだからワッショイありにする文字列を普通に付けた
減ってたら云々の注意書きは読んでない
9:デフォルトの名無しさん (ワッチョイ cf68-qlbr)
23/09/20 20:06:31.74 H1LuggNZ0.net
わっしょい!
10:デフォルトの名無しさん (ワッチョイ cf54-VRQG)
23/09/20 20:17:28.20 VS2jxSdT0.net
3つのWをテーマとしてpythonを勉強していきます
11:デフォルトの名無しさん (ワッチョイ 8f1b-shxo)
23/09/20 22:05:58.75 Kv43bxUF0.net
最近Pythonを勉強し始めたけどなんかもう嫌になってきた
12:デフォルトの名無しさん (テテンテンテン MM4f-YL/b)
23/09/21 06:40:49.16 iHUyD9fXM.net
>>10
waste
wnko
wakiga
13:デフォルトの名無しさん (アウアウアー Sa8f-hs9u)
23/09/21 06:58:37.77 JP0yrx1ca.net
Pythonって標準ライブラリでも
reとglobで正規表現の文法違うのってなんでですか?
re, globの文法の厳密な定義みたいのが公式ドキュメントで見つからなかったのですがどこにありますか?
14:デフォルトの名無しさん (ワッチョイ ff90-xbk3)
23/09/21 08:04:41.22 Xwg3U7a60.net
他人が作ったものの仕様の理由を聞く意味はない。
他人が作った仕様に文句を言うのも意味はない。
嫌なら、自分で代わりのものを作ればいい。
15:デフォルトの名無しさん (テテンテンテン MM4f-YL/b)
23/09/21 08:28:10.71 TFH4YUGIM.net
雑談したいがための無意味な質問はやめて欲しいね
16:デフォルトの名無しさん (テテンテンテン MM4f-hQzC)
23/09/21 09:35:51.71 GkZJhn7VM.net
>>11
それは目的なく勉強してるからだろう
Pythonで作りたいものがあって勉強するのと
流行りもんだからというノリで勉強するのとではモチベが違う
17:デフォルトの名無しさん (アウアウアー Sa8f-hs9u)
23/09/21 09:37:07.46 VtU3IO45a.net
>>14
プログラミング言語は人間が使うために設計されているのでその裏にある思想を理解することは意味ありますよね
意味がないと思っているのは誤りです
18:デフォルトの名無しさん (ワッチョイ 8f30-UT3o)
23/09/21 10:08:33.58 MRVbmaTe0.net
>>13
globは正規表現ではなく、fnmatch.fnmatch()を使用したパターンマッチ。もともと違うものなので文法も違って当然
19:デフォルトの名無しさん (ワッチョイ 8f30-UT3o)
23/09/21 10:09:16.46 MRVbmaTe0.net
>>17
つまり、思想などと大層なものを持ち出す必要はない。違うものだから違うのだ
20:デフォルトの名無しさん (ワッチョイ 8f46-EWS7)
23/09/21 10:48:56.55 CLeGLuvQ0.net
>>13
下記だそうなので、perlre(1)とsh(1)を見ると良いのではないだろうかね。
URLリンク(docs.python.org)
> このモジュールは Perl に見られる正規表現マッチング操作と同様のものを提供します。
URLリンク(docs.python.org)
> The glob module finds all the pathnames matching a specified pattern according to the rules used by the Unix shell,
21:デフォルトの名無しさん (ワッチョイ 4f7f-xbk3)
23/09/21 11:53:44.87 l2X1fRqa0.net
>>16
これに尽きるな
カメラに写った数独を解く、っての作ってみてるけど楽しいぞ
PythonというよりOpenCVや画像処理の勉強になってるが
22:デフォルトの名無しさん (ワッチョイ 3f6a-NFpK)
23/09/21 12:18:15.49 RdJljcgO0.net
いいね、そういうの
もう少し基礎学習進めたらそういう画像処理を絡めたお題に挑戦してみたい
23:デフォルトの名無しさん (ワッチョイ ffcd-gAwE)
23/09/21 12:52:27.44 fwEEIjg70.net
pythonが楽で他の言語触るのがいやになったな
24:デフォルトの名無しさん (ワッチョイ cf54-VRQG)
23/09/21 13:19:09.95 vUbuGSr00.net
簡易言語でカスタマイズできる系のツールの不出来な文法に、
pythonそのまま使えよと思う
25:デフォルトの名無しさん (ワッチョイ cf01-9C00)
23/09/21 14:09:24.06 5L348Pt10.net
高度IT人材、富士通は最大年収3500万円へ
NECと富士通が人工知能(AI)人材の獲得に本腰を入れ始めた。AIやセキュリティー
などの技術の重要性が増す中、それらの高度な技術に対応できる人材(以下、
高度技術人材)の市場価値が急上昇している。企業は自社の採用活動を優位に
進めたり、他社からの引き抜きに対抗したりするために、高度技術人材に厚く
報いる新たな人事制度を模索している。こうした中、日本企業の中で際だった
動きを見せているのがNECと富士通だ。
NECは若手研究者向けに厚待遇の新人事制度を導入し、「20~30代の社員9人
に適用した」(NEC)。一方、富士通は2020年度上期中に年収2500万~3500万円
を提示できる新人事制度の導入に向けて調整中であることが、共に日経
クロステックの取材で分かった。
26:デフォルトの名無しさん (アウアウアー Sa8f-hs9u)
23/09/21 15:58:35.06 qJLQqtSya.net
>>18
ありがとうございます。勉強になりました。
27:デフォルトの名無しさん (アウアウウー Sa53-9C00)
23/09/21 16:40:22.85 2fMT8T96a.net
>>24
Excelのことですね判ります
28:デフォルトの名無しさん (ワッチョイ 8f1b-shxo)
23/09/21 17:39:53.63 3+rVBsX80.net
>>16
そういうのじゃなくてさ
C#とかと比べると言語仕様やフレームワークのあまりのクソさにうんざりしてくる
無理やりオブジェクト指向にしてみました感がそこかしこに感じられる
29:デフォルトの名無しさん (ワッチョイ cf54-VRQG)
23/09/21 17:52:26.27 vUbuGSr00.net
ルールはゆるい方が作りやすい
いちいち自分で申請書書いて自分で受理してからしか飯が食えない生活とか嫌だろ
30:デフォルトの名無しさん (ワッチョイ cf5e-63EM)
23/09/21 18:08:20.40 qrfAaXPq0.net
自分はC#よりpythonを触る時間が多くなった
31:デフォルトの名無しさん (テテンテンテン MM4f-hQzC)
23/09/21 18:56:08.52 GkZJhn7VM.net
>>28
比べなきゃいいじゃん
明日までにこのソフトをPythonで作らないと首になるみたいな状況じゃないんだろ
JavaやC#で済むならそれでよし
32:デフォルトの名無しさん (テテンテンテン MM4f-YL/b)
23/09/21 19:05:31.00 TFH4YUGIM.net
>>28
嫌ならやめれば良いじゃん
誰も困らんよ
33:デフォルトの名無しさん (ワッチョイ 0f01-xbk3)
23/09/21 19:18:10.84 IjVngpsR0.net
numpyはベクトル演算だから初心者にはちょっと理解しづらいはず
といってnumpyはpythonの最高のライブラリだからこれを避けて学ぶわけにもいかない
ベクトル演算とはどういうものかを基礎から習得していくしかないな
34:デフォルトの名無しさん (ワッチョイ cf54-VRQG)
23/09/21 19:29:17.42 vUbuGSr00.net
numpyは要らない人はずっと要らない
必要な人は既にベクトルくらい知ってる
35:デフォルトの名無しさん (ワッチョイ 0f79-R902)
23/09/21 19:37:19.62 4pc6shKb0.net
ベクトルの実装の話をしています
36:デフォルトの名無しさん (ブーイモ MM5f-C+1d)
23/09/21 19:41:34.82 Ni0t8F+aM.net
Real Programmers Don't Use Python.
37:デフォルトの名無しさん (ワッチョイ ff90-xbk3)
23/09/21 19:46:13.19 Xwg3U7a60.net
>>28
外人が日本に来て、日本人のここが変って言うのを時々耳にする。
君、その外人と被るね。
38:デフォルトの名無しさん (ワッチョイ 8f93-C+1d)
23/09/21 20:15:07.00 y6bj8vwO0.net
Real Programmers Don't Use Python.
39:デフォルトの名無しさん (ワッチョイ 3f02-NfV8)
23/09/21 20:24:03.75 KmHbWfTj0.net
エクセルに乗るって話、どうなった?
40:デフォルトの名無しさん (ワッチョイ 0f01-7CbB)
23/09/21 21:58:17.13 8LL53Ggb0.net
>>33
ベクトル演算をしたいならFortran, Julia, MATLAB, Octave, Rなどを使った方が良い。
Pythonなんかで無理な真似事をやる必要はない。
41:デフォルトの名無しさん (ワッチョイ 0f57-hbIC)
23/09/21 22:13:43.64 fgR5jZhk0.net
>>40
程度問題
ベクトル演算といっても必ずしも大量データとは限らない
大体Pythonで書いてるプログラムの中で少しだけベクトル演算したいならPythonで書きたいと思うだろう
いちいち外部コマンド呼び出しとかFFIとか面倒だし
(まあNumPyはFFIのお化けみたいなものという話もあるけど)
明らかに数値解析用に作られた言語以外の、
広く使われる言語の中ではNumPyは結構使いやすいのは事実だし、
そう思えないなら他の言語でベクトル演算やったことないだろと言いたくなる。
42:デフォルトの名無しさん (テテンテンテン MM4f-YL/b)
23/09/21 22:40:39.81 QsWfOxg8M.net
それぞれがやり易い方法でやれば良いだけ
持論を押し付けるのはあたたたおか
43:デフォルトの名無しさん (ワッチョイ 8f1b-shxo)
23/09/21 22:58:08.04 dRpJWBnA0.net
>>31
非力なLinuxPC使ってるからまず開発環境自体を入れるのが手間
オープンソースでクロスプラットフォームでデフォルトでGUIに対応している言語となると限られてくる
でもWindowsアプリケーションの開発環境の歴史を繰り返しているような錯覚に囚われて萎える
44:デフォルトの名無しさん (ワッチョイ ff02-lu2b)
23/09/22 00:18:31.36 OBzsDe6x0.net
仮想環境つくるとき「venv」ディレクトリとしてる?
それとも「.venv」ディレクトリとしてる?
Linux環境でも仮想環境があることが分かるのでvenvディレクトリとしてるのだけど
.venvにした方が何かいいことあるのかな?
45:デフォルトの名無しさん (ワッチョイ 3f81-mbMR)
23/09/22 06:44:10.29 fANmuK6u0.net
Ruby のベクトル演算には、C で作られたNArray がある
速度は、NumPy, Octave にも匹敵する
46:デフォルトの名無しさん (ワッチョイ 3f81-mbMR)
23/09/22 06:53:13.62 fANmuK6u0.net
>>44
漏れは日本人が作った、多言語バージョンマネージャーのanyenv を使う。
同様のツールに、asdf もある
対応言語
Renv, crenv, denv, erlenv, exenv
goenv, hsenv, jenv, jlenv, luaenv
nodenv, phpenv, plenv, pyenv, rbenv
sbtenv, scalaenv, swiftenv, tfenv
echo $(anyenv root)
/home/ユーザー名/.anyenv
echo $(rbenv root)
echo "$RBENV_ROOT"
/home/ユーザー名/.anyenv/envs/rbenv
echo $(nodenv root)
echo "$NODENV_ROOT"
/home/ユーザー名/.anyenv/envs/nodenv
ドット有りの隠しフォルダー以下の階層
/home/ユーザー名/.anyenv
47:デフォルトの名無しさん (ワッチョイ cf54-VRQG)
23/09/22 07:44:43.00 ePK3KDDi0.net
適当なディレクトリにあるbatファイルに
python process1.py %1
みたいに書いてあるとする
別の場所には
python process2.py %1
という内容のbatがあって、それぞれ要求するバージョンや環境が違うとする
このままでは動かないけど、どう修正すると環境を指定して起動できる?
48:デフォルトの名無しさん (ワッチョイ 3f7d-Mp0W)
23/09/22 08:27:30.76 omzcMDXg0.net
>>47
venvつかう
49:デフォルトの名無しさん (ワッチョイ cf54-VRQG)
23/09/22 08:44:39.13 ePK3KDDi0.net
コマンドラインからvenv使って今からここはバージョンいくつ、みたいにすれば
そこを使う環境が変わるのは判るけど、そんなことを意識せずにbatファイルからやれる気がしない
c:\python2\python.exe
と
c:\python3\python.exe
みたいに明示的にbatファイルに書いてしまうなら判る
でもvenvの方向はそうじゃない
50:デフォルトの名無しさん (アウアウウー Sa53-9C00)
23/09/22 09:25:04.84 dkRHHNCea.net
python2 process1.py %1
python3 process2.py %1
でよろし
51:デフォルトの名無しさん (ワッチョイ cf54-VRQG)
23/09/22 09:30:23.93 ePK3KDDi0.net
それをvenvで実現する方法
52:デフォルトの名無しさん (アウアウウー Sa53-9C00)
23/09/22 10:00:57.22 dkRHHNCea.net
>意識せずに
それは無理な相談
53:デフォルトの名無しさん (ワッチョイ cf55-Mp0W)
23/09/22 10:02:32.27 5tqxap7l0.net
>>49
venvではバージョン指定できないぞ
それぞれのpythonでvenvつくって、>>47のpythonコマンド実行するまえにvenv有効化すえうだけ
54:デフォルトの名無しさん (ワッチョイ 3f7d-Mp0W)
23/09/22 10:29:08.07 omzcMDXg0.net
ていうか、venv有効化するのもコマンド一つだしbatに1行増えるだけやん
55:デフォルトの名無しさん (ワッチョイ cf54-VRQG)
23/09/22 10:51:32.07 ePK3KDDi0.net
それを知りたいという話なんだけど
後片付けも要るから2行?
56:デフォルトの名無しさん (アウアウウー Sa53-9C00)
23/09/22 11:18:53.51 dkRHHNCea.net
池沼か
57:デフォルトの名無しさん (ワッチョイ 7f33-Mp0W)
23/09/22 11:33:43.46 V3n+vAsd0.net
>>55
お前の主張は>>49だろ
どこからvenvの使い方教えてくださいに変わったんだよ
58:デフォルトの名無しさん (ワッチョイ ff90-xbk3)
23/09/22 13:01:58.55 UkJanLOo0.net
相手しないほうがいいよ。
59:デフォルトの名無しさん (ワッチョイ 0f01-nyFJ)
23/09/22 13:10:23.39 cezsAHx60.net
各バッチスクリプト内でvenv有効化/無効化するのはなんか違うよね
せめてdirenvみたいなので自動で有効化/無効化したほうがいいと思うけど
Windowsでそれができるツールがあるのかは知らない
そういうツールがないようならvenvだけだと面倒だからPipenv使えばいいと思う
それぞれのディレクトリでPipfile整備して`pipenv run python process1.py %1`みたいにすればいい
Python自体のバージョン指定と依存ライブラリのバージョン指定をPipfileで一括管理できるので管理や環境の再構築が楽
60:デフォルトの名無しさん (ワッチョイ cf54-VRQG)
23/09/22 13:16:23.44 ePK3KDDi0.net
Pipenv調べてみる
もうenvいろいろありすぎ
多分それぞれにあんまり便利じゃなくて決定版が無いんだろうな
61:デフォルトの名無しさん (ワッチョイ 4f05-hs9u)
23/09/22 14:07:29.76 bGXmAjFl0.net
Windowsはデフォルトでpyランチャーがあるからバージョン管理とても簡単だけどmacは大変らしい
62:デフォルトの名無しさん (ワッチョイ cf54-VRQG)
23/09/22 14:10:58.23 ePK3KDDi0.net
py.exeが別のpythonを呼び出す時に引数をうまく渡してくれないので、
それはそれで使いたくないんだよな
63:デフォルトの名無しさん (ワッチョイ cf55-Mp0W)
23/09/22 15:08:22.77 5tqxap7l0.net
>>55の1行ですむ後片付けってなに?
venv使う使わないはもうどうでもいいから、これだけ教えてくれ
64:デフォルトの名無しさん (ワッチョイ ff7b-lf6v)
23/09/22 15:37:47.85 el8Vm2jw0.net
BATの中は新しい環境だからdeactivateいらんのがわかってない
65:デフォルトの名無しさん (ワッチョイ cf55-Mp0W)
23/09/22 18:03:31.10 5tqxap7l0.net
venvという名の全く別物である可能性も
66:デフォルトの名無しさん (アウアウウー Sa53-p/wP)
23/09/22 18:39:03.50 7nC0Dploa.net
素人はpipとconda以外さわるな
homebrewとか絶対使っちゃだめだぞ
おちんちん大っきくなっちゃくからな
67:デフォルトの名無しさん (ワッチョイ cf54-VRQG)
23/09/22 21:52:59.89 ePK3KDDi0.net
え、venvって環境変数だけで実現してるの?
68:デフォルトの名無しさん (アウアウクー MM23-hs9u)
23/09/22 23:08:38.83 EWgIfaOrM.net
環境がぶっ壊れないことと、作業ディレクトリに必要なライブラリがすべて入るポータブル性だけ要求するならvenvは高機能すぎる気がするけど、
容量の効率性無視でとにかく使いたいスクリプトが動くように全て作業ディレクトリに環境用意してくれるようなライブラリってあるんですかね
69:デフォルトの名無しさん (ワッチョイ ff7b-lf6v)
23/09/22 23:16:15.48 el8Vm2jw0.net
venv --copiesのこと?
共有ライブラリの依存も嫌ならPython本体をスタティックリンクするとか
70:デフォルトの名無しさん (ワッチョイ d35d-cyss)
23/09/23 01:44:58.14 HGxCD3ya0.net
>>61
MacでもWinでもLinuxでもpyenvとpoetryで実行環境のバージョンは同じコマンドで管理できるよ。
71:デフォルトの名無しさん (スップ Sd4a-bMOT)
23/09/23 07:19:29.70 aQF8TmPAd.net
>>62
py.exeって引数をうまく渡してくれないの?
72:デフォルトの名無しさん (ワッチョイ 63ad-IPbP)
23/09/23 07:39:16.67 d+5nAcW50.net
virtualenvでいいじゃん
73:デフォルトの名無しさん (アウアウウー Sacf-PB4I)
23/09/23 09:43:23.24 i9fpyxKga.net
>>68
anacondaにしとけ
74:デフォルトの名無しさん (ワッチョイ 1ecf-WMZf)
23/09/23 09:49:00.12 s8duiTph0.net
>>49
venv環境の中にはそれぞれpython.exeが置いてあるからそのパスを直接指定すれば同じことができる。
75:デフォルトの名無しさん (オイコラミネオ MM0b-WMZf)
23/09/23 10:07:24.48 CxeGIQq5M.net
こんにちは
久しぶりにpython触ったら明示的な型指定が導入されたみたいで喜んでたけど
実際は型を無視した代入や引数を渡せてしまうねw
型ヒントで何も制約できないんだな
これを有効に活用できる局面ってなんなんだ?
VSCodeでもエラー表示などがないんだけどプラグイン次第で何かしてくれるのかな?
76:デフォルトの名無しさん (ワッチョイ 8a7d-GA9g)
23/09/23 10:20:35.22 BABnIcFf0.net
>>74
それvenv使う意味ないだろ
77:デフォルトの名無しさん (テテンテンテン MMc6-k5Et)
23/09/23 11:26:41.25 o5mjK/05M.net
>>75
型ヒントは型指定必須の言語から来た開発者のアレルギーを抑えるための間に合わせ機能
純粋なPythonユーザーには百害あって一利なし
78:デフォルトの名無しさん (ワッチョイ 6f54-CSnM)
23/09/23 12:30:04.78 /sRqhdcI0.net
型ヒントはそれ単体では役立たなくても、開発環境と合わせると便利になる
79:デフォルトの名無しさん (ワッチョイ 2b99-IWg1)
23/09/23 12:54:39.76 adi3U+Mp0.net
型アレルギー持ちPythonユーザーが炙り出されたようだな
80:デフォルトの名無しさん (テテンテンテン MMc6-1ddl)
23/09/23 13:11:46.73 9zAj6sEFM.net
型型やかましいわ
pydantic使えよ
81:デフォルトの名無しさん (ワッチョイ ffd4-JuM4)
23/09/23 17:55:51.88 AkoBTn5S0.net
型ヒントつけないとインテリセンスにでてこないからつけるわ
82:デフォルトの名無しさん (ワッチョイ 1ecf-WMZf)
23/09/23 20:55:02.75 s8duiTph0.net
動的型付けスクリプト言語で規模が大きくなってきたら「ここにはこんなデータが来る」って
コメントを書いておかないと訳が分からなくなる。
それを処理系でチェックしてくれて間違いを減らせるようになったようなもの。
83:デフォルトの名無しさん (ワッチョイ 1ecf-WMZf)
23/09/23 20:55:14.77 s8duiTph0.net
動的型付けスクリプト言語で規模が大きくなってきたら「ここにはこんなデータが来る」って
コメントを書いておかないと訳が分からなくなる。
それを処理系でチェックしてくれて間違いを減らせるようになったようなもの。
84:デフォルトの名無しさん (ワッチョイ 6f54-CSnM)
23/09/23 21:00:22.56 /sRqhdcI0.net
処理系でチェックしないやん、という話
85:デフォルトの名無しさん (ワッチョイ 0ada-sj2L)
23/09/23 21:41:01.16 piK9W+al0.net
mypy使ってるけど型推論が貧弱なのでもっと強力にして欲しい
86:デフォルトの名無しさん (ワッチョイ 1ecf-WMZf)
23/09/23 21:47:50.75 s8duiTph0.net
>>84
処理系と開発環境は別物って話?
87:デフォルトの名無しさん (ワッチョイ 6f54-CSnM)
23/09/23 21:57:53.53 /sRqhdcI0.net
コンパイラとかインタプリタとかCPUが処理系
エディタとかドキュメントは処理系じゃない
学校の理系の建物付近にある食堂の名前が「お食事処理系」で、処理系にしか見えなかった
88:デフォルトの名無しさん (ワッチョイ 1ecf-WMZf)
23/09/23 22:24:50.97 s8duiTph0.net
なるほど、じゃあそれでいいよ。自分の認識じゃあ構文解析は処理系の範疇だったんでああ書いただけで。
89:デフォルトの名無しさん (テテンテンテン MMc6-1ddl)
23/09/23 23:23:06.47 lai5+1qVM.net
どうでもいいことだよな
誰か困ってるヤツいるのかね?
90:デフォルトの名無しさん (オイコラミネオ MM0b-WMZf)
23/09/23 23:38:08.29 CxeGIQq5M.net
正直なところ俺が困ってるw
tsみたいな仕組みでいいからどこかで型チェックを保証してくれw
91:デフォルトの名無しさん (ワッチョイ 1efb-xg+T)
23/09/23 23:51:47.49 VsKxPq+H0.net
構文解析と字句解析が近藤さんの人ガイル
92:デフォルトの名無しさん (ワッチョイ 1efb-xg+T)
23/09/23 23:53:03.90 VsKxPq+H0.net
音速衝撃波!!
93:デフォルトの名無しさん (ワッチョイ 1efb-xg+T)
23/09/23 23:53:47.10 VsKxPq+H0.net
(((( 💪
94:デフォルトの名無しさん (ワッチョイ 1ecf-WMZf)
23/09/24 00:01:09.63 9leOLZhk0.net
>>90
やってることはあまり変わらんけどな。tsはトランスパイルというステップがあるから
そこでエラーとしてはじいているだけで、
Types as Comments だと python と同じような感じなんだろうな。
95:デフォルトの名無しさん (オイコラミネオ MM0b-WMZf)
23/09/24 00:02:06.03 Oioe+GVvM.net
>>94
実行時はチェックされないけどどこかのステップで解釈されてる
それでいい
96:デフォルトの名無しさん (ワッチョイ 1ecf-WMZf)
23/09/24 00:11:10.51 9leOLZhk0.net
>>91
そこは字句解析じゃなくて意味解析じゃないか?
97:デフォルトの名無しさん (テテンテンテン MMc6-k5Et)
23/09/24 07:37:29.76 Ri8XQsCRM.net
>>90
型宣言とカッコを省略したことでコードをシンプルに保つ方向に振りきったのがPythonという言語
それをなぜ崩そうとするのか
型ヒントを使ったコードを見たことがあるか?
あんなのはもうPythonじゃない
頼むから大人しくC#やJavaを使っててくれ
98:デフォルトの名無しさん (テテンテンテン MMc6-1ddl)
23/09/24 08:15:46.12 hltzsV5kM.net
>>90
ないものは無い
自分で作れないなら
他に移ればすむ話
99:デフォルトの名無しさん (アウアウウー Sacf-PB4I)
23/09/24 09:30:39.81 2YTVyUlCa.net
>>87
お食事処理係
に観えた
100:デフォルトの名無しさん (アウアウウー Sacf-PB4I)
23/09/24 09:33:06.56 2YTVyUlCa.net
>>97
そうだな
そこまで型にこだわりたいならRust使えば良いのにって思う
きっとあほなんだろう
101:デフォルトの名無しさん (アウアウウー Sacf-PB4I)
23/09/24 09:33:53.86 2YTVyUlCa.net
>>97
大事な事描き忘れた
Nimでも良いよ
102:デフォルトの名無しさん (ワッチョイ a70d-IWg1)
23/09/24 10:58:42.55 Kcpwutr20.net
型ヒントに親でも殺されたのか?
使いたくなければ使わないだけの話なのに
103:デフォルトの名無しさん (ワッチョイ bbb1-4mfa)
23/09/24 11:02:47.99 +gAzw3Ne0.net
python使ってると、もうC++で書くきがしないよね。
104:デフォルトの名無しさん (ワッチョイ 6f54-CSnM)
23/09/24 11:05:04.02 RJSP/rbZ0.net
Cでは今でも書いてるけど、C++は書いたことないな
拡張子だけcppで複素数とか使ってるけどクラスは使ってない、程度なら書いた
105:デフォルトの名無しさん (ワッチョイ 0ada-sj2L)
23/09/24 13:17:50.18 9U+Q8xyt0.net
python使いたくないんだけどpythonにしかないライブラリを再発明するパワーもないので仕方なく使っている
106:デフォルトの名無しさん (ワッチョイ 6f54-CSnM)
23/09/24 13:23:16.93 RJSP/rbZ0.net
こんなソフト無いかなと検索しても、windows用が無くてandroid用しか見つからないようなもんか
107:デフォルトの名無しさん (ワッチョイ ffe3-JuM4)
23/09/24 13:29:34.13 l4Xb0TnP0.net
>>103
pythonでQt触っててC++でも触ってみたらC++も良くなっててこっちでもいいやんって思ったけど
ライブラリ探したりコンパイルするの面倒くさく感じてやめた
108:デフォルトの名無しさん (アウアウウー Sacf-PB4I)
23/09/24 13:42:18.77 2YTVyUlCa.net
>>105
Nim使えばいい
109:デフォルトの名無しさん (ワッチョイ 1e34-oA3n)
23/09/24 14:31:18.01 CVj1/D3K0.net
C++はソフトウェアに最小限必要な制約の記述と
最適化に関する記述を分離できていない
全部ごっちゃ
その意味ではRustも大差ない
110:デフォルトの名無しさん (ワッチョイ 1ecf-WMZf)
23/09/24 15:03:52.20 9leOLZhk0.net
>>108
pythonのライブラリ使えるのか?
111:デフォルトの名無しさん (スフッ Sdaa-TrDt)
23/09/24 15:21:16.70 PsXnhINod.net
馬鹿には無理
112:デフォルトの名無しさん (ワッチョイ bbb1-4mfa)
23/09/24 15:34:59.57 +gAzw3Ne0.net
>>107
Python/Qt 最高だよね。
もう、ヘッダーファイルを書くなんて面倒で面倒でw
113:デフォルトの名無しさん (ワッチョイ ab1b-zG+p)
23/09/24 15:44:30.62 a7FFFuge0.net
Qtが企業だと知って萎えた
無料で仕事してくれる人なんていないよね
114:デフォルトの名無しさん (ワッチョイ 0ada-sj2L)
23/09/24 17:14:53.18 9U+Q8xyt0.net
>>108
Nim使うからRust使うわ
115:デフォルトの名無しさん (ワッチョイ a7a7-iHBT)
23/09/25 08:05:09.08 or0ZXPD90.net
>>97
型宣言付けたら自動補完きくからコード書きやすいだろ
バグ取りも圧倒的に楽だし
他人のコード読むなら絶対あったほうが楽
見た目が醜いのはそうだけど静的型チェックなんだから自分しか使わないならいらないと感じたとこで消せばいい
Pythonはカッコ少ないのは美点だと思うけどじゃあprintもカッコなくして文に戻してよって思う
116:デフォルトの名無しさん (ワッチョイ a7a7-iHBT)
23/09/25 08:08:58.57 or0ZXPD90.net
型チェックを憎むやつの正体
・IDE嫌いの老害
・メソッド名や属性名を全て覚えておりどの変数に何が入っているか全て知っている天才
・簡単で汎用性の極めて乏しいスクリプトしか書かない人
・numpyなどで実質型指定の恩恵を受けている
117:デフォルトの名無しさん (ワッチョイ 86fc-4KCz)
23/09/25 08:47:06.87 doWFzkf50.net
>>115
静的型チェックではないぞ
118:デフォルトの名無しさん (ワッチョイ 6f54-CSnM)
23/09/25 09:07:43.95 rxWsx5B/0.net
文字か数かは見れば判るし、
リストとか辞書の場合は、変数名をそうしておかないと型チェック以前に書くのに困る
なんちゃってハンガリアンで十分
現状困ってないのに型チェックを導入するのは、理不尽なコーディング規約みたいなもので、
慎重になった方がいい
119:デフォルトの名無しさん (アウアウクー MM63-iHBT)
23/09/25 09:45:41.16 c51+DnWAM.net
>>117
型付けが動的なだけで型チェックは静的
120:デフォルトの名無しさん (ワッチョイ 6f54-CSnM)
23/09/25 09:52:10.17 rxWsx5B/0.net
型付けの静的/動的とチェックの静的/動的は意味が違う
121:デフォルトの名無しさん (ワッチョイ 6ae2-IWg1)
23/09/25 10:44:27.45 rOgiuc6x0.net
現状困ってなくてもエディタの入力補完の恩恵を受けられるようになるのは大きなメリットだと思うけどな
122:デフォルトの名無しさん (ワッチョイ 46ef-rDwG)
23/09/25 11:19:52.99 2mEvB7200.net
>>118
強制されてないんだから恩恵がない天才派はそれでOK
じぶんは名前に型含んでたらレビューで難癖つけるけどね
123:デフォルトの名無しさん (ワッチョイ 6f54-CSnM)
23/09/25 11:33:59.63 rxWsx5B/0.net
for data in data_list:
とかよく書くけどな
複数形を使うのはあんまりいい方法と思えない
124:デフォルトの名無しさん (アウアウクー MM63-iHBT)
23/09/25 12:04:10.57 c51+DnWAM.net
x_intとかx_strみたいな変数名のことじゃなくて?
型アノテーションなかった頃は見てわかる変数名はいいアイディアだったと思うけど今はアノテーション使って書くな
data_listみたいな名付けはする
datas, xsは最悪だと思うけどx_listだと長過ぎるように感じて悩んでる
この辺ってルールあるの?
125:デフォルトの名無しさん (ワッチョイ ea5c-ALFE)
23/09/25 12:38:00.66 zuFHd0dz0.net
datumの複数形がdata
もしくは不可算名詞の単数形としてのdata
datasは間違い
126:デフォルトの名無しさん (ワッチョイ 6f54-CSnM)
23/09/25 12:47:41.75 rxWsx5B/0.net
リストは複数形、というルールにしたとしても、辞書はどうするんだっていう
名前に型含めると噛みつくうざい人がいたとしても、含めた方がいい
127:デフォルトの名無しさん (ワッチョイ 1efb-xg+T)
23/09/25 12:56:23.29 sPLXdhtl0.net
オナーニばかりしてんちゃうぞ
pep8の通りにやることめざしゃ
128:デフォルトの名無しさん (アウアウウー Sacf-PB4I)
23/09/25 12:59:59.83 RmxLVxNPa.net
それ良く言われるけど
英文法の例外に合わせる必要なんてない
hogeがあったら機械的にhogesにする
Railsでも採用されてるnameイングルール
129:デフォルトの名無しさん (ワッチョイ 1e46-w4ab)
23/09/25 13:00:41.69 3JRaW9kj0.net
>>116
> 型チェックを憎むやつの正体
> ・IDE嫌いの老害
「型」を寧ろ老害扱いしてたんじゃ。
130:デフォルトの名無しさん (アウアウウー Sacf-PB4I)
23/09/25 13:01:12.12 RmxLVxNPa.net
datasをdata_seriesの略だとする言い訳もある
131:デフォルトの名無しさん (ワッチョイ e3ed-IWg1)
23/09/25 13:01:37.98 QOTHJNXA0.net
型の判別のためではなく、それが何かを表すために変数名にdicを含めることは普通にあるだろう
結果として型名が含まれてるだけであってそれをレビューで弾く必要はなかろう
132:デフォルトの名無しさん (ワッチョイ 46ef-rDwG)
23/09/25 13:05:46.35 2mEvB7200.net
ほんとに辞書ならdictでいいよ
request_header_dict
は止めてほしい
133:デフォルトの名無しさん (ワッチョイ e3ed-IWg1)
23/09/25 13:41:51.05 QOTHJNXA0.net
意味、役割が辞書的なものなら実際の型によらずdictでも別にいいと思うけどな
134:デフォルトの名無しさん (ワッチョイ 6f54-CSnM)
23/09/25 13:49:27.17 rxWsx5B/0.net
perlは楽だった
$dataと@dataと%dataが同時に使えて、
リストなのか辞書なのか見ただけで判るし名前で苦労しない
135:デフォルトの名無しさん (ワッチョイ 1e46-w4ab)
23/09/25 14:10:52.93 3JRaW9kj0.net
>>134
ハンガリアン記法で代替すりゃいいじゃない。
136:デフォルトの名無しさん (ワッチョイ 6f54-CSnM)
23/09/25 14:18:03.40 rxWsx5B/0.net
まあ、@dataとdata_list、%dataとdata_dictが同じものなので、
記号で書くか文字列で書くかの違いだけなんだけど
実際、perlから移植する時はそんなふうに機械的に置き換えてる
137:デフォルトの名無しさん (スプッッ Sd4a-+j9z)
23/09/25 19:20:02.88 BYuYgOypd.net
>>118
>文字か数かは見れば判るし、
それが通用する程度のプロジェクトなら必要性を感じられなくてもしょうがない
138:デフォルトの名無しさん (ワッチョイ 6f54-CSnM)
23/09/25 19:33:05.13 rxWsx5B/0.net
規模が大きくなると訳が判らなくなっても仕方ない
という諦めに抗い続けたのが言語の進化の歴史なんよ
139:デフォルトの名無しさん (ワッチョイ 0602-oehB)
23/09/25 19:38:40.05 sd9Bn/Fb0.net
処理系は処理系で必死に変数の型をなくそうと努力し、
利用する側は利用する側で変数の型を意識しやすくしようと努力する
140:デフォルトの名無しさん (ワッチョイ 6f54-CSnM)
23/09/25 20:02:55.68 rxWsx5B/0.net
一部の人が苦しい思いをしながら型を意識して書いたライブラリを、
大半の人は型なんか意識せずに気軽に使う、という分業が今のところの正解なのだろう
一つの言語だけで全体をカバーするのは無理
141:デフォルトの名無しさん (ワッチョイ 1ecf-WMZf)
23/09/25 20:19:47.64 v3kx0nZB0.net
>>140
「見ればわかる」程度のコードしか書かない人にとってはそうかもしれないが
そんなんばっかりなわけはないからな
142:デフォルトの名無しさん (ワッチョイ 6f54-CSnM)
23/09/25 20:28:32.03 rxWsx5B/0.net
見れば判るコードが一番いいコードなんだよ
なんで難解さをドヤれるんだ
143:デフォルトの名無しさん (オイコラミネオ MM0b-WMZf)
23/09/25 20:33:17.65 9KhxBWdoM.net
伸びてるな
>>142
そういう意味じゃないでしょうw
144:デフォルトの名無しさん (ワッチョイ 1ecf-WMZf)
23/09/25 20:34:55.62 v3kx0nZB0.net
>>142
単純に規模が大きくなるだけでも「見ればわかるとは言えなくなるだろうに。
それともお前の頭じゃ関数定義するだけで難解なコードなのか。
145:デフォルトの名無しさん (ワッチョイ bb48-NSUt)
23/09/25 20:35:22.38 +xNGfQXE0.net
フェレイゼンも30年の研究の結果
プログラミングには型が必要だとわかったといってた
146:デフォルトの名無しさん (オイコラミネオ MM0b-WMZf)
23/09/25 20:39:42.84 9KhxBWdoM.net
小さいプログラムしか書かない人は型が要らないと言う
別に書くことを強制されてるわけでもないのに
小さくてもファイル3個ぐらいに別れてたら絶対型がいる
147:デフォルトの名無しさん (ワッチョイ 0690-44ew)
23/09/25 20:43:06.80 i7V/7hMm0.net
設計書ないの?
148:デフォルトの名無しさん (ワッチョイ 1efb-xg+T)
23/09/25 20:45:48.37 sPLXdhtl0.net
自己満オナニー主義者としてはやはりPEP8くらいマスターしておきたいよなー
自分で読んでわかるのも2・3年後に読んだらわからんくなる人もいるし
いつも同じオナニーばっかりの人はどっちよりに曲がっていても気付かないものだしな
149:デフォルトの名無しさん (ワッチョイ 1efb-xg+T)
23/09/25 20:47:01.71 sPLXdhtl0.net
Pythonを研究で使う人って設計書書かないっしょ
あとから必要になったときにリファクタリングするついでに設計書書く感じじゃね
150:デフォルトの名無しさん (オイコラミネオ MM0b-WMZf)
23/09/25 20:48:13.53 9KhxBWdoM.net
なんだか見てると頭が痛くなるな
py界はちょっと参加者が違う
151:デフォルトの名無しさん (スプッッ Sd4a-+j9z)
23/09/25 20:49:47.51 BYuYgOypd.net
>>138
その言語の進化の歴史に型ヒント、型チェックは含まれるの?
152:デフォルトの名無しさん (ワッチョイ 0690-44ew)
23/09/25 20:50:39.88 i7V/7hMm0.net
なんで研究前提になっているかは知らんが、
システム・ライフ・サイクルがある程度の期間であれば設計書は作成するでしょ。
記憶できない規模なら、なおさら。
153:デフォルトの名無しさん (オイコラミネオ MM0b-WMZf)
23/09/25 20:58:58.46 9KhxBWdoM.net
趣味のプログラムならそんなものは作ってないだろう
最初はモジュール含めてトータル3000行だったものが1万行オーバーとか普通だし
154:デフォルトの名無しさん (オイコラミネオ MM0b-WMZf)
23/09/25 21:07:13.67 9KhxBWdoM.net
#データ読み込み
#加工
#ライブラリに渡す
#結果�
155:vロット しかやってない人は型はいらないというだろうけどこれでも型はいると思う
156:デフォルトの名無しさん (ワッチョイ 1e34-oA3n)
23/09/25 21:35:08.48 zzoLmi2T0.net
本当に必要なのはデータを取り違えない適切なアノテーション
型自体は最適化の領分
157:デフォルトの名無しさん (オイコラミネオ MM0b-WMZf)
23/09/25 21:44:51.84 9KhxBWdoM.net
実現したいことが30行程度の人はある意味幸せなのかも
158:デフォルトの名無しさん (ワッチョイ 8701-DeI3)
23/09/25 22:11:48.17 SlvnoeIB0.net
>>142
>見れば判るコードが一番いいコードなんだよ
これに尽きる
見ればわかるコードにするのはそれなりにスキルいるからね
159:デフォルトの名無しさん (ワッチョイ ff9e-IWg1)
23/09/25 22:42:07.31 p/yzOgz90.net
それに対する>>144の
>単純に規模が大きくなるだけでも「見ればわかるとは言えなくなるだろうに。
にID:rxWsx5B/0がどう返答するのか注目
160:デフォルトの名無しさん (ワッチョイ 0602-oehB)
23/09/25 22:51:51.12 sd9Bn/Fb0.net
「見れば分かる」にもいろいろ解釈の余地があるからな
何を見たのか、断片なのか全体なのか
何が分かったのか、その断片の処理なのか全体の機能なのか
161:デフォルトの名無しさん (ワッチョイ 6f54-CSnM)
23/09/25 22:56:08.31 rxWsx5B/0.net
規模が拡大すると、全体で何をしているのかが把握できない
という事実を振り回しているだけに見える
そんなのは当たり前の話で、だから細かく細分化したり抽象化できるようになってる
その細分化された最小パーツの段階で型ヒントが必須かどうかは、
全体の規模とは無関係な話
162:デフォルトの名無しさん (ワッチョイ 1ecf-WMZf)
23/09/25 23:00:29.29 v3kx0nZB0.net
>>157
>見ればわかるコードにするのはそれなりにスキルいるからね
そこをツールでサポートできれば楽になるわけだよね
163:デフォルトの名無しさん (スップ Sdaa-bMOT)
23/09/25 23:20:29.62 ExPntN/Hd.net
メリット・デメリットがあるなら
使い分ければいいじゃん
164:デフォルトの名無しさん (ワッチョイ bbb1-4mfa)
23/09/25 23:30:04.95 EXdIEqjr0.net
2万行ぐらいのプログラムは、大きい? 小さい?
165:デフォルトの名無しさん (スプッッ Sd4a-+j9z)
23/09/25 23:43:41.98 BYuYgOypd.net
>>160
ある関数が取るパラメータの型は何か、返す値の型はなにか
その関数自体だけからでは読み取れない場合は中の処理を順に追っていく必要に迫られる
そして規模が大きくなるにつれてその探索範囲も広く深くなっていく
型ヒントの有用性は最小パーツ(数行程度の関数)であってもプロジェクトの規模に応じると考える方が自然では?
166:デフォルトの名無しさん (ワッチョイ abc0-jswk)
23/09/26 00:04:04.98 qxNS/0+Y0.net
一見動いてるけど間違ってるのを認知する助けになるから型チェックは有難い
特に凡人ほど恩恵を受けやすい
167:デフォルトの名無しさん (ワッチョイ 1ecf-44ew)
23/09/26 00:46:46.76 cCYCck9J0.net
VSCodeとか開発環境使ってれば圧倒的にタイプ数が違う
168:デフォルトの名無しさん (テテンテンテン MMc6-1ddl)
23/09/26 06:46:24.36 fBLAaznsM.net
絶対に譲歩の無い議論をいつまでやるつもりなんだ
無能で暇だと言うことしか解らないぞ
169:デフォルトの名無しさん (ワッチョイ a79d-iHBT)
23/09/26 08:36:34.19 m7WWnQHX0.net
見ればわかるコードが一番ってその通りでそれを実現するのがアノテーションなのでは?
型チェッカー入れてなくてもstrとかintとか書いてあるだけで多少便利でしょ
170:デフォルトの名無しさん (ワッチョイ ffbf-4KCz)
23/09/26 10:30:03.44 FeH8Ispq0.net
>>165
テスト書いてないの?
171:デフォルトの名無しさん (ワッチョイ a79d-iHBT)
23/09/26 12:24:57.32 m7WWnQHX0.net
>>169
テスト書くとしてもテスト書くときにどの関数をどの型の変数が通過して…って考える必要あんだから、書かない理由にはならないでしょ
テストきちんと書くほど細心でなんで型アノテーションしないの
172:デフォルトの名無しさん (ワッチョイ a79d-iHBT)
23/09/26 12:28:49.95 m7WWnQHX0.net
俺はそこまでしてないけど、実行時に入った変数の型見て自動でアノテーション生成してくれるツールとかもあったはず
研究、実験とか数学に使いたい人が、思考が阻害されるからつけないっていうのはわかるよ
そうじゃないのに型アノテーションに反抗してる人は、正しい道具を使ってないから文句が出るだけだと思うわ
それか用途が限定されてる小規模コードしか書いてない
173:デフォルトの名無しさん (ワッチョイ ab1b-zG+p)
23/09/26 16:30:57.25 lxwVAsqB0.net
そもそも型で躓く人はプログラミングに向いてないと思うんだよね
174:デフォルトの名無しさん (ワッチョイ 0a7f-hriW)
23/09/26 20:52:38.66 WQhrHw+N0.net
Pydanticっていうライブラリがあってだなぁ
175:デフォルトの名無しさん (ワッチョイ 0a7f-hriW)
23/09/26 20:53:40.62 WQhrHw+N0.net
>>172
まぁそれはそうだけど
JSなんかは型の曖昧さが逆に間口広くなって使う人が増えてるまであるから
176:デフォルトの名無しさん (ワッチョイ 4623-rDwG)
23/09/26 21:32:08.30 t9DgueCM0.net
TS触ってJSなんかにもう戻りたくないと思うかどうか
177:デフォルトの名無しさん (ワッチョイ 86aa-4KCz)
23/09/27 00:31:04.87 G2/rCfPl0.net
>>170
「テスト書かずに型ヒント書く」笑えない
178:デフォルトの名無しさん (ワッチョイ 8e3a-IWg1)
23/09/27 00:55:33.55 tcNPn/P00.net
>>170のどこをどう読んだら「テスト書かずに型ヒント書く」になるのか
179:デフォルトの名無しさん (ワッチョイ 0690-44ew)
23/09/27 06:30:10.21 ddIA8xfv0.net
修飾語(英語でいう目的語)がない文章に反応するから、こいういう事になる。
文章として不十分なレスはスルーが基本。
180:デフォルトの名無しさん (アウアウウー Sacf-PB4I)
23/09/27 11:16:50.05 OOPn+kCla.net
>>165
WindowsのAPIはboolを還す定義されていても3値戻って来たりするからな
181:デフォルトの名無しさん (ワッチョイ eb7d-4BVt)
23/09/30 00:30:05.29 KBI1seNT0.net
tk.tk (NG用)
更に家族等などに教えて、更に¥4000×人数をGET!
URLリンク(i.imgur.com)
182:デフォルトの名無しさん (ワッチョイ 25e1-cApS)
23/09/30 00:39:07.13 Q20RaGpG0.net
>>180
金盗まれる詐欺な
183:デフォルトの名無しさん (ワッチョイ 2552-zT9n)
23/09/30 01:56:52.88 xT2aB7fT0.net
>>180
これは知らなかった
184:デフォルトの名無しさん (ワッチョイ cb46-Q3QL)
23/09/30 07:00:11.33 5PlfPHl00.net
>>180
グロ
185:デフォルトの名無しさん (テテンテンテン MMcb-q/Ng)
23/09/30 10:20:59.78 1bpEmQaSM.net
型ヒントの導入には正直かなりショックを受けた
シンプルを旨とするPython運営がこれほどの愚行を犯すとは
コードのタイプ量は3割増しになってPythonの良さは大幅に失われるだろう
そうなる前に古いバージョンのインストールファイルをこまめに保管しておくしかない
186:デフォルトの名無しさん (ワッチョイ cbcf-VEJP)
23/09/30 10:45:18.53 B+iPWXEz0.net
使いたくなきゃ使わんでもいいってのが型ヒントのいいとこやぞ
187:デフォルトの名無しさん (ワッチョイ cbfb-pXm+)
23/09/30 11:07:31.76 +PzIRgSu0.net
働きたくない
188:インボイス導入 (アウアウウー Sa89-5C2y)
23/09/30 11:41:27.50 +WV6fTrGa.net
働いたら負け
189:デフォルトの名無しさん (ワッチョイ 7590-uznD)
23/09/30 12:01:20.00 5U2odjyx0.net
使うときも全部に型ヒント付ける必要もないしな
関数の引数に付けるだけでも効果十分
190:デフォルトの名無しさん (アウアウウー Sa89-5C2y)
23/09/30 12:36:44.89 +WV6fTrGa.net
結局チェックされないなら間違ってても通ってしまう訳で
間違ってると内容と矛盾してどっちが本当か判らなくなって
信用出来なくなって毎回内容確認するハメになって
結局効率悪くなる害悪でしかない
191:デフォルトの名無しさん (スッップ Sd43-zllv)
23/09/30 12:41:17.31 kPlTAx4gd.net
チェックされない型ヒントもどきはない方がいい
書いたならちゃんと有効活用しろ
192:デフォルトの名無しさん (ワッチョイ cbcf-VEJP)
23/09/30 13:01:40.58 B+iPWXEz0.net
>間違ってると内容と矛盾してどっちが本当か判らなくなって
どういう状況を想定してるんだろうか。
193:)
23/09/30 14:46:33.30 1cX5xto90.net
Pythonの文法を頑なに守りつつオブジェクト指向プログラミングを続けようという涙ぐましい努力
194:デフォルトの名無しさん (ワッチョイ 5501-ehUN)
23/09/30 15:22:12.31 yB2FVVQo0.net
>>180
とっくに全員やってね?
195:デフォルトの名無しさん (ワッチョイ cb46-Q3QL)
23/09/30 15:55:47.06 BfD477rw0.net
>>189
関数入出力情報のドキュメントが信用できないってのは、適宜メンテしてね! 以外にどうしようも無いんじゃね。
196:デフォルトの名無しさん (ワッチョイ 051b-voBv)
23/09/30 17:28:50.98 1cX5xto90.net
まあどうせ観念していずれ型宣言も文法に組み込むんだろうけどさ
197:デフォルトの名無しさん (ワッチョイ 7d86-uznD)
23/09/30 19:14:27.46 hQVVFgf/0.net
>>189
具体的なサンプルコードで状況説明してくれる?
198:デフォルトの名無しさん (ワッチョイ 2585-2pcI)
23/09/30 22:47:55.23 JXMtOmCl0.net
仕事でExcelファイルを処理することになった
Pythonだけでどうにしようとしたけど、限界がきてVBA触ってる
色々つらいけど、特に開発環境がつらい
199:デフォルトの名無しさん (ワッチョイ 0d54-XGbB)
23/09/30 23:01:40.77 XalifVE+0.net
図形とかグラフとかは辛いな
excelがメインの処理の場所ならpythonでやれることは限界がある
入力データを用意するとか、設定を書いて実行ボタン押すとか、
最終結果を出力するとか、UI部分だけ使うには向いてる
200:デフォルトの名無しさん (テテンテンテン MMcb-q/Ng)
23/09/30 23:05:22.23 bqOz9PdWM.net
またこの手の泣き言野郎か
今の開発者ってのは環境をお膳立てしてもらわないと何もできんのか?
設計さえちゃんとできていればテキストエディタとコマンドプロンプトで十分
201:デフォルトの名無しさん (ワッチョイ 0d54-XGbB)
23/09/30 23:09:50.32 XalifVE+0.net
C言語の頃は全てを記憶で書いただろうけど、
どうせ覚えられないしエディタがヒント出せばええやん、という方針で言語がデザインされるので、
装備ゼロで戦うのは大変よ
202:デフォルトの名無しさん (ワッチョイ 2585-2pcI)
23/09/30 23:11:24.29 JXMtOmCl0.net
入力データがexcelファイルなんよな
203:デフォルトの名無しさん (テテンテンテン MMcb-q/Ng)
23/09/30 23:27:08.82 bqOz9PdWM.net
>>201
Excel案件は最初からVBA一択
つらいのは適していない用途に使われて泣き言言われてるPythonだわ
204:デフォルトの名無しさん (ワッチョイ 2585-2pcI)
23/09/30 23:39:17.77 JXMtOmCl0.net
>>202
VBAで書き始めてからそれは思いました
205:デフォルトの名無しさん (ワッチョイ 0d54-XGbB)
23/09/30 23:42:41.06 XalifVE+0.net
何をしてるのかは知らんけど
入力データだけ吸い取ったらもうexcelは閉じて、pythonで処理して、
結果だけexcelファイルに書き出すのが楽
206:デフォルトの名無しさん (ワッチョイ 2d13-2aFX)
23/09/30 23:42:39.73 yu70ioeQ0.net
CSVから読み込んで計算して上書きしてるよ
207:デフォルトの名無しさん (ワッチョイ 2585-2pcI)
23/09/30 23:55:19.79 JXMtOmCl0.net
そういう事もしたりしてたけど、インプットがexcelファイルのみでファイルによってはデータにプロテクトかかってたりしてたから
結局VBAで処理するのが楽なんだろうなって感じでした
208:デフォルトの名無しさん (ワッチョイ cbfb-pXm+)
23/10/01 00:53:30.98 P28FwVlb0.net
マクロもパスワードロックして自分以外編集できないようにするのって大切よな
Pythonだと丸見えで編集されて動かなくなる件
209:デフォルトの名無しさん (ワッチョイ 1bbd-o1LZ)
23/10/01 02:02:26.24 +M66ZcTD0.net
半年もすればPython in Excelで書くのが当たり前になってそう
210:デフォルトの名無しさん (ワッチョイ 2546-Q3QL)
23/10/01 09:45:50.70 sO86DvxC0.net
>>208
VBAは出来ないことが大杉だからね、クラス継承とか。
211:デフォルトの名無しさん (ワッチョイ 2dc1-NV1v)
23/10/01 12:17:25.51 bcUAnMXT0.net
Python in Excelあっても全部任せられるわけじゃないんしょ
212:デフォルトの名無しさん (ワッチョイ 2d2e-2aFX)
23/10/01 12:23:49.16 vEz6IuND0.net
あんま組み込んでもファイルをヒトにわたせんからな
213:デフォルトの名無しさん (ワッチョイ 0d54-XGbB)
23/10/01 12:24:20.33 n0Tp64cO0.net
セルに関数書く代わりにpythonで書くみたいな感じでしょ
マクロを置き換えるものではなかったような
214:デフォルトの名無しさん (ワッチョイ 051b-voBv)
23/10/01 12:58:36.47 SOIhx71S0.net
いつの間にかVisual Pythonになって更にVisual Python.NETになる
215:デフォルトの名無しさん (ワッチョイ e317-cP1N)
23/10/01 13:33:03.77 o43+uB+s0.net
VBAは有償の開発ツールでも使わないとテストランナーもなければバージョンコントロールもめちゃくちゃやりにくい
Visual Studio使ってるならExcel-DNAやVSTO使ってなるべくVBAの量を減らしたほうが開発効率的に保守性的にも断然いいよ
ExcelをGUIをインタラクティブに使う必要がなくて入力データとして使うだけならPythonでも充分
216:デフォルトの名無しさん (アウアウウー Sa89-pXm+)
23/10/01 14:01:56.09 72iWkL15a.net
パネルビューの信頼性と選択問題についてちょっと考えてみた
多分おおよそこんな感じだとおもう
若いほうがいいか、BBAがいいかはプロパティで編集する必要がある
URLリンク(i.imgur.com)
217:デフォルトの名無しさん (アウアウウー Sa89-pXm+)
23/10/01 14:02:04.25 72iWkL15a.net
パネルビューの信頼性と選択問題についてちょっと考えてみた
多分おおよそこんな感じだとおもう
若いほうがいいか、BBAがいいかはプロパティで編集する必要がある
URLリンク(i.imgur.com)
218:デフォルトの名無しさん (アウアウウー Sa89-pXm+)
23/10/01 14:02:28.46 72iWkL15a.net
パネルビューの信頼性と選択問題についてちょっと考えてみた
多分おおよそこんな感じだとおもう
若いほうがいいか、BBAがいいかはプロパティで編集する必要がある
URLリンク(i.imgur.com)
219:デフォルトの名無しさん (ワッチョイ 4b9e-AYcZ)
23/10/01 14:50:51.48 SyN7rZqG0.net
>>213
IronPythonはどうなる?
220:デフォルトの名無しさん (ワッチョイ 7505-jiCb)
23/10/01 18:59:05.62 PNwI3bEh0.net
IronPythonといえばJythonどうなったんだっけ?
221:デフォルトの名無しさん (ワッチョイ 9b02-baYP)
23/10/02 16:48:55.66 YC0PCAgZ0.net
「UTF-8でエンコードされたバイト列」の文字列を、バイト列として扱い、
そのバイト列をデコードした結果を得たい、と思ってます
たとえば「鈴木」という文字列をUTF-8にエンコードすると
print("鈴木".encode("utf-8"))
b'\xe9\x88\xb4\xe6\x9c\xa8'
こんな風になるかと思います
ここで、文字列として"\xe9\x88\xb4\xe6\x9c\xa8"を用意し、
それをバイト列として扱ってデコードした結果である「鈴木」を、
変数resultに格納するための方法を教えてください
print(b"\xe9\x88\xb4\xe6\x9c\xa8".decode("utf-8"))
と、頭に「b」を置いて文字列を直接続ければ表示はできることは分かったのですが、
こうではなく、文字列は変数strとして与えたいです
str = "\xe9\x88\xb4\xe6\x9c\xa8"
result = bytes(str).decode("utf-8")
等とやってみましたが、うまくいきませんでした
222:デフォルトの名無しさん (アウアウウー Sa89-pXm+)
23/10/02 17:15:45.40 KwMtPnpga.net
>>220
URLリンク(i.imgur.com)
223:デフォルトの名無しさん (ワッチョイ 9b02-baYP)
23/10/02 17:32:06.38 YC0PCAgZ0.net
>>221
回答ありがとうございます
この場合、変数bは「b"\xe9\x88\xb4\xe6\x9c\xa8"」と表現される
バイト列になっているので、そのままデコードできるのだと認識してます
説明が難しくて申し訳ないのですが、
変数bが「"\xe9\x88\xb4\xe6\x9c\xa8"」という、頭にbのつかないテキストの
文字列となっており、その文字列を、バイト列に変換するか何かして、
UTF-8としてデコードした結果を得たいと思ってます
224:デフォルトの名無しさん (ワッチョイ cb7b-p502)
23/10/02 17:55:59.56 1Dl/aSKe0.net
print(str.encode('latin-1').decode("utf-8"))
225:デフォルトの名無しさん (ワッチョイ 25a6-wXmr)
23/10/02 18:29:10.08 h+g/GQYs0.net
>>220
バイト列リテラル(b"...")を表した文字列を作って ast.literal_eval()
URLリンク(ideone.com)
226:デフォルトの名無しさん (ワッチョイ 9b02-baYP)
23/10/02 18:43:27.99 YC0PCAgZ0.net
>>223
情報ありがとうございました
動作しました
動作する詳細の原理はもう少し調べてみますが、
latin-1にエンコードしたうえで、utf-8にデコードする、という処理が
たしかに動作しそうですが、後にソースを見る人に伝わりづらいかもですね…
>>224
情報ありがとうございました
こちらでも動作しそうですね
活用させていただきます
このideone.comというサイトは面白そうですね
こちらも活用していこうと思います
227:デフォルトの名無しさん (ワッチョイ 9b90-AvD6)
23/10/02 18:44:51.23 FS0/fzQ10.net
>>220
こんな感じ?
import binascii
name = '鈴木'
bin = name.encode('utf-8') # utf-8のエンコード
binstr = bin.hex() # binの文字列化
bin2 = binascii.unhexlify(binstr) # bytesに
name2 = bin2.decode('utf-8')
print(name2)
228:デフォルトの名無しさん (ワッチョイ eb01-JbMN)
23/10/02 18:54:23.88 k2BlTluO0.net
自分のコード内でencode(‘utf8’)してるのなら
byteオブジェクトを持ち回るか最初からfromhex()で読める形のstrにしておく
string = “鈴木”.encode(‘utf8’).hex()
bytes.fromhex(string).decode(‘utf8’)でok
外部のファイルとかに\xで記載されてるものなら
読み込んだ時に\\xになるのでreplaceしてやればok
229:デフォルトの名無しさん (アウアウウー Sa89-5C2y)
23/10/03 11:47:59.45 QaeBAOHSa.net
>>220
>>222
223 で FA だけど(pythonに慣れた人なら 223 一瞬観ただけで何やってるか判るから)
敢えて 220 222 が理解出来る描き方にするなら
>>> str = "\xe9\x88\xb4\xe6\x9c\xa8"
>>> bytes(ord(c) for c in str).decode('utf-8')
'鈴木'
230:デフォルトの名無しさん (ワッチョイ 0d54-XGbB)
23/10/03 12:18:33.94 XmURfba80.net
input.txt
\xe9\x88\xb4\xe6\x9c\xa8
f = open('input.txt')
str = f.read()
こういう話だと思って見てたけど
231:デフォルトの名無しさん (アウアウウー Sa89-5C2y)
23/10/03 13:19:39.91 QaeBAOHSa.net
>>229
>>> str = r'\xe9\x88\xb4\xe6\x9c\xa8'
>>> bytes(ord(c) for c in bytes(ord(c) for c in str).decode('unicode-escape')).decode('utf-8')
'鈴木'
232:デフォルトの名無しさん (アウアウウー Sa89-5C2y)
23/10/03 13:25:10.14 QaeBAOHSa.net
>>223 使うならこれでもok
>>> str = r'\xe9\x88\xb4\xe6\x9c\xa8'
>>> str.encode('latin-1').decode('unicode-escape').encode('latin-1').decode('utf-8')
'鈴木'
233:デフォルトの名無しさん (ワッチョイ 0d54-XGbB)
23/10/03 14:02:33.32 XmURfba80.net
unicode escapeじゃないやん
ただの2桁十六進数やん
234:デフォルトの名無しさん (ワッチョイ 2dae-bCT0)
23/10/03 14:10:54.27 lqxRC9/W0.net
>>37
print(
"本(和書)のジャンル一覧|アマゾン"
"\n"
"h" "tt" "ps://www.ama" "zon.co" ".jp/b?node=465610"
)
235:デフォルトの名無しさん (オイコラミネオ MMd1-kmCf)
23/10/03 14:40:19.82 ZtbTtZfzM.net
>>1
コピペで動画を作れたのだが、
今回やってみたら動画が死んでいる、
なぜなんだろう、、、
236:デフォルトの名無しさん (アウアウウー Sa89-5C2y)
23/10/03 15:33:43.66 QaeBAOHSa.net
>>232
\xe6\x84\x9fji\xe6\x82\xaai\xe3\x82\x88
237:デフォルトの名無しさん (ワッチョイ 43c3-cP1N)
23/10/03 20:24:55.63 uE2hlhlx0.net
プログラム内にリテラルで\xhh形式の文字列を書くくらいなら最初から'鈴木'かb'\xe9\x88\xb4\xe6\x9c\xa8'で十分でしょ
わざわざ異なる文字列として解釈されうる値を書く意味がわからない
プログラムパズルとかそういう話なのかな?
238:デフォルトの名無しさん (ワッチョイ 0d54-XGbB)
23/10/03 20:30:14.37 XmURfba80.net
> 変数bが「"\xe9\x88\xb4\xe6\x9c\xa8"」という、頭にbのつかないテキストの文字列となっており
というのは r"\xe9\x88\xb4\xe6\x9c\xa8" の意味だろうと
コードに埋め込む訳は無いので、ファイルなり通信なりで入力されるのだろうと
239:デフォルトの名無しさん (スッップ Sd43-IetE)
23/10/03 21:13:02.23 wlkvtDKRd.net
URLリンク(menu.5ch.net)
ここの文字化けも素人がやらかしたんだろうな
240:デフォルトの名無しさん (ワッチョイ 2db8-cP1N)
23/10/03 23:07:00.18 /3Vxa5Hd0.net
>>237
そういう話であれば>>227が書いてるように文字列から\xを除去してfromhexがいいと思う
fromhexとdecode時にそれぞれエラーが出る可能性があるのでエラーハンドリングは必要
241:デフォルトの名無しさん (ワッチョイ 1b3e-o1LZ)
23/10/03 23:15:37.13 3QaR5cka0.net
いっそCodec自作するのがよい
242:デフォルトの名無しさん (ワッチョイ 8501-IetE)
23/10/04 19:48:31.85 vlFi92ca0.net
matplotlibでファイルとかWebAggにグラフを書き出すとき、show()する度に過去のグラフの上に新しいグラフが追加されていくじゃないですか。
show()する度にウインドウをリフレッシュして新しいグラフだけ表示するようにしたいんですが、そのためには毎回show()のあとにclose()かclf()するしかないですかね?
matplotlibの設定か何かでshow()の後のcloseを強制化か自動化する方法があったらご教示ください。
243:デフォルトの名無しさん (ワッチョイ 0d54-XGbB)
23/10/04 20:10:48.56 PXW0isNe0.net
グラフはなんかどうやっても面倒で、
その原因は隅々まで人間が指定できてしまうことにあるので、
不自由だけど全部やってくれる系のが出るのを待ってる
244:デフォルトの名無しさん
23/10/04 23:28:39.66 q7y7rPWzM.net
>>241
グラフ描画はNotebookかColab使うべき
だって静的にイメージは描画させたいしいじるのは動的にやりたいだろ
notebookはそれを完全に解決する
それ以外の解決法はない
245:デフォルトの名無しさん
23/10/05 01:09:23.57 2PZdepi20.net
ロジックをどのようにすれば以下のような処理を実現できるか悩んでいて、知恵を拝借したいです…
何か良い方法はないでしょうか?
【前提条件】
◯ある配列があり、先頭から順に1日に3件ずつ処理しています
◯その配列には辞書が格納されています。キーの一つに処理日付カラムがあり、最後に処理された日付が格納されています
◯配列の末尾に到達すると、処理対象は先頭に戻ります
【実現したいこと】
配列の中のある一つのインデックスを選んだ時、そのインデックスが示す辞書が次に処理される日付を求める
246:デフォルトの名無しさん
23/10/05 01:46:17.44 XUo8TI11M.net
配列の長さが固定でないなら長さが変わる法則がわからないので計算しようがない
固定なら長さを3で割って書いてある日付に足すだけでは?
247:デフォルトの名無しさん (オイコラミネオ MMd1-VEJP)
23/10/05 07:27:27.90 Q+rj3wnZM.net
python3.11.1からpython3.12.0に更新したら追加したモジュールがないってエラーになるんですが
更新するたびにモジュール入れなおさないといけないのですか
248:デフォルトの名無しさん (ワッチョイ cb7b-p502)
23/10/05 09:03:11.32 nAkSGUCB0.net
>>244
>◯配列の末尾に到達すると、処理対象は先頭に戻ります
俺にはここの意味がわからん
249:244 (ワッチョイ 25a7-skpN)
23/10/05 09:37:49.75 2PZdepi20.net
配列の長さは固定としてよいのですが、長さを3で割って日付に足すやり方は配列の長さが3の倍数でないと使えないと思うんです。
250:デフォルトの名無しさん (ワッチョイ 25a7-skpN)
23/10/05 09:41:08.11 2PZdepi20.net
>>247
例えば配列の長さが10だとすると、インデックス0〜2が1日目、3〜5が2日目、6〜8が3日目に処理されます。
4日目は末尾に到達し、9, 0, 1が処理対象となるという意味でした。
251:デフォルトの名無しさん (ワッチョイ 25a7-skpN)
23/10/05 09:41:08.94 2PZdepi20.net
>>247
例えば配列の長さが10だとすると、インデックス0〜2が1日目、3〜5が2日目、6〜8が3日目に処理されます。
4日目は末尾に到達し、9, 0, 1が処理対象となるという意味でした。
252:デフォルトの名無しさん (ワッチョイ cb7b-p502)
23/10/05 09:52:04.06 nAkSGUCB0.net
>>250
格納するための配列が1つで、最大格納数が設定されてるって事ね?
格納する時の辞書を{‘day’:day,’contents’:[contentsA,contentsB,contentsC]}
みたいにしたらあかんの?
もしくは配列のmax数を3の倍数にしとくか。
max数が3の倍数にできなくても指定したインデックスの前後2つずつ調べれば済むだけだと思うけど。
253:デフォルトの名無しさん (ワッチョイ 0d54-XGbB)
23/10/05 09:54:53.37 R2cxF7x40.net
3を固定にしないでいくつでもいいけど実際は3でしか使わない
という設計がいい
254:デフォルトの名無しさん (アウアウアー Sa2b-1W5y)
23/10/05 10:25:35.56 MScw1o+3a.net
>>249
3×日数を配列の長さで割れば、ある日付けにどこを読んでいるかが計算できる
なので前回読まれた時にその日の処理の中で0番目1番目2番目のどれだったのか記録しておけば直接計算できる
あるいは配列の2つ前までが前回処理された日付を読んでもいい
Pythonの問題とかじゃなくて算数の問題じゃないか?
配列の長さがNとしたら3N日ごとに全く同じパターンが繰り返されるから、最初に3N日分計算すれば永遠に同じパターンが使える
上のやり方や3で割った余りで分類する関数を書いてもいいが最初に計算するパターンのほうがミスりづらいので俺ならこっちで書きそう
255:デフォルトの名無しさん (アウアウアー Sa2b-1W5y)
23/10/05 10:25:53.00 MScw1o+3a.net
>>249
3×日数を配列の長さで割れば、ある日付けにどこを読んでいるかが計算できる
なので前回読まれた時にその日の処理の中で0番目1番目2番目のどれだったのか記録しておけば直接計算できる
あるいは配列の2つ前までが前回処理された日付を読んでもいい
Pythonの問題とかじゃなくて算数の問題じゃないか?
配列の長さがNとしたら3N日ごとに全く同じパターンが繰り返されるから、最初に3N日分計算すれば永遠に同じパターンが使える
上のやり方や3で割った余りで分類する関数を書いてもいいが最初に計算するパターンのほうがミスりづらいので俺ならこっちで書きそう
256:デフォルトの名無しさん (アウアウアー Sa2b-1W5y)
23/10/05 10:35:41.65 MScw1o+3a.net
それプログラミングじゃなくて算数の問題だからプログラミングのお題スレとかに書くと喜ばれるよ
dictのまま書くなら2つ前までの要素がいつ処理されたのかを読んで余りで処理するしかないけどめんどいから常人はやらない
辞書を継承した自作クラスにして前回どこを読んだかのカウンターを付ける
これで次回読まれるのがいつかが計算できる
257:デフォルトの名無しさん
23/10/05 11:58:22.11 1QWCM3G80.net
>>244
恐らくfor~range(~)で処理しようとしているんでしょ?
while~で処理すればいいと思いますよ。
258:デフォルトの名無しさん
23/10/05 12:04:19.81 1QWCM3G80.net
それか
for i in range(start_idx, start_idx+3):
if i>=len(list_x): i -= len(list_x)
~本処理~
259:デフォルトの名無しさん (ワッチョイ 0d54-XGbB)
23/10/05 12:10:07.58 R2cxF7x40.net
do whileが無いので、代わりに無限ループにしておいて、
whileの条件が成立しなかったらbreakで抜けるというのが標準の書き方だけど、
やっぱり低級に見える
260:デフォルトの名無しさん (ワッチョイ 2361-tvb5)
23/10/05 13:24:00.30 Rw+E7y8Y0.net
>>246
pythonはマイナーバージョン毎に共存できるようになってるのだから入れ直すというか新たにモジュール入れてやらないとだめ
261:デフォルトの名無しさん
23/10/05 18:46:58.77 ZQpyEfNY0.net
>>244
学校の宿題とかパズルとかならいいんだけど
現実のシステムだと変更に弱くなるから
最後に実行された日付に不必要に依存すべきでないと思う
次はどのインデックス位置からいつ処理を実行するのかといった進捗状態を
配列とは別に保存しておいてそれをもとに計算したほうがいい
イテレータと同じイメージ
262:デフォルトの名無しさん
23/10/05 20:25:01.10 86J8E1XoM.net
>>259
そうなんだありがとう
モジュールはメモしておいた方がよさそうだ
263:デフォルトの名無しさん
23/10/05 20:28:43.13 86J8E1XoM.net
pip freezeでパッケージの一覧を作成できるのか
色々導入していたわ
264:デフォルトの名無しさん
23/10/06 10:15:56.07 Zl0hPCVya.net
なんで特定のバージョンに依存する描き方をしたがるんだろ
265:デフォルトの名無しさん (ワッチョイ e3ff-uznD)
23/10/06 16:14:40.86 IoTyA8+w0.net
>>263
これどういうこと?
266:デフォルトの名無しさん
23/10/06 19:45:56.36 1GaBjHDa0.net
dockerとかrequirements.txtとか再現性高めようとすると
必然的に特定のバージョンに依存するような書き方になると思うのだが。
最新バージョンで過去のバージョンの描き方してる、とかいう元も子もない前提条件なら知らんけど
267:デフォルトの名無しさん
23/10/06 22:02:44.19 fyVU6Crm0.net
>>243
そのポリシーに賛同するかどうかはともかく、質問への回答にはなっていない
268:デフォルトの名無しさん
23/10/06 22:02:55.99 fyVU6Crm0.net
>>243
そのポリシーに賛同するかどうかはともかく、質問への回答にはなっていない
269:デフォルトの名無しさん
23/10/07 00:23:30.85 BGf9xocdM.net
func( *l if a else l )
条件分岐で
*l と l
渡せると思ってたら
func( *(l if a else l) )
だった
親lがリストのときは*lで
親lがリスト以外のときは[l]
ってやりたいときこれでいいのかな
def func(*args):
print( list(*args) )
l=[{"a":1},{"b":2},{"c":3}]#[["a",1],["b",2]]
#l={"d":4}
func(*(l if isinstance(l,list) else [l]) )
#[{'a': 1}, {'b': 2}, {'c': 3}]
#[{'d': 4}]
270:デフォルトの名無しさん
23/10/07 00:26:09.11 sH3Ijf0D0.net
typeを使うのでは
271:デフォルトの名無しさん (ワッチョイ 6e41-GmSQ)
23/10/07 02:03:39.77 RYTHxcGi0.net
では、とは?
272:デフォルトの名無しさん
23/10/08 10:38:55.23 CrdCteTPa.net
あるいは func(*l) if isinstance(l, list) else func(l)
あるいは func(*l) if type(l) is list else func(l)
273:デフォルトの名無しさん
23/10/08 13:04:34.27 DaqKIDwO0.net
func if func的に2度func書くメリットがいまいちわからん
274:デフォルトの名無しさん
23/10/08 13:16:17.82 +xSVm5Mx0.net
三項演算子だからでは
275:デフォルトの名無しさん
23/10/08 13:40:38.67 RkxvDOHc0.net
Pythonの三項演算子カコワルイ
C言語とかの方がパッと見て解りやすい。
(isinstance(l, list)) ? func(*l) : func(l) ;
276:デフォルトの名無しさん
23/10/08 13:52:37.91 +xSVm5Mx0.net
コロンにそうでなければ、という意味を持たせる文化圏は無い
277:デフォルトの名無しさん
23/10/08 14:06:28.33 KpUyeA1F0.net
funcに返り値があったとして
f = func if func
f["res"]
# or
res = ( func if func )["res"]
またfunc内に引数分岐処理を隠蔽できる可能性を残したとして
func if func的に2度func書くメリットがいまいちわからん
278:デフォルトの名無しさん
23/10/08 14:47:59.95 CrdCteTPa.net
>>274 ほんそれ
三項演算子のマクロか関数みたいなのがあったとして
tri(isinstance(l, list), func(*l), func(l))
でもまだましだったと思う
279:デフォルトの名無しさん
23/10/08 14:54:32.17 CrdCteTPa.net
>>276 みたいなのがいるから
true のときの func と false のときの func が常に同じことが確実な場合
tri(isinstance(l, list), func, (*l), (l))
でも良いが
280:デフォルトの名無しさん
23/10/08 15:02:00.39 kixUsqHh0.net
値を返せるifを追加してくれる方がうれしいわ
実装は関数のシンタックスシュガー
281:デフォルトの名無しさん
23/10/08 16:02:51.80 J25crwC10.net
値を返せるifって例えばなんですか
282:デフォルトの名無しさん
23/10/08 16:17:18.80 +xSVm5Mx0.net
むしろ値を返す方が主流だろうに
283:デフォルトの名無しさん
23/10/08 16:57:27.95 Er3q4bv00.net
同じ関数を呼ぶのにアンパックするかしないかの条件分岐をさせるのは
あまり筋がよくないように感じるんだけど俺だけかな?
284:デフォルトの名無しさん
23/10/08 17:44:40.59 RkxvDOHc0.net
>>282
なに言ってるか解らん。
筋が良いように感じるコードを示しなよ。
285:デフォルトの名無しさん
23/10/08 18:05:22.35 wK2D7Ptr0.net
>>279
で、できたのが今の python の三項演算子
286:デフォルトの名無しさん (ワッチョイ 0d01-wavJ)
23/10/08 18:54:48.99 e0NfdHuO0.net
>>282
普通に悪いだろうね
どういう設計かわからん
入力整形するヘルパー関数書くべき
287:デフォルトの名無しさん
23/10/09 00:17:46.66 XNvR9diB0.net
式か文かのお話
288:デフォルトの名無しさん
23/10/09 13:00:29.46 T44TvStm0.net
printって
print(txt1,txt2,txt3)
って感じの仕様だけど
この仕様のメリットってなんなの?
t=[txt1,txt2,txt3]
print(*t)
みたいに書けて名前引数でもオプション設定できたりするくらい?
↑だとprintのソースコードは、def print(*values,,,option):な感じだけど
もしprintが
def print(values=[],option=,,,,**kwrgs):(valuesがlistか否かの処理)
みたいな仕様だったら実装上は
print([txt1,txt2,txt3],option)とかprint(txt1)
って書くことになる
個人的になんか見た目がダサいというか・・
単に好みの問題?
289:デフォルトの名無しさん
23/10/09 13:50:57.64 3+LduzXw0.net
まあ、基本は一つだけprintだしな
スペースで区切っていくつも表示したいというデバッグ的な使い方で複数書くくらいでは
290:デフォルトの名無しさん
23/10/09 14:20:36.51 Xgju9ZEc0.net
print "result=", value
みたいにやってた流れだろ
291:デフォルトの名無しさん
23/10/09 15:08:30.25 gMk1hFfQa.net
>>287
昔のPythonは()すら無かった
292:デフォルトの名無しさん
23/10/09 15:08:44.75 gMk1hFfQa.net
>>287
昔のPythonのprintは()すら無かった
293:デフォルトの名無しさん
23/10/09 17:42:01.48 DsI96EBHa.net
>>287
実際pprintの方は引数1個しか取れなかったりする
深い意味ないんじゃない?
printは人間に見やすくするためにあるものなので今の仕様が悪いとは思わない
カッコ一つ多く書かされたらめんどい。今の仕様の理由もそんなんだろ
294:デフォルトの名無しさん
23/10/09 22:00:24.57 XTD+q5nh0.net
print(), print(a), print(a, b, c)と
print([]), print([a]), print([a, b, c])とどっちがいいかという話
関数定義の*argsは可変長の引数を扱う場合に
使いやすくしたり読みやすくしたりするためにある
pprintは用途的に位置引数1つで妥当
295:デフォルトの名無しさん
23/10/10 00:57:06.49 DfzpOsqL0.net
a = b = {}
みたいにしたらaとbは同一の辞書を指すじゃん?
aとbが別々の辞書を指すように一行で初期化できますか
296:デフォルトの名無しさん
23/10/10 01:14:32.36 28KhUAam0.net
a, b = {}, {}
297:デフォルトの名無しさん
23/10/10 04:09:25.99 DfzpOsqL0.net
>>295
内包表記で書けるって知りました
ありがとうございました
298:デフォルトの名無しさん
23/10/10 04:36:44.80 x5TUUmSg0.net
>>293
オブジェクトを人間にわかる形に翻訳して見せるのがprintの目的なんだから
位置引数1個しか取れないとしてもそれはそれで合理的ではある
逆にprintが可変長引数取れるならpprintが取れても良い
実際の使用例で便利だから引数いっぱい送れるってだけだろうな
299:デフォルトの名無しさん (ワッチョイ ae7b-OOOs)
23/10/10 23:14:31.83 SP1p/Ht00.net
Twitterで自動投稿しようと思って練習してます。
文字の投稿は成功したんだけど、画像の投稿ができません。
最近(10月)取得の無料APIでは1.1での画像アップロードはできないのでしょうか?
300:デフォルトの名無しさん (ワッチョイ ae7b-OOOs)
23/10/10 23:31:40.21 SP1p/Ht00.net
Twitterで自動投稿しようと思って練習してます。
文字の投稿は成功したんだけど、画像の投稿ができません。
最近(10月)取得の無料APIでは1.1での画像アップロードはできないのでしょうか?
301:デフォルトの名無しさん (ワッチョイ 2601-AeST)
23/10/10 23:46:10.35 x1soPZHV0.net
>>297
>オブジェクトを人間にわかる形に翻訳して見せるのがprintの目的なんだから
人間にわかる形に翻訳するのは各オブジェクトに定義されている__str__の役割
どういう文字列表現にするかはprintを呼び出す前から各オブジェクトごとにすでに決まっていてprintは関知しない
逆にpprintの場合はどういう文字列表現にするかを基本的にpprintが決めている
同じ型のオブジェクトでも異なる文字列表現が要求されることを前提とした用途なので
便利な状況が多いかどうかで仕様が決まるのはその通り
つまりprintは可変長の位置引数が取れたほうが便利な状況が多いが
pprintは可変長の位置引数が取れても便利な状況があまりないということ
302:デフォルトの名無しさん (ワッチョイ 5ae7-ZI+Z)
23/10/11 13:09:57.77 4b2h4etA0.net
話が別の方向行ってる気がする
print、pprintであろうがなかろうが
リスト指定できるときは可変長の方がよくねって話じゃないのか
hoge([a,b,c])
ではなく
hoge(a,b,c,,,)
hoge(*args)
リスト形式とか行列扱うときは基本
それ専用のオブジェクト渡すわけだし
#objはリストを持つ
hoge(obj)
つまりかなりざっくり言うと
hoge(list)、hoge([])
はダサい、みたいな
303:デフォルトの名無しさん (ワッチョイ ee01-AeST)
23/10/11 18:07:12.31 PDwzRB+80.net
>>301
>リスト指定できるときは可変長の方がよくねって話じゃないのか
リストを受け渡すところを全部可変長引数にしたら
様々な弊害が出るのはもちろんだが根本的に想定してる用途が違う
可変長引数はコレクションやコンテナにまとまった一連の要素ではなく
それぞれ独立した値を受け渡すことを主たる使い方として想定している
コレクションまるごと受け渡すのが基本的に想定してる用途なら可変長引数は使わない
304:デフォルトの名無しさん (ワッチョイ 5a8a-DaTE)
23/10/11 18:19:00.12 pWrOFW+D0.net
>様々な弊害が出る
例えば・・?
305:デフォルトの名無しさん (ワッチョイ e964-wavJ)
23/10/11 18:43:03.61 5UtQ/lO50.net
>>300
pprintが決めてるっていうの知らなかった。
何を使ってるの?
reprじゃなく使うものあるの?
306:デフォルトの名無しさん (ワッチョイ 0154-Y2ua)
23/10/11 18:55:29.16 5Z/moFAt0.net
文字列にするところまでは別の人で、それをどう表示するかがpprint
307:デフォルトの名無しさん
23/10/11 20:10:05.07 Jxad2l7za.net
例えばRoomクラスとUserやUserクラス作ったときに
Userクラスのメソッドで[user1,user2,user3,]渡せたり
RoomクラスにUserインスタンスのリストを渡せる仕様にしたとき
まとめて渡せるけどむしろ野暮ったく感じるのはおれだけだろうか
可変長引数を使わない場合
user1=User(ユーザー1)
users = []
users.append(user1)
room = Room(users)
#room.add_user(users)
↑ユーザーを渡していますよ、というより(ユーザーだけが格納された)コレクションを渡していますよという意味合いが強まってしまう、気がする。もちろんリストを渡さなければいいわけだがそれだとadd_usersなど複数形のときにはリスト渡そうね、といったアノテーションが増える。なんか野暮い
可変長引数を使う場合
user1=User(ユーザー1)
room = Room()
room.add_user(user1)
#room.add_user(user2,user3,,)
#users=[user4]#users.append(user5)
#room.add_user(*users)
↑ユーザー単体を渡している感が強まる、気がする。add_userで可変長引数使いたくないときはそもそもひとつしか渡さなければいいし、複数可は可変長引数をもったadd_usersにでも任せればいい(なければ使えないだけ)。渡された値の正否に集中できるので例外処理がシンプル
リスト渡したいときは、リストの各値の扱いがバラバラのとき、[int,str,obj1,obj2,,,]みたいなときくらいしか無いような気がするんだがそれだと、そもそも設計ミスのような。もちろん近くのコンビニに部屋着で行く感覚ならどうでもいいと思うけど
308:デフォルトの名無しさん
23/10/11 21:05:21.93 5UtQ/lO50.net
そもそも可変長で追加したいと思ったことないや
1個追加するappendでforループ回したほうがバグりづらくない?
どうしても用意したいならappend, extend,で list の操作と名前を揃えるとか?
309:デフォルトの名無しさん
23/10/11 21:11:21.59 5UtQ/lO50.net
Pythonって配列の形状の指定がないことが多いから、長さ不明なスターアンパック自体やっぱ危険じゃね?と思う
それで書くのが明らかに簡潔なケースでは当然使うけど、そういうのも最終的にはリストかnumpy配列の委譲で実装しちゃうからメソッドの名付けで困ったことはないかも
委譲先のをパクる
310:デフォルトの名無しさん
23/10/11 21:48:59.91 dwLcTMya0.net
スターアンパックで危険って例えば・・?
311:デフォルトの名無しさん
23/10/11 22:06:40.32 dWNDikg30.net
numpyとかはコレクション自体が本体みたいなもんだからリスト渡すのはわかる
しかしリストの各値を個別で扱いたい場合、各値を扱う目的とは別に
その値を格納したリストそのものに別の目的が生まれてしまう
その次元を下げてくれるのがスターの目的だと思う
312:デフォルトの名無しさん
23/10/11 22:14:51.53 lnf3XQiK0.net
>そもそも可変長で追加したいと思ったことない
それは普通にそれでいいんじゃね
可変長使わずにadd_users追加しましたってときに
「usersなんだから”当然”リスト渡すよねー(渡すのはリスト型だよねー)」(もっと言えばuserのみが格納されたリスト型だよねー、またはusersオブジェクトとかでもいい)
みたいなアノテーションが必然的に発生するのがモヤモヤするだけで。
313:デフォルトの名無しさん
23/10/11 22:51:38.36 Z7/f/t+S0.net
>>306
そのケースは基本的に可変長引数を使う状況ではない
1件追加するためのAPIと複数一括で追加するためのAPIは分けるべき
複数一括で追加するメソッドの中身が1件1件追加するのと同じ処理なら
後者のAPIは用意せず利用者側がループを回すのでも十分
一括処理の最適化がされてるなら複数形にするだけでなく
複数件一括処理であることを示す命名を状況に合わせて考えればいいと思う
314:デフォルトの名無しさん
23/10/11 22:56:16.70 rx/2vzyO0.net
>そのケースは
どのケースのことを言ってるのかまったくわからんが
使わないなら使わなくていいって言ってるがな
315:デフォルトの名無しさん
23/10/11 22:58:21.14 Z7/f/t+S0.net
>>304
各オブジェクトのreprを利用する場合もあればしない場合もある
そういうのを含めてどういう文字列表現にするかをpprintが決めてるということ
pprint自体はpythonで書かれててそんなに難しくないからソース見てみればいいよ
URLリンク(github.com)
316:デフォルトの名無しさん
23/10/12 10:46:44.12 u59ybXeVa.net
>>301
呼ぶ側でパラメータが複数のときと1個であることが判ってるときに
fuga = [a, b, c]
hoge(*fuga)
と
hage = [p]
hoge(*hage)
の様に無理やりくっつけるのはダサくないのか?
hoge(p)
で良いだろ?
317:デフォルトの名無しさん
23/10/12 11:11:35.88 QP/ncIDa0.net
不合理なこと、手間がかかること、読みにくいことを避ける
合理的で簡潔で読みやすければ、ダサくてもそれが正解
318:デフォルトの名無しさん
23/10/12 11:47:55.21 ff5KX8HX0.net
みんなが何の話をしてるのかわからん
ある特定のケースで関数が引数に可変長引数かリストのどっちを受け取るべきかっていう話?
それとも、そもそも可変引数は引数は必要かっていう話?
今の議論に** オペレータは含まれる?
319:デフォルトの名無しさん
23/10/12 11:49:19.75 ff5KX8HX0.net
>>317
>それとも、そもそも可変引数は引数は必要かっていう話?
それとも、そもそも可変引数は必要かっていう話?
ちょっとみすった
320:デフォルトの名無しさん
23/10/12 11:49:27.64 ff5KX8HX0.net
>>317
>それとも、そもそも可変引数は引数は必要かっていう話?
それとも、そもそも可変引数は必要かっていう話?
ちょっとみすった
321:デフォルトの名無しさん (ワッチョイ 8d2a-dsh4)
23/10/12 13:25:38.85 B82UzHiK0.net
PythonでStableDiffusionで使われるsafetensorsをonnxファイルに変換するアプリを作り、ユーザーに配布したいのですが、ユーザーにPython環境を構築させないで済む方法があれば教えてください
GUIから使用したいのでPythonでコマンドラインアプリを作成しC#で作ったGUIからC#のProsses.Start()で起動して動かしたいと思いますが
例えばPythonをインストールしていないPCでProsses.Start("〇〇.py")をやっても動きませんよね?
どうすればいいでしょうか?
322:デフォルトの名無しさん (ワッチョイ d56a-S03z)
23/10/12 13:35:59.07 XSGwFcLX0.net
>>315
>複数のときと1個であることが判ってるとき
うん、だからadd_itemで可変長使いたくないなら使わなくていいしadd_itemsで可変長使えばいいし
別に可変長使ったadd_itemでitem複数追加できる仕様にしてもいいしって言ってる
add_itemであろうがadd_itemsであろうが
リスト渡す場合に「当然リスト形式で渡すよね」というアノテーション発生が問題なのであって、と言っている
リストに限らず、リスト渡すなら渡すで、オブジェクト渡すなら渡すで、
どうしてその形式なの?の前提があるでしょ
323:デフォルトの名無しさん (ワッチョイ 6eb9-atGC)
23/10/12 13:41:54.06 vYXKnMxn0.net
>>303,309
が知りたい
324:デフォルトの名無しさん (ワッチョイ b17c-/Lnu)
23/10/12 14:32:29.65 WrmmhFIY0.net
あえて複数形のない日本語で考えるとわかりやすいかもな
add_うどん()
add_うどん(うどん)
うどんが何うどんだとかどこ産のうどんだとかは、add_うどんメソッドには依存しない
とにかく、うどんを渡せばよくて
そのうどんが、うどんクラスのインスタンスだったりするかもしれないってだけ
だが、リストで渡せてしてしまうと
add_うどん([うどん、うどん、うどん、、])
[]←これなに? → うどん(など)の配膳カートです
これはうどんじゃなくてカートを渡したってことになる
「カートには入れたが、複数杯(や玉)のうどんを渡したって意味な」
というのが自分も含め通じてしまうのは
Listはそうときに使う(使いたい)からっていう共通認識だけでしかない
"add_うどん_を_配膳カート_で_()"
とかだったら配膳カートをクラス化して渡せばいいし
(リストの機能で十分なら)クラス化せずともリストで渡してもいいのはわかる
でも大抵、リストを渡す時はそこらへん省略されてるかアノテーションで判断してる気がする
なぜならadd_うどん内部での配膳カートはイテラブル程度の機能しか使わないことが多いから
リストを渡す、は本当はそれ自体に意図があり
可変長引数はその意図を論理的に省略することができる
325:デフォルトの名無しさん (ワッチョイ 0548-3JHV)
23/10/12 15:36:59.50 gAp1qlED0.net
なんか知らんが草
326:デフォルトの名無しさん (アウアウクー MM35-wavJ)
23/10/12 15:40:56.90 B5sD+hFhM.net
>>309
危険というか単にバグりやすくなるってだけ
多重配列が危ない
リストのリスト、リストのリストのリストとかでアンパック使うと少なくとも俺はすぐバグる
あんまり入れ子になるなら普通は自作クラス定義するがリストとタプルで済ませたいこともあるから
自作データクラスのリストとかは多重配列に近いと思うのでアンパックをホイホイ使うとバグりやすいんじゃないかなと
327:デフォルトの名無しさん (アウアウクー MM35-wavJ)
23/10/12 15:47:06.45 B5sD+hFhM.net
アンパック使ってもforで書いてもほとんど同じだけど多重配列ならforの入れ子で書いたほうが階層の把握に間違いがないってことね
1重配列なことが確実ならスターアンパックで問題ないと思う
328:デフォルトの名無しさん (ワッチョイ 0154-Y2ua)
23/10/12 16:07:06.78 QP/ncIDa0.net
組み込みの型を使ったらそうなるって
listにはlistという意味しか無いんだから
型に意味を持たせたいならクラスを作るしか
329:デフォルトの名無しさん (ワッチョイ 85cf-d6sz)
23/10/12 16:22:18.67 a6KaL/fa0.net
>バグりやすくなる >少なくとも俺はすぐバグる
なにこれ
めっちゃふわふわしてて全然わからん
具体的にどういうとき・・?
330:デフォルトの名無しさん (ワッチョイ 69e4-NDEe)
23/10/12 16:27:05.61 kcOw/s7X0.net
>>327
>型に意味を持たせたいならクラスを作るしか
そうだよだからクラス作って渡せばいい
でも結局、そのクラスがリスト持つなら同じように
そのクラスのリストに>>323のような意図が出てくるだけ
331:328 (ワッチョイ 0d01-5AJl)
23/10/12 16:39:38.79 qIe0UAcP0.net
一応自分でも考えてみたが多次元配列をスターで再帰するときとか?
def recursive_array_print(*args):
for item in args:
if isinstance(item, list):
recursive_array_print(*item)
else:
print(item)
nested_array = [1, [2, [3, 4], 5], 6, [7, 8]]
recursive_array_print(nested_array)
例えばこれは数値だけだからまだいいけど
辞書やらだった場合に条件分岐が面倒とか・・?
でもそれバグというより設計ミスだしな
バグってなんだろ
332:デフォルトの名無しさん (ワッチョイ 05b1-h3B4)
23/10/12 18:00:33.28 D2IWbE4K0.net
個人的に第一引数設計の優先順位は
①単数
②単数・複数(可変長引数)= ③単数・複数(関数名に引数の意図を明示&リスト)
④単数・複数(単純展開が目的のリスト)
①はよく見る(というか複数しなければほぼ必須なので当たり前)
②は①で実装できる範囲なのであまり見ない(例 [ list.append(i) for ])
③をするくらいなら渡す値をクラス化していることが多い
④は①で実装できる範囲なのであまり見ない、個人用途コードでよく見る
第一引数でなくとも(行列の演算でもない限り)リストを渡すのは微妙
333:317
23/10/13 10:32:08.61 uOHCnao90.net
誰か教えて下さい、、
334:デフォルトの名無しさん
23/10/13 10:36:29.66 b6IM7MTY0.net
>>331
>②単数・複数(可変長引数)
可変長引数は単数・複数を同時にサポートするためにあるんじゃないんだよ
そもそもの大前提として一つの関数や一つの変数で単数・複数を同時にサポートしようとするのは特殊なケースを除いて基本的に悪手だからね
335:デフォルトの名無しさん
23/10/13 10:40:10.61 AODTp1VX0.net
>同時にサポートするためにあるんじゃない
printさん・・
336:デフォルトの名無しさん
23/10/13 10:44:37.94 YTjLrT3n0.net
ん・・ちょっとまてよだったら可変長引数使う時は
hoge() ←ダメ
hoge(a) ←ダメ
↑は条件分岐でそもそも実行させないようにして
少なくとも
hoge(a,b)
ここから推奨ってこと?
可変長ってそんな概念だったっけ・・?
337:デフォルトの名無しさん
23/10/13 10:48:38.24 zcTNSeqM0.net
>>333
>同時にサポートするためにあるんじゃない
ドキュメントやらどこかに明記されてたってこと?
338:デフォルトの名無しさん
23/10/13 11:33:13.84 9tKKj3QG0.net
pythonの設計思想は知らんけど
>かへん‐ちょう〔‐チヤウ〕【可変長】 長さ・桁数・文字数・データの大きさなどが定まっていないこと。
言葉の意味からして
>同時にサポートするためにあるんじゃない
はさすがに違和感あるわ
339:デフォルトの名無しさん (ワッチョイ 0154-Y2ua)
23/10/13 11:46:57.67 CVigb7Ut0.net
> 長さ・桁数・文字数・データの大きさ
のどれでもなく、パラメータの個数だよな
340:デフォルトの名無しさん (ワッチョイ 01bc-bwTL)
23/10/13 12:01:59.94 Ovg0M26I0.net
などが
341:デフォルトの名無しさん
23/10/13 12:21:03.84 CVigb7Ut0.net
lengthが数を表すという文化が歪んでるんだよな
なんでlenじゃなくてsizeにしなかったんだろう
342:デフォルトの名無しさん (ワッチョイ 8d2a-pUf+)
23/10/13 13:11:04.18 C21zpC1k0.net
自分の誤読をごまかすために文化に難癖つけ始めた
343:デフォルトの名無しさん (ワッチョイ 5aad-VZIV)
23/10/13 14:03:08.40 6NvcCRtg0.net
おはよう!
URLリンク(ideone.com)
これがエラーがでるんだが。
どうしたらいいのでしょうか?
344:デフォルトの名無しさん (ワッチョイ 0a5f-SXiR)
23/10/13 15:48:46.04 CCLNG/R30.net
単数・複数の定義からはじめないといけないのか
先の例を借りるなら
def add_user(user: User)が単数
def add_users(users: list[User])が複数
この2つを一つの関数でサポートしようとして
def add_user(*users: User)のようにするのが間違った可変長引数の使い方
345:デフォルトの名無しさん (ワッチョイ 5a47-f11/)
23/10/13 16:27:41.27 o2+w7ksq0.net
>>343
>間違った可変長引数の使い方
エラーでるの?
バグりやすいの?
>>336 >ドキュメントやらどこかに明記されてたってこと?
てか同じこと言ってない?w
で、言う割にはなぜか論理的に説明はできないっていうの繰り返してるような
346:デフォルトの名無しさん (ワッチョイ 0154-Y2ua)
23/10/13 16:50:17.50 CVigb7Ut0.net
根拠がダサいだしな
ダサいかどうかを基準とする考え方はダサい
347:デフォルトの名無しさん (ワッチョイ da02-4yUX)
23/10/13 17:31:26.11 TNjzrdTI0.net
すべて羅列するなら(名前付き引数や**kwargsは除外)
単数
①def add_user(user: User) #一般的
②def add_user(user: List[User]) #関数名からListである必要性を連想できない
③def add_user(*user: User) #あるっちゃある例print
④def add_user(*user: List[User]) #②同様
複数
①def add_users(user: Users) #UsersのUser取り出しロジックがUsersのデータ型に依存、関数名での補足がいると思う
②def add_users(user: List[User]) #よくみる、①の発展、だがList展開ロジックが必須で暗黙的
③def add_users(*user: User) #=単数③、より明示的
④def add_users(*user: List[User]) #=単数④
単数④複数④は無い、関数名次第ではアリ
あくまでadd_user,add_users名でやるなら
単数①、単数③、複数③、複数②だな
本質は複数①②が同列に扱われている、という部分だと思う
348:デフォルトの名無しさん (ワッチョイ 8d2a-dsh4)
23/10/13 18:25:27.74 /53+FR130.net
最近Python始めたんだがGitHubで公開されてるStableDiffusionのsafetensorsファイルをOnnxファイルに変換するスクリプトをクローンして使って見たんだ
その中でハギングフェイスのライブラリ使ってんだがそのライブラリに変更があったみたいでスクリプトがまともに動かなくなってた
Pythonってこういうことよくあるの?
349:デフォルトの名無しさん (アウアウアー Sa7e-wavJ)
23/10/13 18:29:10.51 sP+zp0cDa.net
>>344
ごめん、そもそもadd_users(*users)と書く設計にしても全然動くわけで
どう書くと「書く側の人間が」「バグらせやすい」という話を一貫してしてると思ってたのでまさかそこが理解できないとは思わなかった
「バグりやすい」より「バグらせやすい」と書いたほうが親切だったね、どちらでも意味が通るけど
350:デフォルトの名無しさん (アウアウアー Sa7e-wavJ)
23/10/13 18:36:26.11 sP+zp0cDa.net
>>330
来る配列の深さもshapeもわからないなら再帰で書くしかないからそれはスターアンパックで書いて構わないと思うよ
2重配列とか3重配列とか、numpyで言えばndimとかshapeの一部が決まってる多重配列を扱う場合にスターアンパック使うのはよくないと思う
こういうのは俺が勝手に言ってるだけでもなくて例えばEffective Pythonには4つ以上の要素を含む(1次元)配列をスターアンパックするなと書いてある
2重、3重、4重とかの組み込み型の多重配列は普通にコード書いて出てくるがそれらをほいほいスターアンパックすればよりバグを生みやすいと思う
add_users(*users)は俺にはアンチパターンに見える