Pythonのお勉強 Part71

■ このスレッドは過去ログ倉庫に格納されています
2023/09/20(水) 09:13:41.41ID:u6xixiUt0
↑スレ立てる毎に減るので、減ってたら3つに補充すること。

・当スレにRubyのソースコード類を書くことを禁ず
・Ruby等、Pythonではないプログラミング言語での回答類・質問を書くのも禁止
・「Ruby では」「Rubyでは」「Rails」正規表現→「^クソチョンw$」をNGワード登録推奨
・エラーを解決したいときは、かならず
 エラー文(勝手に省略orスクショうp等の横着禁止)と
 おま環(Pythonのバージョン番号+OS名とバージョン+IDE名)を書け。

★Pythonのソースコードを5ちゃんに直貼はインデントが崩壊するので、
  ↓等のコードうp用サイトに貼ってきてくだしあ。(スクリーンショットをうpる「横着」禁止)
ttps://techiedelight.com/compiler/  Run Code機能あり。
ttp://ideone.com/      デフォ設定がCなので、Pythonするには言語種選択ボタン押下がピコ手間かも。
ttp://pastebin.com/     まずまずシンプル。
ttp://dpaste.com/      とてもシンプル。消えるまでの日数は十分長ーく指定のこと。

◇Pythonオフィシャルサイト http://www.python.org/
◇Pythonドキュメント https://docs.python.org/ja/3/
◇まとめwiki ttp://python.rdy.jp/
※前スレ
Pythonのお勉強 Part70
https://mevius.5ch.net/test/read.cgi/tech/1677856680/
VIPQ2_EXTDAT: default:vvvvv:1000:512:: EXT was configured
307デフォルトの名無しさん (ワッチョイ e964-wavJ)
垢版 |
2023/10/11(水) 21:05:21.93ID:5UtQ/lO50
そもそも可変長で追加したいと思ったことないや
1個追加するappendでforループ回したほうがバグりづらくない?

どうしても用意したいならappend, extend,で list の操作と名前を揃えるとか?
308デフォルトの名無しさん (ワッチョイ e964-wavJ)
垢版 |
2023/10/11(水) 21:11:21.59ID:5UtQ/lO50
Pythonって配列の形状の指定がないことが多いから、長さ不明なスターアンパック自体やっぱ危険じゃね?と思う
それで書くのが明らかに簡潔なケースでは当然使うけど、そういうのも最終的にはリストかnumpy配列の委譲で実装しちゃうからメソッドの名付けで困ったことはないかも
委譲先のをパクる
2023/10/11(水) 21:48:59.91ID:dwLcTMya0
スターアンパックで危険って例えば・・?
2023/10/11(水) 22:06:40.32ID:dWNDikg30
numpyとかはコレクション自体が本体みたいなもんだからリスト渡すのはわかる
しかしリストの各値を個別で扱いたい場合、各値を扱う目的とは別に
その値を格納したリストそのものに別の目的が生まれてしまう
その次元を下げてくれるのがスターの目的だと思う
2023/10/11(水) 22:14:51.53ID:lnf3XQiK0
>そもそも可変長で追加したいと思ったことない
それは普通にそれでいいんじゃね

可変長使わずにadd_users追加しましたってときに
「usersなんだから”当然”リスト渡すよねー(渡すのはリスト型だよねー)」(もっと言えばuserのみが格納されたリスト型だよねー、またはusersオブジェクトとかでもいい)
みたいなアノテーションが必然的に発生するのがモヤモヤするだけで。
2023/10/11(水) 22:51:38.36ID:Z7/f/t+S0
>>306
そのケースは基本的に可変長引数を使う状況ではない
1件追加するためのAPIと複数一括で追加するためのAPIは分けるべき

複数一括で追加するメソッドの中身が1件1件追加するのと同じ処理なら
後者のAPIは用意せず利用者側がループを回すのでも十分

一括処理の最適化がされてるなら複数形にするだけでなく
複数件一括処理であることを示す命名を状況に合わせて考えればいいと思う
2023/10/11(水) 22:56:16.70ID:rx/2vzyO0
>そのケースは
どのケースのことを言ってるのかまったくわからんが
使わないなら使わなくていいって言ってるがな
2023/10/11(水) 22:58:21.14ID:Z7/f/t+S0
>>304
各オブジェクトのreprを利用する場合もあればしない場合もある
そういうのを含めてどういう文字列表現にするかをpprintが決めてるということ

pprint自体はpythonで書かれててそんなに難しくないからソース見てみればいいよ
https://github.com/python/cpython/blob/3.12/Lib/pprint.py
315デフォルトの名無しさん (アウアウウー Sa39-OOOs)
垢版 |
2023/10/12(木) 10:46:44.12ID:u59ybXeVa
>>301
呼ぶ側でパラメータが複数のときと1個であることが判ってるときに
fuga = [a, b, c]
hoge(*fuga)

hage = [p]
hoge(*hage)
の様に無理やりくっつけるのはダサくないのか?
hoge(p)
で良いだろ?
2023/10/12(木) 11:11:35.88ID:QP/ncIDa0
不合理なこと、手間がかかること、読みにくいことを避ける
合理的で簡潔で読みやすければ、ダサくてもそれが正解
317デフォルトの名無しさん (ワッチョイ 859e-iLfk)
垢版 |
2023/10/12(木) 11:47:55.21ID:ff5KX8HX0
みんなが何の話をしてるのかわからん
ある特定のケースで関数が引数に可変長引数かリストのどっちを受け取るべきかっていう話?
それとも、そもそも可変引数は引数は必要かっていう話?
今の議論に** オペレータは含まれる?
318デフォルトの名無しさん (ワッチョイ 859e-iLfk)
垢版 |
2023/10/12(木) 11:49:19.75ID:ff5KX8HX0
>>317
>それとも、そもそも可変引数は引数は必要かっていう話?
それとも、そもそも可変引数は必要かっていう話?
ちょっとみすった
319デフォルトの名無しさん (ワッチョイ 859e-iLfk)
垢版 |
2023/10/12(木) 11:49:27.64ID:ff5KX8HX0
>>317
>それとも、そもそも可変引数は引数は必要かっていう話?
それとも、そもそも可変引数は必要かっていう話?
ちょっとみすった
2023/10/12(木) 13:25:38.85ID:B82UzHiK0
PythonでStableDiffusionで使われるsafetensorsをonnxファイルに変換するアプリを作り、ユーザーに配布したいのですが、ユーザーにPython環境を構築させないで済む方法があれば教えてください
GUIから使用したいのでPythonでコマンドラインアプリを作成しC#で作ったGUIからC#のProsses.Start()で起動して動かしたいと思いますが
例えばPythonをインストールしていないPCでProsses.Start("〇〇.py")をやっても動きませんよね?
どうすればいいでしょうか?
2023/10/12(木) 13:35:59.07ID:XSGwFcLX0
>>315
>複数のときと1個であることが判ってるとき
うん、だからadd_itemで可変長使いたくないなら使わなくていいしadd_itemsで可変長使えばいいし
別に可変長使ったadd_itemでitem複数追加できる仕様にしてもいいしって言ってる
add_itemであろうがadd_itemsであろうが
リスト渡す場合に「当然リスト形式で渡すよね」というアノテーション発生が問題なのであって、と言っている
リストに限らず、リスト渡すなら渡すで、オブジェクト渡すなら渡すで、
どうしてその形式なの?の前提があるでしょ
2023/10/12(木) 13:41:54.06ID:vYXKnMxn0
>>303,309
が知りたい
2023/10/12(木) 14:32:29.65ID:WrmmhFIY0
あえて複数形のない日本語で考えるとわかりやすいかもな
add_うどん()
add_うどん(うどん)
うどんが何うどんだとかどこ産のうどんだとかは、add_うどんメソッドには依存しない
とにかく、うどんを渡せばよくて
そのうどんが、うどんクラスのインスタンスだったりするかもしれないってだけ
だが、リストで渡せてしてしまうと
add_うどん([うどん、うどん、うどん、、])
[]←これなに? → うどん(など)の配膳カートです
これはうどんじゃなくてカートを渡したってことになる

「カートには入れたが、複数杯(や玉)のうどんを渡したって意味な」
というのが自分も含め通じてしまうのは
Listはそうときに使う(使いたい)からっていう共通認識だけでしかない

"add_うどん_を_配膳カート_で_()"
とかだったら配膳カートをクラス化して渡せばいいし
(リストの機能で十分なら)クラス化せずともリストで渡してもいいのはわかる
でも大抵、リストを渡す時はそこらへん省略されてるかアノテーションで判断してる気がする
なぜならadd_うどん内部での配膳カートはイテラブル程度の機能しか使わないことが多いから

リストを渡す、は本当はそれ自体に意図があり
可変長引数はその意図を論理的に省略することができる
2023/10/12(木) 15:36:59.50ID:gAp1qlED0
なんか知らんが草
325デフォルトの名無しさん (アウアウクー MM35-wavJ)
垢版 |
2023/10/12(木) 15:40:56.90ID:B5sD+hFhM
>>309
危険というか単にバグりやすくなるってだけ
多重配列が危ない
リストのリスト、リストのリストのリストとかでアンパック使うと少なくとも俺はすぐバグる
あんまり入れ子になるなら普通は自作クラス定義するがリストとタプルで済ませたいこともあるから

自作データクラスのリストとかは多重配列に近いと思うのでアンパックをホイホイ使うとバグりやすいんじゃないかなと
326デフォルトの名無しさん (アウアウクー MM35-wavJ)
垢版 |
2023/10/12(木) 15:47:06.45ID:B5sD+hFhM
アンパック使ってもforで書いてもほとんど同じだけど多重配列ならforの入れ子で書いたほうが階層の把握に間違いがないってことね
1重配列なことが確実ならスターアンパックで問題ないと思う
2023/10/12(木) 16:07:06.78ID:QP/ncIDa0
組み込みの型を使ったらそうなるって
listにはlistという意味しか無いんだから
型に意味を持たせたいならクラスを作るしか
2023/10/12(木) 16:22:18.67ID:a6KaL/fa0
>バグりやすくなる >少なくとも俺はすぐバグる

なにこれ
めっちゃふわふわしてて全然わからん
具体的にどういうとき・・?
2023/10/12(木) 16:27:05.61ID:kcOw/s7X0
>>327
>型に意味を持たせたいならクラスを作るしか
そうだよだからクラス作って渡せばいい
でも結局、そのクラスがリスト持つなら同じように
そのクラスのリストに>>323のような意図が出てくるだけ
2023/10/12(木) 16:39:38.79ID:qIe0UAcP0
一応自分でも考えてみたが多次元配列をスターで再帰するときとか?

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)

例えばこれは数値だけだからまだいいけど
辞書やらだった場合に条件分岐が面倒とか・・?
でもそれバグというより設計ミスだしな
バグってなんだろ
2023/10/12(木) 18:00:33.28ID:D2IWbE4K0
個人的に第一引数設計の優先順位は
①単数
②単数・複数(可変長引数)= ③単数・複数(関数名に引数の意図を明示&リスト)
④単数・複数(単純展開が目的のリスト)

①はよく見る(というか複数しなければほぼ必須なので当たり前)
②は①で実装できる範囲なのであまり見ない(例 [ list.append(i) for ])
③をするくらいなら渡す値をクラス化していることが多い
④は①で実装できる範囲なのであまり見ない、個人用途コードでよく見る

第一引数でなくとも(行列の演算でもない限り)リストを渡すのは微妙
332317 (ワッチョイ e943-nnu1)
垢版 |
2023/10/13(金) 10:32:08.61ID:uOHCnao90
誰か教えて下さい、、
2023/10/13(金) 10:36:29.66ID:b6IM7MTY0
>>331
>②単数・複数(可変長引数)
可変長引数は単数・複数を同時にサポートするためにあるんじゃないんだよ
そもそもの大前提として一つの関数や一つの変数で単数・複数を同時にサポートしようとするのは特殊なケースを除いて基本的に悪手だからね
2023/10/13(金) 10:40:10.61ID:AODTp1VX0
>同時にサポートするためにあるんじゃない
printさん・・
2023/10/13(金) 10:44:37.94ID:YTjLrT3n0
ん・・ちょっとまてよだったら可変長引数使う時は
hoge() ←ダメ
hoge(a) ←ダメ
↑は条件分岐でそもそも実行させないようにして
少なくとも
hoge(a,b)
ここから推奨ってこと?
可変長ってそんな概念だったっけ・・?
2023/10/13(金) 10:48:38.24ID:zcTNSeqM0
>>333
>同時にサポートするためにあるんじゃない
ドキュメントやらどこかに明記されてたってこと?
2023/10/13(金) 11:33:13.84ID:9tKKj3QG0
pythonの設計思想は知らんけど
>かへん‐ちょう〔‐チヤウ〕【可変長】 長さ・桁数・文字数・データの大きさなどが定まっていないこと。
言葉の意味からして
>同時にサポートするためにあるんじゃない
はさすがに違和感あるわ
2023/10/13(金) 11:46:57.67ID:CVigb7Ut0
> 長さ・桁数・文字数・データの大きさ
のどれでもなく、パラメータの個数だよな
2023/10/13(金) 12:01:59.94ID:Ovg0M26I0
などが
2023/10/13(金) 12:21:03.84ID:CVigb7Ut0
lengthが数を表すという文化が歪んでるんだよな
なんでlenじゃなくてsizeにしなかったんだろう
2023/10/13(金) 13:11:04.18ID:C21zpC1k0
自分の誤読をごまかすために文化に難癖つけ始めた
342デフォルトの名無しさん (ワッチョイ 5aad-VZIV)
垢版 |
2023/10/13(金) 14:03:08.40ID:6NvcCRtg0
おはよう!
https://ideone.com/6RegCA
これがエラーがでるんだが。
どうしたらいいのでしょうか?
2023/10/13(金) 15:48:46.04ID:CCLNG/R30
単数・複数の定義からはじめないといけないのか

先の例を借りるなら
def add_user(user: User)が単数
def add_users(users: list[User])が複数
この2つを一つの関数でサポートしようとして
def add_user(*users: User)のようにするのが間違った可変長引数の使い方
2023/10/13(金) 16:27:41.27ID:o2+w7ksq0
>>343
>間違った可変長引数の使い方
エラーでるの?
バグりやすいの?
>>336 >ドキュメントやらどこかに明記されてたってこと?

てか同じこと言ってない?w
で、言う割にはなぜか論理的に説明はできないっていうの繰り返してるような
2023/10/13(金) 16:50:17.50ID:CVigb7Ut0
根拠がダサいだしな
ダサいかどうかを基準とする考え方はダサい
2023/10/13(金) 17:31:26.11ID:TNjzrdTI0
すべて羅列するなら(名前付き引数や**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名でやるなら
単数①、単数③、複数③、複数②だな
本質は複数①②が同列に扱われている、という部分だと思う
2023/10/13(金) 18:25:27.74ID:/53+FR130
最近Python始めたんだがGitHubで公開されてるStableDiffusionのsafetensorsファイルをOnnxファイルに変換するスクリプトをクローンして使って見たんだ
その中でハギングフェイスのライブラリ使ってんだがそのライブラリに変更があったみたいでスクリプトがまともに動かなくなってた
Pythonってこういうことよくあるの?
348デフォルトの名無しさん (アウアウアー Sa7e-wavJ)
垢版 |
2023/10/13(金) 18:29:10.51ID:sP+zp0cDa
>>344
ごめん、そもそもadd_users(*users)と書く設計にしても全然動くわけで
どう書くと「書く側の人間が」「バグらせやすい」という話を一貫してしてると思ってたのでまさかそこが理解できないとは思わなかった
「バグりやすい」より「バグらせやすい」と書いたほうが親切だったね、どちらでも意味が通るけど
349デフォルトの名無しさん (アウアウアー Sa7e-wavJ)
垢版 |
2023/10/13(金) 18:36:26.11ID:sP+zp0cDa
>>330
来る配列の深さもshapeもわからないなら再帰で書くしかないからそれはスターアンパックで書いて構わないと思うよ

2重配列とか3重配列とか、numpyで言えばndimとかshapeの一部が決まってる多重配列を扱う場合にスターアンパック使うのはよくないと思う
こういうのは俺が勝手に言ってるだけでもなくて例えばEffective Pythonには4つ以上の要素を含む(1次元)配列をスターアンパックするなと書いてある
2重、3重、4重とかの組み込み型の多重配列は普通にコード書いて出てくるがそれらをほいほいスターアンパックすればよりバグを生みやすいと思う
add_users(*users)は俺にはアンチパターンに見える
2023/10/13(金) 19:36:16.66ID:v7U/yjft0
>add_users(*users)は俺には
嫌ならそう書かなければいいだけでは・・?
多重配列の生成とその扱いを混同してるんだと思うが
usersがUserクラスを持つならそれに従えばいいと思うぞ
例えば4つ以上といわず[np,np,np,,,,,]扱う、みたいなケースがあるのかはしらんが
無理にスターアンパックする必要ないわけで
>>308>書くのが明らかに簡潔なケースでは当然使うけど
と同じように逆然りでしょ
2023/10/13(金) 19:38:42.67ID:gtyKnuUL0
print関数という実績
2023/10/13(金) 19:57:29.33ID:rRALxWOX0
add_users(user1,user2)と書いてもadd_users(*users)と書いても動いちゃう
だから(書く側の人間が)バグらせやすいんだ
そんなことある・・?
False==0で動いちゃった、よりよっぽどましだと思うが。。
だって少なくともエディタの補助範囲内だし
2023/10/13(金) 20:09:45.61ID:hDXnu7+A0
自分の取り扱ってるデータが何なのか理解せずに関数に渡すことがまずありえないしな
2023/10/13(金) 20:24:35.57ID:ZA5Rx9q50
・1つしか渡す機会がない
・リストしか渡す機会がない
・管理別々の2つ以上の変数を渡したい時がある
・処理速度が気になる場所
などなど

臨機応変に使い分けちゃえば?
2023/10/13(金) 20:46:44.55ID:K56rmpTB0
あんまり興味ないけど一言
print関数はプログラマにとっての使いやすさに特化してるから可変長引数でいいけど
普通の関数には使わないほうがいい
iterableを受け取る設計がいいことが多い
356デフォルトの名無しさん (アウアウアー Sa7e-wavJ)
垢版 |
2023/10/13(金) 20:47:33.98ID:e5Ke0Kb/a
>>350
>>352
まあ、問題提起になったコード見るとまずadd_user(*users)と書いてるし色んな意味で論外と思う
表現と処理が一致してないし、可変長引数するのに単体のuser渡すのと同じ関数になってる必要がないしね
アンチパターンではかなり優しい表現になってしまう
357デフォルトの名無しさん (アウアウアー Sa7e-wavJ)
垢版 |
2023/10/13(金) 20:50:53.31ID:e5Ke0Kb/a
端的に言うと、プログラミングが苦手な人が書くコード
358デフォルトの名無しさん (アウアウアー Sa7e-wavJ)
垢版 |
2023/10/13(金) 20:58:43.17ID:e5Ke0Kb/a
そもそも自分一人しか見なくて完全にロジックを把握できてるコードなら縛り無く好きに書けばいいんだよ
ここでどう書くのがキレイか?とか聞く時点でバグらせづらさとか、プロジェクトとして複数人で共有した場合の能率の話とかしてると考えるのが当たり前だよね
なのにアンチパターンとかバグりやすいとか言われると怒る心理がよくわからんよ
add_user(*users)は書いたら恥ずかしいコードだよ
2023/10/13(金) 21:03:29.43ID:LOKUwuMW0
臨機応変な有志たちは、>>346単数①に収束してる >>354
・リストしか渡す機会がない
は個人的には例えば、土や木や葉っぱデータの詰まった森データを渡すことを想定していて
森をリスト型で渡すことは稀
土とかを原子レベルで分解すればリストでいいと思う
同じように、1枚の落ち葉の詰まった落ち葉群をリストで渡す、というのは稀な印象
普通は落ち葉群クラスの落ち葉群インスタンスで渡すと思う
ただ、何の木の種類の落ち葉なのか、重さや枯れ具合など
落ち葉オブジェクトにするまでもない場合
リストに入れて渡す、という選択をする場合はあるが
有志たちはそれはあまりやっていない印象
自分が知らないだけかもしれない
2023/10/13(金) 21:07:38.31ID:x5KSOPoq0
問題提起になったコード見ると書き方のバリエーションだけで
使えや書けとは書いてないわけだが読解力の問題だったか
361デフォルトの名無しさん (ワッチョイ ee90-6t2b)
垢版 |
2023/10/13(金) 21:08:39.43ID:Sy9RKGN20
>>355で結論が出ているよね。
2023/10/13(金) 21:17:00.73ID:tgPT4vYj0
可変長かリストがどちらが便利かこっちを使えなんて話はしてない >>355
363デフォルトの名無しさん (アウアウアー Sa7e-wavJ)
垢版 |
2023/10/13(金) 21:21:31.49ID:e5Ke0Kb/a
組み込みのlistの時点でappendとextendが別れてるというのが全てだと思う
データを管理したいならappend(a)とappend(*a)が同時に使えるように書くべきじゃない
型チェックすれば済むとか、処理を把握してるから分かる、とか以前の問題で
どうしたらそういうコードを擁護しうるのかな……と思う 
まあ苦手なものは仕方ないけどね
2023/10/13(金) 21:26:32.61ID:CVigb7Ut0
単体で渡してもリストで渡しても処理してくれる
というのは便利なので、よく作るけどな
自分で作ったのに仕様を覚えられない、という原因が大きいかもしれない
365デフォルトの名無しさん (アウアウアー Sa7e-wavJ)
垢版 |
2023/10/13(金) 21:30:41.15ID:e5Ke0Kb/a
そもそもPythonの関数定義が戻り値1つなら裸で2つなら長さ2のタプルとかいう設計だからね
可変長やアンパックがありがたい場面も当然ある
ただデータを管理するのにそんな書き方する必要は全くないって話
間違いなく不要
2023/10/13(金) 21:39:09.86ID:fJskMopF0
同時に使えるように書くべきじゃないっていうが
append(*{})も普通に動くわけで
*を間違えてつけちゃった と 可変長として間違えました 結果、動いちゃいました
なんて前後でエラー処理する以外にチェックしようがないわけで
間違えた自体と関数分けるのとは話関係ないわな
appendとextendはまさに、可変長使わないなら関数名とアノテーション発生でってことでしょ
367デフォルトの名無しさん (アウアウアー Sa7e-wavJ)
垢版 |
2023/10/13(金) 21:45:01.00ID:e5Ke0Kb/a
>>366
少なくともPythonのlistでは引数1個以外のappendは動かないけど、Pythonじゃない言語を触ってるのかな
まあこの一例でも分かるように、1次元配列ですらバグらせる人はバグらせるんだから
インターフェイスはどんな人でも確実に使えるようにしといたほうがいいよ
2023/10/13(金) 21:47:35.20ID:oLBZLdpr0
room.add_user(user) ←roomにuserをadd
room.add_users([]) ←roomにuser群リストをadd
list.append("a") ←リストに値をappend
list.extend([]) ←リストをリストによりextend

こうみるとわかりやすいな
関数名の情報量が全然違う
2023/10/13(金) 21:52:27.24ID:UzC3xoYA0
観点のちがいなだけでどれも同意できるけど
ひとりだけ変なのがおる
2023/10/13(金) 21:56:26.67ID:CVigb7Ut0
奇遇だな
俺も圏外から攻撃したいだけの変なのを検出してる
2023/10/13(金) 21:56:28.96ID:yy2kD+Fp0
引数1個以外のappendは動かないから何なんだ??>>367
だね、としか言いようがないが。
むしろだからこそ一行の*辞書も*リストも動いちゃうわけで
append,extendが同時に使えるように書くべきじゃない起因ではないし
かといってスター根絶ってわけでもないでしょ、ってことでしょ
372デフォルトの名無しさん (アウアウアー Sa7e-wavJ)
垢版 |
2023/10/13(金) 22:02:03.89ID:e5Ke0Kb/a
>>371
ごめん、「動いちゃうわけで」の部分が全く理解できないけどどういう意味?
[].append(*a)はaが長さ1の配列で無い限り動かないけど
長さ2でも3でも全部エラーだけど長さ1の配列に限って動くからそれだけはアンパックで書ければ便利って意味?
正気とは思えないな~
373デフォルトの名無しさん (アウアウアー Sa7e-wavJ)
垢版 |
2023/10/13(金) 22:14:15.69ID:e5Ke0Kb/a
仮に飛行機じゃないとした場合、一番よく使う組み込み型であるlistのappend/extendの仕様すらろくに理解してないで噛み付く人が複数いるスレってことになるが
まさかこのスレのレベルがそんな低いとは思わないから中点2つの・・使ってるアンパック大好きな人がなんか毎レス書き込む回線ブラウザ変えてることと結びつけそうになってしまうけどね
ツッコミどころあるコード乗せてツッコまれたら素直に受け入れたほうがいいよ
2023/10/13(金) 22:15:04.38ID:3PC3pmfU0
>>372
>append(a)とappend(*a)が同時に使えるように書くべきじゃない
上での>append(*a)
は>同時に使える、とのことから可変長引数へ渡すため
>*リストも動いちゃう
は、例えばappend(*["a"])とかで可変長引数のためではないでしょ
つまり可変長引数であろうがなかろうが>動いちゃうんだから
>同時に使えるように書くべきじゃない
が理由で >appendとextendが別れてるというのが全てだと思う
と断定するのは的外れ
375デフォルトの名無しさん (ワッチョイ d533-Tqdi)
垢版 |
2023/10/13(金) 22:17:47.09ID:v2U3cWHO0
>長さ1の配列で無い限り動かないけど
動いててワロタ
376デフォルトの名無しさん (アウアウアー Sa7e-wavJ)
垢版 |
2023/10/13(金) 22:24:28.94ID:e5Ke0Kb/a
[].append(*[])
[].append(*[2,3,4])
これ動くかなぁ🤔
こんな明瞭な誤りに擁護がいっぱい付くって…😰
まあ間違い絶対認められないマンが暴れてるだけだろうけど
認められないならまずここで質問しなければいいのに
2023/10/13(金) 22:28:03.09ID:4579Uo5r0
>これ動くかなぁ
アスペ?
それが許されるならappend(*a)でエラーでたぞ
append無いって言われたから
あーおそらくリストのappendでaも適当に与えておいて、でやっと動いたが
378デフォルトの名無しさん (アウアウアー Sa7e-wavJ)
垢版 |
2023/10/13(金) 22:30:25.92ID:e5Ke0Kb/a
>>374
そのレスがまさに「長さ2でも3でも全部エラーだけど長さ1の配列に限って動くからそれだけはアンパックで書ける」って意味じゃん
やっぱり正気とは思えないかな
それは位置引数1個の関数に引数1個渡してんだから動くよ
呼ぶ時にスターアンパック使ってるのが間違いなだけで
長さ2以上で動かないのにスターアンパックしてなんの意味が?
難しい文法は向いてないっぽいから無理しないほうがいいよ😅
2023/10/13(金) 22:35:20.34ID:xOQDGR0o0
>>378
もしかしてまったく理解してないのきみのほうでは
仮に可変長引数のappendがあったとして、append(*a)で書きたくなければ無理して書かなくていいんだぞ?
故に*付けた付けなかったってのは
>appendとextendが別れてるというのが全てだと思う
まったく繋がってない 的外れ
380デフォルトの名無しさん (ワッチョイ 850e-iLfk)
垢版 |
2023/10/13(金) 22:40:02.91ID:79uhgkd/0
リスト結合する時は+使うわ
381デフォルトの名無しさん (アウアウアー Sa7e-wavJ)
垢版 |
2023/10/13(金) 22:57:18.57ID:e5Ke0Kb/a
>>379
仮にとかじゃなくてlistのappendの話だからね
list.appendは可変長引数取らないから
日本語読めない&list.appendの仕様も知らないのに食い下がる度量は認めるよ
でもPythonは向いてないかも
2023/10/13(金) 23:19:09.90ID:Ds5LqbN70
>>381
いや、老若男女だれがどうみても君自身が
>>363 >データを管理したいならappend(a)とappend(*a)が同時に使えるように書くべきじゃない
と、可変長引数を持った仮appendの話をし
>appendとextendが別れてるというのが全てだと思う
だから組み込みlistの(本家)appendがそんな仕様にはなっていないのだ
という論理展開をしている
可変長引数を持っていようがいまいが、*aは通るときは通る
という可能性をきみが失念して論理展開していたのは明らかです
383デフォルトの名無しさん (アウアウアー Sa7e-wavJ)
垢版 |
2023/10/13(金) 23:19:54.70ID:AHWiHfG4a
[].append(*{})は普通に動く、というレベルの認識の人が無闇に可変長引数使わないほうがいいのは間違いないかな
Guidoに習ってappendとextendで分けて引数は常に1個にしよう
384デフォルトの名無しさん (アウアウアー Sa7e-wavJ)
垢版 |
2023/10/13(金) 23:25:55.75ID:AHWiHfG4a
>>382
そもそも

add_user(user) ⇔ list.append
add_user(*users)⇔ list.extend

これらの比較の話として、同じメソッドに2通りに呼び出しを与えるべきでない、という文脈の話をしているので(しかもuserは自作クラス、usersは自作クラスのリストという制約がついているので混同しようがない)
そこで妙に食い下がっているのは単に君が議論を追えてないだけだよ
list.appendが可変長引数を取ると思っている君がねw
385デフォルトの名無しさん (アウアウアー Sa7e-wavJ)
垢版 |
2023/10/13(金) 23:26:55.88ID:AHWiHfG4a
自作クラスのオブジェクト ね
2023/10/13(金) 23:36:32.04ID:sRXpRcqA0
>>383それがありなら>>377 単に君が動かない場合を想定してるだけで、動く辞書を想像できなかっただけ
単に省略で*{}と書いただけでまさに>>377
>>384
故に>>377前提である
>list.appendが可変長引数を取ると思っている
は成立しない
>、という文脈の話をしている
こちらもその文脈の話をしているし、していないとは一言も書いてない
文脈あろうがなかろうが
仮定した>append(a)とappend(*a)
によって君が
>同時に使えるように書 いちゃうと不都合だから
>appendとextendが別れてるというのが全て
という論理展開している事実は変わらない
2023/10/13(金) 23:57:10.89ID:JzNLMdAt0
>appendとextendが別れてるというの は
>append(a)とappend(*a) のように >同時に使えるように書 けちゃうと不都合があるから >>363

可変長関係なく動く*aを失念してるわな どうみても
2023/10/14(土) 07:09:49.12ID:8MwVC+VG0
>>380
計算科学の世界とかなら話は別だけど、可読性を考えるとオペレーションでリストの処理を記述するのは微妙かも
389デフォルトの名無しさん (スフッ Sd33-Kt/B)
垢版 |
2023/10/14(土) 14:06:37.16ID:tZ7gaNQAd
>>372-373
こいつな (クスマテ MM7e-RHqV)
>268
390デフォルトの名無しさん (アウアウウー Sadd-f0fU)
垢版 |
2023/10/14(土) 16:44:20.26ID:x03gZ5vca
>>342
%%time は jupyter notebook 用だろ
python の文や式ではない
2023/10/15(日) 00:49:27.64ID:1GgH9uvV0
vim の外部Linux コマンド呼び出しみたいなものだろう
2023/10/16(月) 06:31:16.76ID:SmfSm8IF0
anacondaで入れてみたけど
普通に入れたほうが楽?
だとよけいに
2023/10/16(月) 06:31:27.47ID:SmfSm8IF0
vscodeだとよけいに
2023/10/16(月) 07:33:26.99ID:dwn5MUgM0
普通とは?
395デフォルトの名無しさん (アウアウウー Sadd-f0fU)
垢版 |
2023/10/16(月) 10:10:32.26ID:kgcCjrnKa
>>392-393
君のレベルなら Anaconda の方が無難
VSCodeはあきらめて
2023/10/17(火) 00:02:40.60ID:IDqb6kdg0
Google ColabでTwitterの自動投稿に成功したのですが、
いざEXE化しようと思い、VSCodeに移植しても動きません
というか、iniファイルの読み込みができないようなのですが、
何か方法ありますでしょうか?

一応、ini読み込み用の物なのですが、こちらもうまくいきませんでした。
また、スクリプトも実行すると raise KeyError(key) KeyError: 'BASE'と出して止まってしまいます。

よろしくお願いします。

# 設定ファイルを扱うモジュールをインポート
import configparser

# ConfigParserのインスタンス(特定の機能を持った変数)を取得
config = configparser.ConfigParser()

# 用意したconfig.iniを読み出し
config.read(".\config.ini")

# 変数Config_1の中から、"BASE"セクションの"speed"と"weight"項目の内容を取り出し
read_1 = config["BASE"]["speed"]
read_2 = config["BASE"]["weight"]

# 変数の内容を出力
print("read_1 =", cfg_read_1)
print("read_2 =", cfg_read_2)
2023/10/17(火) 00:20:02.64ID:KXoPz/N40
まずはconfig.readの戻り値を確認
2023/10/17(火) 03:17:56.82ID:gqGJp+iF0
>>394
anacondaつかわずに
Pythonをインストールする
399デフォルトの名無しさん (アウアウウー Sadd-f0fU)
垢版 |
2023/10/17(火) 05:51:43.89ID:hOrq7F7ga
config.read("./config.ini")
400デフォルトの名無しさん (ワッチョイ d9d3-VGqS)
垢版 |
2023/10/17(火) 09:39:25.08ID:IfpwnPMt0
config.iniの書き方なのでは
2023/10/17(火) 13:58:02.86ID:W1mvng0kd
>>397,400
ありがとうございます。
返り値はNoneでした。
また、"./config.ini"やフォルダをつくって
"./config/config.ini"やフルパスも試しましたができませんでした。

何か環境構築が間違っている可能性があったりするのでしょうか?

GoogleColabではエラーなく実行できるのに・・・
(;´д`)
402デフォルトの名無しさん (JP 0H25-Fhx2)
垢版 |
2023/10/17(火) 14:15:23.43ID:lA46vkBGH
GoogleColabではいくつかのモジュールが最初からインストールされている。
Vscodeでは必要なモジュールをpipでインストールする必要があるのでは?
403デフォルトの名無しさん (アウアウウー Sadd-f0fU)
垢版 |
2023/10/17(火) 14:26:21.59ID:vCPpyEw2a
もしそうなら
import configparser
でエラー出てるはずだけどそこは出てないんだろ
404デフォルトの名無しさん (アウアウウー Sadd-f0fU)
垢版 |
2023/10/17(火) 14:32:36.89ID:vCPpyEw2a
vscode 内の python から観て './' が実際はどこなのかを確認した方が良いな
print(os.path.abspath('./'))
print(os.path.abspath('.'))
2023/10/17(火) 15:06:00.27ID:HxEc0Y/V0
>>396
そのコードのままだと
config.read(".\config.ini") はcolabでは読み込めなかったな
もしそのまま移植したって場合に
元はconfig.read("./config.ini")だったけど移植作業中に
".\config.ini"とか"絶対パス.\config.ini"になっちゃったとか?
2023/10/17(火) 15:06:09.46ID:T5fw5RAV0
>>396
そのコードのままだと
config.read(".\config.ini") はcolabでは読み込めなかったな
もしそのまま移植したって場合に
元はconfig.read("./config.ini")だったけど移植作業中に
".\config.ini"とか"絶対パス.\config.ini"になっちゃったとか?
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況