Pythonのお勉強 Part69

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ c733-stRS)
垢版 |
2022/11/24(木) 21:39:44.67ID:A6xfpKBe0
!extend:default:vvvvv:1000:1024
↑スレ立てる毎に減るので、減ってたら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/

●関連スレ● 自称初心者は↓へ
【まず1嫁】くだすれPython(超初心者用) その58
https://mevius.5ch.net/test/read.cgi/tech/1662514433/

〇前スレ〇
Pythonのお勉強 Part68
https://mevius.5ch.net/test/read.cgi/tech/1663235546/

次スレの建立は>>985が挑戦する。(980通過して24h後も落ちなくなった)
### END of TEMPLATE ### ?
VIPQ2_EXTDAT: default:vvvvv:1000:512:: EXT was configured
2023/01/03(火) 16:04:23.85ID:HKIHgf/70
globはいろいろ謎だよな
歴史的な何かとの互換性で微妙に使いにくい
2023/01/03(火) 16:06:39.39ID:HKIHgf/70
とりあえず、import glob はやらなくて、
from pathlib import Path
p = Path("./")
for file in [str(x) for x in p.glob("*")]:
 print(file)
みたいに使ってるけど、これでもしっくり来ない
2023/01/03(火) 16:15:41.39ID:97qfA6UK0
自分でフィルタしたいならos.walk
2023/01/03(火) 16:25:05.94ID:E/lRcWz50
>>381
ありがとう。
一見すると、単に","が"n"に変わっただけのように見えるけど、
Excelに貼り付けたときの挙動がまったく異なるんだね。

しかし検索してもアフィみたいなサイトしかなくて大変だな
入門書探してみるノシ
2023/01/03(火) 17:15:05.41ID:90wq8UOz0
\nただの改行だよ
2023/01/03(火) 18:00:04.32ID:E/lRcWz50
失礼。

print("\n".join(files))

こういうことね。
388デフォルトの名無しさん (ワッチョイ 5b2c-Hg2a)
垢版 |
2023/01/03(火) 22:20:57.30ID:dIZcTCs/0
定期的に
tuple[str, tuple[int200個]] #key: valueです
を1万件取得して
既存の辞書に追加、更新していきます
このときkeyがなければkey, valueを登録するのはいいとして

keyが既存のときのvalueの更新はどうするのが常道ですか? 高速なのがいいです。または不要な書き換えがないほうがいいです
valueに差異があれば書き換え がいいのか、問答無用で全部更新しちゃうべきなのか…
2023/01/03(火) 22:55:20.83ID:97qfA6UK0
理解も進むしベンチとるのがいいよ
すでに新しいタプルを構築してるなら問答無用でいいと思うけどね
キーの確認や差異がないかしらべるコストもゼロじゃないし
2023/01/03(火) 22:58:56.25ID:n4oKw/VOa
データベースで言う、upsert だろ。
データが無ければinsert、有ればupdate

基本中の基本
391デフォルトの名無しさん (ブーイモ MM7f-UGA+)
垢版 |
2023/01/04(水) 01:07:35.19ID:O+gUhHpWM
30代Pythonクソチョン男は強姦魔の犯罪者!
あなたの近くにいます!
父母と祖父母の戸籍謄本を提出させましょう!
2023/01/04(水) 08:56:21.55ID:fFs0aGwQ0
perlから来るとkeyが既にあるか無いか気にしないといけないdictがうざくて仕方ない
393デフォルトの名無しさん (ワッチョイ f397-HbQu)
垢版 |
2023/01/04(水) 10:43:47.27ID:xfkX5cN10
dictを継承したmydict作って、setitemをオーバーライドすればいいんじゃない?なんかその辺のパッケージにありそうだけど
2023/01/04(水) 11:09:24.58ID:fFs0aGwQ0
autovivificationは便利だけどどう考えても邪悪なのでpythonには似合わないとは思う
多次元のdictとか何も考えずに作れて楽なのに
395デフォルトの名無しさん (ワッチョイ cebb-FKhm)
垢版 |
2023/01/04(水) 11:54:12.95ID:3yoX2IMb0
perlから来たからdefaultdictを知らないってことか
396デフォルトの名無しさん (ブーイモ MM13-DakT)
垢版 |
2023/01/04(水) 11:57:20.58ID:PRI0tLaEM
defaultdictとか関係なくないか?
単にfoo[key] = valueってしてけばいいだけの話じゃないの?
2023/01/04(水) 12:17:46.09ID:fFs0aGwQ0
文章に単語が何回登場したかカウントする
みたいなことをしたい時に、
if word in count:
 count[word] += 1
else:
 count[word] = 1
みたいに毎回判定が入る

perlなら問答無用に
$count[$word] += 1;
で済んでしまう
2023/01/04(水) 12:21:49.86ID:fFs0aGwQ0
で、この場合はdefaultdictで解決できるのだけれど、
そうも行かないケースがままある
399デフォルトの名無しさん (ワッチョイ cebb-FKhm)
垢版 |
2023/01/04(水) 12:27:21.02ID:3yoX2IMb0
そうもいかないケースを挙げてみ?
2023/01/04(水) 13:21:09.09ID:hHvDsnQT0
俺はこっち派

count[word] = count.get(word, 0)+1
401デフォルトの名無しさん (ブーイモ MM26-DakT)
垢版 |
2023/01/04(水) 14:05:48.69ID:hsLqwQpIM
>>397
質問とは関係ない話だったのか

defaultdictをわざわざ使わなきゃいけないのは面倒だとは思うがパフォーマンスに影響するところだから違うものとして分ける考え方も理解できる
402デフォルトの名無しさん (ワッチョイ 0e30-9yt5)
垢版 |
2023/01/04(水) 16:11:58.90ID:Y9cKLIFN0
>>397
いいんじゃないの
上に書いてる奴は見れば一瞬で理解できる
2023/01/04(水) 16:31:04.37ID:nnn7+JHJ0
perlの糞文法の轍を踏まず、perl屋さんが億劫に感じる方向でおながいしまつ
404デフォルトの名無しさん (アウアウウー Sac7-Dewi)
垢版 |
2023/01/04(水) 16:33:02.89ID:s5vEki4Ca
そりゃ言語が違うんだから当たり前だろ
そんなにperlが好きなら一生perl浸かってろ
2023/01/04(水) 16:46:54.88ID:169GBKXC0
Perlはこそっと使え
決して異教徒の目に触れさせるな
2023/01/04(水) 17:03:28.83ID:fFs0aGwQ0
初期化してない変数をいきなり参照したら0で構わないと思うんだけどな
99%はバグってるんじゃなくて初期化を忘れただけなんだから
2023/01/04(水) 17:46:01.10ID:R0FkSoR+6
バグの原因を初期化忘れだけに絞れるなら恩恵としては大きいな
2023/01/04(水) 18:04:46.20ID:lFNs7lW+0
>>406
> 99%はバグってるんじゃなくて初期化を忘れただけなんだから
根拠の無い妄想はブログとかでやってくれ
2023/01/04(水) 18:08:36.66ID:hHvDsnQT0
>>406
99%は言い過ぎ
2023/01/04(水) 18:23:39.40ID:fFs0aGwQ0
関数内の0や""で初期化してる処理を、スコープ先頭に移して挙動が変わるかどうか
変わらないならそれは省略可能だった初期化
2023/01/04(水) 18:23:43.29ID:oLi3mo910
>>406
そこはNoneでいいだろ。つか、初期化してなきゃ型も決まらないから0にもしようがない。
2023/01/04(水) 18:50:16.06ID:fFs0aGwQ0
だからこその動的型付けで、0だったことにする
文字列として参照されてたら""だったことにする
dictとして参照されてたら{}だったことにする
2023/01/04(水) 18:53:52.08ID:rMcGd+esd
>>412
それ別のバグ生み出しそう
型の違いって致命的じゃね
2023/01/04(水) 19:06:24.67ID:oLi3mo910
>>412
数値として参照されたか文字列として参照されたかってどう判断するつもり?
2023/01/04(水) 19:09:25.07ID:fFs0aGwQ0
perlはそのへんを、お前は人工知能か何かなのかという精度で判定してくれてた
普通に考えると確定しないようなケースでも何故か正解する
失敗すると発見不可能なバグになるから封印したんだろうな
2023/01/04(水) 20:10:19.57ID:JBcAh0Lfd
rubyキチガイといいこいつといい多言語は~って奴は聞いてもないこと話してきてウザい
2023/01/04(水) 21:31:42.96ID:oLi3mo910
そりゃperlと同じようなコンテキストの考え方を導入しなきゃ無理だな。
少なくとも、数値の加算と文字列の連結に同じ'+'演算子を使ってるpythonは
そのへん全部ひっくり返さないとならない。
2023/01/04(水) 21:39:33.83ID:fFs0aGwQ0
+される相手が文字列なら文字列
2023/01/04(水) 21:48:59.92ID:QnXxsDbw0
Option Explicit On
なんてやったら阿鼻叫喚か
2023/01/04(水) 22:01:32.73ID:lFNs7lW+0
>>418
両方初期化してない変数ならどうするんだ?
2023/01/04(水) 22:08:13.33ID:169GBKXC0
降魔の儀式を始める
2023/01/04(水) 23:09:43.15ID:fFs0aGwQ0
a = b + c
でbもcも未初期化なら、aも未初期化で何も困らない
2023/01/04(水) 23:58:47.37ID:PU4coe7B0
初期化すべきなのに忘れていて
忘れたものを忘れたまま使おうという発想が理解できない
そんなコードもコーダーも使い物にならない
2023/01/05(木) 00:00:28.67ID:UaHb0F9a0
>>417
呼ばれるメソッドはちがうよ割と大昔から
https://docs.python.org/ja/3/reference/datamodel.html?highlight=__add__#emulating-numeric-types
2023/01/05(木) 00:03:39.00ID:/79BsoYR0
>>422
そりゃ結局None。
変数の初期化はこの際関係なくて None + int -> int で None + str -> str になってほしいってことなんだろ。
2023/01/05(木) 00:05:55.35ID:/79BsoYR0
>>424
左辺の型が決まらないことには呼びようがないんじゃね?
2023/01/05(木) 07:49:37.10ID:DuFbe6wEd
Perl好きならPerl使ってろよ
2023/01/05(木) 08:03:01.51ID:0egeTroNM
いい加減perlおぢさんウザイな
荒らしてるという自覚は無いんだろうな
2023/01/05(木) 08:37:29.48ID:MKhVdLEmr
頭がPerl
2023/01/05(木) 08:54:26.68ID:qYGcpxae0
おっぱいがPython
2023/01/05(木) 08:54:31.46ID:XvyJyDBe0
暗黙より明示のルールに反してるから可能だとしてもやらないだろう

変数を参照するだけか書き換えもするかで名前空間が変わるのは結構暗黙的だと思うけど、
それは利便性が優先した
初期化を省略するのはそんなに利便性が無い
2023/01/05(木) 08:57:08.87ID:O+NRT3S+0
利便性が無いというかタイプミスを検出できなくなるから
2023/01/05(木) 13:08:24.65ID:A7vAZ1Ex0
ミスはしませんw
2023/01/05(木) 13:28:28.85ID:XvyJyDBe0
タイプミスしたら使ってない変数が現れるんだから、それは簡単に検出できる
2023/01/05(木) 14:43:39.73ID:O+NRT3S+0
>>434
どうやってやるの?
2023/01/05(木) 14:53:37.34ID:XvyJyDBe0
チェッカーにかける
2023/01/05(木) 16:58:05.12ID:Ej4/aJA/0
str型限定だけど、型を自動的に変更してくれるというのはちょっとありがたいかも
format()やf文字列だと、変数をそのまま突っ込めばいいので楽ちん
2023/01/05(木) 17:05:39.43ID:DbVL8BP10
自動変換は悪さにしか使われないという印象だからいらないかな
perlみたいに言語がよしなにやってくれるならそれで良いけど
ユーザー定義の暗黙の型変換は間違いなく地獄
2023/01/05(木) 17:13:54.28ID:/79BsoYR0
C++の変換コンストラクタとかな。
自分でそれを意図して書く人にとってはそのときは楽だろうけど、後から読む人が大変。
2023/01/05(木) 17:27:10.71ID:s7+Erfl9p
JSにおけるTSみたいなのってPythonでは作られないのかな
2023/01/05(木) 17:31:18.16ID:AfQblY9wd
Pythonには型アノテーションがあるから不要
TypeScriptの超柔軟な型付けを想像してるとガッカリするが
2023/01/05(木) 17:54:22.11ID:AqbKvwuBd
>>434
その使ってない変数が初期化されてて使えるといいって話が>>406でしょ
初期化忘れよりタイプミスの方が遙かに多いだろw
2023/01/05(木) 18:02:36.57ID:XvyJyDBe0
変数名や関数名をタイプするのなんか最初の1回だけだしな
2023/01/05(木) 18:15:14.05ID:AqbKvwuBd
タイプしないならどうするの?
まさかマウスポインタ操作するの?
2023/01/05(木) 18:41:22.77ID:XvyJyDBe0
マジで、変数名はコピペしかしない習慣にした方がいいよ
あるいは自動入力
アニメに出てくるハッカーじゃないんだから、キーボード叩きまくるスタイルは良くない
446デフォルトの名無しさん (ワッチョイ 8b01-IAH/)
垢版 |
2023/01/05(木) 18:44:43.59ID:WQABuOJr0
Pythonが「メインの利用言語」で2位にとどまる、1位に立ったのは定番のあの言語
https://xtech.nikkei.com/atcl/nxt/column/18/02246/110200002/?twclid=2-6h1yvcwwfn6rhkvsu5alyi08m&n_cid=nbpnxt_twad_2211_005
2023/01/05(木) 18:45:50.33ID:6GZFvj4Q0
コピペよりインテリセンス?オートコンプリート?をよく使う
2023/01/05(木) 19:02:35.19ID:uFuuDD5j0
読者アンケートの結果ごときで
会員登録で続きをご覧いただけますと来たか
2023/01/05(木) 19:18:25.74ID:DbVL8BP10
変数のレキシカルスコープを導入してくれ
2023/01/05(木) 19:39:15.56ID:+qdyai3T0
そういうのって登録するとわんさかスパムメールが届くことになる
2023/01/05(木) 20:37:35.36ID:aM58GnUZp
Pythonはレキシカルスコープ採用してるって出てくるけど変数のレキシカルスコープはまた違うの?
2023/01/05(木) 20:37:52.79ID:AqbKvwuBd
>>445
使ってない変数が現れたら簡単に検出できるんでしょ?
ならコピペする必要なくない?
453デフォルトの名無しさん (アウアウウー Sac7-yDM8)
垢版 |
2023/01/06(金) 16:48:17.73ID:YIB2cDqha
>>440
Nim 便利ょ
2023/01/06(金) 17:02:10.21ID:nq1XWMD+0
ちょっと文法が似てるだけの別言語やん
2023/01/06(金) 17:04:24.79ID:csJ7DXSap
>>453
Nim良さそうだけど全然流行ってる感じないね
そもそもPythonがライトユーザー向けに適合し過ぎてて進化の必要ないのかもね
456デフォルトの名無しさん (アウアウウー Sac7-Dewi)
垢版 |
2023/01/06(金) 17:36:13.11ID:YIB2cDqha
別言語だけど python と相性良い方
2023/01/06(金) 17:41:53.43ID:nq1XWMD+0
JavaとJavaScriptくらい違う
2023/01/06(金) 17:45:56.69ID:DjpXTv+h0
ほな一緒やないかい
459デフォルトの名無しさん (ワッチョイ 1a03-uhAF)
垢版 |
2023/01/06(金) 20:18:53.27ID:Hxt0hqaC0
どこがやねーんっ
460デフォルトの名無しさん (スップ Sdba-kLll)
垢版 |
2023/01/06(金) 23:55:41.03ID:Hw74BWkVd
pythonを-cオプションでワンラインフィルタ作るときって便利なやり方ない?
これ相当のものをワンラインで書けるようにしたい

def inputs():
while True:
try: yield input()
except EOFError: return

for x in inputs(): print(x.upper())

EOFErrorの無視は終了コードが失敗になるから不可
sys.stdin.read().split("\n")利用はstdinのバッファリングのオンオフを切り替えられないから不可
2023/01/07(土) 00:31:00.42ID:xLvAB63F0
python -uc 'import sys; sys.stdout.writelines((print(x) or x.upper()) for x in sys.stdin)'

これだと行バッファ不可避だからsys.stdin.read(n)で書かんとか
2023/01/07(土) 00:38:08.36ID:xLvAB63F0
多用するならPerlの-pe/-ne相当になるモジュール用意してフィルタだけ書くスタイル
2023/01/07(土) 00:49:55.38ID:lVhOhIz00
M1 Macでfor文を勉強中なんだけど、

names = ['A', 'B', 'C']
for name in names: print(name +'さん')

これをターミナルで実行しても

「・・・」

と表示されるだけで何の反応もない
M1だから、でしょうか。

あとでWindowsでも試してみる
2023/01/07(土) 01:24:54.56ID:4BI3EQQz0
もっかいエンター押せ
2023/01/07(土) 02:01:54.97ID:GmV1yQnL0
ここに書けるなら、Sandbox にも書けるだろう
2023/01/07(土) 02:09:26.56ID:WGkjV5JA0
>>463
釣りはやめろ
467デフォルトの名無しさん (ワッチョイ 1176-1Rsz)
垢版 |
2023/01/07(土) 03:23:48.08ID:odL5Q3k30
>>462
ああそうか 単にフィルタ部だけ受け取ってexecしてしまえば楽だったか
ありがとう
2023/01/07(土) 04:05:10.65ID:79bETjVCM
特定のフォルダを5分おきに監視して、新たに作成されたファイル名を
SQLiteテーブルに登録していく…的なことをやりたい
単なるループで作るとCPU食って固まってしまうので非同期処理をする
必要があると思うんだけど、テンプレみたいなコードどっかにないですかね
asyncとかドキュメント見ても難しくて理解できないので…
2023/01/07(土) 06:05:45.34ID:dqXrk0CZa
cron
470デフォルトの名無しさん (ワッチョイ ab33-veFr)
垢版 |
2023/01/07(土) 07:43:49.02ID:amZltHqL0
なんでるーぷだとcpu食って固まるの?
2023/01/07(土) 07:44:51.16ID:GR5Mm1St0
cpuに食えるだけ食わせるからだよ
2023/01/07(土) 07:53:52.52ID:dqXrk0CZa
Ruby で、1行ずつ読み込んで処理する、1-liner のフィルタは、

ls | ruby -lne 'print $_.upcase'

ARGF を1行ずつ読み込んで、変数$_ に格納する。
ARGF とは、複数のファイルや標準入力を連結して、1つにした仮想ファイル

ruby -lne 'print $_.upcase' a.txt b.txt
2023/01/07(土) 08:28:19.88ID:GENmLOTj0
>>468
https://pypi.org/project/watchdog/
とか
libev/libeventのバインディングなら他もたくさん
2023/01/07(土) 09:51:45.92ID:E1WCWcUY0
>>468
それ非同期処理は関係なくね?
というかIOを非同期にしてスレッドが待たなくなったらよけいにCPUを回すことになると思うが。
2023/01/07(土) 09:59:59.53ID:QtB2nOqPM
sleep挟むだけじゃない?
476デフォルトの名無しさん (ワッチョイ 5b5c-FOYR)
垢版 |
2023/01/07(土) 10:00:12.84ID:rucp1FJJ0
inotify
2023/01/07(土) 11:05:11.37ID:11syE16N0
一瞬でもいいからsleepを入れておけばOSがいい感じにやってくれる
それせずに固まってしまうフリーソフト多すぎ
例えば、JaneStyle
2023/01/07(土) 11:10:22.66ID:79bETjVCM
>>474
うーん実は非同期という概念すら理解できていないかも知れない
>>468のループを裏で動かしつつWindowsやアプリも普通に操作したいって話です

>>477
マジっすか
sleepで5分待たせるだけでいいなら簡単だからやってみます
2023/01/07(土) 11:53:06.20ID:iltXkPxC0
固まってしまうのは
メインスレッドで重い処理したり止めたりして
メッセージを処理しないからかな
2023/01/07(土) 12:02:42.84ID:11syE16N0
単純にメモリ内で巨大な配列の計算をしたいとかで、
人間が判るほど時間のかかる処理をする時に、
ループの中に微小なsleepを入れておくと、そのタイミングでOSがタスク切り替えできるので、
他のアプリに影響せずに処理できる

win10になってタスクをより奪いやすくなってる気がする
2023/01/07(土) 12:07:18.18ID:UFnoM8jpd
sleepってその間メッセージの処理できるの?
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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