Pythonのお勉強 Part66

■ このスレッドは過去ログ倉庫に格納されています
2021/11/12(金) 07:48:11.11ID:vp8lzav70
!extend:default:vvvvv:1000:1024
!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://codepad.org/      ほぼ直感的に使える。Run codeボタンあり。
ttp://pastebin.com/     まずまずシンプル。
ttp://dpaste.com/      とてもシンプル。消えるまでの日数は十分長ーく指定のこと。

◇Pythonオフィシャルサイト http://www.python.org/
◇まとめwiki ttp://python.rdy.jp/

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

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

次スレの建立は>>985が挑戦する。(980通過して24h後も落ちなくなった)
VIPQ2_EXTDAT: default:vvvvv:1000:512:: EXT was configured
2021/11/18(木) 17:38:05.48ID:naW8oYaR0
否定はしない
2021/11/18(木) 18:04:56.64ID:ah9sw/Zw0
俺は嫌だ
2021/11/18(木) 23:29:42.52ID:/dHqMjeMa
asyncioはI/Oに効く
データベースの読み書きとか通信処理とか
バックグラウンド処理はCPUにオーバーヘッドがある時
2021/11/19(金) 07:39:18.17ID:OFtNpZ320
3.8.5でwin8.1で動くものをwin7に持っていくと、
subprocess.Popenでエラーになって動かない

最新のpythonはそもそもwin7にインストールできない
win7で動くもっと新しいバージョンはある?
無い場合は何か解決方法はある?
2021/11/19(金) 07:50:08.35ID:UKOjKE+50
>>84
エラーメッセージは?
2021/11/19(金) 08:01:48.17ID:OFtNpZ320
FileNotFoundError: [WinError 2] 指定されたファイルが見つかりません。

実行しようとしてるのはbatファイルで、.batまで書くとエラーにはならない
でもサブプロセスとしては動かなくて、処理はそっちに移行して終了してしまう
shell=Trueを付けても同様の動作になる
やりたいのは、いつ止まるか判らないコマンドをサブプロセスとして動かして監視すること
2021/11/19(金) 08:08:51.54ID:+sXFtDSXD
Pyの知識以前のWinのシェルの知識だな
cmd . exeをスイッチ付きで起動してやればいい
2021/11/19(金) 10:41:55.94ID:fOs9i175r
3.7だと動くのかどうか

去年ですらopenCVがPython3.8で動かないとか問題になってたなあ
2021/11/19(金) 10:47:38.84ID:fOs9i175r
この辺が時々問題になるから
じゃあwheelで取ってくるかと思い
pep425とかget_supportedとかやってみたら無くなってる

調べたらutils.compatibility_tagsとかになってた

それをふざけてcolaboratoryでやってみたら3.7までしか対応してなかった次第
2021/11/19(金) 11:03:06.60ID:OFtNpZ320
perlだとwin7の時点で既に固まってたので、環境が古くて困ることは無かったけど、
pythonはまだ進化を続けてるので、後方互換性はかなり怪しいな
本番環境側をwin10にしてしまおう
2021/11/19(金) 11:18:00.59ID:eyeX0xyMF
>>84
cmd /K
とか
shell=FalseまたはTrueかな
この辺いい加減に描いてると動かない
2021/11/19(金) 14:17:42.60ID:ysK9uB2VM
>>86
Pythonの違いじゃなくてWin32 console APIの違いの可能性もあるね
Console切り離すのは結構version違いが激しい
Powershellでも厄介
batをVBで書き直すことを勧める
2021/11/19(金) 14:43:19.89ID:V+Ekt21U0
なぜVBw
2021/11/19(金) 14:54:41.80ID:ysK9uB2VM
>>93
Console切り離すのが簡単なスクリプト言語他にあるかな?
2021/11/19(金) 14:55:39.66ID:ysK9uB2VM
WSHでJavascriptなら簡単なんかな?
2021/11/19(金) 15:07:12.92ID:OFtNpZ320
問題はbatファイルの呼び出しだったようで、
実行ファイルを直接呼び出すように変更したらwin7でも動いた
2021/11/19(金) 15:46:55.28ID:bNc9xgI00
ぱい
2021/11/19(金) 18:23:50.32ID:NQkiHUfv0
ちゃんとした質問してほしい
2021/11/19(金) 22:02:42.25ID:R6tUvqDP0
2021/11/20(土) 06:35:11.10ID:MZWWAxGE0
cp932で表せないファイル名のリストを作る

cp932にencodeしてみてエラーになったらそれを出力する、という方式なんだけど、
printするとエラーになってしまうので、リダイレクトでファイルにできない
仕方ないので、encoding="utf-8"でopenしてwriteしてるけど、
改行とか付けないといけないし、printで済ませたい

printしてもエラーにならない方法とか無いのかな
python2ならそのまま行けた
2021/11/20(土) 07:45:20.38ID:Lukvfxqi0
>>100
https://docs.python.org/ja/3/library/functions.html#print

>>> f = open(path, 'w', encoding='utf-8')
>>> print(*objects, file=f)
2021/11/20(土) 08:24:40.92ID:MZWWAxGE0
cp932のエンコードなんだからcp932でないものは通さない
という例外を認めない姿勢は厳密ではあるけど融通がきかないよな

漢字のファイル名も使えるのに、たまに'〜'とか変なスペースとかで
処理できないツールは大抵そういう厳密さで引っかかってる
ノーチェックで通してれば処理も減るしツールも使える側に倒れるのに
103デフォルトの名無しさん (オイコラミネオ MM67-83eS)
垢版 |
2021/11/20(土) 11:19:01.66ID:/kqPbqrTM
なんとなく筋違いのことを言っているのだけはわかった。
2021/11/20(土) 12:11:56.36ID:MZWWAxGE0
既にファイルは開いてるんだから、そこにwriteするかprintでfile=を指定するかは、
処理上何も変わらない

知りたいのは、リダイレクトしてエラーにならない方法
os側は何が来ようがそのままファイルにリダイレクトするので、
標準出力に出す時点でのチェックを止めればいい
2021/11/20(土) 13:10:25.59ID:c6rYoMps0
python2でいけて、python3でエラーっていうのがわからない
CP932のコンソールの問題なら普通前者で起きると思うんだけど
2021/11/20(土) 13:20:06.78ID:c6rYoMps0
あと、openするときにバイナリ書き込みを指定すれば済みそうだけどな
改行コードもそのままにできるし
2021/11/20(土) 20:33:41.39ID:MS7q4miD0
https://www.pythonic-exam.com/archives/news/python_open_document
2021/11/20(土) 20:33:57.35ID:MS7q4miD0
いつ公開するのよ?
2021/11/21(日) 12:48:52.72ID:4kBJkMan0
https://qiita.com/righteous/items/c5f6fbf84c98c5a17043
これ全部できる?
2021/11/21(日) 13:09:44.82ID:DbnHICgp0
とどらんみたいなサイトに興味があるんですが、統計学とデータ分析どちらの知識が必要でしょうか?。
2021/11/22(月) 04:46:02.24ID:X0+jYONh0
a = ['a', 'b', 'c']
if 'x' not in a: print('hello') #1
if not 'x' in a: print('hello') #2

#1はaに'x'が含まれていない
#2は(aに'x'がふくまれている)の否定

この二つは全く同じものだと考えて良いのでしょうか?
112デフォルトの名無しさん (ワッチョイ 0610-0sbD)
垢版 |
2021/11/22(月) 07:57:31.23ID:sf/6XMlW0
同じ
2021/11/22(月) 08:01:58.64ID:HMeOIS1cM
>>111
同じだけど #1 で書けって言ってるみたい
https://kazusa-pg.com/python-not-in/
2021/11/22(月) 09:30:17.60ID:7Z6oy9Mm0
普通に優先順位が不安になるよな
2021/11/22(月) 10:10:59.14ID:XQq90Aj30
CIに必ずいれるしflake8なしでコード書くのは考えられん
116デフォルトの名無しさん (アウウィフ FF3b-YgSv)
垢版 |
2021/11/22(月) 12:23:27.94ID:vmkVXbGEF
if a is not None:
if a not is None:
if not a is None:
Python は書き方が一つしかない()っていったのは誰?
2021/11/22(月) 12:28:55.98ID:8fUDDfEEd
英語文法に強いと#1しかあり得んとなるが
否定文でこけた経験があると、どうしても頭に否定書きたくなってしまう
なんなら否定自体書きたくなくなる
2021/11/22(月) 12:42:04.92ID:7Z6oy9Mm0
そこでunlessですよ
2021/11/22(月) 13:10:59.47ID:z3oVlEgz6
if a:
2021/11/22(月) 13:58:34.46ID:WOttMYR/0
変数hogeに値がある場合はfugaにhoge(の値)を代入したい場合
if文や条件式を使わずに表現する方法ってある?
# python
hoge = "piyo"
fuga = hoge if hoge else ""

bashの変数展開みたいな書式ないよね
# bash
hoge="piyo"
fuga=${hoge:-""}
2021/11/22(月) 14:08:40.76ID:7Z6oy9Mm0
orは?
2021/11/22(月) 15:03:17.50ID:8fUDDfEEd
それこそwysiwygの精神に反するってすぐ分かりそうなもんだけどな
2021/11/22(月) 15:12:56.63ID:PHd8OvUid
Python初心者です
https://teratail.com/questions/251676
このページを参考にBytesIOを使おうと考えています

a = np.load(BytesIO(binary))
このように使った場合、BytesIOは不要と判断されて開放されるのでしょうか?

https://docs.python.org/ja/3/library/io.html
The buffer is discarded when the close() method is called.
とのことで、
stream = BytesIO(binary)
a = np.load(stream)
stream.close()
としたほうが良いのでしょうか?
2021/11/22(月) 15:24:31.25ID:XQq90Aj30
>>123
IOBaseの説明の対比でそう書いてるだけで
GCが働くからclose()は必須ではない
125デフォルトの名無しさん (ワッチョイ 0610-0sbD)
垢版 |
2021/11/22(月) 15:27:18.74ID:sf/6XMlW0
with BytesIO(binary) as stream:
__a = np.load(stream)

withブロックを抜けるとcloseされるから安全
2021/11/22(月) 16:09:57.46ID:7Z6oy9Mm0
withってなんか雰囲気で動いてる気がする
2021/11/22(月) 16:25:58.98ID:v4k6kYue0
>>121
なるほど、or はこんな動作もするんだな
ありがとう
128デフォルトの名無しさん (ワッチョイ 067b-cxg+)
垢版 |
2021/11/22(月) 16:37:47.59ID:2MDgP0Vy0
>>120
よくわからんけど
その例だったらfuga=f’{hoge}’でもfuga=hogeでも同じじゃないの?
2021/11/22(月) 16:54:42.37ID:v4k6kYue0
>>128
変数 hoge に "piyo" が入っているのは一例で、
例えば、hoge がもし None だった場合に ""(空文字)に変換されるので、
そのまま文字列(の一部)として出力したいときに使えるようになる
2021/11/22(月) 16:58:50.36ID:2MDgP0Vy0
あー、hogeが存在してなくてもエラーが出ないのか
131デフォルトの名無しさん (ワッチョイ ef36-QUTC)
垢版 |
2021/11/22(月) 19:05:57.15ID:lkDGIXBn0
まあ、自分しか見ないソースならいいけど見ずらくなりそだな、その書き方。
132デフォルトの名無しさん (オイコラミネオ MM67-83eS)
垢版 |
2021/11/22(月) 19:36:29.24ID:5E3QcxihM
undefinedに対応できない、Falsyのうっかりとかあるから、褒められる書き方ではないわな。
2021/11/22(月) 20:16:33.77ID:zjNStOpV0
>>124
>>125
ありがとうございます、勉強になりました
2021/11/22(月) 22:48:58.52ID:XQq90Aj30
fuga = hoge if hoge else ‘’
fuga = hoge or ‘’
どっちも’’とか特定の偽しか来ない前提だけど冗長でない分後者を推す
公式にも前者のコード例はたぶんないし
2021/11/22(月) 22:51:07.19ID:XQq90Aj30
‘’ or ‘’は意味不明やわ。日本語不自由ですまん
2021/11/22(月) 23:21:46.71ID:7Z6oy9Mm0
perlの // みたいなのは無いのかな
a // b はaがNoneでなければaを、Noneならばbを返す
2021/11/23(火) 00:17:52.93ID:Ln8GWMq+0
>>120
Ruby では、and/or の遅延初期化をよく使う

p a = a || 1 #=> aが未定義のnil で偽なので、右辺が評価されて1

a = 2
p a = a || 1 #=> aが真なので、短絡評価で2。右辺は評価されない

p b = b && 1 #=> bが未定義のnilで偽なので、短絡評価でnil。右辺は評価されない

b = 2
p b = b && 1 #=> bが真なので、右辺が評価されて1
138デフォルトの名無しさん (ワッチョイ a32c-pEHs)
垢版 |
2021/11/23(火) 00:44:36.44ID:xEN2JBOU0
>>136
それ
x = a if a else b
じゃね?
なんか避けたいって言ってるやつ
2021/11/23(火) 01:00:51.66ID:h5ckzt1c0
Noneかどうかで判定したいってこと
if a
だと0でも空文字列でも偽だから曖昧になりがち
if a is not None
でぜんぜん困らんけどね
140デフォルトの名無しさん (ワッチョイ 3bda-ObXG)
垢版 |
2021/11/23(火) 02:02:18.19ID:4MVUDnE90
ヌル合体とか欲しいよねPythonにも、
2021/11/23(火) 02:33:06.96ID:bb25eqH30
PEP505は全く進展ないね
3.10には入ると思ってたけど
2021/11/23(火) 10:09:13.49ID:OzyPSNUz0
値が入っていることを想定しているけれど、想定外にNoneだった時の為のガード
みたいな使い方をしたいんだろうけど、
そういうのは明示的にifとかtryで書いた方がいいよな
143デフォルトの名無しさん (オイコラミネオ MM67-83eS)
垢版 |
2021/11/23(火) 10:41:32.64ID:iYWDXWdAM
むしろ気をつけないといけないのは、想定外にTrueになってしまうケースだ。
たとえば、昔のDjangoのUserモデルのis_authenticatedは、プロパティじゃなくてメソッドだった。
2021/11/23(火) 13:28:59.61ID:Cd+od5Ii0
Noneも曖昧だからね
単なる未定義なのか空集合なのかエラーなのかNoneそのものなのか
ディクショナリー検索等でNoneが帰って来る仕様だがどう扱うか
2021/11/23(火) 13:32:03.52ID:KM4P0q2w0
結局は>>143の言うとおりなんよ…

我々はすでに知ってるんよ、中身がNullかどうかに注目した結果
普通にコード書くだけでトライキャッチスパムになってしまうJavaとかいう言語を…
2021/11/23(火) 13:40:48.37ID:OzyPSNUz0
エラーの情報をちゃんと持ってて、ずっと上流の呼び元までそれが伝わる言語あったな
なんだっけ

関数は引数に従って値を返します
という前提で普通の言語は設計されているけど、
関数は引数に従って値を返します。返さないこともあります
でないといけなかった
2021/11/23(火) 13:43:00.09ID:x4PI0/Sq
fastAPIのルーティングでデコレータ使わずに
app.add_api_route("/hoge", hoge, methods=["GET","POST"])
な感じで分離してやってみたけど、各リクエストメソッドでバリデーションが異なる時に躓いた

このまま共通のhogeだと互いのバリデーションclassが422 Unprocessable Entityを引き起こしてしまうので
app.add_api_route("/hoge", hoge, methods=["GET"])
app.add_api_route("/hoge", hogePost, methods=["POST"])
みたいにして新たにhogePost追加するという書き方に。

かと言ってデコレータ使うと
@app.get("/hoge")
def hoge():
@app.post("/hoge")
def hoge():
みたいにせっかくのルーティングの分離管理が二度手間かつ無駄に
というジレンマ

デコレータ使わない場合
>新たにhogePost追加する
というのが無難なのだろうか・・
2021/11/23(火) 15:02:56.49ID:Vfqk4Xs70
validator 内で GET/POST 区別したら?
149デフォルトの名無しさん (オイコラミネオ MM67-83eS)
垢版 |
2021/11/23(火) 15:18:14.11ID:nqaaqo53M
app.add_api_route("/hoge", hoge, methods=["GET"])
app.add_api_route("/hoge", hogePost, methods=["POST"])
これでいいんじゃね。関数として分けておけば、
validatorもデコレータ(ファクトリ)にしてみたり、いろいろ柔軟にできる。
@validate('GET')
def hoge()
@validate('POST')
def hogePost()
2021/11/23(火) 16:09:24.71ID:x4PI0/Sq
>>148
今はpydanticなvalidor使ってるけどクラス変数の評価前に区別する方法があったりするのだろうか
>>149
うんとりあえずはそんな感じでリクエストメソッド分だけ用意することにした

d
2021/11/24(水) 00:31:29.22ID:9nGxCHAd0
★★★★★
会話をすればポイントが増えてアイテムを買える。
次世代の大型掲示板、メルプラネット。
https://merpla.net/boards/
2021/11/24(水) 04:45:08.04ID:ZcuSX9hJ0
>>144
かと言って最初からOption型やmaybeモナドでライブラリ構成されてもウザいしね
2021/11/24(水) 15:08:35.99ID:lCK/bdd80
名前と数値がセットになったような内容を扱う時、
セットにしただけのclass作る?
2021/11/24(水) 18:01:26.90
キーと値がセットになった各値をどう扱うかによって
インスタンス化するか、辞書にとどめておくか、ライブラリ使うか
変えるかなぁ
2021/11/24(水) 21:37:03.97ID:YZcLPgmZ0
>>153
自分だけしか使わないならダラダラ書くけど
引き継ぐ可能性がある場合はクラスにしといた方がメンテしやすいんじゃないかと思ってる
2021/11/24(水) 22:14:50.32ID:lCK/bdd80
リファクタリングの本読んでて、オブジェクト指向の初心者は
小さなオブジェクトを使うのを嫌がる的なことが書いてあって、そんなもんかなと
157デフォルトの名無しさん (ワッチョイ a32c-pEHs)
垢版 |
2021/11/24(水) 22:49:34.83ID:Ph9UZvc+0
通常そういうデータってどっかのクラスのメンバ変数で辞書かnamed tupleじゃねえか?
keys:names のみのクラスってどういう状況であり得る?
158デフォルトの名無しさん (アウアウウー Sa3b-bFQI)
垢版 |
2021/11/25(木) 00:14:54.89ID:Mg+a9DvFa
集計目的ならdefaultdict
2021/11/25(木) 06:32:01.73ID:kAK1JHHz0
>>157
通常と言われてもなあ
2021/11/25(木) 07:36:38.15ID:1AK1NI0N0
ただの名前であってキーとは言ってない
重複のない保証はない
name[i]とval[i]で管理したいところ
valでソートをかける
classにせずとも余裕でやれる
やれるけど?
2021/11/25(木) 07:55:54.60ID:wc50HyKuM
ただの名前をキーと言う奴はもれなくアホだと思う
2021/11/25(木) 09:04:00.52ID:kAK1JHHz0
>>160
じゃあその組を管理するRDB風のクラスがいいんじゃないの?

#セットという言葉の使い方が気になる
2021/11/25(木) 09:23:53.44ID:1AK1NI0N0
いいんじゃない、の加減なんだよな

しなければならない / 是非するべき / した方がいい / しなくてもいい / しない方がいい / しない
そのへんの温度感が経験で違うのだろう
2021/11/26(金) 20:45:55.13ID:wc7annti0
urlopen()をwithで取得してwithを抜けると何が起きるの?
2021/11/26(金) 20:48:58.06ID:s3jo07500
シメられる
2021/11/26(金) 22:16:46.96ID:nRTAMUqI0
https://docs.python.org/ja/3/library/urllib.request.html#urllib.request.urlopen
> HTTP および HTTPS URL の場合、この関数は、わずかに修正された http.client.HTTPResponse オブジェクトを返します。

class HTTPResponse(io.BufferedIOBase)
で__exit__()はオーバーライドされてないから受信データにアクセスできなくなるだけ。
意図してる通りだろうけど
> より高水準のHTTPクライアントインターフェースとして Requestsパッケージ がお奨めです。
だし、説明が追加されることはなさそう。
2021/11/26(金) 22:30:51.87ID:wc7annti0
何かのリソースが自動で開放されるとかではないのか
2021/11/27(土) 18:48:32.12ID:Ce5RxaUa0
pygameってみんな使ってないのか?
せっかく二冊ほど読み終えたのに動かそうと思ったら
3.8じゃうごかないとか言われて途方に暮れてるんだが・・・

すなおにゲームはunityつかえってことか・・・・
2021/11/27(土) 19:23:42.37ID:QJDif1Cg0
2021/11/27(土) 19:29:31.81ID:IgXLbzKoM
>>168
たくさんあるから
 Python ゲームエンジン
で検索して目的に適してるのを選べ
2021/11/27(土) 19:45:13.67ID:JJsR/G8Z0
pygameでmidiが取り扱えるんだよな

ハノン弾いてリアルタイムで正確さを表示したら面白いと思って
ずっと前に作りかけて放り出してある
今ならすぐ作れそう
2021/11/27(土) 19:54:52.11ID:i0YnXTZB0
pygame、3.8.10で動くけど?
173デフォルトの名無しさん (ワッチョイ b72c-pIXc)
垢版 |
2021/11/27(土) 23:14:16.59ID:bPwHecSK0
pygame2やれ
2021/11/28(日) 00:16:01.67ID:0Kkbs8iXM
>>173
公式によれば3.9も
ただメインテナンスはやや停滞なんかね
2021/11/28(日) 00:55:05.96ID:YY1hk1pY0
色々試したらうごいたわありがとう
レースゲーム動かせるわ
2021/11/28(日) 00:55:37.48ID:YY1hk1pY0
普通にpipでいけたよ
2021/11/28(日) 09:18:19.48ID:swBDA3nq0
Pythonエンジニア認定試験のことってここでも大丈夫ですか?
2021/11/28(日) 09:26:25.30ID:6NVlX2It0
pythonが使いこなせるかどうかの能力なんて、
各種ライブラリのことをどこまで知ってるかだからなあ
言語仕様の部分はすぐに全員カンストするから差が出ない
標準ライブラリに限定して問題作ると、もっと便利な方法があって現実的でなくなる
2021/11/28(日) 09:39:22.33ID:o94Sh6rb0
そうだね
そもそもpython自体は簡単だし
ライブラリを使いこなす知識の方が重要だよね

認定試験無いよりはマシだろうけど
認知度が低いから結局試験の内容を説明しないとイケないんだよな
情弱処理持ってる方が話は早い
2021/11/28(日) 09:46:54.78ID:6+AWQcj90
>>177
とりあえず質問してみたら?
2021/11/28(日) 14:43:59.37ID:6NVlX2It0
改行区切りで書かれたファイルがあって、これを改行無しでリストに読み込みたい
そして、リストを改行区切り形式でファイルに書き出したい

内包表記で改行を削って、書く時にはjoinで改行付けるとかすればできるけど、
もう一段スマートにやれないかな
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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