【まず1嫁】くだすれPython(超初心者用) その53
レス数が1000を超えています。これ以上書き込みはできません。
当スレに★Python以外のプログラミング言語での回答類を書くべからず★
派生言語はそれぞれ専スレがあるのでそっち池。
「Ruby」「某言語では」をNGワード登録推奨。荒らしは、完全スルー放置が一番きらいです。
このスレッドは「お勉強」スレのほうには書き込めない超低レベル、
もしくは質問者自身何が何だか分からない質問を、勇気を持って書き込むスレッドです。
へび使いが優しくコメントを返しますので、お礼は Python の布教と初心者の救済をお願いします。
★エラーを解決したい場合は、
表示されてるエラー全文(勝手に省略やスクショうp等の横着クソ行為禁止)と、
実行環境(Pythonのバージョン・OSとIDEの種類とバージョン)をシッカリ書くこと。
Pythonの★ソースコードをそのまま5ちゃんにコピペすると、インデントが崩れてチヌ★
5chの仕様【【【複数の連続半角スペースはなにもなかったことにされる&タブは普通には入れられない】】】のため、どうにもなりましぇん。
↓等の、いわゆるコードうp用サイトに貼ってこいください。
ttps://techiedelight.com/compiler/ Run Code機能あり。
ttp://ideone.com/ デフォ設定はC用のため、言語選択ボタン押下がピコ手間かも。
ttp://codepad.org/ ほぼ直感的に使える。Run codeボタンあり。
ttp://pastebin.com/ まずまずシンプル。
ttp://dpaste.com/ とてもシンプル。消えるまでの日数は十分長ーく指定のこと。
◇Python公式サイト◇ http://www.python.org/
◇まとめwiki◇ ttp://python.rdy.jp/wiki.cgi
〇前スレ〇 くだすれPython(超初心者用) その52【まず1嫁】
https://mevius.5ch.net/test/read.cgi/tech/1610137345/
次スレは >>985 あたりが挑戦してくだしあ。(980過ぎて自動落ちは、無くなって久しい)
### END OF TEMPLATE ### >>5
(わざわざスレ立てするほどでもない)
くだらない質問
の略 >>6途中で送っちゃってた
(わざわざスレ立てするほどでもない)
くだらない質問を書いてくスレ
の略。 >>5 >>8
なーに
いいってことよ
おれもむかしこのスレの過去シリーズできいた requestsのpostしても空っぽで返ってくるのにハマりまくったけど
post(url,data=data)
のdataのところを
json.dumps({"name":"tarou","age":20})
みたいに文字列化したらなぜかうまくいった・・・
他のところは辞書型のままでもいけたのに >>10
たまたまそこに至るまではうまくいいようにはからってくれてたか
こころのひろい鯖さんだったのだろう
解決よかったね+理由記載乙
なにかだれかのたしにもなるといいね そこは json.dumps より urllib.urlencode 汁 前スレ
>>983
Erlang と OTP は良くやってる 導入で詰んだ
minicondaをインストールしたがpipを実行しようとするとpython38.dllが見つからないとしはじかれる
python38.dllはpython38.exeと同一フォルダにあるのに python38.exeではないなpython.exeか Ruby on Rails 6 の本も書いている人が、新刊を出した
Elixir実践ガイド、黒田努、2021/2/5
Ubuntu 20.04, Docker CE 19.03, Elixir 1.11
Erlang/OTP か、片方向リストは、先頭の要素だけが速いとか、
実行環境の内部構造の話が多くて、辛い 推奨NGワード: Ruby
推奨NGワード: Rails
推奨NGワード: 書いている人 >>14-15
スレタイも1も読めない池沼にはむりぽっぽ はいどうも、書いてみるもんですな、原因はセキュリティソフトでした、どうも失礼しました 質問スレって結構解決率高くて役に立つよね
なぜか投稿した直後に自己解決する 書くことで頭の整理ができて自己解決することもおおいいいいい 「it is assumed that your working directory is the root folder of the library.」
以下の文章中にある↑の文の意味が分かりません。
作業ディレクトリがライブラリのルートフォルダであることを仮定するというのはどういうことですか?
ライブラリのルートフォルダって何ですか?
The functionality for sound in this chapter can be found in the module sound in the
library, and the code examples assume that this module has been imported without a
prefix:
from sound import *
Moreover, it is assumed that your working directory is the root folder of the library.
Since the Python code in the library is located in the python folder, a simple way to
ensure that the library modules will be found is to add
import sys, os
sys.path.append(os.path.join(os.getcwd(), ’python’))
at the top of your program. pythonはまず起動されたディレクトリからモジュールを探す
sound.pyか、sound/__init__.py
それが無ければリストsys.pathに入ってるパスを見に行く
親切なインストーラは勝手にsys.pathにリストされたディレクトリに入りに行く
親切過ぎて勝手にsys.pathを改変する逆に迷惑なライブラリもある
何もしないライブラリ/インストーラも当然あるので、自分で追加しよう
しかしコード内からsys.pathを直接弄るのは薦めない
pythonは起動時にsys.pathに加えるパスを環境変数PYTHONPATHから調べるので、そこにsoundのパスを加えるべき
もし直接弄ると、その特定のコードの実行時にしか見えないバグを産みかねない、ユーザーとしては非常に厄介
python -i script.pyで実行後に対話モードに移れるけど、特に他人の書いたコードでそんなことやる気起きないでしょ? PYTHONPATHが長くなり過ぎるのも見にくいので、ホームディレクトリ直下にpylib3.10みたいなディレクトリ作って、それだけPYTHONPATHに加え、そこにパッケージシステム管理外のライブラリを全部ブチ込むのもあり print(range(3))
と一行書いて実行すると、
0 1 2
と表示されるはずなのに
range(0, 3)
としか表示されない。どうしてでしょうか。 好きなだけ広い範囲を取れるぞ!
好きなだけ取って楽しめよ! >>32
もしrange(5000兆)とかがその場で展開されたらメモリが足りなくなるから
必要になってから都度計算するrangeオブジェクトっていうオブジェクトになる 自己解決したと書いてるのに、蘊蓄を披露するのが我慢できない人達 「じゃあ」ってか
>>37
自己解決のさいは
なにしたら解決できたか書いて毛なのに
むしろ質問者は書いていかないし このくらいは質問する前に気づいて欲しいな
そしたら蘊蓄披露したがりクンも沸いてこなかった
つまり質問者が悪い >>37
Rubyでは、・・・
とか言い出すよりマシだろ? 「オブジェクトだから」だと思ってる人達は文字列(str)はオブジェクトじゃないと思ってるのかな?
range(0, 3)と表示される仕組みを理解してるとは思えないんだが inとか調べるのがノーコストになるというのはインフォマティブだよ
コンテナ実装するときにふと思い出してくれればよい 俺もついでにくだを巻いていくけどrangeだけなら整数2つ持ってるのと大差ない(lo<=i <hiと等価)が
rangeが生きるのはもっと複雑なテスト、rangeはchainsで数珠繋ぎにして生きる Juliaというプログラミング言語がいいという話ですが、Pythonに詳しい人はPythonと比較してJuliaについてどう思いますか? ブーム前はFortran/Matlab(&Octave)と同じ感覚で配列を自在に扱える代替環境ってのがPython/numpyの需要だったのよ
numpy/scipyはFortranライブラリのラッパ集として始まったわけで
今はもうPythonは手軽なスクリプト言語はじめ色んな用途が開けてるから、古い感覚だけどね
C風のPythonし、結局Fortran民はJuliaを作ったわけだけど
まあPythonでいい 文書がバグってた…
Pythonは配列0始まり/メモリ配置行メジャーのC系の慣習を引きずってる
線形代数記法、つまり配列1始まり/メモリ配置列メジャーの数値計算の慣習と逆ってことね
新興で後者採用のFortran系の言語はJuliaくらいしかないのでそっちに慣れてるオッサンならjuliaの方が受け入れやすいと想う Pythonも不便ということはないよ
生Pythonで配列扱うmemoryviewやctvpesにちゃんと'F'フラグ容易されてるし
numpyももちろんそうで、FortranコードをPython関数として簡便コンパイルするf2py.pyもある
自身をコンパイルする為だけど、もちろんユーザーも使える numpy入れるとコマンドラインからf2py直接呼べるようになってるね
比較的小さいスクリプトだけど、これこそがnumpyの本体 超初心者スレでそのネタを書く?
マウンティングが目的? PythonとJulia比べるならそこの違いだろうよ
Pythonでよろしい、潰しも効くし pandasで時系列データを集計やソートしたりするのですが
df = pd.DataFrame([{'p':1,'at':日付オブジェクト1},{'p':3,'at':日付オブジェクト2},,,])
時系列データフレームとして扱うためにインデックスを設定
df2 = df.set_index['at']
df2.resample('H').sum()
で無事、時系列であれこれできました
で、これをsqlite3にappendしようとしたとき
このインデックスが時系列のままsqliteにappendすればいいのか
時系列は'at'カラムに移動させてからsqliteにappendすればいいのか迷っています
ぶっちゃけどちらでもいいとは思いますが
公開されている統計データなどをみていると大抵は、(インデックスは無しか連番で)カラムに日付データが入っているので
そういう慣習でもあるのかが気になります >>41
メモリアロケーションされてるかどうかなんて全く関係ない理由をあげて間違った理解を植え付けるくらいなら
Rubyでは・・・のほうがまだマシだわ 質問者はrangeをlistかtupleと同一視していると思われたから、どちらでも無い別種のオブジェクトだと教えたまでだが問題あったか?
(メモリアロケーション云々は何故rangeがlistを返さないかの説明に過ぎない)
いきなり__repr__の実装に言及しても訳分からんだろ 0 1 2 と表示される方法を知りたかったのかも知れない。 >>55
見苦しい言い訳だね〜
それなら「rangeはlistとは違うから」とでも答えておけばいいだけだろ
必死に調べて__repr__見つけたのかなw
でも間違ってるしreprの実装に言及しないと説明できないと思ってる時点で分かってないから
超初心者にドヤ顔で間違った答えを教えたりRubyキチをバカにする前に公式チュートリアルくらいは読めよな >>57
そうだね、ケチ付けてばかりじゃなくて「分かってる」あなたも説明してみてよ
初心者スレだからみんなの為になるよ つまらん煽りは他所でやってくれ
と、俺が言ってみる >>58
print関数は引数のオブジェクトの文字列表現を出力する関数で
range(3)の文字列表現は'0 1 2'じゃなく'range(0, 3)'
なのでprint(range(3))を実行するとrange(0, 3)と表示される
ちなみにlistなら'[0, 1, 2]'みたいな表現になるから'0 1 2'と表示したいなら自分で加工する必要がある
例えばprint(' '.join(str(x) for x in range(3))) >>> print(*range(3))
0 1 2 処理Aが同じで
無限ループしたいときと、任意回数ループしたいときを分けたいんだけど
n = 10 if 条件 else 99999999
i=0
while i < n:
_print('処理A')
_time.sleep(1)
_i += 1
無限ではないにしろこれでいいんだけど
n=99999999がなんかかっこ悪い・・
別の書き方ありませんか 自己解決・・かどうかわからないけど
でいけた
でも
for i in range(float('inf')):
は無理だった・・ n = 10
a = 1 if 条件 else 0
i = 0
while i < n
_print('処理A')
_time.sleep(1)
_i += a >>61
その「文字列表現」を決定するのが__repr__では?
__repr__の実装に言及せずとも説明できると言うのは?
単に名前を出さないだけで言及していないことにはなってないな >>66
変数増えるけどスッキリしてこっちのがいいですね
ありがとうございました numberを継承したoo.__lt__にreturn falseをブチ込む よろしくお願いいたします。
aList = [[1,2]for j in range(3)]
aList = [[1,2]]*3
2つとも[[1, 2], [1, 2], [1, 2]]の多重リストが作られたのですが、なぜ下の文で多重リストができるのか教えてほしいです。 >>68
>いきなり__repr__の実装に言及しても訳分からんだろ
__repr__の実装に言及する必要なんてない
__repr__が果たしてる役割を超初心者にも分かる言葉で説明すればいいだけ
それができないと感じるのは自分がその事柄を理解してないから
理解してれば「オブジェクトだから」とか「アロケーションされてないから」みたいな嘘を教えたりしない 文字列表現がどう決まるのか、どういうついでに言っておくとprint()で使われるのは__repr__じゃなくまず__str__な
__str__が定義されてない場合だけfallbackして__repr__が使われる
公式チュートリアルに書いてるので勉強してね >>71
クラスの操作だからクラスをそういうふうに
作ればそうなる
何故とか本質がどうとかは設計した人の考え
便利だなと思えば使えばいい >>74
ありがとうございました!
気にせず使っていきます >>71
listやtupleやstrなどのシーケンスと呼ばれる型に対する*演算子は
シーケンスの中身の要素を指定した回数分繰り返した新しいシーケンスを返すように定義されてる >>71
FAQ中のFAQだから余計な世話かもしれんが、見た目が同じでも同じリストでは無いことに気をつけてね
リストの中身は要素への参照だから、それを複製した後者は同じオブジェクトを3回参照してる(cでいえば、同じポインタx3)
見た目が同じオブジェクトを判別するためにid関数が用意されているから試してみて
前者をl1, 後者をl2として
map(id, l1), map(id, l2)
前者のidは全て同じ、後者は新たに作った[1,2]を3つ並べてるので3つとも違うはず
参照の概念をややこしいと思いlistを避けたいと思うのなら、型の同じ要素を入れる場合は常にarrayを使う事を推奨する(標準型の範囲では)
具体的な値の配列なので、型チェックも入り、効率もよい i for rangeイディオムは不要な添字iが気持ち悪いよな…
ロジック通りに、ビルトイン関数のみでミニマルにやるには
memoryview([1, 2]).cast('b', shape=(3, 2)).tolist()
[[1, 2]
[1, 2]
[1, 2]]
でいいだろう
tolistはリスト表示するためなのでお好みで
数字が小さいからbyte配列にしたけど、普段使いならlongにしといた方が気楽かも byteって言ってるのにbyte抜けてたごめん
memoryview(bytes([1, 2])).cast('b', shape=(3, 2)).tolist()
[[1, 2]
[1, 2]
[1, 2]]
です、試してないけど多分動くだろ
実用にはbytesはarray('l', seq)へ差し替えてね while True:
_a = 1
_break
print(a)
インデント下がって定義した変数をwhileの外でも使うのは普通なのでしょうか
スコープの判断で可読性が落ちるかなと個人的に思ったのですが慣れですかね >>80
それしきの深さならえんでねーの
それにしてもパイセンいわく
while True:で安易に無限ループ作るのはイクナイ(・A・)らしいが >>80
python的には普通らしい
ただ見通しが悪くなる場合が多いのと
勘違いによる不具合を起こさないために自分は極力避けてる >>81,82
なるほど
とりあえずは現状維持にしときます ありやした >>81
Cなら for(;;) とか出来たけど
itertools.count() とかダサいねん。 >>85
無限ループ自体が処理によってはCPU負荷が上がったりするし
break条件をミスってると不具合があった時にループから抜けずに変な所でエラーになる可能性も出てくる
だから最初から有限回ループして確実に止まるループ設計の方が安全だよね、っていう考えはある
(まあwhile True breakの方が書きやすい場面も多いけどね) 無限ループは無限ループが必要だから使うのであって、
有限のイテレータのループで書き換えられるときには当然使わないのでは?
有限と無限を同列に並べて比較すること自体がなんか違和感あるけど。 while自体の処理が重いから使うなってならわかるけどミスったら困るから使うなって、理由になってなくない
使いどころも無視してとにかく使うなって、先人の下手なトラウマが一人歩きしてるだけじゃねーの まあループの有限性が事前にわかるようならそれを表現するためにwhile 1: 使うのは適切じゃないって話だろ。
実際ループ変数ぽいの使ってなぜか while 1使ってるコードは新人にはよくある。 >>81
ポンコツかよ
他に無条件ループ作るコンストラクトがあるなら教えてほしいわ
上の方のレスにある9999999決め打ちでもするのか?
他にもハック挙がってるけどどう考えてもwhile True:より筋が悪いよね?
先輩が言ってたから正しい?自分の意見を持とうよ? …と偉そうなこと言った手前、俺の習慣を紹介しておく
while True や1は仕様上そうするのが筋なので、確かに冗長と批判できる
truthyならwhile "comment":でも、while ...:でもよい
何の情報も含まないwhile True/1:よりは良い習慣
後者は…それが思いつかなかった時だな、コメントがbreakの傍に付いている方が合理的なケースもあるので
....は1, 2, 3, ...という一般に認知されている表記なので、trueを表現するtruthy(5シンボルとしては、1/Trueより優れている事は明らかだろう >>64
if not cond:
__while True:
____print('処理A')
____time.sleep(1)
for i in range(10):
__print('処理A')
__time.sleep(1)
この部分だけ書けていわれたらこうするわ >>97
無限ループいつ抜けるの?
それと条件によって無限ループか有限ループかという2つの処理分岐が並列に書かれてないから意図が伝わりにくいよ while Trueするのはdo~whileしたい場合
そうじゃないなら書き直したほうがいいかもね ちょっとしたデバッグのときに
lst = [
__{"a":0,"b":1}
__'''
__,{
___"a":2,
___"b":3
__}
__'''
]
シンタックスエラー
'''は#の複数版かと思ったら単なる文字列だったんですね。
こういうときは、ショートカットキーで複数行に#入れたり消したりする人の方が多いのかな >>102
さすがにコメントアウトショートカットで出来ないエディタを使うことはないな。
絶対に何も入れちゃいけない環境以外ではVSCodeいれちゃう。
何も入れちゃいけない環境でデバッグしなくちゃいけなくて、
lstに入れるだけいいんだったら、複数バージョンの代入文を作っておいて、if Trueとかでどれを実際に実行するかは決める、ぐらいはやるかなあ。
あとはなるべく改行を入れないで#一つでコメントアウトできるようにするって手も考えるかな。 Octaveだと正方行列とその逆行列の乗法で単位行列が得られる。
GNU Octave, version 4.4.1
octave:1> a = ([4,5,7;-4,1,5;-10,3,8])
octave:2> b = inv(a)
octave:3> a * b
ans =
1.00000 0.00000 0.00000
0.00000 1.00000 0.00000
0.00000 0.00000 1.00000
でもPython3だと単位行列が得られたのかよく分からない。
これで正しいの?
Python 3.7.3
>>> import numpy as np
>>> a = np.array([[4,6,7],[-4,1,5],[-10,3,8]])
>>> np.linalg.inv(a)
array([[ 0.04666667, 0.18 , -0.15333333],
[ 0.12 , -0.68 , 0.32 ],
[ 0.01333333, 0.48 , -0.18666667]])
>>> b = np.linalg.inv(a)
>>> a @ b
array([[ 1.00000000e+00, -4.44089210e-16, 0.00000000e+00],
[ 2.77555756e-17, 1.00000000e+00, 0.00000000e+00],
[ 1.38777878e-17, 0.00000000e+00, 1.00000000e+00]]) >>104
計算誤差でしょ
非対角成分は0にかなり近い 行列が違うのはおいといてOctaveもnumpyも基本は浮動小数点数の演算だから丸め誤差などによりピッタリゼロになるとは限らない
Octaveで
format long e
を実行した後に確認すると多分ゼロになってないと思うよ
表示形式でゼロに見えてるだけだと思う
うちの環境だと0.00000じゃなくて-0.00000になる成分あるし 例えば、Pythonを用いたプログラミングの本を読んでいるとします。
その本の著者のサイトにPythonコードが「.pyファイル」としてダウンロードできるようになっているとします。
ある読者は、普段からIDEではなく、Jupyter Notebookを愛用しているとします。
そのため、この読者は、Jupyter Notebookのセルに著者の「.pyファイル」をロードして、コードを読んだり、変更したり、実行したりしたいと考えています。
この読者はどうすればこれを実現できるのでしょうか? >>108
IDE使おうが同じことすると思うのだけど
なぞなぞに思える
jupyter notebookは知らないがセルじゃなくてシェルなのだろうな >>109-110
ありがとうございます。
>>109
自分のことです。
%load sample.py
とセルに入力すればいいようです。 JupyterLab上でグラフを表示するには、
%matplotlib inline
というコマンドをセルに入力して実行しないといけないということで、実際今までそうしてきました。
今日、このコマンドを入れずに、
# %load matplotlibexample.py
import matplotlib.pyplot as plt
import numpy as np
t = np.linspace(-3, 3, 1000)
plt.plot(t, np.exp(-t**2)*np.sin(20*t))
plt.title('sample graph $x(t)=e^{-t^2}\sin(20t)$')
plt.xlabel('t')
plt.ylabel('x')
plt.show()
を実行したところ、ちゃんとノートブック上にグラフが表示されました。
%matplotlib inline
はもう入力しなくてもよくなったのでしょうか? もしかして.pyファイルをjupyter notebookで実行する方法聞いてるだけか
何でそんな長々と意味不明なこと書いてるの? コピペで大体実行できるかな
別にサクラエディタでもVSCodeでもいいから.pyファイルを開きコピペ
ただしsjisとUTF-8とか
あとインデントに気を付ける
コピペでインデントがずれて動かないことがあるので
そこは丹念に直す tkinterで
200*100じゃなくて
200x100と小文字のエックスするの何故なのか教えてほしいです…… 乗算じゃなくて
ピクセルで領域指定だからジャネーノ
とエスパーしてみる 以下のコードを実行すると、グラフがf(x) = 0のグラフになってしまい、意図したものと異なってしまいます。
どう修正すれば意図通りの結果が得られますでしょうか?
ベクトル化についてよく分かっていないので、そのあたりがあやしいと思っています。
import numpy as np
import matplotlib.pyplot as plt
PI = np.pi
def func_x(t):
if 0 <= t:
return np.sin(t)
else:
return 0
npfunc_x = np.vectorize(func_x)
t = np.linspace(-PI, PI, 10000)
x = npfunc_x(t)
plt.plot(t, x)
plt.show() >>120
そう言う時はxの値を見てみましょう
やり方は「python デバッグ」でググったら出てきます >>123
意味が分かりません。
xは関数の戻り値です。
xに0などかけていません。 出力は一番目の値で決定されるから、return 0.0とするかotypeを指定しろ
不等号逆向きにすると動作するけど、そのコードが動作しないのは出力が整数型に固定されて切り捨てでゼロ扱いされるから >>125
return 0.0
に変更したら、動作しました。
ありがとうございました。 今まではプログラミングの経験はなく、
教養としてpythonを勉強し始めました。
ただ仕事で使う機会もなく、いまいち勉強に身が入らない感じです。
皆さんはどうされているんですか?
ここのスレだと仕事で使う人が多いんでしょうか。 >>127
完全に趣味
だがしかし
使いこなせれば仕事でも楽ができる >>124
インデントが崩壊していたからてきとーに見てた
正直すまんかった
>>125横じゃが
>return0.0
こんな手があるんだ!
小数まで計算するとコンピュータがついてけないからって
都度都度四捨五入処理をするよう組まれてた
ン十年前のプログラムを
Pythonで書き直すときにハマったのをおもいだした >>127
ブラゲーのbot運用
その次がエロサイトのスクレイピングと自動分類
たまに業務データの解析で使うときもある >>127
こういうのは何か目標がないと続かないと思います
仕事で使うとか〇〇を作りたいとか >>132
Pythonのノウハウよりだいじなことをおしえてやろう
相場をヲチって
よしんば正確に予想できるアルゴリズムが完成したとしても
自分が混ざった時点でそのぱーふぇくと理論は崩れる
と
覚えとけよw 自分もスクレイピングやファイルの分類
ほぼエロ目的
だからそれのために情報を得るしそれに応用できないテクニックや知識は全部無駄
プログラミングを仕事にしてるわけでもないからpython自体の勉強なんかしないしやる気も出るわけない やっぱり、そうなんですよね。
一通り基礎は理解したものの、その後のモチベーションが…
ヒューマンリソースマシーンのような、
プログラミング的なゲームでもやっておいた方が良い気もしてきました(笑) ヒューマンリソースマシンはあれアセンブラだぞ
使える命令とかマシン語まんま
実用的なプログラムの勉強にはならない
頭の体操だね >>137
プログラミングの勉強になると思ってプレイしてました(笑)
あんな感じでプログラミングの勉強になるアプリとかゲームはありますかね? こういうやつか
https://www.gamespark.jp/article/2019/06/08/90338.html
> その後、実際に本作の開発を開始する際、ゲームプレイの面でリサーチをし、2つのシステムがとても気に入りました。
> 『ファイナルファンタジーXII』のガンビットシステムと『カルネージハート』のプログラミングインターフェースです。
> 私の本作における目標は、ガンビットのシンプルさと『カルネージハート』の戦術的奥深さの間の妥協点を見つけることでした。 >>141
そんなもんひたすらそっち系検索エンジンに特定のクエリ送り続けるだけやん 以下の辞書内包表記がエラーになります。
どうすればいいでしょうか?
import math
def normalize_coefficients(n, D):
return {(s, i):0.5*math.sqrt(n/s) if s != 0 else (s, i):math.sqrt(n) for (s, i) in D.keys()} エラーに間違ってるとこを示す矢印っぽいのが出てるでしょ
elseの後の`(s, i):`を削除して >>143
この手の質問はエラーメッセージと、本当はどんな動作を期待していたのか書いた方が答えてもらいやすい 普通Dとnに何入れたらそうなったかくらいは書くだろ。 urllib.parse.urlencode()で辞書を渡す場合、値にリストを含む場合の変換結果について教えてください。
例えば以下のようなリスト値を含む辞書データを与えた場合
{'a': [123,456]}
a=[123, 456]
という風にリスト内の値の区切りに空白が入った文字列としてエンコードされてしまいます。(123, と456の間)
(実際には記号や空白は%xxや+でエンコードされます)
a=[123,456]
のようにリスト内の値の区切りに空白を含めない文字列としてエンコードする方法はありますか? bytesでないdictのvalueはstrが呼ばれてstrにされる実装だから単純な方法では無理やな
https://github.com/python/cpython/blob/master/Lib/urllib/parse.py#L950
* 文字列化したlistの空白を消すquote_plusを作ってurlencodeのquote_viaに渡す
* dictのvalueにlistでなく文字列を渡す
* dictのvalueに渡すlistを、空白が入らないように文字列化する__str__を実装したクラスでラップする
どれかをどうぞ ありがとうございます。
やはり単純にはいかないんですね。
素直にリストではなく、初めから文字列で格納するようにします。 すっごいしょーもない質問なんですけど
0から始めるならおすすめの初心者向けサイトってありますか? うちProgateでhtmlとかPythonとか自分が使いそうなやつ1ヶ月くらいやってあとはひたすらググって必要なやつだけかいつばんでいった
phpとかもやったけど結局使ってない サイト見てやるくらいならオライリーの初めてのpythonでも買って全部読む方がよっぽどマシだぞ いきなり本なんか買ったって続かないよ
サイトから入るのはいいと思うけどね 俺はやりたいことが決まってからpythonやりだしたのと
別の言語はできたから一通りfizzbuzzとか書いてから
必要なライブラリ検索して作るっていう工程を繰り返したけど
いきなり無からやり出すんだったら本あったほうがいいと思う 初めてのPythonはGoogleブックスで150ページぐらい読めるから、買う前に目を通してみて解るなら購入したらいいよ
俺にはとてもゼロから始める人に勧めるものとは思えない Python で連鎖律を解きたいです。
微分には「SymPy」といったライブラリが適していると、解説サイトにありました。
y = u^3
u = x^3 + 2x^2 + 3x + 4
この y の微分を求めたいです。
上記の答えは、
3(x^3 + 2x^2 + 3x + 4)^2 (3x^2 + 4x + 3)
になるそうなんですが、うまくゆきません。
以下に試したコードを書きます。
diff((x**3 + 2*x**2 + 3*x + 4)**3)
→ ×
a = diff((u**3) * (x**3 + 2*x**2 + 3*x + 4), u, x)
a.subs(u, x**3 + 2*x**2 + 3*x + 4)
→ ×
どなたかお知恵をお貸しください。よろしくお願いします<(_ _)> 以下を順番に実行したら動いたよ
import sympy
x = sympy.Symbol('x')
sympy.diff((x**3 + 2 * ...略) ** 3) u, x, y = sympy.Symbols('u x y') >>159
>>160
どうもありがとうございます、無事計算できました!
感謝です!<(_ _)> int型のように振る舞う
小数を加減算すると四捨五入した整数を加減算する
足し算して最大値を超える場合最大値になる
引き算してマイナスになる場合0になる
という独自の型を作りたいのですがどうすればいいのでしょうか? まぁaddとかを自力で実装すればできないでもないが… >>162
>という独自の型を作りたいのですがどうすればいいのでしょうか?
作ればいいじゃない >>162
自分で試した内容と、どこで詰まってるのかくらいは書けよ >>165,167
そういうことをやればいいということはなんとなくわかってるんです
「python int 継承」で検索もしました
でも検索でヒットする記事じゃやり方がわからないので
それの具体的なやり方をコードで教えてほしいわけです
あと具体的にやりたいのはこういうことです
a = n(5,100) #実体化のときに初期値と最大値を設定
print(a) #5と表示
a += 5.1
print(a) #10と表示
a += 999
print(a) #100と表示 >>168
class Foo(int):
__def __add__(self, other):
____return self.__class__(int(self) + other)
続きは「operator overloading in python」で検索 >>169
>>168は検索したってわからないって言ってるだろ
ちゃんと全部書いてやれよ なんとなくわかってたんだから
>>169見れば後は分かるだろ
逆に何が分からないのかが分からないからそれを教えてくれよ 仕様は完璧には理解できなかったけど
とりあえず想定通り動いてくれるものができました
https://pastebin.com/DS9C8zWT
pass:del(削除用パスだと思ったら閲覧用パスだった)
>>169 他回答してくれた皆さん
ありがとうございました >>172
別にいいのかもしれないけど
n(“string”)とかn(10.12)とか比較演算とか
intを継承すれば発生しない問題をたくさん抱えてるよ 初pythonです。
クラス変数なるものを知り、こりゃすべて__init__の中でインスタンス変数にしないと危険だなと思いました。
しかし世のサンプルを見ると、ほとんどがクラス変数となっています。
Webサービスのジョブのクラスのコードでもクラス変数になっていて、これでちゃんと動くのか不安に思っています。
サンプルは自分で考えてスコープ変えろよって言うのが前提なのでしょうか。
初心者過ぎてばかげた質問かもしれませんが、ご意見いただけたらと思います。 >>174
必要なものしかクラス変数にはなってないと思うよ。例を見せて インスタンス変数によるクラス変数の隠蔽について質問です
以下のコードにおいて、出力が21,19,0となるのは、
21や19の代入時にインスタンス変数ageが生成されて、クラス変数のageが隠蔽されたからという理解であってますか?
class person():
age = 0
taro = person()
taro.age = 21
jiro = person()
jiro.age = 19
print("{p.age}, ".format(p=taro))
print("{p.age}, ".format(p=jiro))
print("{p.age}, ".format(p=person)) >>175
正確にはサンプルと言うよりはチュートリアル系のページです。
個人のページを書くのは気が引けるので、例えば、以下のItemクラスなどです。Webサービスなので同時に呼ばれることは多々あると思うのですが。
https://fastapi.tiangolo.com/ja/tutorial/body/ >>176
同じ名前があったらインスタンスのを使う
隠蔽っていうか
person.ageでアクセスできないか >>181
なるほど、ヘルプ読んで理解しました
ありがとうございます! 実装方法は違うけど考え方はデータクラスと同じで内部的にインスタンス変数として設定される >>183
ありがとうございます。
さらには__init__をオーバーライドしないように気をつけなきゃいけないんですかね
pythonチャレンジ二日目でちょっとくじけそうです。
今回のことなんかここで聞かなきゃ回答にいけつけなかったし tkinterでメッセージボックス出すときタイトル引数が長くてメッセージ引数が短いと
タイトルバーが省略表示されてしまうんだけど、全部表示するにはどうしたらいいですか?
tkmb.showinfo(validate_inputs_directorypath, "なし")
みたいな場合です >>185
そんなクソなタイトルつけんなwって話なんじゃ・・・ pythonはクラス変数がありますが、インスタンス参照がない状態のガベージコレクションはどうなっているのでしょうか? 今まで仕事で必死こいてやってたあれこれが、全部秒かからんで終わる
大したPC使ってないのにどんだけすごいんよ。この子
本当やろうと思えばなんでもできんね。これ スクリプト言語はどれもそんなかんじやで!
これからもおしあわせに〜 すみません、
例えばpngの自動文字起こしアプリをPythonで作った場合、そのアプリを別PCでも使いたい場合、そっちでもpipしなきゃいけないんですか?
配布する場合いろんな部署に配布することになるから大変なんですけど >>192
OSと利用比率くらい書いてけ
+そいつらのPCリテラシー度合いにも多少は左右される >>192
そんな事聞くレベルなら配布すんな。メンテのたびに過労死するぞ >>194
あああー!
そういえばそうだった!!!>メンテするとチヌ exeに固めるか、webアプリにするか、lambdaにでも置いておくか AWSかGCPだな
Pythonで作ったものを非開発者に配布するのは本当に地獄を見るから絶対にやめたほうがいい pipを使えないような人達に配布するならインストーラかインストールスクリプトを書く
特定のユーザーがログイン時にインストールスクリプトを自動実行するような仕組みを使えば配布は簡単
Webアプリに比べれば環境が多様だから台数が増えればサポートコストは増える >>198
そのスクリプトなりインストーラ+そのアプデしか走らせられない安全な環境を作るときにチヌわ 最悪pythonディレクトリ丸ごと渡せばいい
python embedというスクラッチがあるから
それに必要なの足していけばいいんじゃ ' aa a '.strip().strip('aaa')
#' '
おそらく'aa a'の中の半角スペースだけ残るのですがなぜですか
'aaa'には当てはまらないから無視して
'aa a'が残るならわかるんですが stripのリファレンスをよく読んでごらん
引数に指定するのは「文字列」ではなく「文字の集合」だ
この違いが分かるかね 逆に192はpipしなくていいならどうできると思ってたのか気になる >205横だが
大二病かプ二病かその両方なんだろう >>192です
>>196
exeかwebアプリにして配布するのが基本なんですね
あざます
それなら簡単そうですね >>207
exeもファイルアップローダもどっちも個人的には難しい部類なんだけど、簡単っって言える人が羨ましい >>208
うpろだはWebアプリちゃうぞ!
べんきょうしる!!! yolov5 をexe化しようとして失敗したあるよ >>209補足
ベン図をかくと
Webアプリの方がはるかにでっかい。
うpろだはWebアプリの中の一点にすぎない。
違いが判らないマジ超初心者のうちは
Pythonよりずっとずっとさきに
つぶしのきくPC用語をもっといっぱいべんきょうしる! >>209
「pngの自動文字起こしアプリ」でファイルアップロードしないの? >>212
社内専用かつ中身がexeなzipであっても置いてておkでまともなうpろだ持ってる会社はすげえ少ないぞ。
う○こ味のカレーもたべます!みたいなヤバイ設定のNASがある会社はまずまずあるかもしらんが。。。
んな設定のまま使ってるなやwってーはなしでー
社内Webページに置かせてもらう あたりがまずまず現実的
メール添付で配ろうとするのは、これまたセキュリティにひっかかって地獄をみるだろう。 >>213
だから、「個人的に難しい/簡単って言える人羨ましい」って言ってるんだけど? >>214
Webサのうpが無理ならPythonじゃなくてVBAとかにしとけってはなし >>215
なんでそんな話になるんだ?
exeもwebも簡単→おれには難しい/簡単って言える人は羨ましいって流れだぞ?
あと、興味本位で聞くけど、VBAで画像認識ってできるの?
外部のアプリ叩くとかだと、その外部アプリどうすんのって話にすり替わるだけだと思うけど。 >>216
VBAで画像認識>野良ライブラリ落ちてないから手軽にはできないが、不可能ではない。
個人的には(、ちゅーか個人の事情的には?)(規約とかトラウマ的に)難しい
ってやつね
オトナコトバありがとう >>217
「pngの自動文字起こし」をVBAでスクラッチって無理な気がするけど。
ガチガチのアップロード機能作るより難しくね? >>218
たしかにそこは
まちがいなく、確実に、
「がちがちのろだ」を整備するほうが簡単。
ところで
簡単っって言える(ようなセキュリティぬるぽでゆるされてる)人が羨ましい
の末尾に
見えない芝生生えてるよな? >>219
> 見えない芝生生えてるよな?
そんな事ないよ
環境に左右されるケースが大きいから、オレの環境のガイドラインだとハードルが高いってだけだし
ガイドラインが許す範囲で、コスト重視の簡易設計にするのは重要な見切りだと思ってる >>220
個人的には
そのへんの規定がゆるーい(というか上の意識が低くて未整備まだ存在しないな場合がままある)会社だからって、
抵触しなければおkおkおkって「見切り」して
使うだけなひとびとのexe入りファイルのやりとりへの心のハードルずんどこ下げちゃうのは
すげーあぶないとおもうので
芝生がはえてしまう。
ハードルはすれすれで超えましょう。ってのは無論だいじだけど。 >>207
exe化するのはリテラシーの低いシステム部門による苦肉の策であって基本ではないよ
基本はパッケージにして配布 パッと調べただけだけどexe化ってpyinstallerってやつ使えばできるんじゃないです?
Webアプリはしょっちゅう作ってるんで余裕ですね >>224
なるほど
一部の部署以外は令和とは思えないほどネットリテラシー低いのでexe化は必須っすね PyInstallerでexeにして上手く動けば儲けもの
動かないならexeを諦めて他、かな
PyInstallerのトラブルを解決できるような人は初心者スレで質問する必要ないよ
たぶん システム部門のリテラシーが低さをユーザーに責任転嫁するのは使えない情シスあるある サーバー側はseleniumを使ってアクセスしてる人が分かると聞きました
では、webbrowserを使ってアクセスした場合は分かるのでしょうか
また、その時にpythonが実行されてることは分かるでしょうか >>230
「webbrowserを使って」を
「webbrowser.openとかsubprocess.Popenを使って」に訂正です https://docs.python.org/ja/3/library/webbrowser.html
これの話をしているか?
これの話をしているなら
1. webbrowserから起動したブラウザでアクセスしたかどうかは分からない
2. Pythonか実行されているかどうかは分からない
Seleniumに関しても正確には理解してなさそうなので補足する
Webオートメーションによってアクセスされているかの判別は
1. navigator.webdriverフラグ
2. 人間らしい振る舞いの検出
に大別される
SeleniumではなくWebオートメーションと呼んだことから察するかもしれないが、
この判別は同じ用途のツールならSeleniumに限らず適用可能である
(逆に言えばSeleniumかどうかの判別ではない)
navigator.webdriverというのは、Webオートメーションによってアクセスしているかどうかをブラウザ自身に通知させるものだ
ただし、今のところブラウザのオプションで強制的にfalseにすることが可能だし、仮に今後オプションで変更できなくなったとしても、
野良ビルドされたブラウザが配布されるようになるだけで、それほど意味はないだろうことが策定時から指摘されている
https://developer.mozilla.org/ja/docs/Web/API/Navigator/webdriver
人間らしい振る舞いの検出というのは、例えば、
人間が要素をクリックするときはポインタかフォーカスが要素の上まで移動してくるはずである
この移動している様子がなかった場合は、Webオートメーションである
移動している様子があった場合も、ポインタが完全な直線で移動しているようなら、
人間の操作にあるはずの揺らぎがないことから、やはりWebオートメーションである
みたいなものである
実際のアルゴリズムはこのような単純なものではなく、現在は機械学習による異常検知が主流である for inだけでしこしこデータベースをいじってアップデートしてたけど
だいぶPythonに慣れてきたのでいよいよpandasを使って書いてみようとしたらコードは簡潔になったけどめっちゃ遅くなった…
遅い部分を削っていったらもうパンダ使う意味ほとんどなくなったし。げんなり >>232
はい、そのリンク先の話をしていました
navigator.webdriverをfalseに設定できるってことすら知らなかったです
いや、本当にありがとうございました! >>232
>人間が要素をクリックするときはポインタかフォーカスが要素の上まで移動してくるはずである
人間が使っていてもポインタやフォーカスが移動しないケースはいくらでもあるよ >>235
そういうグレーなときだけRecapなんちゃらを出すのサ >>236
全然グレーじゃないよ
いまどき岡崎図書館でもそんなことはしないんじゃないか 実際にはこんな単純なものではないって書いてあるのにこれだから
馬鹿はママとお話ししてろ 亀レスですまんが、↑のexeファイルって自己解凍型のexeのことだと思ってたが違うけん? Windowsで作ったPythonの仮想環境を
Linux上で動かしたいです
ただファイル類をコピーしただけだと、
activate.batやPython.exe等がWindows用なので
動作しませんでした
Linux側で仮想環境を作り、Script以外をコピーする等
すればよいのでしょうか >>240
>Linux側で仮想環境を作り、Script以外をコピーする等
すればよいのでしょうか
よくないです。仮想環境はただ、コピーして動くようなものではありません
Linux側で仮想環境を作り、その中でwheelでもgit cloneでもいいですがpip installできるような環境をつくるべきです >>241
Linux側はインターネット接続不可環境なので、
gitやpipでのレポジトリへのアクセスだとか、
自前のレポジトリの作成やライブラリの収集が
できないですね
すいません、そういう環境です ネットにつながってるマシンでpip環境を書きだし+
入ってるものの各インスコ用ファイルを準備
↓
スタンドアロンのマシンにファイルをうつして
ローカルファイルからのpipインスコを実行
↓
ソースもうごくおいしーいの( ^)o(^ ) Linuxでネット繋げないってわりと無理ゲーな気がするけど何でやろうとしてるんだ……
Python以外にaptも使えないんだぞ >>242
だったら最初からかけよ
何にしても外からコピーできるんなら、必要なパッケージをコピーして持っていってそれをpipで入れればいいだけだろ
コピーしてって別の仮想環境からじゃなくて、PyPIで配布してるpip install パッケージ名.whlでインストールできるやつな WindowsでLinux用のDockerコンテナ動かして
その上にPythonの環境作ってDockerイメージをコピーで 山浦清透、1/15
Docker超入門講座 合併版 | ゼロから実践する4時間のフルコース
www.youtube.com/watch?v=lZD1MIHwMBY
Windows 10 Home 版, WSL2, Ubuntu 20.04 LTS,
Docker Compose, VSCode, Heroku, Ruby on Rails, Git, CI/CD, CircleCI
これを、Python に変えれば? pythonで成型した文字列をjavascriptのコード(文字列)としてprintしたいのですが
みなさんはどうやっていますか
テンプレート文字列だと辞書のとき{}がかぶっちゃいますよね
print(f"""var obj={}""")
一旦ファイルに保存して読み出しするのが一般的なのでしょうか? >>249
波括弧を2個重ねてエスケープするか、raw文字列を使う
print(' {{ ')
print(r' { ') 小林さんちのメイドラゴン
久しぶりに再放送やってたので観たけど
小林さんPython使ってたんだな
バグ仕込んでるみたいだったが pythonを一からはじめたいんですが、まとめサイトの中の本から選んだらよいんでしょうか?
2018年から更新されてないようなのですが、おすすめの書籍やサイトありましたら、お願いいたします >>250
できました!!!
(\でエスケープするのかと思ってました)
ありがとうございました >>77
ありがとうございました
FAQ読みました Python開発用の環境を構築することの指針なんですが、
インストールしたPython本体は触らず、
仮想環境を作り、そちら側に追加機能をインストールする、
という方針を聞きます
しかしその方針とすると、別プロジェクトを作るとかで新たな仮想環境を作ったとき
改めて追加のパッケージを導入する必要があり、面倒に思ってます
Pylint等、どんな仮想環境でも使いたいものは本体に、
例えばDjangoなんかみたいに特定のプロジェクトで使うものは仮想環境に、
なんて考えましたが、本体に入れるべきか仮想環境に入れるべきかの線引きが
難しいなと思ってます
どんな風に運用するのがよいのか、よいベストプラクティスって、何かありますか? 開発者間で環境を合わせたいor特定バージョンのライブラリを使いたいorある日突然動かなくなっては困る→pyenv
それ以外→直インストール
とかでいいんじゃね? 自分でちょっとPythonで何か作ってみたいって程度なら仮想どうのこうのなんかど〜でもいい >>258
pipenv install pylint autopep8なり
poetry add pylintautopep8なり
決まり文句はどっかにメモしてコピペすればいいのでは?
パッケージのバージョンの依存関係のあれこれを考えたくないなら、何も考えず仮想環境で全部のパッケージを分けちゃうが一番楽だと思うけどな。 VScodeのRemote Containersつかえ
仮想環境がどうとか気にしなくて良くなる importしないパッケージなら入れてしまっていいと思う
逆に言うとimportするなら面倒くさかろうが毎回入れる >>258
・docker(およびdocker-compose)
dockerを実行できるクラウドサービスを使えば尚良
linuxなら元から入ってたかもしれないので宅PCで開発してもよい
docker run, docoker exec, docker オプション, マウント
などで検索すると、気軽に0からpythonの環境を構築できる方法がわかる
・google colaboratory
ちょっとしたトライアンドエラーからweb系から機械学習からほぼすべてのプロジェクトを困ること無く仮想環境で開発できる
初心者ならjavascript並に開発の敷居が下がったといってもいい
・git周り
clone, add, commit -m'', push, ブランチ
個人開発ならぶっちゃけこの辺りだけ知ってれば十分
・vscode
補助として
・django
何を開発するかにもよるけど
google colabやdockerインストール済みの環境で開発しつつ、
まとまってきたらgitへpush
PCが壊れたり、別のPCへ移植したければ
googleのアカウント、gitのアカウント(googleのoauth認証でもいけた?なら実質googleアカウントだけ)だけで
0から同じ環境の構築完了 >>258
ベストプラクティスは分からないけどプロジェクト毎に環境切った方が問題切り分けられて後々楽になるのは確か
個人のプロジェクトでそこまで神経質になる必要が無ければシステムに全部入れちゃうのが1番楽で別にそれでもいいと思う
自分はnmpみたいにPythonはシステムに入れてる最新版使ってパッケージはpoetryでプロジェクトディレクトリ以下に入れて必要無くなればディレクトリごと捨てるようにしてる 配列に格納された連続する二要素をいちばん簡潔に取り出す方法って何になりますか?
A=[1,2,3,4,5]なら(1,2),(2,3),(3,4),(4,5)みたいな感じです omaeno_turple = (A[n], A[n+1]) a=[1, 2, 3, 4, 5]
[(a[i],a[i+1]) for i in range(0,len(a)-1)] >>268
やっぱりこれが限界ですよね…
>>269もなるほどとは思いましたがA[1:]の部分でメモリに無駄がありそうですし… more itertoolsは?
chunked([1,2,3,4],2) 出た、忘れたころに出てくるitertools
めちゃくちゃ使えそうで使えないライブラリ def each_cons(x, size):
__return [x[i:i+size] for i in range(len(x)-size+1)]
これでやってる
>>268と同じと言えば同じ
toolzのsliding_windowでもできる
https://toolz.readthedocs.io/en/latest/_modules/toolz/itertoolz.html#sliding_window >>272
ありがとうございます!
調べた感じchunkedだと[1,2],[3,4]みたいに区切って出力されるので、目的には合わなさそうです…
>>268
ありがとうございます! みんなすごいな。
カメでマルかけて大喜びしてる自分とは大違い。
頑張って勉強せないかん。 >>270
269の書き方がファイナルアンサーだと思うよ。
268と同じく、中間でリストを作ったりすることがない書き方になっている。 >>277
269はA[1:]部分でAをコピーしてる(メモリを無駄遣いしている?)ので268が良いと思っていたのですがこれは間違いですか? >>269 のA[1:]をitertools.islice(A,1,None)に変えればメモリの無駄も無くせるか そもそもpythonでメモリ効率とか考えるだけ無駄なんじゃないかと >>280
これ
そのAによっぽどデカいもの詰めてるとかじゃない限り気にせんでええと思う コマンドラインでvenvの仮想環境作って
atomで仮想環境を選択してコード書きたいのですが
コマンドラインってずっと開きっぱなしでないといけないの?
閉じたら仮想環境もdeactivateされるんですか? 閉じたらプロセスも止まるからな
開きっぱなしでも別に邪魔にならんだろ
atomってターミナル無いの?vscも、pychrmもproject開いたらvenvの環境が自動でアクティベートされてるから意識すらしない 他のIDEは知らんけど
atom_venvのパッケージの話なら
ターミナルで仮想環境作る
↓
atomで仮想環境のディレクトリを指定してやる
↓
仮想環境にスイッチできる
だけなので、仮想環境作ったあとはターミナルは閉じていい VSCode では、端末を幾つでも開ける。
デバッグでもよく使うし、常に最低でも、1つは開いている
端末を起動していても、表示・非表示を選択できる コマンドラインのターミナルが仮想環境そのもので
閉じたらatomというただのエディターが残るだけ 仮想環境ってのは有り体にいうとPATHとPYTHONPATHあたりの環境変数がシステムにインストールされているPythonとは隔離されたPython向けに調整されてるってだけで、
プロセスとかは全く関係ないぞ
activateの実態は環境変数の設定 変数を代入する関数を書くとき
x = 1
def func_a():
__x=2
func_a()
def func_b():
__return 2
x = func_b()
どっちで書いた方がいいとかありますか?どっちでもいい? 他に条件ないなら副作用のある関数なんて書いちゃだめ >>288
前者は
*変数名をミスると全く意味を成さない(その上エラーは出ない)
*思わぬ副作用を生みかねない
*モジュール化出来ない
バグの温床になる urllibってパースするだけじゃなくクエリを追加して返してくれるような機能ってないんですかね?
(単に&の文字列結合すればいいだけなんですけど) 「Jupyter notebookの起動フォルダ」ってどこのことですか?
Jupyter notebookを開いたときに出てくる一覧のところ? >>294
違う
jupyter notebook を起動するときのカレントディレクトリか
あるいはオプションで指定して起動 >>296
ありがとうございます
jupyter notebook を起動するときのカレントディレクトリを調べるにはどうしたらいいですか? セルに
import os
os.getcwd()
って打ち込んでshift+enter python と C++ をswigで繋いだ開発をやりたいのですがなにか良い統合開発環境ないですか? >>300
普通emacs
boostじゃなくてswigにするの? boostはよく知らないですがpythonメインで高速化したい部分をC++で書くイメージです。
emacsってUnix系ですよね?windowsでモダンな開発環境触ってみたいです。 >>295
確認ですがpr._replaceとurlunparseを使った方法ではないですよね? 日本人が作った、バージョンマネージャーのanyenv で、
Ruby, Python, Node.js のrbenv, pyenv, nodenv でも、
使いたいバージョンを切り替えるだけ
rbenv global 2.6.6
rbenv local 2.6.6
global ならシステム全体、
local なら、そのプロジェクトのバージョンを切り替える
rubyコマンドの参照先を確認する
which ruby
~/.anyenv/envs/rbenv/shims/ruby
rbenv global system
なら、apt などで、/usr/bin/ruby へインストールしたバージョンを使う
まあ最近は、Docker を使う事も多いけど インスタンスを別のクラスでいじりたい
class Main():
__def get(self):
____self.x = 1
class Sub():
__def convert(self):
____self.x = str(self.x)
みたいな。
obj =Main()
obj.get()
…??
どう書いたらいいのでしょうか
(実際は取得クラスはもっと大きいので、変換系は分離したいのです) class main:
__x=1
class sub:
__def setmainx(a):
____main.x=a
print(main.x)
sub.setmainx(2)
print(main.x) >>311
なるほどあるのですね
どの関数でしょうか? 質問があります。
コマンドプロントでPython使ってて、
>>> a, b = 0, 1
>>> while a < 10:
... print(a)
... a, b = b, a+b
という単純なプログラムを入力したいんですが、
4行目が書けません…
3行目を書いてEnterした瞬間に実行されてエラーが出てしまいます。
IDLEに入力する場合は全部書いてから実行することを自分で選べるから
上記のプログラムを成せるんですが、
コマンドプロントに入力するのは無理なんでしょうか?
ググっても誰も困ってません…
ド素人な質問ですみませんが、よろしくお願いします。 >>313
while文のケツの「:」を忘れているか
print文のあとEnterを2回押しているか
Windows10のIMEバグに巻き込まれているか
すきなのえらべ >>314
早速ありがとうございます。
while行末の「:」はちゃんと打っています。
これがないとそこでエラーになって3行目すら書けないので。
で3行目には無事いけます。実行されずに…のインデントが出てきます。
そしてprint(a)と書いて、Enter押した瞬間に、
今度は次行のインデントが出てくれずに実行されてエラーになります。
何度やってもこうなります。
>>314の選択肢によると残り一択のWin10のバグってことで
コマンドプロントではどうしようもないことになりますか… whileの中って命令が並ぶことが多いのに、
いちいち1行つづ実行してしまうコマンドプロントでは
長いプログラムは向いてないということもあるのでしょうか そもそも、プログラマーは、VSCode を使う
拡張機能のCode Runner を使えば、右クリックメニューから、
選択したコード片または、ファイル全体を実行できる >>317
VSCodeをインストールしてみました。
ありがとうございます。
IDLEはコマンドプロントより見やすくていい感じだと思ったのに
何故練習用としか言われないのか、理由が分かった気がします… >>303
boost::python でggr
リンク貼れなかったので
windowsでも当然動くよ >>321
それでした!
左に自動で入る「…」がインデントだと思ってしまってました…
コマンドプロントでもちゃんと動きました。
ありがとうございました。 >>321
そんな罠…
……あるあるw
322解決おめ! windowsの3.8.9でpyzを動かすとPYTHONPATHがどうだとかでfatal errorになるんだが
解決方法はありますか? クラス内で関数の引数はいきなり使っていいの?
一度メンバ変数にすべき?
class Test():
...def func(self, mylist):
......i for i in mylist:
class Test():
...def func(self, mylist):
......self.mylist = mylist
......i for i in self.mylist: >>326
使っちゃだめな理由がない
と言うか本来不要なものをメンバ変数にするなよ htmlタグを出力するんだけどみんなどうやってる?
html='''
___<div>
____<span>hoge</span>
___</div>
___'''
とか
html=___"<div>" +
_______"<span>hoge</span>" +
______"</div>"
とか
出力後の成型作業が面倒だなぁ、と >>329
それだとpythonコード内にきっちり確認してインデントも書かなきゃいけないっぽい?
>>330,331
調べたらbs4にprettifyってメソッドがあるみたい
これならたぶん>>328の後者でbs4に一旦入れたら整えてくれそう?
とりあえずやってみる さっそくやってみた
<h1>とか1行でいいのにとは思うけどまぁこれでいいかも
https://pastebin.com/1Lnbdgn2 Ruby のテンプレートエンジン・ERB では、a.html.erb に、
<% price = 2500 * 1.05 %>
<p>
本の値段は、<%= price %>円です
</p>
<% 〜 %> には、Rubyの式を書く。
<%= 〜 %> 内は、HTML に出力される
ERB は、あらゆる形式に、Rubyの式を埋め込める。
a.js.erb みたいに、JavaScript ファイルにも埋め込める >>334
今回は出力っていっても文字通りhtmlコードのプレーンテキストが欲しいってだけなので
ぶっちゃけ一行でもいいけど、みたいな見栄えだけの話 >>289
新人>>288がその日のうちに
プロジェクトの全dtoのsetterを分解して
メンバーをpublicにしてその実装に書き換えたのを発見するのだった >>337
マウント取りたいだけなら他所でやるがよろし >>337
Javaしか書いたこと無いんだなって速攻で分かる
Pythonだとgetter/setter的な書き方はしないから、書き方っていう事自体発生しないっていう
(どうしてもやりたい場合はデコレータかpropertyを使う) pythonも一応getter/setterみたいな書き方できるけどもっと応用的に使うイメージ
単純な表示/代入は普通にアクセスすりゃいいし pyちゃんの貞操観念はガバガバ
でもgotoは死守 クラスでめちゃくちゃハマったのでメモしときます・・
なんでこうなるのか上手く説明できませんが解決したコードと検証コードです
https://pastebin.com/pScxSpQ5 >>346
インスタンス化したときに(クラス変数で)初期化されるもんだと思ってた・・
というかクラス変数と__init__内に書いたself.◯◯のインスタンス変数は
書く場所が違うだけで同じかと思ってました
とりあえず「クラス変数はイジらない変数」で覚えときますありがとうございました WindowsストアのPythonってどんなもの?
会社でライセンス違反と知らずにanaconda入れてるマシンが多数あり全社一斉に他のpythonに切り替える必要があるんだけど
ストア版はMSが用意するPythonだから安心と考えるのは安直かな? >>347
クラス変数はクラスそのものが持つ変数だから<クラス名>.<変数名>でアクセスするのよね
いつも使ってる<インスタンス名>.<変数名>でアクセスする方がインスタンス変数という >>348
安直なのはanacondaも同じなので
ライセンス違反を回避するため
anacondaからmsにしましたでいいじゃない エンジニアがStoreのpython入れるって正気かよ anaconda駄目なんか
ググったら社長がブログで小規模商用なら全然OK書いてるけど 環境構築もままならない上に便利に使ってるなら普通に金払えよって思う ストア版はコンパイル必要なのpipする時とか罠あったはずだから公式にしとけ anaconda
社員数200人以下のところはfreeの使ってもOK
businesses with less than 200 employees is allowed ストア版はやめとけ
anacondaは普通に使えてる 入る気がする
term of serviceに
「同一命令系統に服するemployeesが200人未満の組織」とも書かれてるから >>358
社員って俗称なのでケースバイケースだけど通常はバイト等は含まないことが多い
法的には従業員数でこれにはバイトやパートも含まれる >>360
ある月は200名未満、ある月は200名超えたらどうすんの? >>362
超えてる期間は使っちゃダメとかかな?w
まあそういう懸念があるならライセンサーに事前に確認すべきだろうね tkinterで動的に複数のボタンを生成して
1つクリックしたら専用のスタイルを適用
他のを全部未クリックのスタイルに
ってやりたいんだけど、ウィジェット生成時に名前をつけてリストに格納しといて
ループ回しながら処理 みたいなことするしかないですか? ストア版が駄目ってubuntuも同様?
最近MSはOSSに協力的だしいずれWinとLinuxがシームレスに繋がる素敵な時代が到来するのかと夢想してたけど 選択肢の中に公式で配布してるPythonが入らない理由はなぜですか?どうしてanacondaとストア版の二択? ベースが公式だからかもしれん
公式のIDLE使いやすいからおすすめ IDLEは、pep8のコメントアウトすらできない出来損ないなのでパスです javaでseleniumを使っていましたがpythonに移行しようとしたら
javaでは普通だった
Wait<WebDriver> wait = new WebDriverWait(driver, 20);
を
wait = WebDriverWait(driver, 20);
として各関数で使っていたら「Shadows name 'wait' from outer scope」と怒られました
理由は理解できましたが各関数毎に異なる秒数で頻繁に使用したいので何かいい方法は
ありませんでしょうか、ステートメント毎に一々
WebDriverWait(driver, 20).until(...)
なんてやっていたくありませんし、変数名を関数毎にfnx_waitなんてのもスマートな気がしないのですが・・・ QMA的なクイズゲームを作りたくて今日からpythonを勉強し始めました
プログラムは初心者なので、わからないことがあったら手取り足取り教えてくれると嬉しいです! >>375
残念ながらPythonはゲームには向かない
初心者の第一歩としては悪くはないが、プログラミングの基礎の基礎だけ学んだら描画とかに深入りする前にUnityとかに移ったほうがいい >>377
なるほど、ありがとうございます!
UnityだとCとかか・・・
がんばります 一応PyGame使えば作れなくもないけど茨の道にはなるな pygameもpysdlも死んでる
唯一renpyがギリギリセーフ if
elif
elif
else
とやるとき、ifのどれかに当てはまるなら真 を実現したい。elifとelseの間が欲しいというか
やっぱり式をorで繋ぐとかフラグ立てるとかですか?
なにかいい方法はないでしょうか if節で一回、ifどれかで一回
2回真になるようにしたい >>382-383
>ifのどれかに当てはまるなら真 を実現したい。
と
>if節で一回、ifどれかで一回
>2回真になるようにしたい
は同時に成立するものなのか? >>378
UnityはC#だな (ビルドするとC++になったりはするが)
Unityは純粋なC#と比べるとちょっと違和感あるかもしれんが、公式のサンプルたくさんあるからまずはそこからやるといいさ >>385
x=1
if x==1
elif x== 2
if x==1 or x==2 ここが際限なく増えていく
else >>382
おれなら
NotElse = True
if
elif
elif
else:
NotElse = False
if NotElse:
...
ってやるかな cond(x,cand)を2入力、真理値出力の関数として
if any(cond(x, cand) for cand in cands)
みたいにすれば出来そう インスタンス変数ってすべてデコレータなどのpropertyでゲッターにしといた方がいいのでしょうか?
セッターもゲッターも作るとなるとそれ結局はインスタンス変数直接いじるのと変わりないのでは?と思ってしまうのですが。。 >>382
a=4
if a==1:
_f=lambda : 'if'
elif a==2:
_f=lambda: 'elif1'
elif a==3:
_f=lambda: 'elif2'
else:
_f=lambda: 'else'
r = f()
print(r) >>392
ゲット、セットする度に何か特殊な処理をしない限りはいらないと思う tabula-pyを使った。
pyinstallerでのexe化の難易度高すぎて泣いた。
こういうの自力で解決できる奴すげーな。 Python3.6になったあたりからね>PyInstallerがむつかしめになった PyInstallerを簡単にするwrapperがあった気がする。 フリーズとかなんとかってやつ?
あいつは重い でかい pythonに限った話ではないかもですが、
定期的にデータを取得して最大値を更新していくような処理をする時、
初期値として
max = None
としておくと、
if max is None or max < new_value:
____max = new_value
みたいに、Noneかどうかの比較というのが必要になりますが、たった初回のNoneのために毎回比較するというのは処理(とくに処理時間等)として無駄でしょうか?
例えば初期値を、ありえないぐらい小さい値にしておいて、どんなデータが来ても必ず更新されるようにしておく、というやり方もあるかと思いますが、Noneのように「未反映」という状態を示したいです。
上記に限らず初期値をNoneにするといたる所でis Noneの判定が出てくるのでどうも無駄な比較に思えてならないのです。
気にするレベルではないならそう言っていただけると安心です。 初回だけはpred.としてNoneと比較する関数をyieldする
次回からは値を比較する関数をpred.としてyeildする >>403
自分が気にならないレベルかどうかを%timeitとかで計測して確かめるがいいと思うよ max_val = float('inf')
にしておいて逐一
max_val = max(max_val, new_val)
で良さそう inf無限大なんてものがあるなんて目からウロコでした!
これなら演算も比較も、format表示もエラーにならないので使えそうです。
yieldについても、なるほどそういう使い方があるんですね。
ありがとうございます。
>>407
速度については今度確認してみたいと思います。 クラス内のメンバ変数って
やっぱり一番最初に全部宣言しとくべきですか?
色んな関数内で好き好きに宣言するのは良くないこと? Pythonはどこで宣言してもゆるしてくれるが
人間的には先頭にかためておけよ って思われる Javaの作法を敷衍させると先頭に固めるのが良いとの伝承がある pandasのdescribe()のような集計結果から(元データがなく、集計結果の数値のみが与えられた状況です)、これを用いてpythonで箱ひげ図を描く方法をご存知でしたら教えてください。matplotlibやseabornのboxplotは元データが必要のようで、行き詰っています。 >>416
ひげの長さのもとがないようなデータにあとからヒゲはやしても不自然なだけくね?
分析ずみのその値とやらだけ注釈枠作ってかいとけ >>417
ありがとうございます。結局エクセルの積み上げ棒を加工して描く方
法で乗り切ることにしました。 大学の授業課題で使い方もろくに理解してないのにjupyter notebookを使って課題を提出しろとのお達しが出た
サンプルコードから見様見真似でいろいろやってみたけどエラーは出るし調べてもよく分からんし詰んだ
ちなみに「リスト同士の除算ができません」みたいなエラーメッセージが表示された。 >>419
以下サンプルコード
y_2 = 0.04
y_1 = 0.4
x_2 = 0.0
m = 1
lgr = 2.2
# Calculation
#
x_1_ast = y_1 / m # x*_1
ys = np.linspace(y_2, y_1, 7) # 区間 [y_2, y_1] を 6 (=7-1) 分割
print(ys) # 分割点を表示
xs = y_to_x(ys, y_2, x_2, lgr) # ys の各点に対応する xs を計算
以上サンプルコード
y_2, y_1, mが他の値だった場合にどんなグラフになるかというのを一つの図で表示するのが課題なんだけど
y_2 = np.array([0.04, 0.02, 0.02)]
m = np.array([0.04, 0.02, 0.02)]
と変更すると
x_1_ast = y_1 / m
の部分で「リスト同士の除算は〜」みたいなエラーメッセージで弾かれた。 書いてあるとおりnp.array同士では除算が定義されていないのでできないのだが
「どうなって欲しいか」とか「どういう値を求めたいか」とか
そういうことを教えてくれないと解決策は示せない 最終的には3つの各々の条件下での折れ線グラフを描きたい。
そのために必要なのがy_1, y_2, x_2, x_1_astの各条件での各々の数値なんだけど、
x_1_astは求めようとしてもエラーしか表示されないから詰んでる みたいなエラーメッセージってなんやねん
そんな適当な情報で分かる訳ないやん numpy.ndarray
を見ると
んんだらアレイ
と読みがち >>420
自分で書いたコードを>>1に書いてあるサイトに張って
エラーメッセージをちゃんと全文書け
少なくともサンプルコードと書かれてる変更だけ加えてもエラーでないし
numpyはリスト同士の除算もできるし、実際のコード見ないとエスパーじゃない限り分からん >>425
N-Dimension-Array、N次配列の略じゃないか >>424
本当に申し訳ないが、pythonは齧った程度しか触ったことがなくて、エラーの内容も調べた限りではそんな感じのことを言っていた。としか言いようがなかった >>426
https://techiedelight.com/compiler/?PrKN
↑ソースコード全部(多分合ってるはず)
以下エラーメッセージ
ValueError Traceback (most recent call last)
<ipython-input-22-a6ecd68a1745> in <module>()
44 ys = np.linspace(y_2, y_1, 7) # 区間 [y_2, y_1] を 6 (=7-1) 分割
45 print(ys) # 分割点を表示
---> 46 xs = y_to_x(ys, y_2, x_2, lgr) # ys の各点に対応する xs を計算
47 # ==================================================================
48 # 作図
<ipython-input-22-a6ecd68a1745> in y_to_x(ys, y_2, x_2, lgr)
23 yy_2 = y_to_yy(y_2) # Y_2
24 xx_2 = y_to_yy(x_2) # X_2
---> 25 xxs = (yys - yy_2) / lgr + xx_2 # Xs=(Ys-Y_2) / LGR + X_2
26 xs = xx_to_x(xxs) # xs = xx_to_x(Xs)
27 return xs
ValueError: operands could not be broadcast together with shapes (7,) (6,)
要はlgrの値が0.5から増えていくとグラフはこのように移動していきます、ってのを表示させればいいんだけど、配列っぽくしてみたら詰んだ
どうせ課題の提出期限も切れたしこれを機にゆっくり勉強してみます。 (yys - yy_2) は要素数7でlgrは要素数6
形が違うので割り算できないよってこと >>429
>lgr = [0.5, 1.0, 1.5, 2.0, 2.5, 3.0] # 液ガス比 L'_M / G"_M
lgrnの要素数が6つで
>ys = np.linspace(y_2, y_1, 7) # 区間 [y_2, y_1] を 6 (=7-1) 分割
ysの要素数は7つで返ってくるから、要素数が違ってる関係でエラーになる
で、解決方法としては要素数を合わせればいいから
lgrに3.5を追加する、またはlinspaceの引数を6に変更すれば後は動く
以下はlgrに3.5を追加した場合のグラフ
https://i.imgur.com/gOS7wdU.png >>419
詰んだじゃなくて考えろよ
分からないなら調べろ
何しに大学行ってんだよ 大卒らしいのに小卒みたいな奴っておるやん
そういう人種だと思っていただきたい どうでもいいけどpython全然わからんて人向けの課題じゃない気が Tkinterでウィンドウの移動をマウスのドラッグで実施したいのですが、
タイトルバーではなく、表示部分?をドラッグする方法ってありませんか?
画像をサブウィンドウで表示させているのですが、タイトルを表示せず画像だけのサブウィンドウにしたくてお願いいたします ファイルパスを受け取って画像かどうかを返す、シンプルな関数を作りたい
偽装(mimetypes)とか誤認(imghdr)とか避けたい
import pathlib
import filetype
path = pathlib.Path(xxx)
if path.is_file():
__is_img(path)
#
def is_img(path):
__answer = False
__obj = filetype.guess(str(path))
__if obj is not None:
____if obj.mime[:6] == "image/":
______answer = True
__returen answer
いまこんな感じなんですが、これで大丈夫だと思いますか?
一応手元で偽装ファイルとか色々投げて、問題ないっぽい雰囲気ではあるのですが…
また、もっと簡単な方法があれば教えてください python2のvirtualenv入れようと思って
python -m pip install virtualenv
ってやったら、複数の関連パッケージの処理をやったあとで
エラーで終了したんですが、こういう場合、そこまでに
動いた処理は元に戻る?それとも中途半端に放置される?
このあとで別の方法でパッケージインストールしたら、
最初に失敗したときの処理は中途半端な状態で残ることに
なるんじゃないかと思って気になってます。
今までこういう場合はもうよくわからないのでOSごと
再インストールしてたんですが、どなたか知ってる方が
いたら教えてください >>437
filetypeはjpg/png/gifの場合最初の2〜3バイトしか読まないので
https://github.com/h2non/filetype.py/blob/53bdccee0371fcc9463e2edd68d2cedb589d3a76/filetype/types/image.py#L23
その先頭2〜3バイトが偽装されていれば誤認する
そういうのが嫌なら439のように画像としてロードできるかまで確認すべきだ
ただし、437が想定するファイルを「偽装」してくるアタッカーがどういう人物像なのか不明なので
一概にどちらにすべきとは言えない
偽装ファイルでexploitを突こうと画策されているのでもなければfiletypeで十分だろう 画像として読み込める偽装データもないっけ
保持するつもりなら万全を期して読み込んで保存し直すくらいまでしたほうがいいかも >>441
あるよ
画像データの末尾以降を使ってるパターンは知ってる 画像ファイルだが読まれない部分に割れ物の断片を入れられてる…みたいな偽装と
ヘッダは画像ファイルだが中身は画像ではないという偽装は
ちょっと別の話かと pandasでデータフレームを作成するときに
df = pd.DataFrame({'C': namae, 'A': tokuten, 'B': tokuten2})
のようにして実行すると、A, B, C の順に列が並んでしまいます。
C, A, B の順番に列を並ばせてつくりたいのですが、どうすればいいですか? Pythonのバージョンによっては、dictは順序保証しないからじゃないの?
横着せずにシーケンス(list/tuple)を使えばよい。 >>442
バイナリ連結ですよね
これって判定と連結部の削除ってできるんですか? 判定・削除というからには、鍵を持たない第三者が偽装かどうかを見抜けるかという話でしょ いちいち妙な判定しようとせずに
画像としてメモリに展開して
再保存すりゃいいだけじゃね
ついでに圧縮率も変えられるし コンテナ利用するときにvirtualenvs併用するメリットってなんでしょう?
コンテナ内部で更にvirtualenvs使うのは二度手間なように感じています。 >>451
デプロイ先でvenv使ってるなら、それに近い環境で動作を検証できる
何かvenv下だと挙動が変わるモジュールとかあるし >>445
一旦作ったやつを並び替える、でもいいのなら、
df2 = df[['C', 'A', 'B']]
でdf2はC A Bの順にできるよ。 >>453
なるほど、もともとvenv使っててその後コンテナ利用に切り替えたパターンを想定とかですかね
今勉強というか適当にdocker調べつつ触ってるんですが、venv使ってるようなのもあってこれ何のためって不思議でした
>>455
ありがとうございます
ネットの情報多くてありがたいんですが玉石混淆だったり古かったりで逆に混乱しますな どうしてPython使ってる人ってswitch-caseなくても我慢できるんですか?
それしか知らないから不満を持ちようがないとか? 我慢できるとかじゃなく、ないものはしょうがないだろ。
それがどうしても嫌ならpythonを使わなければいい。
なんらかの理由でpythonを使う(使わなければいけない)のなら、
他の人も同様でしょ。 似たような処理は代入演算子とif,elif,elseでできるって書いてあったよ pythonみたいな構造体がきっちりしてるわけでもない言語なら
そこまでパターンマッチ必要にはならんだろ。
構造体からデータ取り出すのがそこまで面倒な言語でもない。 >>461
switch(a){ ... } みたいなやつなら良いけど switch(a + 1){ … } とかだと一時変数を作るか各条件式にa + 1とか書くはめになるからねぇ
switch文があるに越したことはないと思う 構造体に使うイメージはなかったな
昨今のtypingの流儀に乗っかったんだと思う >>464
そうだね…
a := a + 1も便利なんだけどね… 文増えてくと混沌としてくるから今のPythonの流れはちょっとどうなのかなと思うところはある python3.10か3.11でパターンマッチ来るんだっけ >>459
それ一つ無い程度で使う使わないの瀬戸際にはならない
そもそもswitch-caseで分岐する必要が出てきた時点でロジック設計を失敗している事が多い
ポリモーフィズムを活用するべき switch-caseって、条件が等差数列となるときはjmp先を演算できるよねとできた
実にCらしい構文で、そういうことをしない言語にとっては実装が面倒なだけの構文かと if文でやると汚くなる言語がswitchに逃げたとみたらどう >>459
我慢できなくなったから機能追加するんだよ
いままで散々switchなんて不要って言って来たから
取り繕うための言い訳を並べ立てながらだけどね 最近C#からswitch実質なくなったと聞いたぞ
中で 中で条件式とか使えるようになって実質IFの羅列になったとか >>472
パーサーを置き換えるのが面倒くさかったからだと思ってる >>459
Pythonユーザーには2タイプ居る
・それしか知らない奴
・色々な言語使ってきて、なんらかの良さを感じるからPython使ってる奴
どんな言語にも多少の欠点はあるもんさ リテラルな値でのswitchならenumでシンプルにかけるしな ライブラリ使ってるとたまに
hoge(option=DEFAULT_TYPE)
みたいな感じでオプションを設定できるのがあったと思うのですが
このDEFAULT_TYPEの部分は変数を定義した覚えもないのに使えてた気がします
どういう仕組みなのでしょうか from なんかのライブラリ import *
とかでその定数をimportしてると思うよ オブジェクト指向は全然分からないからクラスの定義は出来ない
でも関数だけで何とか出来ちゃうから有難いわ >>479
なるほど
どのライブラリだったか忘れて確かめられませんが
読み込み先でDEFAULT_TYPEをprintすれば何かわかりそうですね
#hoge.py
DEFAULT_TYPE='default'
class Hoge:
def fuga(self,*,option=None):
print('Option: %s'%option)
#
from hoge import Hoge,DEFAULT_TYPE
h=Hoge()
h.fuga(option=DEFAULT_TYPE)
上のようにimportでDEFAULT_TYPEしていたかどうか
でなければhoge.DEFAULT_TYPEという指定だったか記憶が曖昧ですが
こんな感じでできました
import DEFAULT_TYPEしなくてもDEFAULT_TYPEだけでいけた気がするのですが
記憶違いだったかもしれません tkinterのdestroy()って親を殺せば子は見逃しても問題ない?
全部明示して殺す必要ありますか?
ガベージコレクションが頑張るから大丈夫なのかな 親をdestroyすれば子供子孫すべてdestroyする def destroy(self):
for c in list(self.children.values()): c.destroy()
親は子供を殺すが孫は殺さない
子供が孫を殺す stack overflowの書き込みで、親が死ねば孤独になった子供はGCがやがて消す
消えるまでメモリには残る って書いてあった気がする >>483
>488だで
うちはtkinterじゃなくてWXつかってるが、>488だで
自分で子孫まるっとあぼんする関数つくって積んでる >>477
そのswitchの代わりという使い方だと、PythonのEnumはいまいちですわ。
JavaのEnumがまさにそういう使い方ができるようになっている(Strategy/Stateパターン)。 syntaxエラーをチェックするツールありますか? python -m py_compile ソースファイル >>492
ありがとうございました。
*.pyでソースを指定したら全部.pycが出来上がり、ノーエラーでした。
試しにwhileの:を削除してみたらSyntaxErrorの指摘が表示されました。
これで安心です。 うちはflake8とblack派だけど勉強になった linterだと、実際動くかどうかまではわからないことが多いと思う
いくつかあるlinterの中では俺もflake8を使ってるわ PyQtで自動生成されるuiソースもflake8で結構色々でますね。
自分のソースは通信系なのでtry/except入れているのでsyntaxエラーさえも例外で通信リカバリーみたいになるので悩んでました。 >>496
Syntax Errorはちゃんとでるんでないかい?
一方で、こういう逆のケースはある。
globals()['tau'] = 6.283185
print(tau) # linterやIDEではエラーとでるけど、実際にはちゃんと動く a = ['a','b','c']
if not a[3]:
_print()
javascriptみたいにundefinedになってくれればと思ったのですが
pythonはIndexErrorが出るみたいですね
これを場合分けしようと思うと、try使うしかないですよね?
list index out of rangeの場合はelseそれ以外は値を取得
みたいにifだけ書きたいと思ったんですけどね idx < len(a)でインデックスが範囲内にあることを確認するとか? dictならそういうのあるけどlistはないな
len(list)で長さ確認してから取得するか、try-catchするしか無い listを拡張して独自クラスを定義するのはどうか
class DefaultList(list):
__def __getitem__(self,i):
____if i<len(self):
______return super().__getitem__(i)
____else:
______return None
a=DefaultList([‘a’,’b’,’c’])
if not a[3]: >>502
スライス範囲を絞ってif not a[idx: idx + 1]とかにしたらより速くなりそう いきなりStopIterationで止まるだけだから、長さ関係ないだろ。
普通にlenでいい。
JavaScriptやPHPのリスト"もどき"と比べるのもナンセンス。 環境はwindows10 64bitです
親フォルダ
:子フォルダA:画像1.画像2
:子フォルダB:画像1..
という構造があって,pathlibで生成した子フォルダのpathをiterdir()で回して
画像pathをPILのImage.openで読もうとしてるんですが
親か子のフォルダ名がめっちゃ長くなると
FileNotFoundError: [Errno 2] No such file or directoryになるやつが出たり出なかったりします
フォルダ名を短くして,画像名を最大まで長くした場合はエラーが出ません
何が原因で,どうすれば読めるようにできますか?
できればエラーキャッチしてその場で読めるようにしたい (フォルダ名のリネームはとりあえず置いておきたい) >>506
フルパスが長すぎてpython内であふれてしまうのが原因
フルパスではなくショートパスを生成して、それでやりとりするようにすればとりま回避できるが
あまりに長いフルパスは非推奨なのでとりま置いておいたとしてもいつかは直せ PythonじゃなくてWindowsのせい
多分これでしょう
Windowsはデフォで絶対パス260文字制限があるらしいから、解除したいならレジストリをいじる必要がある
https://bizlog.tech/windows-maxpath-change/ フォルダ名はわかるけど
ファイル名長いのが大丈夫なのはなんでだ? >>507
なるほど
今回はpyinstaller使いたくて、そうするとwin32apiとの相性が悪いっつーかショートパスが危険球っぽいんで
もうロングパスは受け付けないことにします。ありがとうございました >>509
それには一部対応してるんでねーの
>>510
pyInstallerはパスの途中に半角スペースや全角文字あってもうまくいかないことがあるぞ >>510追記
ところで、相対パス/絶対パス/フルパス/短縮(ショート)パスの違いはわかってるんだよな??? その情報要る?
たぶん抜本的には裏で構造体を丸ごと短い名前でコピーして、それを処理して返すようにするとかいう話じゃね まあショートネームは避けたい
そもそも超ロングパスがあり得る環境だとショートパス化できない文字列がぶち込まれそうだし
長いのはエラー吐くか
コピー→リネーム→処理→置き換え たい Windowsの場合はPythonのインストールの最後に260文字制限を解除するか
聞かれたような気がする win上のpythonて32767文字扱えないのか windowsのロングパスは
ファイル造ったあとに自分でそのファイルにアクセス出来ないとか
削除も出来ないとかあほなことに巻き込まれる
>>516
stringio 以下のようなデータセットのリストがあり、例えば各nameごとに、valueが最大となるものだけ抽出したい場合に内包表記や関数などで簡単に書ける方法はありますか?
[
{'name': 'a', 'value': 100},
{'name': 'a', 'value': 200},
{'name': 'b', 'value': 50},
{'name': 'b', 'value': 105},
{'name': 'c', 'value': 150}
]
↓こういうリストとして抽出したいです。
[
{'name': 'a', 'value': 200},
{'name': 'b', 'value': 105},
{'name': 'c', 'value': 150}
]
valueはタイムスタンプ等で最新のものだけ抽出する、といった使い方をしたいです。 聞く限りだとfor name, value in data:とかで回して
out[name] = max(out[name], value)
みたいな感じで処理したら良さそうだけど >>519
ありがとうございます。
後出しで申し訳ないのですが、各データはvalue以外にも複数の属性値をもった辞書データになってます。
nameは抽出後は当然ユニークになりますが、抽出後もリストのままで並びも元の並びはキープしておきたいです。
SQLで言う、GROUP BYしてMAX関数適用するような感じの抽出方法はないかなと思いまして。 >>520
あ、まさにそのイメージでした。ありがとうございます。
やはりdataFrame使わないと簡単には書けないのですね?言い換えるとdf使った方がはるかに簡単ということですかね。 一応pythonの組み込みライブラリにもgroupbyってあったよね
pandasでやるのが一番手っ取り早いと思うけど Ruby なら、
input = [ {'name': 'a', 'value': 100}, {'name': 'c', 'value': 150}, {'name': 'a', 'value': 200} ]
result = input.group_by{ |hash| hash[ :name ] }.map do |ary|
ary[ 1 ].max_by{ |hash| hash[ :value ] }
end
p result #=> [{:name=>"a", :value=>200}, {:name=>"c", :value=>150}] >>518
愚直に内包表記
[
{‘name’:name, ‘value’:max(record[‘value’] for record in data if record[‘name’]==name)}
for name in set(r[‘name’] for r in data)
]
ただしnameの並びは崩れる pathlib.iterdir()の読み込み順ってどういう仕組みで制御されてるのかな
windowsは昇順001>0001なんだけど、natsortとかos_sortedでも0001>001になるのが
pathlibのジェネレーターはOSソートに追従してる気がする…偶然? ちょっと試してみたんだけど
01.txt
1.txt
2.txt
0010.txt
a.a.01.txt
a.a001.txt
explolerの名前の昇順でこう表示されるディレクトリを
同じ並びで出力するソート形式はないような気がする
natsortもos_sortedも効かないw
すごいなwindowsどうなってんだ [natsorted[数字だけのファイル], sorted[文字あり]]
うーん…… OSリリースごとに結果が変わる可能性があるので正規化に使用してはいけませんとか注意書きが書あるAPI >>531
つ https://web.archive.org/web/19990224184613/http://www.asahi-net.or.jp/~ez3k-msym/comp/acccoll.htm >>534
__le__, __ge__, __ne__がそれぞれ1, -1, 0と比較してるのって間違ってない?
使われなくて影響ないのかもだけど
functoolsのcmp_to_keyを使えば
sorted(paths, key=cmp_to_key(win_cmp))で済むよ
同じAPI使ってるのにソート結果が違うのは
os_sortedのバグだと思うのでissueあげとくといいかも from functools import cmp_to_key
import ctyps
def win_sort(obj):
__def win_cmp(s1, s2):
____shlw = ctypes.windll.LoadLibrary("SHLWAPI.dll")
____return shlw.StrCmpLogicalW(str(s1), str(s2))
__return sorted(obj, key=cmp_to_key(win_cmp))
なるほど >>534は
cmp_to_keyと同じことしてる
それはともかく
key=absとkey=cmp_to_key(とでは
ぜんぜん違う形式
内部的にやってることに馴染むのが難しい tkinterでMVCに挑戦してるんですが
例えばapp.verとかicon用base64文字列とかの定数?はどこに書くんでしょうか
アプリケーション(root)固有の情報は全部Cに書いてる人もいれば
非画像データはM、画像関係はVに置いてる人もいて
どう考えたらいいのか教えてください >>540
母胎osの仕様が変わるんだから手に負えない >>543
MでもVでもCでもない
リソース領域に描いておいてロード tkinterで応答なしを回避するには
別スレッドに処理投げるしかない?
できればthreading使いたくない Winならレジストリいじってタイムアウトと判断する秒数を変える import pandas as pd
df = pd.DataFrame([['ia','ib','ic'],['id','ie','if']],columns=['a','b','c'])
if not df==None:
_print(df)
ってやると
ValueError: The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
というエラーが出ましたが
仮にdf=Noneだった場合にdf.all()とかやると今度はNoneはallを持ってません的なエラーがでます
こういうときってどう対応すればよいでしょうか ちなみに今は
if not str(df)=='None':
ってやってます >>548
そもそもNone判定したい場合は==じゃなくてisを使う
if df is Not None:
みたいな書き方にする必要がある
で、注意点として
df = pd.DataFrame()
みたいに、空のデータフレームで初期化してる場合はNoneではない(is Noneで判定してもFalseで返ってくる)
空かどうかを判定したい場合はemptyを使う if df is not None:
に変える
理屈は込み入っているので他の人にお任せする 間違ってNotが大文字になってた……notが正しい >>550,551
なるほど isでしたか
さっそく書き換えてみたらうまくいきました
ありがとうございます >>506
pythonの初回インストール時に以下の英文が表示されるので
この英文部分をクリック
Disable path length limit
Changes your machine configuration to allow programs,including Python,
to bypass the 260 character”MAX_PATH” limitation.
pythonのアップデートもかねて
今使ってるバージョンの最新版インストーラーを公式からダウンロードして実行し
最後のダイアログに上の英文が表示されたらクリックしてみて >>554
配布用なのでロングパスは許さんマンにしました… 一連の作業のなかで
2回同じ相手にループ処理をします
一回は存在確認、もう一回はデータ取得
処理の距離が結構離れてるんだけど、一回目のときにデータ取得もして放置しておくことはできます
こういうとき、きちんと2回に分けた方がいいですか?
一回でガバっとやっていいですか? >>557
ケースバイケース
何のために2回に分けたいのか、もしくは1回にまとめたいのかという目的を明確にした上で
漠然とした状況をもっと特定する必要がある >>546
after() after_cancel() を多用するイメージ >>557
2回目までに消えてる可能性が無いと保証されてるならいつでもいい 現在のバージョンがPython 3.8.7 - Dec. 21, 2020とした場合
同じ3.8系の中から現時点で最新のPython 3.8.10 - May 3, 2021をインストール
3.8系から3.9とか3.10に変えると、pipを使ってインストールしたパッケージが動かないことがある
かもしれないので変えないほうが良いと思う
how to Update Python to the Latest Version
https://www.youtube.com/watch?v=UXSxBx8eG28 コールバック関数の説明は、
公式ドキュメントのどこに書いてありますか? bindで探せば情報はある
bindの実装をソースで見れば
わかるんじゃ
コールバック関数自体はただの関数が
コールバックで呼ばれてるだけなので
説明とかあるかな max(0, 10)
で10が返るのはなぜですか? あ、もうしわけない
これkeyじゃないんですね
早とちりしました… ttps://techiedelight.com/compiler/?AUYY
こういう練習問題があるんだが、こういうアルゴリズム?をぱっと思いつくようになるにはどうしたらいいんだろうか
何度も挑戦したからもはや覚えてしまったんだが、似たような問題出されても答えられる気がしないし
ゴールとしては問題形式ではなく自分のプログラミングで出てくる必要があるんだろうし 自分の手でやるとしたらどうするか考える
その手順をフローチャートに書き出す
それを素直にコードに落とす
それをイケてる感じにリファクタリングする
まあ実際そんなのできなくてもモノは作れるし、特にPythonはそういうアルゴリズム書ける人は少ないと思うよ あとは、問題の細分化だな
これはアルゴリズムの実装に限らずプログラミングにおいて常に有効な考え方だ
例えば、str1の指定した位置iから始まる位置に文字列str2があるかどうかを調べて返す関数 submatch(str1, str2, i) があれば、
この submatch を i を増やしながら str1 全体にわたって適用すれば解けるだろ?
で次はこの submatch をさらに細分化する、それを自分が簡単に実装できる十分簡単な問題になるまで繰り返す まず条件を満たしているということはどういうことかを考える
判定する方法がわかったら脳死で実装する
どれだけクソなコードが出来上がったかを観察してまともにする 自分が頭の中でどうやってその問題を解いてるかをコードに落とし込むのが一番単純かもね
問題が簡単じゃないとこの方法は難しいけど 答えはこうじゃないの
def simple_match(str1,str2)
return str1.find(str2) >>568
フローチャート作るときはどんなアプリ、ウェブサービス使ってるのかな?
細分化すると、細分化されたもの同士をつなぐところでつまづきがちだなあ >>573
フローチャートは成果物として残すものではない
そこらへんの紙に書け >>567
全然関係ないツッコミで恐縮なのだが問題文と実装あってなくね?
問題文の方がおかしそうだけど >>575
問題文と実装が正しいかどうかを把握する能力がないので具体的に教えてもらえると助かる
一応、答えとして掲載されているから正しいとは思うが
問題分もコピペしただけ
文字列のメソッドやモジュール(正規表現など)使うなとも書いてあったが
https://utokyo-ipp.github.io/3/3-2.html
while文による繰り返し、の下の方の練習問題 >>567
自分が計算機になったと思って具体的な入力から出力を手で求めろ
するべき処理が見えてくる >>576
や、ほぼ日本語だけの問題
> str2 が str1 を部分文字列として含むかどうか判定する関数
例だとstr1がlocation、str2がcat、これで期待される戻り値が2なんでしょ?
str1がstr2を部分文字列として含むかどうか、あるいは、str2がstr1に部分文字列として含まれるかどうか、が関数の仕様として適切だと思うけど
こっちの頭が狂ってる? なんか不安になってきた 問題文の日本語が間違ってるね
str1やstr2みたいな悪い命名の見本
これほんとに東大の人間が作ってるんだとしたらヤバいな >>578
ああそういうことか
たしかに一部入れ替わってるかもね
>>579
命名するとしたらどんなのがいいの?
参考になるサイトとかあるのかな >>580
変数名とかの良い付け方とかは、基本的には誰が見ても分かるってのが大前提だね
(この辺の話は、リーダブルコード、ベタープログラマ、達人プログラマーみたいなコーディング作法本に詳しく書いてある)
自分が付けるならsrc_strとtarget_strって付けちゃうかな……
(自分も勉強中なのでこれ最善かは知らん、もっと一般的に良い名前があるかもしれないけど) >>580
簡単なものならtext, patternとか
とにかく意味の違いを名前に反映させる
str1とstr2じゃどっちがどっちか全然わからない
意図を伝えるのが大事
命名で参考にするのはその言語の標準ライブラリと
使い方がわかりやすいようなライブラリ
(str.find(sub, start, end)を参考にすればsimple_match(string, sub_string)とか) >>567
算数と同じで問題や解き方を図で捉えるようにすれば理解が捗るし応用も効きやすい
その解答例は2つの配列の単純な総当たりと根本は同じ
文字列(配列)のインデックスをそれぞれ進めたりリセットしながら比較する様子を
図にして脳内アニメーションで再生できれば似たような問題にも対応できる 模範解答を使わず、自分の実力ならこんな感じに作るだろうなってのを改めて作ってみた
https://techiedelight.com/compiler/?~0jNN
2重ループの中で str1[ i ] と str2[ J ] をくらべりゃいいんだろ
みたいなことをやって不具合を小手先で正した
模範解答の
https://techiedelight.com/compiler/?AUYY
while j < len(str2) and str1[i+j] == str[j]
なんて一生かかっても思いつけない気がする……
あとここの掲示板のせいだと思うんだけど
自宅の回線でこのスレにURL付きの投稿しようとすると、数時間書き込み規制になる
だからずっとスマホで書き込みしてる 文字単位の処理方法を考える前にこんなのを考えちゃうなぁ
def f(a, b):
____ la, lb = len(a), len(b)
____ for i in range(la - lb + 1):
________ if a[i : i + lb] == b: return i
____ return -1
print(f("hello","el")) ここにいる人に言うまでもないとは思うけれど、KMP法など使うと時間計算量をO(S1*S2)ではなくO(S1+S2)で解くことができます >>586
正しく動作するのかなぁ。jのループの中でiを加算しちゃってるけど。 >>586
模範解答を使わないやつを少し圧縮するとこういう感じになる
def simple_match(str1, str2):
____for i in range(len(str1) - len(str2) + 1):
________a = 0
________for j in range(len(str2)):
____________if str1[i+j] == str2[j]:
________________a += 1
________________if a == len(str2):
____________________return i
____return -1
5行目のif文は実質的にはloopの継続判定だけど
pythonのfor-loopでは直接それを表現できないのでwhileに置き換えたのが模範解答
アルゴリズムそのものを理解するということと
アルゴリズムを特定の言語で表現する方法を知るということとは少し分けて考えたほうがいいかも 基本的なものでもあらかじめ知ってた方が早い
高速文字列解析の世界 - 岩波書店
https://www.iwanami.co.jp/book/b257894.html
こういうのも読んで>>567の言う通りに暗記したものを思い出すしかない
なので思い付いてるのは1割未満 str1 とか str2 とかはともかく
変数名に str や string を使う香具師は筋が悪い 関数が汎用的になればなるほど変数名も抽象化されてしまうのは仕方がない
仮にstrlen関数がpythonにあったら、分かりやすい仮引数名はstrかstringしか思いつかんわ >>592
strと違ってstringはグローバルにおさえられてるわけじゃないから
文脈から何のstringか分かるようなら使っても問題ないよ
標準ライブラリやそのテストコードでも普通に使われてる >>593
strText, str1, str0 などとするといい。 >>591
本で解説されてるような高度なアルゴリズムは自力で思い付くものでもないし覚えてそのまま使うのは普通だろうが、>>567が言ってるのはプログラマとして自力で書けなきゃまずいレベルのものだろう。
そりゃあらかじめ知ってりゃその方が早いが、そのレベルから暗記して思い出す以外にやりようがないならコピペの継ぎ接ぎしかできない底辺プログラマだぞ >>586
図解にしたらわかりやすい
str1="ihavealemon"
str2="ale"
012345678901
0ihavealemon
1a
2_a
3__a
3__al
4___a
5____a
6_____a
6_____al
6_____ale!
想定外の意味不明 >>586
たぶん、5ch で広告規制されているURL を書いたらダメ!
エラーになったら、同じURLで投稿しないように、全角文字に変換するとか、
URLの間に、@など全角文字を入れたりするとか
MANGO 板で、NG ワードを絞り込みできる
たまに、いきなり吸い込まれるURLがある。
はてなブログとか、twitter の長いURLとか
5chから返事が戻って来なくて、いきなりアク禁になる tkinterでMyDialogクラスなんか作るとき
class MyDialog():
__init__(self, root):
__self.root = root
がよくあるパターンだと思うんですが
これをする理由はなんですか? >>600
amazon は %61mazon とか %41mazon とかすると通るω >>601
●tkinter 標準の Dialog の第一引数 (self 以外) が root を想定しているから
●後で MyDialog 中から root にアクセスするときに便利
●別に引数で受けずに global root でも良いがみっともない class MyD():
def __init__(self, root):
_master = tk.Toplevel(root)
使い捨てのモーダルダイアログ作成とかならroot使うのこのときだけだったりするので
そういうときは逆にメンバ化しない方がいいような気はする デストラクタの挙動がよくわかりません。
以下のコードを実行すると
#!/usr/bin/env python3
class Gnuplot:
import PyGnuplot as pgp
def __del__(self):
del self.pgp
if __name__ == "__main__":
gp = Gnuplot()
del gp
------------------
デストラクタの箇所で
del self.pgp
AttributeError: pgp
と属性エラーが出るのですがなにが悪いのかわかりません。 削除出来ないんじゃなくて
存在しないものはアクセス出来ないって言われてるだけ 削除出来ないんじゃなくて
存在しないものはアクセス出来ないって言われてるだけ >>606
del Gnuplot.pgp
明示的にdelする必要ないけどね 試してないけど、
del self.__class__.pgp
ならいけんじゃね? >>605
importはなるべくファイルの先頭で行うべきでは? >>610, 611
削除できました。ただ、クラス変数をデストラクタで削除してしまうと
次回インスタンス宣言するときに必要なクラス変数が存在しないことに
なってしまってひどいバグの温床になることがわかりました。
確かに明示的に削除する必要はないですね。
>>612
モジュールインポートでグローバルな名前空間が汚れるのが嫌なので
クラスのスコープにいれて初期化子とデストラクタでモジュールのロードと
破壊を自動化しようとしているんです。
別に文頭でモジュールのインポートの宣言をしなければいけないという
わけではないのでは。 class Gnuplot:
import PyGnuplot as pgp
def __del__(self):
del self.pgp モジュールをクラス変数ではなくインスタンス変数として束縛したいのですが
できません。
--------
#!/usr/bin/env python3
class Gnuplot:
def __init__(self):
import PyGnuplot as pgp
pass
def cmd(self,commands):
self.pgp.c(commands)
pass
if __name__ == "__main__":
agp = Gnuplot()
agp.cmd("plot sin(x)")
を実行すると、
AttributeError: 'Gnuplot' object has no attribute 'pgp'
と出ます。
__init__の中でPyGnuplot をインポートしてインスタンス変数self.pgp
に束縛したつもりなんですが、どうもそれがうまくいかないみたいなんです。
モジュール変数はクラス変数にしか束縛できないんでしょうか。。 self.pgp = pgpをするのはダメなんですっけ >>616
なーるほど。盲点でした。
おかげさまでうまくいきました。 reference counter が増えるというオチ pythonのrandomモジュールって安全ですか?秘密鍵を作ろうと思います そんな質問するレベルの人が手を出すもんじゃないと思うが python 2 の頃に
for line in fp.readLines():
lst = line.rstrip().split('\t')
...
と描いていたコードがあって
python 3 だと
TypeError: a bytes-like object is required, not 'str'
と出たので
lst = line.rstrip().decode('utf-8').split('\t')
と描き治したら動くのですが
これって変じゃないですか?
bytes を .rstrip() すると勝手に str に変更されるんですか? >>619
>Python は中心となる乱数生成器としてメルセンヌツイスタを使います >>622
(秘密鍵の定義がないので微妙な指摘な気もするけど)暗号論的擬似乱数生成器でなくてよいの? >>625
読んだるんだけど
>メルセンヌツイスタは完全に決定論的であるため、全ての目的に合致しているわけではなく、暗号化の目的には全く向いていません。 めんどうくせえな
スパッと語らんかい
>>619
安全じゃないです
はいおわり >>621
そもそもpython3だとreadlinesの戻りの型がstrのlistだと思う def tes(i):
_return i+1,i*2
l1 =[]
l2 =[]
for i in range(10):
_l1, l2 ←appendしたい tes()
temp = tes()
l1.append(temp[0])
l2 append(temp[1])
こう書くのが一番いいですか?
もっといい書き方ありますか? from functools import reduce
a, b = reduce(lambda x, y: (x[0] + [y + 1], x[1] + [y * 2]), range(10), [[], []]) l1, l2 = reduce(lambda x, y: (lambda a, b, c: (a[0] + [b], a[1] + [c]))(x, *tes(y)), range(10), [[], []]) でもこんなコード書いてきたらレビュー通さないでしょ >>631
それでいいと思う
ただ、tesが簡単な処理ならわざわざ関数挟まないかな メルセンヌ・ツイスタは疑似乱数生成器。
Ruby on Rails では、テストで同じ乱数を再現できるので便利
暗号化は、SecureRandom。
Linux のエントロピー、/dev/random, /dev/urandom
RubyのSecureRandomの乱数生成の実装を読んでみた
https://note.com/corocn/n/n84c91872c51c >>631
a,b=tes(i)
L1.append(a)
L2.append(b)
lは識別しにくい小文字しばりならlineとか >>633
>a[0] + [b]
これ入力サイズが大きくなるとreduceのループと合わせてO(n^2)になる >>637
リストの汎用的な名前はxs, ysみたいなのを使うとx, yと対応させやすくて読みやすい
関数型で一般的に使われてる命名方法
xs, ys = [], []
x, y = tes(i)
xs.append(x)
ys.append(y) >>627
お前が何言いたいのか意味不明だったから聞いてやったんだけど、日本語が不自由だったみたいね そこは、Pytorchの自然言語処理が
ここまで進化したか!と驚愕する
場面かも知れないね >>637
先頭大文字ってだめじゃなかったっけっか >>644
コード規約的に変数名は小文字+アンダースコアがいい https://ideone.com/SNDfue
このボタン押したときに、frameのwidth固定のままheightだけ変わるようにしたい
何か良いアイデアありませんか あ、すいません
packじゃなくてgridです
動的生成でbtn.grid(row=i, col=0)のやつです
フレームと固定ボタンもgridで、フレームがsticky=ewnsです make() の中
for の前
q = re.compile('([\d]+)', re.I | re.M | re.S)
w, h, x, y = map(int, q.findall(root.geometry()))
for の後
root.geometry(f'{w}x{h+125}+{x}+{y}') 色々調べたんだけど良くわからなくって
pythonでいうメソッドって、クラス内関数のことですか? >>654
インスタンス変数に束縛されていて、かつインスタンス変数を共有している関数 pathlibでpathがCドライブなどのドライブルート?を指してるかかどうかの判定って
bool(p.stem)でいいんですかね
誤判定あり得る? 何言ってるか分からん
それだと以下もTrueだろ
bool(Path('a')) アンカー消えた
>>656
bool(Path('a').stem) クラス内にある関数をメソッドと認識してないオブジェクト指向がどっかにあるのか? ああすいません。もうしわけない
target = tkinter.filedialog.askdirectory()
p = pathlib.Path(target)
でダイアログでドライブ自体を指定したときを弾きたいのです 弾きたい理由がよく分からないが
os.path.ismount(path)でチェックするほうがいいんじゃないかな
pathlibのis_mountはWindows非対応らしい p.parts
('c:\\', 'sub', 'child')
なので
if len(p.parts)<2: >>662
ほーマウントポイントというんですね
勉強になりました。ありがとうございます glob.globの再帰って、日本語ディレクトリ名だとうまく動作しませんか? mountはlinuxの概念だから
returnされるものが欲しい物とは
限らない >>665
(略)うまくどうさするですか?
or
(略)動作しないのが仕様ですか?
DO (●´ー`〇)CCHIともとれる
わるいプログラマになれる日本語w >>665
日本語ディレクトリでも特に問題なく動作する
Windowsならencodingの問題だったりしない? >>669
レスありがとうございます。
リストを確認してみたところ、変なディレクトリと組み合わせの要素が余計に2つ入っていて、いずれも~$で文字化けしていました。
若干気持ち悪いですが、一度存在確認をして無ければパスして対応しようと思います。 度々すんません
Excel使用中のダミーファイルの残骸を拾っていたというオチでした rows = [[col1, col2], [col1, col2]]
for i, cols in enumerate(rows):
__if i == foo:
____cols[1] = hoge
__else:
____cols[1] = fuga
みたいな処理って
[cols[1]=hoge if i==foo else
_cols[1]=fuga for i,cols in enumerate(rows)]
て書けるけど,python的にはそっちのがいいのですか? 可読性アレなのでやめた方がいい?
というかこういう処理ってmapみたいな何かでスマートにできんのでしょうか. >>672
rows0 = [[col1, col2], [col1, col2]]
rows = [[hoge if i==foo else fuga, col2] for i,cols in enumerate(rows0)]
って感じかな >>675
間違えた、2行目のcol2はcols[1]の間違い >672
[cols[1]=(hoge if i==foo else fuga) for i,cols in enumerate(rows)] >>678
そんな書き方できたっけと思ったが
通らんやん
通る古いバージョンのpyがあったのかな 内包表記の中は式じゃないといけないので↓こういう代入文は使えない
cols[1]=hoge
cols[1]=(hoge if i==foo else fuga) PyAutoGUI をインポートしようとすると以下のエラーがでます。
import pyautogui
↓
ModuleNotFoundError: No module named 'pyautogui'
・pip install pyautogui 実行しました。
・pip show pyautogui でインストール先も確認しています。
・環境はWindows10、Python 3.9、Jupyter notebookを使っています。
どなたかお力添えをお願いします。 >>681
コマンドラインでpython起動して、
import sys
print(sys.path)
同様のことをjupyterでやってみる
全然結果が違ったら、pyautoguiはjupyterを動かしてるpython環境には入れられてない
一番確実なのは、jupyter内で、
!pip installしちゃうこと >>682
ありがとうございます!
jupyter内でpip installできることを初めて知りました。助かりました。 >>678-680
>>672
>[cols[1]=hoge if i==foo else cols[1]=fuga for i,cols in enumerate(rows)]
>て書けるけど
えっ ステートマシンやってみたいんですが
なにかいいネタってないですか?
何も思い浮かばなくて… 自販機なんかもステートマシンかね。
余談だが、コンビニのマルチコピー機とか、めっちゃ使いづらくてイライラするが、お金扱う部分とコピー機部分が別会社が作ってるとなると仕方ないんだろうな。スキャン結果をお金払ってUSBメモリに書き込む段階で2連続でエラーになったときには腹が立った。金返せと。 権威主義的だがGoogleは社内プログラミング言語としてC,C++,Java,JavaScript,Pythonを採用してる訳だし、Pythonを学ぶ意味は入門用言語であること以外にもあるとは思うよ 昔はTAKERUのようなモンが情報端末になると思ったがマルチコピー機の方が生き残るとは予想しなかった 書きやすくてちゃんと動けばいいだろぐらいの感覚でpython使ってたんだけどみんな色々考えてたんだな⋯
俺の意識が低すぎるんだろうか 流石にscratchと同じ位置付けはない。
まあ、情報だけ仕入れてなかなか手を動かせない人はプログラマー適性ないから、そういう意味ではプログラミング入門をやめといた方がいいってのは事実だけど。
Pythonは書くのが簡単だから、とりあえずPythonで書いてみてアルゴリズムの妥当性なんかを検証してみて、
性能が出なかったりどうしてもPythonでできないことがあればそこだけC/C++で書く、みたいな言語だよ。3DCGにだって深層機械学習にだって使われてるんだから。応用先は広い。 pyhtonは日本語で例えるなら標準語
「仕組みが標準的である」という意味ではなく
「どんな方言を話す人でも標準語だけは理解できるようになっている」という意味でな
可読性というのは大事 最近気づいたんだがオブシコやるにはpythonってちょっと厳しいよな seleniumでChromeを操作中、get_screenshot_as_file等でスクリーンショットを撮ると
タスクバーのアイコンが点灯して煩わしいのですが抑制する方法はなにか無いでしょうか def graph(x,y):
plt.plot(x, y)
plt.show()
def main()
graph(1,1)
graph(2,2)
graph(n,n)
みたいな感じで任意のn個のグラフを表示しようと思ったんですが、
1つのウインドウ上にグラフがどんどん重ねて表示されてしまいます。
plt.show()のたびに毎回別ウィンドを開いてグラフ表示する方法はないでしょうか? >>701
たぶんmatplotlibのことだとエスパーして>704が回答してるんだとおもうが
他ライブラリのことだったら
シラネ(゚听)ーヨだとおもうぞ Python ← これ何て読むの? ピゾン? それとも鳥ポケモンのピジョン? ボタンを押すと別ウィンドウでimgファイルを表示する関数を作りました。
これを実行すると1回目は画像の大きさでウィンドウが作成され表示できます。
ウィンドウを閉じずに、
2回目にボタンを押すと画像が更新ではなく、縦に空白が継ぎ足しで画像が表示されてしまいます。
どうしたら、画像の更新ができるのでしょうか。。
ウィンドウ状況が説明しづらいのですが、以下の様にボタンを押すたびに空白が追加されます。
1回目 2回め
■ ←画像 □←画像の大きさの空白
■←新しい画像
def img_button(img):
global image_Tk
global imgwindow
#すでにウィンドウあればウィンドウ作らない
if imgwindow == None or not imgwindow.winfo_exists():
imgwindow = tk.Toplevel()
imgwindow.title("サブウィンドウ")
#画像の変換
image_pil = Image.fromarray(img)
image_Tk = ImageTk.PhotoImage(image_pil, master=imgwindow)
# Canvas作成
canvas = tk.Canvas(imgwindow, width=img.shape[1], height=img.shape[0])
canvas.pack()
canvas.create_image(0, 0, anchor="nw", image=image_Tk) canvas的に
ID=canvas.create_image(
canvas.delete(ID) >>711さん
ありがとうございます。
IDとcanvasをグローバル変数にしてcanvas.delete(ID)してから、CANVAS.Createで出来ました! >>707に1票
ついでにマルポスあらしの>>706の尻は穴がふえるのろいにかかった data = {"a":1, "b":2, "c":3}
search = random.sample(list(data.keys()), 2)
for target in search:
__foo(data[target])
ループ回さないとだめですか?
なんかforとかダサいぜって聞いたので…
特定の複数の既知キーに対して同じ処理をするときは、これが最軽量? list(data.values())じゃだめなのかな >>714 fooでdataのkey名を使うのであれば内包表記でもどっちでもいいような。
fooが何かしら値を返してその値を使うなら内包表記が便利なときが多い >>714
list(map(foo, data))
でできるけど、for文わかり易くていいじゃん >>718
foo内で特定のキーだけ取り出す処理書くということ? >>719
申し訳。質問読み違えた
じゃあこれで
list(map(lambda i: foo(data[i]), search)) うまく伝わるか分かりませんが、教えてください。
wxpythonをもちいて、変数を使ってボタンを40個くらい作るんですが、
一つ一つイベントをつくる必要はありますか?
どのボタンも、ボタンの属性を変更するだけなのですが、
どれかのボタンをクリックしたときに、そのIDを取得して、
それに応じて動作するように、一つのイベントで書けませんか? PIL(Pillow)でpng画像をjpeg形式で保存しようと思うとエラーがでます。
どうやればpillowで形式変換できますか?
#!/usr/bin/env python3
from PIL import Image
img = Image.open("gazou.png")
newImg = img.rotate(45)
newImg.save("gazou.jpg", format="jpg")
エラー内容
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/hogehoge/venvpy/3.9/lib/python3.9/site-packages/PIL/Image.py", line 2153, in save
save_handler = SAVE[format.upper()]
KeyError: 'JPG'
可逆圧縮pngから不可逆圧縮jpgに変換はできませんか? >>724
エラーの文章を良く嫁
フォーマット指定が違う、”JPEG”で指定しないとダメ >>725
format="JPEG"でやってみたんですけど、次のようなエラーが出ます。
]>> newImg.save("gazou.jpg", format="JPEG")
Traceback (most recent call last):
File "/Users/hogehoge/venvpy/3.9/lib/python3.9/site-packages/PIL/JpegImagePlugin.py", line 610, in _save
rawmode = RAWMODE[im.mode]
KeyError: 'P'
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/hogehoge/venvpy/3.9/lib/python3.9/site-packages/PIL/Image.py", line 2164, in save
save_handler(self, fp, filename)
File "/Users/hogehoge/venvpy/3.9/lib/python3.9/site-packages/PIL/JpegImagePlugin.py", line 612, in _save
raise OSError(f"cannot write mode {im.mode} as JPEG") from e
OSError: cannot write mode P as JPEG >>726
パレットモードだからjpegで保存できない
newImg.convert("RGB").save("gazou.jpg", format="jpeg") >>726
元画像のカラーモードがRGB形式じゃない場合にそのエラーが出る
>>727みたいにカラーモードをRGBに変換すればOK Ruby on Rails では画像変換に、ImageMagick を使っているけど >>714
pandas
data.loc[search].apply(foo)
みたいにできた気がする count = 0
for i in range(10):
count += 1
print(count)
みたいにインクリメントする処理があるとします。
上では初期値を0にしてるので最初の出力が1になりますが、最初を0にしたい場合どうしますか?
上はあくまで例ですのでenumerateは使わない状況だとしてください。
count = -1で初期化する?(何か不格好です)
printの前ではなく後にcount += 1をする?(最後のループで無駄な処理になるます) ごめんなさい半角スペースの連続だと消えるんでしたね print(i)にする。
>最後のループで無駄な処理
むしろこれだけ見るとcount変数の+=の方が無駄な処理。 >>734
count = range(0,10)
for i,cnt in zip(range(10), count):
__print(i,cnt) Pythonって並列処理できないって本当?
シェルスクリプトで言えば cmd1 | cmd2 みたいに
パイプの左右を並列で実行したいだけなんだけど? 直列
cmd1
cmd2
並列
cmd1|cmd2
こういう事か >>742
「Python GIL」でググるといい >>727,729
できました!ありがとうございます。
”P”モードがパレットモードみたいですね。モード分けがあるとは知りませんでした。 >>728
Google Colaboratoryとは初めて聞きました。
わざわざ回答作ってくださったんですね。ありがとうございます。 確か、YouTube のPython で有名な、キノコードの動画で紹介していたような まともに使えるのがPythonしかないのでここで聞かせてください
退屈なことはpythonにやらせようを一部飛ばしたけど一通りやった
データ構造とアルゴリズムは別の本でソートアルゴリズムとかは実装したことあるけど探索木のところで面倒くさくなって放り投げた
基本情報は持ってる
大学の学部は工学だけど全然関係ない科
大学のレベルは地方国立
まともに組んで使ってるのはEXCEL処理の自動化くらい
この程度の実力しかないんですけどブラックじゃないit関連企業に就職できますかね
遊びたくて院進したものの自分の分野で就職する気はあまりない
でも他の分野だとitくらいしかかじったものが無いんでどんなもんかなと > 遊びたくて院進したものの自分の分野で就職する気はあまりない
好きにすればいいと思う
キミに誰が何を言っても無駄 >>750
いったいお前のどこを評価しろと言うのだ
技術力ではなく頭数としての労働力を商品としている会社くらいなら入れるかもね >>750
そのスペックなら面接で普通に喋れたら大手グループのユー子くらいは普通にいける
コミュ力に自信があったり英語得意だったりするなら有名企業本体の情シスも挑戦してみる価値はある
大手SIer本体もどこかは受かるだろうけど激務が嫌ならお勧めはしない
Web系とか技術力を求めるところはまあ面接次第では受かるかもしれんが多分君には合わないからやめとけ tkiter.filedialog.askdirectory()したときの
フォルダー: の部分の初期値って入れられないのでしょうか?
https://i.imgur.com/0o1rG3k.jpg
この画像でいう
フォルダー: python
の部分です スクレイピングした情報をツイッターみたいに画面にリアルタイムに流すのって何使えばいいですか
DOSに表示するなら簡単にできるんですけどもっと視覚的にわかりやすくしたいんですよね
なのでHTMLに変換する必要があるかなとは思うんですけどその先がわからない・・・ >>714
>>> df = pandas.DataFrame([[1,2,3]], columns=['a','b','c'])
>>> df
...a b c
0 1 2 3
>>> s = random.sample(list(df.keys()), 2)
>>> s
['c', 'a']
>>> df.loc[:,s]
...c a
0 3 1
>>> df.loc[:,s].apply(lambda x: x+1)
...c a
0 4 2 >>750
>ブラックじゃないit関連企業
ないよ >>756
ajax
jQuery
AngularJS
Vue.js
その他色々 >>736
最初が0になってしまいます
最初を0にしたい場合どうしますか?という質問です
>>737
後でお願いします
>>740
(0, 0) から始まってしまいます >最初が0になってしまい
てことは最初は0になってほしくないってことよね
しかし
>最初を0にしたい場合
最初を0にしたいってことよね >>762
自分のやりたい事を整理して質問から書き直し >>762
要は最初を0にするんじゃなくて、0から始めたいっていうことだよな? >>734
>printの前ではなく後にcount += 1をする?(最後のループで無駄な処理になるます)
printの後にcountをするようにして
後はifなりbreakなりで最終ループ時だけ無駄な処理を省けば良いやん >>734
もう
print(0)
print(1)
print(2)
print(3)
print(4)
print(5)
print(6)
print(7)
print(8)
print(9)
って書けばいいんじゃね そもそもenumerateできないってどういう状況なんだよ python-vlc で動画再生をしようとしていますがエラーが出て表示できません。
#!/usr/bin/env python3
import vlc
import time
media = vlc.MediaPlayer("conan.mp4")
media.play()
while True: pass
-------
エラーメッセージ
[00007ffbea8240f0] main video output error: video output creation failed
[00007ffbf0e1e4f0] main decoder error: failed to create video output
[h264 @ 0x7ffbec81de00] get_buffer() failed
[h264 @ 0x7ffbec81de00] thread_get_buffer() failed
[h264 @ 0x7ffbec81de00] decode_slice_header error
[h264 @ 0x7ffbec81de00] no frame!
どうも動画を表示するフレームを生成したいないのが原因のようなのですが、
生成方法がわかりません。OSはMacです。Windowsだとうまくいくみたい? >>734
count = 0
print(count)
for i in range(1, 10):
__count += 1
__print(count)
一見無駄なことしているように見えて、これが一番だったり。
この手の最適化は、Javaなどのコンパイラで行われている。 >>772
実際には任意のループで条件でカウントアップしたいってことなんじゃないの?
こういう場合って、たいした処理じゃないから処理の意図が分かるように書くべきな気がするけど。
初期値を0にしたいなら
count = 0
ループでは単に先にprint(count)すればいいんじゃないのかね 最初にprint(count)するのは否定されてね
理由は”最初が0になってしまう”から >>762 ループ抜けた時に count の値を最後に表示した値にしたいとかならまだわかるけど
> printの前ではなく後にcount += 1をする?(最後のループで無駄な処理になるます)
とかだとたいした無駄じゃねーからそんなもん気にすんな!で終わる話だろ >>776
あれ当初の>>734で、
初期値0にすると最初が1になってしまいます、最初を0にしたい、って話じゃなかったのか?ww
いずれにしてもコード読んだ側が理解しやすいほうに寄せるのがいいと思うけど c=0
while c<10:
print(c)
c+=1 >>779
最後のループで無駄な処理になるんで無しです c=c+1
って書けよ
その方が実行速度早いし、つまりセンスある ループ抜けるのに無駄な処理?が必要
c=<9にしたところでcに10は入る
c+=1のほうが速い >>780
forの内部でもトライはするんだよね? なら、>779と変わらんのでは? 各種option値に変更があるとこのcallbackを経由してiniに書きにいく
func(name, *args):
__value = str(eval(f"{name}_var.get()"))
__ini.set("opt", name, value
なんて名前にすたらいいですか?
opts_callback? (それぞれのoptはそれぞれに別のcallback持ってるのでややこしいし、何してるかわからない)
bind_ini? >>785
option値の変更を検知してるのに
evalして値を取り直す必要ってあるの? >>787
たとえばtkinterのtraceはvalue取らない
読み書きに対応した発火 そもそもpythonで書いてる時点で無駄な処理ばっかりなんだから数字を一回余計に足すみたいなことを無駄だと考えてもしょうがない。
もしそれがめちゃくちゃコストが高いものだったら、
c=1
for i in range(2,10):
_ c+=1
_ print(c)
とかなんじゃないの。
しかしどこをどのように無駄だと考えるかで答えは変わってくるからこんな簡単な例だと意味がない。
1クロックも無駄にしたくないならCで書いて逆アセンブルして最適化すべき 分岐のコストなんかより、たとえば動的ディスパッチみたいなの方がもっとコスト高いしな。
Python使っている時点でそんなの気にする方がおかしい。 >>788
変数名が渡されるんだからevalは必要はないよね
lambda使えばvalueも渡せる >>791
それは質問に対する答えじゃないでしょう そもそも質問が可笑しかったり
質問自体が間違ってるときは
議論がナンセンスになる Selenium について教えを頂きたいです。
・社内システムの毎月出力作業を自動化したいと考えています。
・選択ボックスに100項目あって、CSV出力しています。
・ただし一度に100項目選択すると止まってしまうので、10項目ずつ選択して出力しています。
・これを for 文で表したいのですが、セレクトボックスから10項目ずつ選択→ループする方法ってありますでしょうか?
↓1つずつ選択するコードはこんな感じで作りました。
#セレクトボックスの選択肢リスト
select_list =["001","002",・・・,"100"]
#1個ずつ選んで出力
for i in select_list:
select.select_by_value(i)
(→CSV出力)
(→選んだものを削除)
変な質問でお恥ずかしいですが、よろしくお願いします。 >>794
n = 10
for i in select_list[::n]:
__for j in range(n):
____select.select_by_value(i+j)
__CSV出力
iterableからn個のchunkごとに要素を扱う方法もあるけど標準だけだと少し面倒くさい >>794
select_list=[("001","002","003"…),("011","012"…),()…,("091","092",)]
for i in range(10):
_for j in select_list[i]:
__select.select_by_value(j)
_CSV,DELETE
_処理待 システム担当者にCSVでこういうデータくれって言う方が早い >>795
いろいろバグってたわ
少し面倒でもchunkingしたほうがいいね
def chunked(sequence, chunk_size):
__for i, x in enumerate(sequence[::n]):
____yield sequence[i*n:i*n+n]
n = 10
for xs in chunked(select_list, n):
__for x in xs:
____select.select_by_value(x)
__CSV出力
__select.deselect_all()
上のはsliceしてるのでsequenceしか対応してない
iterableに対応したければislice使って自作するかtoolzのpartition_all >>795-796,799
すみません、ご返信ありがとうございます!
初心者なので理解に時間がかかってしまうのですが、
頂いた回答を1つ1つ調べながら試してみます。
ありがとうございました。 pythonとsql学んだあとにflask学んでるだけどわけが分からん
書いてある通りにコピペしたら動くけど一文一文の説明とかないから意味不明な引数渡してたりしておまじないにしか見えん
言語よりフレームワークの方が丁寧な説明してるサイトなくて辛いわ >>801
そもそもTCP/IPやHTTPなど基本的なWebの仕組みが分かってないならそりゃおまじないにしか見えないだろうな
本職になる気なら基本情報くらいは取ってこい 俺も知らなくて今見たけど
普通にURLのパスで振り分けて
レスポンスを返しているだけで
非常にわかりやすかったが…
httpの勉強をしてはどうだろう flaskみたいなマイクロフレームワークはほぼHTTP剥き出しだから仕組みを理解していれば何も難しいことはないし分かってないとサッパリだろうな
基礎をすっ飛ばしてとにかく動きゃいいならPHPやRailsの方がいいんじゃないかな うちも去年PythonはじめてDjango挫折してFlaskでようやく検索サイト作れたよ
httpなんか必要ないし。とにかくググって自分に必要そうなやつコピペしまくってるうちにわかるようになる seleniumとchrome driverで自動操作させるのを作ってるんだけどちゃんと動くか確認する際に、今どの操作をやっているのか表示させる方法ってありますか?
待機している状態なのか、要素をクリックするはずがその要素がまだ表示されてなくてプログラムが止まってしまったのか小窓か何かで確認できたら嬉しい
スマホアプリのFrep(タッチやスクロールや待機などをプログラムして自動化できるアプリ)みたいな感じで >>807
自分でPythonで小窓を作る関数と表示させる関数を書く
そして実行 wxpythonで、たくさんのボタンをbutton_funcでバインドして、
def button_func( self , event ):
で、クリックしたボタンの名前を取得するには、どう書きますか?
event.GetEventObject() や event.GetId() だと
メモリアドレスやよく分からない6桁くらいの数字が出てきます。 >>809
pyqtのようなデザイナーはありますか?
あれば乗り換えを検討したい。 >>801
学校はどこも、Ruby on Rails。
YouTube で有名な雑食系エンジニア・KENTA のサロンでも、そう
Rails 6 だけでも黒田努とか、数冊出ている。
Rails チュートリアルとか、教育体制が圧巻!
Rails以外のフレームワークを学んでも、実務で使えない。
保守できないので使う会社がない。需要がない
Udemy の人気講師・山浦清透、YouTube、1/15
Docker超入門講座 合併版 | ゼロから実践する4時間のフルコース
Windows 10 Home 版, WSL2, Ubuntu 20.04 LTS,
Docker Compose, VSCode, Heroku, Ruby on Rails, Git, CI/CD, CircleCI
圧巻! 山浦のDockerからCircleCIまで含めた、一連の動画 >>810
そうですね。ほぼ同じ状況です。
wxpythonで作っていたので、tkinterと書き方が違い、困っていました。
>>811
違うのでもいいかもですね。勉強してみます。
回答の様子を見るからに、方法はないのかな? >>809
event.GetEventObject().GetLabel() とか
event.GetEventObject().GetId() とかでいいのでは
>>721もそう openpyxlでスケールを設定せず折れ線グラフとか散布図を描いた後に自動で設定されたスケールを変数に格納する事ってできない?
グラフ名.y_axis.scaling=openpyxl.chart.axis.scaling(min=0,max=100)
みたいに明示的に設定してから描画したら最小0、最大100になるけど
この数値を入れずに自動設定で描画した後に
print(グラフ名.y_axis.scaling)
を入れるとmax=None,min=Noneになっちゃうんだよね Noneが自動って考えなんでは
自動か指定ではあきらかに違う virtualenvで作ったファイルにvscodeでアクセスできるのはなぜですか?
仮想化した状態で作ったpyファイルに仮想化をactivateしてないのに左側のエクスプローラーからアクセスできて自由に書き換え保存もできます
いちいち仮想化しなくても書き換えできるので便利だな程度にしか思ってなかったのですがwindows標準のエクスプローラーからアクセスしようとしたらファイルなくてそういえば仮想化して作ったファイルだったなと
なんでvscodeならアクセスできるか不思議に思いました VSCodeでそのpyファイルを右クリックして "Reveal in Explorer" を選んでごらん これはお恥ずかしい
意味のわからないこと書き込んでました
ツイートみたいに削除したい >>820
> virtualenvで作ったファイルにvscodeでアクセスできるのはなぜですか?
実在するからです
>windows標準のエクスプローラーからアクセスしようとしたらファイルなくて
むしろこっちがおかしいです
仮想環境を具体的にどうやって作成したかは知りませんがそういうものです
virtualenvというものは実質的には実行環境のことです 数日前から初めてプログラミングそのものを始めた超初心者です。
どうぞよろしくお願いいたします。簡単なおみくじのプログラミングをしてみたのですが、
下記エラーメッセージが出て動きません。
改善点あれば教示ください。
■作成プログラム
import random
def omikuji():
kuji = ["大吉","小吉","凶”]
return random.choice(kuji)
kekka = omikuji()
print('結果は',kekka,'です')
■エラーメッセージ内容
EOL while scanning string literal >>825
コピペしてそのままなら、
>kuji = ["大吉","小吉","凶”]
"凶"を囲ってるダブルコーテーションが、片方全角になってる >>826
返信ありがとうございます!全角文字を半角文字に直し損ねていたのですね。
ご親切にありがとうございました! プログラム経験ゼロの文系男がPythonで株の自動売買のプログラム作れるようになるのは至難の業かな?
毎日数時間の勉強を数年続けないとダメかなやっぱり
教えてエロい人 >>829
ありがとうございます
マジですか
ノートPCは買ってあるので入門書買って頑張ります ワンショットの分析で売買シグナルを出すくらいなら本も腐るほどあるし簡単だけど、
継続的に稼働して利益を出し続けられる仕組みを構築するのは超難しいよ
IT8年目の本職だけど、自分のコードに金を任せる気にはなれんわ
やってるのは売買戦略のバックテストまでだな >>830
センスによるけど、
そういう事を聞いてる時点で習得に時間がかかりそうかとは思う。 >>827
こういう細かいミスはVSCodeとかPyCharmみたいな
プログラミング用エディタとかIDEを使うと
警告文を出してくれるから、そろそろ使ってみると良いかもしれないね
VSCodeが導入も楽でお勧め 無駄にトラップが一つ増えてるだけじゃないかなぁ
凶のあと続けてダブルコーテーションを打ったらそのまんま全角になってて、しかも見ても分からなかった、でしょコレ
日本語でやらせるだけで変換ミスが起きる
つまり日本の初心者とアメリカの初心者はひっかかり具合が違う
要らないトラップが増えてる エラーメッセージがわかりにくいのと
エラーメッセージの見方を知らないのが原因
前者は言語が改善すべき点
後者はIDEを使う場合でも学んでおくべき アメリカ人が作ってんだから全角文字うんぬんは酷でしょ
人生の中でこれまで一度も使ったことない記号へのエラーメッセージを分かり易く作れ……ってのは流石に絵空事だ
だって全角文字関連は架空の話に見えるじゃん 変数名に2byte文字使えるしむしろ日本語圏の人間にも優しい作りでは?(雑な認識) ずっと前から思ってるがGHQはなぜ他の植民地同様に英語を公用語にしてくれなかったんだ
そのせいで日本人はハンデを生まれたときから背負ってる
英語さえ自由自在に使えたら無料公開されてる本沢山あるのに どっちつかずのダブルリミテッドをワンサカ量産すれば占領継続がラクじゃん
超合理主義になって歯向かってきても困るし >>838
全角クォーテーションを指摘しろってのは酷だわ
3.10で改善されるエラーメッセージは↓こんな感じ
3.9 SyntaxError: EOL while scanning string literal
3.10 SyntaxError: unterminated string literal (detected at line 3)
でもこの変更でエラー箇所を示すキャレット位置がバグるようになってる >>835
メモに残しました!今はテキスト順番にやっていて、もう少し慣れたらそちらも導入します!
ありがとうございました! mainモジュールのインスタンスのsubモジュールから自作exceptをraiseするときって
mainで定義してsubに渡して使うんですか?
Main
class myEx():
_pass
class main()
_def __init__(self):
__try:
___self.sub = Sub(myEx)
__except myEx as e:
___pass
Sub
class sub()
_def__init__(self, myEx):
__self.myex = myEx
__raise self.myex
みたいな? 例外の性格次第だが、一般的にsub.py以外でスローしない例外はsub.pyに定義してmain.pyでimportする
例えばJSONDecodeErrorはjsonモジュールの中で定義されていてmainから渡すとかやらないだろ あーそりゃそうか
import sub.Sub, sub.Err ですね >>836
>つまり日本の初心者とアメリカの初心者はひっかかり具合が違う
>要らないトラップが増えてる
そこはその通りだと思うが
トラップが無いことで latin-1 プログラミングしか知らない馬鹿が大量生産されてるぞ >>841
あいつらは Divide and Conquer の原則で動いている >>842
ほんそれ
敢えて混乱を残しておく方があいつらにとっては有利 VScodeでWindows上で動作するソフトを、AndroidやiOS用に変換するのは大変ですか?
また、変換・作成するのに、何を使うのがいいでしょうか? >>853
そのWindows上で動作するソフトが何で作られてるのか等を明確にしないと分からないんじゃね
Webアプリならそのまま使えるかもしれないしモバイル対応のフレームワーク使われてて楽できるかもしれないし1から作り直しかもしれない
WindowsのソフトがPython製なのかAndroidやiOS側をPythonで作りたいのか、変換作成ツールをPythonで作りたいのかも分からんけど ファイルをopenしたあとcloseするのにtry構文かwith使えっていうこと自体は納得できるんやけど
例外が発生した場合て何?ファイル操作してるだけでどんな例外が発生するわけ? ファイル操作自体の例外もあるけど、それを処理するプログラムでの例外なんていくらでもあるでしょ
例えば読み込んだデータが想定外な内容だったときにそれを適切に処理できなかったら例外になるわけだし なるほど
あとcloseしなかったところで結局メモリ上に残るだけなんやよね
サーバーとか業務用とか迂闊に再起動かけられないやつはともかく
個人のpcで使う分には再起動かければリセットされるからテストで適当に書いたやつ動かすときにまで気をつける必要はないってことでいい?
個人やから複数人が同時に同じファイルにアクセスすることはないわけやけどcloseしなかったせいでファイルの中身がバグる可能性はある? 個人PCでも再起動かけるのってかなりの面倒臭さじゃね そういうのは分かってる奴がやるもの
分かったつもりになってるバカの分際で安易に省略するもんじゃない
ヤケドでは済まんかも知れんぞ closeすべきものをしないで終了した時どうなるかなんてのはどちらかといえばOS寄りの問題だし
いい加減なことしてるのに保証してくれる人なんかいるわけがない
自分しか使わないやつなら勝手にすりゃいいじゃん readlines() の StopIteration は例外じゃないのか どこでどうやってどんな例外をキャッチするか考えるのが楽しいのに 何万アクセスでopenしてcloseしないと問題になることもある jupyter notebookの入力補完を使ってるんですが、文字を素早く入力すると勝手に確定されてしまいます
何か対策はないでしょうか ファイル処理ってかなり例外起こりやすい方のものだと思うけどなあ。
ファイルがない、パーミッションがない、書き込むのに必要なディスク容量が足りない、読み書き中にストレージとの接続が切れてそれ以上続けられなくなった、とか。 バージョンごとの新機能をまとめたページ教えて
type hintingあたりからついていけません クロージャーについてなんやけど
クロージャーて状態を保存するのがメリットみたいやけどこれって要はインスタンス変数とやってること同じやよね
いちいちインスタンス化してると冗長になるからクラス作るほどじゃない処理に使うってことでいい? 私の環境っぽいですね
文字が重複して入力されるんで困ってますがどうにもならないんで入力補完止めることにします >>877
同じことができるけど
関数として表現したいのか
オブジェクトとして表現したいのかの違い pyenv initが出来ないのですがどうしたらよいかわかりますか?
macにpyenvをインストールして.bashrcと.bash_profileに
パスを通す書き込みも終えています。
pyenv initをすると下記のエラーが出ます。
# (The below instructions are intended for common
# shell setups. See the README for more guidance
# if they don't apply and/or don't work for you.)
# Add pyenv executable to PATH and
# enable shims by adding the following
# to ~/.profile:
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init --path)"
# If your ~/.profile sources ~/.bashrc,
# the lines need to be inserted before the part
# that does that. See the README for another option.
# If you have ~/.bash_profile, make sure that it
# also executes the above lines -- e.g. by
# copying them there or by sourcing ~/.profile
# Load pyenv into the shell by adding
# the following to ~/.bashrc:
eval "$(pyenv init -)"
# Make sure to restart your entire logon session
# for changes to profile files to take effect. Catalina以降はzshだから設定ファイルがちゃうねんな 公式で用意されてるmacOS用のインストーラとそれについてるvenvでやったほうが楽でないかい? >>882
ありがとうございます。
bashではpyenvは使えないってことでしょうか?
>>883
envを調べてみます すみません
pythonで趣味のサッカーの統計とか機械学習で勝敗予想とかできたらなぁと思って最近始めた者です。if、for文を使った簡単なコード、エクセルの読み書き、スクレイピングなど一通り勉強して初心者脱出したかなぁくらいです。
機械学習の本を立ち読みすると結構難解で手が出しづらいのですが、こんな本がいいよとか、次何勉強するといいよあればとか教えて頂きたいです。 >>886
とりあえずオライリーの魚のやつが機械学習の入口に最適かなと思う 流石に古文書だろう。学校で習うなら良いかも知れないが 機械学習は理論むずいからな
最低限統計学と線形代数を講義で習ってないなら理論から入るよりもコードで動かしながらやった方がいいと思う
その場合本よりもネット上にある機械学習体験コースかな >>881
漏れは、Ruby on Rails で、
Windows 10, WSL2, Ubuntu 18.04, Docker でも、環境構築できるようになった。
VSCode の拡張機能、Remote WSL, Remote Container も使う
Linux側には、日本人が作った、バージョンマネージャーのanyenv で、rbenv, nodenv を使って、
ruby 2.6.6, node 12.16.2 を入れた
これでも依存関係が難しいのなら、Docker Compose を使う Ubuntu 18.04, anyenv では、~/.bashrc に、
export PATH="$HOME/.anyenv/bin:$PATH"
eval "$(anyenv init -)"
これだけで全言語、/home/ユーザー名/.anyenv/envs/ 以下に入る
which ruby
/home/ユーザー名/.anyenv/envs/rbenv/shims/ruby
which node
/home/ユーザー名/.anyenv/envs/nodenv/shims/node
これでも依存関係が難しいのなら、Docker Compose が良いかも CPythonのソースコードを一部ブログで引用したいです
公式の引用ルールを調べましたが特に定義は出てきませんでした
海外のブログなどはがっつりソースコードを記事にのせてるところもあります
一部分の引用なら特に問題ないという認識なんですが、この認識で問題ないでしょうか? 引用ルールってなに?ライセンス以外にそういうのがあるの? >>897
引用についての公式の見解のことです
調べましたが出てきませんでした
スタックオーバーフローなどのQ&Aも出てきません
たぶん引用が当たり前すぎるので、誰も質問もしていない感じでしょうか? >>898
「著作物/引用ルール」でググれ
一般常識の範囲だから、文化庁か法律家のサイトがおすすめ https://qiita.com/bremen/items/c5aa9446e73aa4bc1de0
ossライセンスについての記事
調べたらcythonはApache Licenseみたい
てかossなんやから引用するのは自由やぞ
引用したものを改変してプログラ厶組んだときにそれを公開しないといけない義務があるライセンスのやつがあったりするだけで引用はなんならまるっと全部コピペしても何も問題ない
そんなこと普通せんと引用元のURL貼るけど
あとは一般的な引用ルールに従って引用したなら引用したと明示すればok >>902
回答ありがとうございます
OSSの引用で訴えられたという事例もないと思うので、問題ないというのが一般的な認識ですかね 普通に個人がブログに貼るだけなら大丈夫
ソースコードを利用して作ったアプリで金儲けしてるのにライセンス違反でコードを公開しなかったりするとossだけど著作権違反だったかそれに近い感じのもので訴えられることはあると思う
あとはossと違ってソースコード開示してても著作権は保持してて再配布の禁止とかしてる場合もあるからそういうのの引用は知らん著作権者に尋ねるべきやと思う >>904
わかりました
一応python.orgに問い合わせてみます >>902
cythonじゃなくてCPythonな。別物 >>906
あほんとやすまん
ライセンスも違ったわ
まあどっちみちossやから今回の引用に関しては問題ないやろ pythonはpythonを商用利用した人にソースの公開を
要求してるでしょうか否 arr1 = [["北海道","札幌市"],["青森県","青森市"],["岩手県","盛岡市"],["宮城県","仙台市"],["秋田県","秋田市"],["山形県","山形市"],["福島県","福島市"]]
arr2 = ["秋田県","福島県"]
という2つの配列があったとして
[['秋田県', '秋田市'], ['福島県', '福島市']]という配列がほしい場合、
arr3 = []
for x in arr2:
....for y in arr1:
........if y[0] == x:
............arr3.extend([y])
以外にいい書き方ってありますか? [p for p in arr1 if p[0] in arr2]
でいけるかと 2要素ならsetより配列の方が速いんじゃね
Pythonの実装にもよるけど原理的にはそのはず >>909
arr1を連想配列にするわけにはいかんの? inの比較は2要素でもsetのほうが速いよ
このケースは都道府県のほうをdictにするから使わないだろうけど pathlibのis_dirとis_fileてありますけど
必ずどちらかですよね? どちらにもTrue/Falseを返すやつはいませんよね あ、実在パスをiterdir()したときの子パスの話です 子パスも含めてリンクとかでないならたぶんそれで合ってる is_fifoとかis_socketとかいろいろあることから察しろ 究極的にはファイルシステムやOSの実装に依存して、そんな変なものが未来永劫ないという保証はないだろうから、pathlibではそこは担保できないんじゃないかな >>918
windowsだと.linkはis_file()なんすよね
共有フォルダはdir
思いつく限り試したけど、何かあるのかなあと思って リンク先が存在しないシンボリックリンクは両方Falseになるけど実害はないんじゃね あーリンクってリンクファイルじゃなくて元を見てるのか
まあそりゃそうだわな numpyのインストールって、コマンドプロンプトにpip打ち込んで入れるのと
Anacondaで入れるのとどっちがいいの?
どっちも変わらない? Anacondaに決まってんだろ、それでだめならpip anacondaとかいう産廃使うのいい加減やめにしないか?
さすがにもうpoetryに移行しよう >>928
anaconda並みに安定したら使ってやるよ。カスを薦めるな。 質問させてください
Raspbian環境下(環境A)で
簡単なpythonプログラムを作って
python -m compileall aaa.py
を実行してpycファイルを作って実行したらちゃんと動作しました
もう一台のRaspbian環境(環境B)で同一のpycファイルを実行すると
./aaa.pyc
./aaa.pyc: 行 1: $'\003\363\r': コマンドが見つかりません
./aaa.pyc: 行 2: 対応する ``' を探索中に予期しないファイル終了 (EOF) です
./aaa.pyc: 行 8: 構文エラー: 予期しないファイル終了 (EOF) です
というエラーが出て動作しませんでした。
色々調べたのですが何が問題なのかわかりませんでした。
アドバイスお願いします
環境A、環境Bともに
Python aaa.py
で動かす分にはどちらの環境でもちゃんと動作しますが
環境Bではpycが動かない という状況です >>932
環境Bでpycファイル作って実行したら上記のエラーが出たので
環境Aからpycファイルコピーして実行してみましたが同様のエラーが出ましたね 環境Aから環境Bに.pyと.pycどちらもコピーしろ >>931
python __pycache__/aaa.pyc
なら動くんだろ
シェルスクリプトで実行してるんじゃ 初めまして、質問させてください。
windowsとmacだとコードが違うらしいんですが、具体的にどのように違うのか教えてるサイト等ありますか?
または変換してくれる何かがあったりしますか? >>937
質問が曖昧だからあれだけど
・プログラムの内容(コード)ではwindowsとMacで違いはない(どっちも同じ書き方で動作する)
・ただし両者で『文字コード』(デフォルトエンコード)は異なるので、
テキストファイルとかの読み込み/書き出し処理に、文字コード違いでエラーになる可能性はある
(文字コード周りの設定をちゃんと確認すればこの辺は大体何とかなる) >>938
返事ありがとうございます、MACで作ったコードをダウンロードしたんですが、私Windowsなのでそのままでは使えないと思っていました。
文字コードをもう少し調べてみることにします。ありがとうございました! x = 1
s = "var is {x}"
print -> "var is 1"
が欲しい。どうにかなりませんか
変数の文字列にf当てたいというか… f当てたいって知らんけど
こういうことなの
def printvar(var):
print('var is {}'.format(var))
printvar(1)
>>931
pycをbashで実行したら同じエラーがでた >>940
>>941と同じだけど s.format(x=1) 欲しいのは
x=1
s=f"var is {x}"
print(s)
なのか
汎用的なのにするための関数が欲しいのかと
思ったけど む?
すいません、言葉が足りなかった
sは事前定義でstr固定でいじれず、xだけがあとで動的に代入される感じです
例えばconfigparserの取得文字列に変数当てたいという >>938
ほかに
Linux系しか使えない命令
Macでしか使えない命令
WInでしか使えない命令
があるようななな・・・? formatでもf文字でもどっちでも構わんけど気分でごちゃ混ぜにするのはやめてくれ >>945
こんなのか
def a(x,y):
_def func(z):
__return x+y+z
_return func
f=a('12','34')
print(f('56')) f'{n}'が文字数も少なくて一番簡単でわかりやすいのにわざわざ.format()で書くのってなんか意味あるの? 変数展開を遅延させたいからだよ
遅延評価するにはf-stringだと関数でくくる必要があるのと
テンプレート文字列をコード上にリテラルで書く必要があるので
こういう用途の場合は今のところstr.format()かTemplateクラス使う logging以外は全部str.formatにしてるわ >>952
formatのほうがいいごく少数例をあげてるだけって感じ 3.4(Win XPラスト)のために、それ以降に登場したf文字列のような手法やメソッドは使わないようにしてる
subprocess.run() の代わりにsubprocess.Popen() でシコシコやったり… 脳が1ビットでf-stringかformatしか記憶できない人もいるんですよ python入れたらpipが付いてくるってどこのサイトにも書いてあるけど、コマンドプロンプトでpipのコマンドを打っても認識されない
'pip' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
どうすれば使える? 最初にpython -m pip install novasでインストールしないとダメなんじゃね >>957
windows使ってる?
自分も何故かpipだけ動かなくて焦ったけど、パソコン再起動させたら動くようになった
あとシェルコマンド(正式名称わからん、青い画面)で試してみたら? どこのやつをどのようにしてインストールしたのか
公式windosインストーラー版ならAdd Python 3.x to PATHにチェック入れずにインストールするとpath通ってない >>957
インストール・ルートと、ScriptsディレクトリをPathに加える
%ProgramFiles%\Python39
%ProgramFiles%\Python39\Scripts Windows のPowerShell では、環境変数PATH は、; で区切り。
$env:Path.split( ";" )
Python を含むPATHなら、
$env:Path.split( ";" ) | Where-Object {$_ -like "*python*"}
Linux の環境変数PATHなら、: で区切り。
echo $PATH | tr : "\n" windows公式ならpath通すやつにチェック初めからついてる
わざわざ外すとも思えんので取り敢えず再起動してみよか %USERPROFILE%\AppData\Roaming\Python\Python38\Scripts
これも場合によっては必要(というかこっちをメインにすべき)。
Windowsの場合は、pip使うときに--userを付けないと問答無用でPython本体の方に入れようとするので。 >>964
ユーザー変数に追加するなら
%APPDATA%\Python\Python39\Scripts
でもおk 優しい人おおいな
サンクスコ
結局>>960のとおりにインストールし直した getter(target):
__return eval("{target}_var.get()")
関数内で使われる(ユーザー入力と関係ない)evalですが
やっぱり避けるべき? こういうのは別にいい? クラス変数を変更しようとしたときエラーを吐かせたいんですけど
どうするのがいいでしょうか
現状、
class A:
_# 変更しないでください
_TEST = 100
a = A()
みたいにしています。
できれば、self.TEST=、a.TEST=、A.TEST=
それぞれで変更しようとするとエラーを吐かせられたらなと。
前半2つはセッターでできましたが、結局A.TESTで変更できてしまうし
そもそもクラス変数を変更”してしまうミス”にそこまで注視しないといけないのかな?とも思い
変更しないよう注意喚起・自粛するだけに留めておくのがいいのかどうか迷っています >>968
一番手っ取り早いのはメンバ変数の頭に__(アンダースコアを2つ付けて)
プライベート変数扱いにする
詳しい書き方とかはググると出てくるけど、この辺かな
ぶっちゃけ『注意喚起する』っていうのは大体地雷化するから、正当な方法で実装した方が良い
https://docs.python.org/ja/3/tutorial/classes.html#private-variables
https://www.headboost.jp/python-property/ >>969
なるほどそういう慣習があったのですね ありがとうございました >>971
あ、ほんとうですね
でもうちの場合は中で微妙に処理が異なるので分岐がいるのです(getする範囲が違うとか)
evalないとif連打か辞書使うとかになるけど、それでも回避推奨なのかなと思って 検討すればいいんじゃ
自分で使うだけなら問題ないし
ネットでつながっても隔離されてれば問題ない
検討が面倒なら使わないと決めたほうが
楽な場合もある >>972
getattrとかリフレクション系のビルトイン関数使えば十分じゃない?
tkinterならそれも必要無いと思うけどね >>973
python関係ないけどevalて双方向通信のときにヤバいんでやめましょうね、だけですよね evalを使う言い訳を探すくらいなら
evalを使わない書き方を学んだ方が良い 書けるけどゴチャつくって話でしょ
しかも別に対話しないなら使ってもいいしな どうでもいいけど上見たらくだらない質問の略だったのか
python蛇だからくだを巻いてるスレッドの略やと思ってた print(hoge.data[0][0][0][0])
を実行すると、値ではなく、
<NdArray(()) at 0x1c7b360b960>
が返ってきます。
このインデックスにある値を表示する方法を教えて下さい。
hogeは((1, 1, 8, 8))のNumpy多次元配列とのことで、
このprint文の直前で
hoge.data.zero()
とやっているので、すべての要素はゼロになっているはずです。
うまく表示できると値が「0」と表示されるはずです。 getter(target):
__return getattr(self, [f'{target}_var').get()
__return locals[f'{target}_var'].get()
__return globals[f'{target}_var'].get() getattrって存在すら知らんかった
これ本来はどういう用途のためにある関数なんだ? tkinterならglobalgetvar()使うか
コールバック登録時にクロージャで変数をキャプチャしておけばgetattrは不要 >>982
テスト用に便利
>>> for x in dir(obj):
... print x, ':', type(getattr(obj, x))
情報を得たり
クラス内の全テスト用関数実行するとか
関数の増減気にしないですむ Pythonにおけるgetattr()の利用方法を現役エンジニアが解説 getattrの使いどころって、文字列としてメンバ変数名を扱いたい場合くらいしかない? 業務でリフレクション使ってるコードあったらrejectするけどな
ライブラリは仕方ないとしてギリでアノテーション もう3.10が出るっていうのに、アノテーションを忌避する理由もないだろ。 通常コード内のリフレクションはダメ
ライブラリやアノテーション内のリフレクションはOK
かな このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 94日 12時間 44分 54秒 5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php レス数が1000を超えています。これ以上書き込みはできません。