◎正当な理由による書き込みの削除について: 生島英之とみられる方へ:
Pythonのお勉強 Part70 YouTube動画>1本 ->画像>11枚
動画、画像抽出 ||
この掲示板へ
類似スレ
掲示板一覧 人気スレ 動画人気順
このスレへの固定リンク: http://5chb.net/r/tech/1677856680/
ヒント:5chスレのurlに http://xxxx.5chb.net/xxxx のようにbを入れるだけでここでスレ保存、閲覧できます。
↑スレ立てる毎に減るので、減ってたら3つに補充すること。
・当スレにRubyのソースコード類を書くことを禁ず
・Ruby等、Pythonではないプログラミング言語での回答類・質問を書くのも禁止
・「Ruby では」「Rubyでは」「Rails」正規表現→「^クソチョンw$」をNGワード登録推奨
・エラーを解決したいときは、かならず
エラー文(勝手に省略orスクショうp等の横着禁止)と
おま環(Pythonのバージョン番号+OS名とバージョン+IDE名)を書け。
★Pythonのソースコードを5ちゃんに直貼はインデントが崩壊するので、
↓等のコードうp用サイトに貼ってきてくだしあ。(スクリーンショットをうpる「横着」禁止)
https://techiedelight.com/compiler/ Run Code機能あり。
http://ideone.com/ デフォ設定がCなので、Pythonするには言語種選択ボタン押下がピコ手間かも。
http://pastebin.com/ まずまずシンプル。
http://dpaste.com/ とてもシンプル。消えるまでの日数は十分長ーく指定のこと。
◇Pythonオフィシャルサイト http://www.python.org/
◇Pythonドキュメント https://docs.python.org/ja/3/
◇まとめwiki http://python.rdy.jp/
VIPQ2_EXTDAT: default:vvvvv:1000:512:: EXT was configured ●関連スレ● 自称初心者は↓へ
【まず1嫁】くだすれPython(超初心者用) その58
http://2chb.net/r/tech/1662514433/ 〇前スレ〇
Pythonのお勉強 Part69
http://2chb.net/r/tech/1669293584/ 次スレの建立は
>>985が挑戦する。(980通過して24h後も落ちなくなった)
### END of TEMPLATE ### ?
VIPQ2_EXTDAT: default:vvvvv:1000:512:: EXT was configured
気に入らんスレにわざと糞を誤爆していくスタイルが流行してるのか
>>985 >>1先頭のコマンドが消えてるので忘れずにお願いします
!extend:default:vvvvv:1000:1024
!extend:default:vvvvv:1000:1024
!extend:default:vvvvv:1000:1024
↑スレ立てる毎に減るので、減ってたら3つに補充すること。
pytorchかTensorかどちらがおすすめですか?
目的はマルチグラボやりたいです。
超ザックリ説明すると自分で色々アルゴリズム組んで試行錯誤するのがpytorchで出来合いのモデルを使ってパパッと動かすのがTensorflowだから用途で使い分けろ
なんでこうなるんだよ
なんで描き直しても期待する動作になんねーカスって思ってたら
def __lt__が逆になってた
ウンコ
>>10 そうか…?自分はtfから入ったから、自分でなんか書くときはtfで人の作ったコードを試すときはtorchだわ…
tkinterで配置したボタンをマウスで左クリックした時の挙動について、
command=test_func を使った場合は、
ボタンを左クリックした時に、ボタンが押し込まれたような表示になる。
これを少し改造して、①左クリック②右クリックのそれぞれで違う処理を行わせようとした時に、
---------------------------------------------
def test_func(event):
if event.num != 3:
# ②右クリックの場合のみ行う処理
~~~ # ①②共通の処理
btnExeAll.bind('<ButtonPress>', test_func)
---------------------------------------------
例えばこんな感じで書くと、
ボタンを押した時に、左クリック右クリックのどちらでも、ボタンが押し込まれたような表示にならない。
左クリックした時だけでいいので、command=test_func と同じようにボタンが押し込まれた表示にする方法があったら教えてください。
>>15 右クリックの場合はevent.numが3になるから、
コードの最初のコメントは「②(右クリック)以外の場合のみ行う処理、が正しい。
Tk/tkinter使ったことないんで参考にならないかもしれないけど…
WebフロントエンドとかGUIプログラミングでよくあるんだけど、
多くの場合、ボタンをクリックしたことになるのは、ボタン内でマウスボタンが押下された瞬間じゃなくて、マウスボタンが離された瞬間だと思うんだよね。
んで普通にclick=で関数を指定したときは、ボタン押下でボタンが押された風に表示を変更し、
ボタンが離された時にボタンが離されたふうに表示を変更し、さらに離されたときにマウスカーソルがボタン内にあれば
クリック扱いにして関数を実行する、というようなbindをしてると思うんだよね。
だから、buttonpressのイベントハンドラをそのまま上書きするとボタンの挙動としては望ましくないことが多く起きるのではないかなー
Pythonのような完成度の高い言語を学習している人が羨ましい
わざわざpythonでGUI作ろうとする理由は学習コストが低いからだよなと思ったけどtkinterは学習コスト高すぎるだろ
俺ならunityかvcで書く
tkinter使ってみたらすんごくサイズ感覚つかめないんだけど
これ難しくない…
pysideとかの方がいいわ
ウィジェットの配置には3つの方法がある
(1) .pack()...縦か横1列に配置する(1次元配置)
(2) grid......格子状に配置する(2次元配置)
(3) place.....位置(座標)を指定して配置する
>>19 ヒントありがとうございます。
btnExeAll = tk.Button(root, text='○○○')
btnExeAll.bind('<ButtonRelease>', test_func)
tk.Button()の中に書いていた「command=test_func」を削除して、
ButtonReleaseにtest_funcをbindさせることで意図した動作になりました。
マウスボタンが押下された段階では通常のtk.Button押下時の表示(ボタンが押し込まれた表示)で、
そのマウスボタンが離された瞬間にtest_funcが呼ばれるイメージですね。
>>15 tkinterのボタンを押した時に、ボタンが押し込まれたような表示になるのは、ButtonPressイベントが発生したときのデフォルトの挙動です。ButtonPressイベントは、マウスのボタンが押されたときに発生するイベントであり、ButtonReleaseイベントと共にボタンのクリックイベントを表します。
通常、ボタンが押し込まれたような表示になるには、ButtonPressイベントでその状態を設定し、ButtonReleaseイベントで解除する必要があります。しかし、commandオプションを使う場合は、ButtonPressイベントで何かしらの処理を行うことができません。
そこで、ButtonPressイベントで特定の処理を行い、その後にcommandオプションで指定した関数を呼び出すことで、ボタンが押し込まれたような表示にすることができます。具体的には、以下のようなコードになります。
def test_func(event):
if event.num == 1: # 左クリックの場合のみ行う処理
btnExeAll.config(relief=tk.SUNKEN) # ボタンを押し込んだ表示にする
# ②右クリックの場合のみ行う処理
# ①②共通の処理
btnExeAll.bind('<ButtonPress>', test_func)
btnExeAll.config(command=lambda: None) # commandオプションを無効化する
このコードでは、ButtonPressイベントで左クリックの場合にボタンを押し込んだ表示にし、右クリックの場合には何も処理を行いません。また、commandオプションを無効化するために、空のlambda関数を指定しています。これにより、ButtonPressイベントでの処理とcommandオプションで指定した関数が重複して実行されることを防ぐことができます。
なお、ボタンを押し込んだ表示を解除するには、ButtonReleaseイベントでボタンの状態を元に戻す必要があります。以下のように修正することで、ボタンを押した時にボタンが押し込まれた表示になり、離した時に元の表示に戻るようになります。
def test_func(event):
if event.num == 1: # 左クリックの場合のみ行う処理
btnExeAll.config(relief=tk.SUNKEN) # ボタンを押し込んだ表示にする
>>29 ありがとうございます。
よく読んでコードに反映させたいと思います。
colab上で生成した多数のファイル(50KB程度で3桁くらい)を順次ダウンロードしようとしたんだけど
colabのセル中に
---
fori in range(len(ファイルパスのリスト)):
files.download(ファイルパスのリスト[i])
time.sleep(10)
---
と書いても
sleepの10秒中に「ブラウザのダウンロードのリストに入る」わけではなく
このfor文が終わってセルが終了したあとで、全部いっぺんに「ブラウザのダウンロードのリストに入る」みたいなんだよね
これってどうにかならないかな?
colabの仕様だからどうしょうもない?
50行で書かれたサンプルコードを500行にして実行時間1/20にした
達成感ある
ある程度期間開けてパッケージ化する方法調べてると、調べるたびに新しい方法出てる気がする
今回はsetup.pyなくても"pip install -e ."できるようになってた
setup.cfgとpyproject.tomlでも色々違うし覚えるの大変って言うか、まぁ覚えてはないけど
Googleコラボプロプラスに入ってる方いますか?コラボプロの良さを教えてね!
機械学習系の本で簡単に解説される程度にしかPythonのことを知りません
今後Pythonに触れるに当たり、見たことのない演算子や文法等を見かけた場合、簡単に調べる方法とかってありませんか?
(わからないことが出てくるたびにググれば良い気がするものの、ググるための用語にたどり着けない気がしてしまいます)
gpt4を使いpythonで処理をしてる人は多いよね。ならば先人の知恵を使ってそれを真似した方が効率的だよね。
HTMLならどうだろう?
>>32 そういうの脳汁ドバドバでるよね
ネットに公開されてるサンプルコードだったら教えて欲しい
俺は1/50を目指す😤
Pythonのdatetime.utcnowの精度ってどのくらいでしょうか?
xs = [1.0,2.0]
c = complex(xs)
だとエラー出るけれど、人のコード読んでいたら
c = complex(*xs)
だと普通に通ると知った。
ちゃんと調べたいんだけどこの機能ってなんていうんでしょうか?
ドキュメント嫁
まあ俺も覚えてないけど
少なくともlispで50年以上使われてるこの記法の由緒正しい呼び方splicing(,@list)のはず
引数リストのアンパックというんですね。
ありがとうございます。
dosでダウンロードして、vscodeでやろうとしてらパスが入ってないとか言ってできません
パスってWindowsの全てのフォルダに通せないんでしょうか
条件判定でandで複数条件を入れた場合
Falseが確定した時点で以降の判定は行われないみたいなんだが
1つ前の条件がTrueじゃないと次の条件式がエラーになる条件を
1行で済ますのは一般的に有り?
>>48 あり
len(val) > 0 and val[0] != 0とかはよく書く
個人的な好みを言えば、Err1と2は区別する方が好き。なので、andで1行で済まさない。
if len(val) > 0:
_if val[0] != 0:
_else:
__Err1
else:
_Err2
>PythonでC/C++に匹敵する実行速度を実現 米MITなどコンパイラ「Codon」開発
これだよこれ
昔っからどんな言語でも、コンパイラさえ優秀に作ればいいって思ってたんだよ
言語でやれること縛られたりデメリットあるのはおかしいんだよ
同じCPUで動かすんだからコンパイラが頑張れよっての
変数の型やスコープをコンパイル時に解決出来る部分は速く出来そうだけど
実行時解決の部分はJIT等に頼らざるを得ないし
Pythonの旨味は後者が多くを占めるからコンパイラが頑張れば良いだけの単純な話では無い気がする
C++でも実行時解決な処理が多いコードはそれなりに遅いし
>>54 そんな言語が既にあるんだね
教えてくれて有り難う
当面は互換性の面が怖くて業務で使うのは不安があるけど普及してくれると嬉しいね
c3dcoord = (0,0,0)
x,y,z = c3dcoord
x += 1
y += 1
z += 1
print(c3dcoord)
=>(1,1,1)
としたいんですけど、アンパックした変数
x,y,z = c3dcoord
って参照にすることってできないんでしょうか?
すいません。
c3dcoord = [0,0,0]
でした。タプルにしたらそりゃ変更できないです。
p = (3,4)
x,y = p
x+=1
p=(x,y)
print(p)
=>(4,4)
教科書でPython を使うに至った経緯って分かる?
もうPython 一択って塾の子供に言いたいけど、
変な理由でPython に決まったら嫌じゃん
新しい歴史教科書をつくる会が和製Ruby推しとか、そんな事でもあるのだろうか...
流行ってる、文法がシンプルで読みやすい、ライブラリが豊富
こんなとこだろ
大学のCS入門とかだとPython以外ではJava, Cが多いのか?
>>59 microPythonとか子供がおもちゃで遊ぶのにちょうどいいのがあるからな
>>59 教科書のマーケティング的な理由と元ネタになる講義や教科書本が豊富で作るのが楽だからでしょ
中高生がプログラミングに入門する際の有力な選択肢の筆頭と言う程度ならいいだろうけどPython一択とまで言っちゃうのは言い過ぎ
特に教育者が「〇〇一択」という悪い思考の癖を子供に植え付けるのは良くないぞ
子供には断定的な方が分かりやすいの
含みを持たせるとか抽象的な理解は難しいの
で、断定してPython 使わせたけど
裏側では変な政治家がハニトラで
Pythonに決めました。だったら嫌じゃん、
だから断定して教える前に理由を知りたくなったの
Python とJava がいいよとかって教えると
どっちも中途半端に覚えてしまうの
だからひとつだけ断定的に興味を持たせるの
私だけの意見で押し付けずにみんなの
意見を聞いて参考にしてるでしょ?
Google Collaborates で pyinstaller 使ってexe ファイル作成完了通知出てるんだけど、肝心の完成したexe ファイルがgoogle drive の何処にも見当たりません
作業フォルダにある筈なのに
もしかして:Google Colaboratory
>>68 子供の年齢や頭の良さやプログラミングを学びたい目的によって
どういう言語がいいかは変わってくるんだから
そこを無視して勝手に選択肢を限定するのはダメだろ
それぞれの状況にあった選択肢を提示しつつその中で自分の考える一番のおすすめと理由をあわせて伝えたほうがいいぞ
共通試験目的限定ならDNCLの範囲だけなので命令型で書ける普通の言語なら基本的にどれでもいい
しいて言えばインデックスがゼロベースじゃない言語はやや不利
バックエンドエンジニア : 80万円
Ruby : 90
Python, Go : 85
レガシー
Java : 80
ただし、Pythonはウェブ開発ではなく、AI・機械学習。
Javaは給料の中抜き構造があるので、
リモートワーク・副業など、モダンなバックエンドはRuby
一番初めに覚える言語なんて極端に難しかったり非実用的だったりする言語でなければなんでもいいだろう
一つの言語に拘ってる奴は結局モノにならないよ。
Rubyは既に終わってる
これから学ぶのは愚の骨頂
エクセルとVBAは理想的
セルをメモリ空間に見立てて好きなとこに数字入れて演算させる
全てのプログラム言語がセル内包してりゃいいのにな
変数初期値もセル内に記述
プログラムはアルゴリズムだけ記述するだけっての
>>62 1年次教養の純粋なCS/ITリテラシならPythonがLisp/Schemeを駆逐しつつあるな、数値計算ではFortranとMatlab(Octave),Python+scipy,Rが三強
東大の進振り後の理数系シラバス見るとFortran一強だけど
Fortranといっても今は2008水準が普通だから、ライブラリ無しの素でnumpyより配列操作が短く書けて強力、素で十分なので環境構築も楽
最近pipが検索出来なくなったり不安定なのが解決されれば、やはり最強エコシステムを持つPythonが完全覇権になるのは時間の問題だと思うが
90年水準(33年前)だけどnumpyとfortranの対応表、完全に一致
https://www.fortran90.org/src/rosetta.html そもそもmatlab(octave)/Fortran書きがPythonでもfortran風なコードを書けるようにするのがscipy/numpyの目的かつ求心力だから、どっちか書いてる人なら互いに移行するのは容易なんじゃないかな
多分うわべだけなら数日
numpyの核はFortranコードをコマンド一発でimportできるPythonライブラリにコンパイルするf2pyモジュールだから、Pythonで本格的に数値計算や配列プログラミングやるならFortranも多少学ぶべきと思う
すみません、勉強したてで教えてほしいです。
CSVファイルに機器情報が入っています。(以下参照)
そのCSVファイルを読み込んで、機器情報クラスに値をリストに格納していく処理をしたいと思っています。
リストに格納自体はできているのですが、クラスオブジェクトの値を出力すると、下記のようになぜかNoneと表示される部分があります。
1
router
192.168.1.1
admin
None
2
switch
192.168.1.2
admin
None
ソースコード
https://pastebin.com/1bkPJdVY CSVファイルは以下のような構造になっています。
1行目はヘッダーです。
id,device,ipaddress,password
1, router, 192.168.1.1, admin
2, switch1, 192.168.1.2, admin
3, swtich2, 192.168.1.3, admin
4 ,accesspoint, 192.168.1.1, admin
print_device_list()メソッドで、自信のid,device,ipaddress,passwordの4種類を表示しているだけなのですが
何故5つ目にNoneという値が表示されるのでしょうか。
教えてください。。。
>>86 最後の行が間違い
device_info[num].print_device_list() の結果を print してしまって None が表示されてる
>>89 なるほど…
確かになんのためにメソッド呼び出したんだっていう最後のプリントですね…笑
ありがとうございます!
スクレイピングするプログラム作ったけどロリポップのサーバーにアップロードして運用しようとしてるけど上手くできない。
みんなローカルでやってるのかな?
常時パソコンオンならそれでいいかあ
User-Agent は真面目に描いた方が良い
cookie 対応は必須
あとは逮捕されんように適度な wait
ゲームのキャラクターをクラス化するときに
class Player:
def __init__(self, hp, mp, defense, speed):
self.hp = hp
self.mp = mp
self.defense = defense
self.speed = speed
def attack(self, target):
# 攻撃処理
pass
こんな感じでやると思うけど
例えばattackの引数の部分って
(1)相手のキャラクターオブジェクトを入れる
(2)キャラクターのHPなど、使うパラメーターだけ入れる
のかどっちが良いのだろう
(1)の場合って
#攻撃処理 の部分でtarget.counter(self)とかできて便利そうだけど
パット見、内部で何やってるかわかりにくそう?
(2)の場合だと
attackの返り値を、攻撃され後のHPを返すとかにすると
player2.hp = player1.attack(player2.hp)
みたいに冗長感でる
(1)の方が、おそらく他のメソッド追加したときに基本は引数targetの一つで修正しやすそう
でも、もっとオブジェクト化してPlayerクラス以外の戦闘システムクラスとか作れば
player2.hp = player1.attack(player2.hp)の部分も見やすくなるし、より具体的なメソッド名にすればいい
どこまで分割して設計するかが難しいな・・
あと(1)でやってしまうと、あとでtargetの仕様が変わった時に
target引き継いだメソッド全部チェックしないといけないような
>>94 > User-Agent は真面目に描いた方が良い
> cookie 対応は必須
> あとは逮捕されんように適度な wait
ありがとうございます!
>>95 自分だったら敵も味方も同じクラスにして、バトルマネージャークラスに引数1と引数2で渡して戦闘させるかな
>>95 このような場合、引数に何を渡すかはプログラムの設計や実装によって異なります。一般的には、攻撃対象のキャラクターオブジェクトを引数に渡すことが好ましいでしょう。
これは、攻撃処理に必要な情報がキャラクターオブジェクトに含まれているためです。たとえば、攻撃力や防御力、素早さなどは攻撃側と防御側の両方に必要な情報です。また、攻撃によってダメージが発生する場合、キャラクターオブジェクトに現在の体力値が含まれているため、攻撃対象の体力を別途渡す必要がなくなります。
ただし、引数にキャラクターオブジェクトを渡す場合でも、攻撃側のプレイヤークラスのメソッド内で、攻撃対象のキャラクターのオブジェクト内部の状態を直接変更することは避けるべきです。攻撃処理は、攻撃側と防御側のキャラクターの両方のオブジェクトの状態を適切に変更する必要があります。
このような設計を行う場合、戦闘システムクラスなど、別のクラスを導入することもできます。攻撃対象のキャラクターのオブジェクトに対して、攻撃処理を実行するためのメソッドを定義し、戦闘システムクラスから呼び出すことができます。こうすることで、攻撃処理に関連する情報をまとめて扱うことができ、プログラムの保守性や拡張性を高めることができます。
@AIBoom_net 日本医師国家試験にGPT-4が合格
https://doi.org/10.48550/arXiv.2303.18027 ワシントン大・札幌心臓血管クリニック・東北大・イエール大学の研究者グループによる報告。 過去5年間にわたる試験で複数の大規模言語モデルをテストした所GPT-4は5年間全てに合格したとのこと。日本語においてもLLMの可能性を示唆。
プログラム全くの初心者だけど
最新がPython 3.11ってWikiに書いてあるけど
3.9の本で勉強するのはやめたほうが良い?
3.9もらったけど新しいの買うべきかな
ちなみにVscodeでインストールできるマイクロソフト提供の現在のバージョンは3.10.10
まだ大半の人が3.9以下の機能でしかコーディングしてないから学習上は問題ないよ
導入は最新にしといて便利な3.10や3.11の機能を見つけたら取り入れていけばいい
>>102 基本的には大丈夫だぞ!
分からなかったらココで聞いてくれれば答えるよ (規制されてなければ)
(普通は3.9の環境で学習して最終的に最新使うんだよ。Pythonの入門書なら仮想環境の作り方ぐらいのってんだろ)
良いスクレイピングはサイト内移動は直接リンク指定よりクリックさせたほうがいいですか?
複数のDataframe型をひとつのリスト型にまとめたとき、
その変数(リスト)を出力・ファイル保存する方法、
保存したファイルを再び読み込んで元のリスト変数を取り出す方法、
を教えていただけないでしょうか?
to_parquetが使えるかと思ったら、リストには使えないようで、困っております
pythonにはmatlabのmatファイルのようなものは存在しないのですね?
>>112 リストのままは行けないから中身を回しながら to_{任意の形式} する
読み込む時も同じ
>>112 リストをpickleファイルに保存する方法あるけどそれ使えないでしょうか
>>112 DataFrameのメソッドでシリアライズしたいならリストの代わりにネストしたDataFrameにすれば可能
リストを使いたいならpickle.dump/load
でもDataFrameごとに個別にシリアライズしたほうが扱いやすくていいと思う
intとNoneを返すfunc()の型ヒントはどう書くの。
Noneを返さない実装は少ないと思うが、そんな型ヒント例がない。Noneを省略でintのみ?
def func() -> int:
>>116 Optional[int]
Python3.10以降なら int | None
型ヒントってエラーチェックもしてくれるようになる日はいつくるの
>>117,118
ありまとう。そのURLから辿った先の peps.python.org/pep-0484/ に例あった。
def lookup(self, name: str) -> Optional[Node]:
>>119 ダックタイプは捨てないから公式で強制は来ない
TypeScriptみたいになる可能性はある、dataclassに型指定がデフォルトで組み込まれた次のステップとして基本的なバリデートがライブラリからインスパイアされて入る未来はあるかもね
基本的にはmypy, pyright, pydanticあたりで対応
ABCモジュールで抽象クラスを作るメリットが全然ピンとこない・・
https://magazine.techacademy.jp/magazine/19310 継承して子のクラスでsayHello上書きすればいいだけじゃないの?
https://qiita.com/Akatsuki_py/items/3e35ba326ff254a6790d これもattack上書きすればいいだけじゃないの?
→ 共通の変数やメソッドをたくさん持っていることが多いので、手間が省ける
?
継承するだけなのに手間ってある?
AIに聞いてみた
ようは
> 抽象メソッドを定義することで、サブクラスで実装する必要があることを明示的にすることができます。
> 抽象クラスを継承したサブクラスは、抽象メソッドを実装しない限りインスタンス化できないため、クラスの使い方が明確になります。
> 例外を発生させることで、抽象メソッドが実装されていないことを明示的にすることができます。
ってことらしい
ようは例えば、サブクラスを他の開発者に投げていたとき、オーバーライドすべきメソッドをエラーによって明示できる
ってこと・・?
>>121 なるほど
今のところ何かしらライブラリに付属しているバリデーション機能とか使ってるけど
そのライブラリ使ってないときは別の方法で、みたいにしてるから揃えたいなぁと前から思ってた・・
・親クラスHumanを書く開発者A
・そのHumanを継承する子クラス(犬クラス、猫クラス)を書く開発者B、C
・犬、猫をインスタンス化して機能を実装する開発者D
よくよく考えると、たしかに開発者B、Cは実装し忘れが無くなっていいかもしれない
でも親クラスのabcモジュールで抽象化されたメソッドに変更があった場合
開発者DがsayHello実行したら、子クラスで上書きされたsayHelloが実行されるのでは・・?
だったら最初から上書き前提で書いたほうが、
と思わんでもないのですが
>>124 なんの入門書みてるのか分からんが継承なんてPython関係なしに非推奨の流れだから使わなくていいよ
Humanを継承する猫なんて例えとしても論外
ライブラリやフレームワークなどの提供側で有用なケースは多いけど使う側のユーザーが手を出すケースはほとんどない、初学者ならなおさら
問題集おすすめしてほしい
ついにこの日がきた 姪っ子がPythonと書かれた教科書を持って帰ってきた
姪っ子は数学に時間がかかりすぎてるので、代わりにPythonを勉強して教えてやりたい
自分はずーっと食わず嫌いでPythonから逃げてたんだが、いい機会なので、高卒レベルくらいに使えるようになりたい
なお、日ごろはC++がちょろっと【しか】使えない
何か気持ち悪いな
あと、問題集とか聞いてるやつ初めて見たかもしれん
オンラインの学習サイトすぐみつかるからそこでやればいいよ
>>126
Humanは間違えました、Animalですね
>継承なんてPython関係なしに非推奨の流れ
>ライブラリやフレームワークなどの提供側で有用なケースは多い
これはどういうことでしょうか
いわゆる委譲やコンポジションの話ですよね
なるべく委譲使えるところは委譲で、継承と使い分けする、という話ではなく
>非推奨
ということは、どのような場合にも継承を使わずに記述するという意味でしょうか?
Animalの例で言うと
class Dog:
def __init__(self):
self.animal = Animal()
dog1 = Dog()
dog1.animal.say()
みたいな? 継承のデメリットって
例えばBirdクラスを作ったときに
Animalクラスにflyメソッド作りがち
つまり犬と鳥との間で、共有メソッドではないflyメソッドを定義しちゃった
みたいな問題かな、と想像するのですが
そういう場合のデザインパターンってあるのでしょうか
runメソッドもflyメソッドもまとめたmixin継承して、飛ぶ系のAnimalクラスもうひとつ作るとか
でもこれだと結局は継承しちゃいますよね
本質的に難しい問題だね
動物の中でも鳥、こうもり、昆虫などが飛べるけど
鳥でもダチョウとか飛べないし
カイコも飛べない
軽傷を使うと比較的ましというだけだね
うまくモデル化できてるならよくて
直感的じゃないのに無理やり適用するのが悪いってだけ
犬にfly投げて能力不足で失敗ともできるし
AnimalクラスにBoolean型のflyableってメンバ変数を作って
flyメソッドを呼び出したとき
Falseなら何もしない(または何かエラーを返す)Trueならflyの内容を処理するっていうのはダメかな?
空飛ぶDogとか飛べないBirdとかが欲しくなっても作れると思ったんだけど…
30代Pythonクソチョン男は強姦魔の犯罪者です!
あなたの近くにいます!
父母と祖父母の戸籍謄本を提出させましょう!
分類というのは共通項を括りだしたものだから、どっちかしか持ってないものを持たせるのはおかしいんじゃない
moveやactionみたいな抽象的な仮想関数を作って派生先でrunやflyを呼び出せば良さそう
>>135 その発想を発展させるとobjectクラスにflyメソッドとflyable持たせればいいじゃんってなるから
継承の真逆の考え方でしょ
Animalとして管理したい属性にflyableがあるんだから別に良いと思うけどな
というか無かったら指示できない
>>139 ある門があって飛べる動物のみ入れる、みたいなのを作るときにflyableで判定するって作り方が簡単そう
flyableという属性が実行時に変化するものではなくて型によって決まってるものなら
Gate.accept(target: Flyable)としておけば実行時に問い合わせなくても静的にチェック可能
異なる種類の”門”が追加されるたびにベースクラスに~ableなフラグを追加して
継承したクラスのコンストラクタやそれを呼び出してるコードをすべて変更する必要があるから
それが望ましい設計となる状況はかなり限られてる
突き詰めていくとanimalなんて要らなくて振る舞いやらインターフェースだけでええやんとなり
動物とは何かという問いに
numpyのarrayで内包表記を使う方法ってありますか
リスト内包表記をnumpyに渡してるサンプルは見つかりましたが、これはまずリストを作ってそれをnumpyに渡してるだけですよね
>>113-115 お返事ありがとうございます!
pickleがよさそうです。
>>144 numpyの速さのメリットが失われる場合があるから
numpyに合わせた方が良いよ
jupyterじゃないならどっちみちpycなるんやからそんな変わらんやろ
ProcessPoolExecutorを使ってマルチプロセスで複数処理を動かすとき、あるプロセスから別プロセスの処理状況を知る、または知らせるような事って出来ますか?
今はManagerによるプロセス間共有変数にプロセスの処理状況を格納してフラグとし、他のプロセスはその変数の値が特定の値になるまでtime.sleepとwhileで待機しています。
スマートではないように思うので、例えば
別プロセスに対して「処理を再開してもいいよ」と通知したり、
別プロセスのインスタンスの関数を実行したり...
といった事が出来ればと思ったのです。何か良い方法はないでしょうか。
>>146 リスト内包表記を
> numpyに合わせ
るというのはどうするんでしょうか?
whereとかmaskで書く
>>148 awaitに書き直すのが一番スッキリすると思うけど書き直すのが面倒ならcondvar
PythonでPyGameを使ってゲームが作れるようになりたいです。
Pythonのソースコードをすらすら書けるようになるには、どうしたらいいですか?
dictionary型ってどういうときに使うの?
全然ありがたみがわからない
適材適所だから配列だけで困ってないなら知らなくてもいい
配列の探索はみつかるまで最悪全要素しらべる必要があるけど
辞書のキーは比較的短時間で探せる構造になってたりはする
WebアプリのAPIでクエリとかレスポンス返すときにJSONで扱いたいときかなぁ
json.dumps/loadsであんまり意識しなくてよくなる
import json
json_str = '{"a":10,"b":20,"c":true,"d":null}'
d = json.loads(json_str)
print(type(d),d)
json_str = json.dumps(d)
print(type(json_str), json_str)
#<class 'dict'> {'a': 10, 'b': 20, 'c': True, 'd': None}
#<class 'str'> {"a": 10, "b": 20, "c": true, "d": null}
あとは引数に展開するときとか?
def deco(a,b=0,*args,**kwrgs):
print(a,b)
print(args)
print(kwrgs)
a=1
b=2
args=[3,4,5]
kwrgs={"x":11,"y":22}
deco(a,b,*args,**kwrgs)
#1 2
#(3, 4, 5)
#{'x': 11, 'y': 22}
googleアカウントとか python じゃないけど辞書型だよ
メールアドレスをキーにしてバリューはそのアカウントの情報
配列よりも高速にアクセスできるし
重複チェックも容易
Ruby では、辞書はHash
require 'json'
# JSON では、nil ではなく、null を使う
json_str = '{"a":1,"b":"bb","c":true,"d":null}'
puts json_str #=> {"a":1,"b":"bb","c":true,"d":null}
p json_obj = JSON.parse( json_str )
#=> {"a"=>1, "b"=>"bb", "c"=>true, "d"=>nil} # nil になる
p json_obj.class #=> Hash
puts JSON.dump( json_obj )
#=> {"a":1,"b":"bb","c":true,"d":null} # null になる
>>158 Rubyは欠陥言語
#
https://ideone.com/cpA5lk require 'json'
json_obj = {:a=>1, :b=>"bb", :c=>true, :d=>nil, "b"=>"BB"}
p json_obj.class #=> Hash
json_str = JSON.dump(json_obj)
puts json_str #=> {"a":1,"b":"bb","c":true,"d":null,"b":"BB"}
puts JSON.parse(json_str) #=> {"a"=>1, "b"=>"BB", "c"=>true, "d"=>nil}
元々、JSON では、:b みたいなシンボルは使えない。ParserError。
"b" みたいな文字列しか使えない
require 'json'
json_str = '{:b=>"bb"}'
puts json_str #=> {:b=>"bb"}
p json_obj = JSON.parse( json_str )
#=> JSON::ParserError
元々、JavaScript でも、同じプロパティが上書きされるだけ
const json_str = '{"b":"bb","b":"BB"}';
const json_obj = JSON.parse( json_str );
console.log( json_obj );
//=> Object { b: "BB" } 1つになる!
そもそもアカウント管理はLDAP使うんじゃないのか?
プログラムレベルの処理になるとメモリ上でディクショナリ使うかもしれないが
インデックスが同じ DataFrame df と Series s があり、全ての要素は float であるとする。
df の各行について s の対応する行の要素より大きい要素が一つでもあるかどうか調べたいんだが、どうしたら良い?
df > s で True/False が格納された DataFrame が返ることを期待していたが、「automatic reindexing は推奨されない」と言われてすべて NaN の DataFrame が返された。
pathlibでイテレーティブルに操作できるようなライブラリ作ろうとしたけどめんどくさくて断念
例えば
ディレクトリ構成
data
├a
├b
└c
dataディレクトリを指定して、子ディレクトリに対して操作する場合
pathlibを拡張したクラス=PathEXとして
PathEX(data_dir_path).find_dir(pattern).delete_files_with_chars(characters)
(pattern=aとcディレクトリだけ見つける)
みたいなことをやりたい場合
イテレーティブルな操作だと
「aの中のcaractersを含むファイル1を削除、aの中のcaractersを含むファイル2を削除、、、cの中のcaractersを含むファイル1を削除、、、、」
みたいなのが理想だけど
その前にdirかどうかをスルーする操作やpatternのdirかどうかを判別しないといけないので
イテレーションであるメリットが少ないような・・
なのでfind_dirの段階でイテレーションを再帰して、patternだけのパスをリストに格納
そのリストからfileだけを検索(イテレーションを再帰して→ファイルだけのパスをリストに格納)
そのリストからdelete_files_with_chars(characters)
みたいに、目的のファイルやディレクトリのパスだけをflattenにして
その確定したリストに対して操作する方が良いような気がしてきた
これが何万ファイルとかになってくると違いがあるのかはわからないけど。
明らかにpathlibオブジェクト数の分だけメモリ溜まっていきそうなので
ただこれなら.find_dir(pattern).find(pattern).ignor(pattern)みたいにいくらpatternを追加しても
pattern毎に再帰は増えるけどシンプルに操作できる
今のところこれで困ってないしエラー処理が簡単なのでいいけど、無駄は多そう
整数がいくつか入力されて、最終的に0からmaxまで揃ってるかどうか調べたい
exists[num] = True
みたいなことをすると、エラーになるので、どうやって回避したもんか
>>166 ソートして舐めるのは駄目なん?
最終的に整数列が欲しいだけなら0からmaxの数列生成してからシャッフルした方が楽かも
>>166
max = 3
d = {}
while True:
print(d)
i = int(input(f"{max}までの正の整数を入力してください。"))
if i > 0 and i <= max:
d[i] = i
if len(set(list(d))) == max:
break
print("終了")
print(d)
{}
3までの正の整数を入力してください。0
{}
3までの正の整数を入力してください。2
{2: 2}
3までの正の整数を入力してください。4
{2: 2}
3までの正の整数を入力してください。1
{2: 2, 1: 1}
3までの正の整数を入力してください。3
終了
{2: 2, 1: 1, 3: 3} 何を入れてもいい箱は辞書か集合だよな
なんかキーが数というのに抵抗がある
dic{1.1} = True
とかちゃんと動くの?
google colaboratoryのpython3.9はいけた
d = {}
d[0.05]=True
d[1.1]=True
d[1.2]=True
d[2.0]=True
print(d)
print(len(d))
#{0.05: True, 1.1: True, 1.2: True, 2.0: True}
#4
len(d)だけでいけた >168
d = {}
d[1] = True
print(d[0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1]) # KeyError: 0.9999999999999999
こんなのはやっぱり動かない
何がしたいのかはわからんけど
普通にエラー吐けばいいだけの話では
>exists[num] = True
この辺の謎縛りがなけりゃ普通にリストとappend使ってif inで重複調べるだけでいけそう
>>164 不等号の代わりにDataFrameのgtとかltを使う
>>165 イテラブルとイテレーティブという言葉はあるけどイテレーティブルという言葉はないぞ
んでもって変なライブラリ作らなくてもPath.globでイテレーティブに操作できる
メソッドチェーン化したいという理由があるのかもしれないけど
それはPythonのやり方ではないので自分しか読まないようなコード以外では避けたほうがいい
汎用化したい場合はdata_dir_path, pattern, charactersを受け取るような関数を作る
中身はforループ
pythonでmxnetをインポートしようとすると出てくるエラーに関する質問です。
(私の使用している環境は以下の通りです。
python: 3.10.8, mxnet: 1.8.0, windows: 10.0.19044.2728
CPU: intel core i7, GPUはありません。)
import mxnet を実行すると、
Could not find module
'C:\Users\ \AppData\Local\Programs\Python\Python310\lib\site-packages\mxnet\libmxnet.dll' (or one of its dependencies).
Try using the full path with constructor syntax.
というエラーが出現します。
調べると、どうもlibmxnetのpathに関する問題らしいのですが、
具体的な解決方法がわかりません。
具体的にどんなコードを実行したらエラーが直るか、教えていただけないでしょうか?
あるいはGPUが必要なのでしょうか?
>>166 入力値がリストで0からmaxまでの整数値なのであればsetにして長さを比較
マイナス値やmaxを超えた整数値が存在する可能性があるのであればmax+1の長さの配列を用意して比較
def check(input_list):
__xs = [False] * (_max + 1)
__for i in input_list:
____try:
______xs[i] = True
____except IndexError:
______return False
__return all(xs)
>>176 gt, lt に axis 指定で望みの動作になりました!
ありがとうございます!
>>177 >Path.globで
やってみるとわかるがこれだと結局、目的のパスが静的に決定している場合のみの逐次処理にしないといけないので
PathEXを作る意味はない
もちろんそういう場合にはpathlibだけで事足りるのでPath.globを使えばいい
>>166 リストの内容が0から最大値まで連番になっていることを確認というならrangeで連番作ってそれと比較とかどうでしょう
重複や順番不問にするためにset使って
set(input_list) == set(range(0,len(set(input_list))))
みたいな
>>180 最大値を先に把握できてるという状況がよくわからないけど
>>168のコードみたいにインタラクティブな逐次入力前提なのかな?
もしそうなら要素数も知れてるだろうからわかりやすくリストにappendしてソートで十分だと思うよ
>>182 >目的のパスが静的に決定している場合のみの逐次処理にしないといけない
悪いけど何を言ってるか全然分からない
>>184 単純なソートだと重複があったら簡単ではなかった
やっぱりsetだね
ファイル操作をやってみるとわかるけど
ファイルを動かしたり名前を変えたりすれば
イテレータの状態と合わないことがある
やってみないとわからないけど
>>172 これはID:r24Gen790が何を言いたいのか理解できてるのか?
ていうか全体的に意味がわからん
l = ['1','2','3']
while l: l.remove(input())
いや設計も何もイテレータでやるならやったらいいし
再帰の部分でどのみちコードの量が二度手間以上になるから
メリット無さそうだし最初からflattenにする、という話なんだが・・
どっちもやった上で、イテレータ維持しようとすると面倒だからやめたって言ってるんだが
globやって、globやって、みたいなのならそりゃ書けるし
その程度の用途しかないなら無理してやらなくていいと思うよ
あとこの人いつもいる?オブジェクト指向やら継承からの脱却、の人だと思うけど
違ったらすまんけど
この前、何がなんでも継承しない方がいいの?みたいなこと聞いたらどっか行っちゃったよね
自分はそれが正解か間違いかはわからないので純粋に聞きたかったんだが
設計って確実にその思想の部分に大きく影響されるよね
関数型が正義と思っていてそう書かなきゃいけないなら
そりゃそうなるわ、としか言えんもの
できあがりが見通しや効率で優れているかで判断すればいいのであって
手法は目的じゃないからあってるよ
ところでなしてos.walkつかわんの?
>>195 os.walkでやってた多くのケースがPath.globやglob.globでまかなえるようになったからね
関数型プログラミングは高速化に寄与することもあるよねと思うところもあるし
オブジェクト指向やるならオブジェクト指向でやる必要がある場合に限ってやればいいし
だからといってオブジェクト指向やりたいなら、Pythonみたいな超高級言語じゃなくてC++でゴリゴリ書いたほうがメモリに優しいし高速だしって話になるよ?
何がやりたいかによって手段とツールが変わるだろうけど
Pythonでやるなら実装はC++も使ったほうが独自APIを実装するときの自由度が高い
>>192 Path.globを知ってたら↓こんなコード書かないから
まずリファレンスを読もう
>PathEX(data_dir_path).find_dir(pattern).delete_files_with_chars(characters)
>再帰の部分でどのみちコードの量が二度手間以上になるから
それは書き方が悪いだけ
思い込みを捨てたほうがいい
>関数型が正義と思っていてそう書かなきゃいけないなら
関数型とは全く関係ないぞ
単純なforループを推奨してるんだからむしろ関数型とは真逆
>>190の設計の問題というのは
>>187のような状況に陥るのは設計が悪いという意味
古典的な設計の問題だからわからなければググって勉強して
>>199 それは自作だからあえて変えてるだけで実際内部では実質
Path("ディレクトリやファイルのパス").glob(pattern).filter(処理for_each)
したり、再帰したり、しなかったりだよ
わざわざ存在しないクラス名、メソッド名使ってるのになぜそんな解釈したのかちょっと謎すぎる
globを使っていないわけではなくglobのイテレータ維持したまま最後の処理までするのは面倒なので断念しただけ
処理の部分が例えば”直接ファイル操作(removeなど)”みたいな投げっぱな単純な処理ならglob完結でいいけど
処理結果を返したり保持したい場合や、処理途中でファイル更新、単にパス名を文字列だけの用途として利用したい場合など個人的にあったので
あえてイテレータの恩恵少ないしforループ隠蔽するために、自分の場合はクラス化ほぼほぼ一択と判断しただけ
どの道、forループ処理は一度でも行う、はあなたがやってもだれがやっても行き着く事実であって設計云々ではないですね
あなたの想像し得る基本的な用途なら別にforループforループforループで良いしクラス化とか必要ないと思いますよ
見づらいだろうなぁとは思うものの、そこに関しては全然悪いとは思っていません
お好きなように
実際forループで書いて管理しきれなくなってからのos.pathやらpathlibの拡張なんで
何がなんでもosのみpathlibのみで書く縛りがあるなら別に書けばいいと思うけど。
自分はあとあとのこと考えると管理面倒だからforループforループで管理は無理だな
「あのディレクトリの○○なファイルだけ発見したい」みたいな超シンプルな使い方のみの想定ならそれでいいと思うけど
>>200 うーん”設計”が伝わらないとは・・・
じゃPathEX(data_dir_path).find_dir(pattern).delete_files_with_chars(characters)で頑張ってくれ
俺は諦めた
IPは消してたけどワッチョイ消したことはないな
なんだろう
うまい喩えが見つからないけど、死ぬほど恥ずかしい
>>203 いや1レス目からもう十分伝わってますよ
>メソッドチェーン化したいという理由があるのかもしれないけど
>それはPythonのやり方ではない
というあなたの設計思想は
>>177 誰が見ても違和感でしかないですよ
標準ライブラリでその恩恵を預かりながら自作では徹底してforループ
決められたこと以外は出来ない
狂信とまではいいませんけど、頑張ってください
Pythonはシンプルな言語だがオモチャでない。
いろいろ目をつむらないとシンプルに扱えないから
玩具の品質には到達していないのはわかる
おもちゃとは考えが逆だろう
最小のコードで複雑なことができたら楽しい
pythonは暗黙でいろんなことが決まるのを避けるので、何かするならきっちり指定する
きっちり指定してきっちり動いても何も面白くはない
Python以外で何かいい言語はありますか?
Go言語はCから学ばなくても修得できますか?
Rustとまちがってない?
まーどの高級言語も先にCやってた方がだんぜん理解深まるけどね
文系でウェブ系なら、Ruby on Rails 1強。
米国年収でも、Rails, AWS Solution Architect が13万ドル
Ruby, Elixir : 9.3 万ドル
Go : 8.9
Rust : 8.7
多くの言語 : 6.5〜7
PHP : 5
Dart : 4.4
日本では、バックエンドの求人倍率が数倍で、
フロントが0.5倍と、10倍の開きがある。
フロントは供給過剰で、低価格競争になっている
つまり欲しい人材は、Rails, Linux, Docker, AWS が出来る香具師
YouTube で有名な雑食系エンジニア・KENTA は、
キャリアパスを、Rails → Go のみと言ってる
理系ならPython で、大学院数学科とか、AWS 機械学習の資格など
PythonとGoを両方やることにします。Goも教材がたくさんありますね。現在、人気の
言語ですね。
結局ベースにCがあるんだよな
Cでも書けることを、より簡単に、より堅牢に、より保守性高く、書き直しているに過ぎない
そもそもCで書けんわというアーキテクチャーが登場するまで、Cは残り続ける
C言語。デニス・リッチーですか。長寿の言語ですね。WindowsOSもC言語で書かれて
いるんですね。
perlで作ったツールを移植してるけど
if key3 not in d[key1][key2]:
d[key1][key2][key3] = {}
みたいなのがたくさん追加で要る
しかもループの中で毎回評価してて気持ち悪い
autovivificationを使わずに多次元辞書をすっきり書けないものか
暗黙の初期化のような、うちうちのノリが多くて、Perlは嫌われたんだろ。
keyが存在するかどうかのチェックはどうせ毎回やってるんだから同じことか
from collections import defaultdict
d = defaultdict(dict)
d['a']['b']['c'] = 1 # KeyError: 'b'
2次元までなら
辞書をそんなネストしないといけない時点で根本的に設計がおかしいのでは?
def deepdict(): return defaultdict(deepdict)
d = deepdict()
d['a']['b']['c'] = 1
もっとうまく書けるかもしれんけど
dictだけ続くならいいけど、listが混ざったりするんだよな
後出しは書く必要ない
任意の関数渡せるんだからスキにしたらええ
a[1] がlistなのかdictなのか判らんという時点で、pythonでは自動は無理なんだよな
l = []
l[1] = 1 # IndexError
perlはこれが出来るというのも、かなりの飛躍がある
jsonで受け取ったデータをデコードしてそのまま使ってるとかじゃないの
if m := re.search(パターン1):
処理1
elif m := re.search(パターン2):
処理2
else
処理3
みたいに書いていたものを、:= を使わないように変更
m := re.search(パターン1)
if m:
処理1
else:
m := re.search(パターン2)
if m:
処理2
else
処理3
気持ち悪い
elifは展開するともともとこういうものだから仕方ないのか
assignment expressionが必要になった理由がそれだから仕方ないね(pep572)
m = None
def search(pat):
____global m
____m = re.search(pat, str)
こういうのを直前に書くとか
re.searchは別関数にしたいとは常々感じてる
m.groups() を返してくれると有り難い
マッチしなかったら[]を返すようにすれば、ifにそのまま入れられる筈
なんで正規表現回りこんなに不便なんだろう
競プロで複数行の標準入力を受け取るとき、stdinを使った方がだいぶ早いみたいな記憶があったんだけど、今はだれも使ってない
これは自分が何か記憶違いをしてる?
Pythonはオブジェクト指向とデータ隠蔽の所が面白い。
ハードウェアやdbの設計やらセキュリティやら色々大変だよ
まじで全部はやれそうに無い
>>241 だれも?
まわりみんなPowerShellユーザなの?
>>240 matchなんか使うからだ
findallで良い
個人でプログラムしている程度の素人からの質問です
dataclassでクラスの作り方を覚えたら従来のクラスの作り方を覚える必要ってありますか?
dataclassでできないことがイマイチ分からなくて・・・
>>248 ひとのコード読まないならいいんじゃない?
@dataclass使わずに自前で実装している事のが多いから
内包表記にもいえるけど同等のベタなコードも知ってたほうが
他人のコードの理解が進むし自分のコードの幅も広がるとは思う
>>250 ありがとうございます
従来のクラスは読める程度にしておいて自分で作るときはデータクラスにしようと思います。
引数をいちいちself.hoge = hogeって列挙していくの面倒で・・・
書く量はあんまり変わらないからなあ
reprとか書くならその分減る
すまん。パイソン歴3年とリクルートエージェントで言ってしまった(笑)
本当はvscodeと言いたいが、実はGoogleコラボしか経験がないです。(笑)
今からvscodeでパイソン歴3年は何を言えばいいですか?
結果をリストに入れて副作用で返したい
def func(list):
# 処理
list.clear()
list.extend(result)
こんな感じでできるけどどう見ても汚い
副作用がそもそも汚いけど、もう少し何とかならないか
>>254 関数にはリストを渡さずに格納したい結果だけを返して、
リストに入れるのは呼び出し元の方でやるのが一般的じゃないかな
何がしたいかよく分からないけど成否とリストのタプルを返せばええやん
成功なら普通に値を、失敗ならFalseを返すとかじゃ駄目なの?
成否と成功時の結果を返したい場合は例外を使うのが一般的なんじゃないかと思う
でなければHttpResponseのように結果ステータスとデータをまとめたクラスのインスタンスで返す
タプルはその簡易版
結果ステータスを持たずにクラス化する方法もなくはない
if foo.func(): do_something(foo.data)
if func(list)で副作用で返すとかまぁ現代では誰もやらないから素直に
result = func()
if resultの正常条件:
にしときなよ。
l = []
result = None
def func():
____try:
________l.clear()
________l.extend(result)
________return l
____except:
________return False
#
result = None
print("成功" if func() else "失敗", l)
#
result = ["r1","r2"]
print("成功" if func() else "失敗", l)
#失敗 []
#成功 ['r1', 'r2']
elifで繋いでいくとどんどん深くなるんだよな
多分、:= を使うのがベスト
でも環境的に使えない
副作用で返すのが次善の策で、実際うまく行っている
ただどう見てもバグの元
深くなるなら早期return
関数仕様変えたくないならreplace_xxx(list)とか関数名で説明するしかないんじゃない?
その場で直前に関数定義(def)して条件につかえばブラックボックスにはならない
https://gigazine.net/news/20230508-mojo-programming-language/ > 従来のPythonよりも高速化が可能な新たなプログラミング言語「Mojo」が開発される
> Mojoはこれまでのプログラミング言語であるPythonの使用感と
> C言語並みの性能を合わせ持つ言語だとされています。
同じコードで動くならもうPython13とかで統合してほしい
同じコードで動くのなら、それは現行のpython作ってる人達におまえら無能と言ってるのと同じだからずーっと喧嘩し続けるだろう
テキストが1行ずつ入ったリストを順に処理していて、
ある条件の時は次の行も読んで処理したい
次のループでは処理済の行は飛ばす
普通にforでループにして、処理の中でイテレータをさらに取ってくるとかできる?
>>271 2行ずつイテレートすれば?
(1, 2), (3, 4), (5, 6), …で十分なのか
(1, 2), (2, 3), (3, 4), …とする必要があるかは処理内容次第
次の次の次の行もまとめて処理する必要があったりするならイテレーションを跨いで状態を持ち回る必要があるので単純な2行ごととはまた違うやり方になる
>>271 処理済の行は飛ばすなら単純
it = iter(lst)
for x in it: print(x, next(it))
ただ最終行でnext(it)したら例外になる
飛ばさないならmore_itertoolsかitertoolsを活用かな
forの対象をリストでなくてiterにすればいいのか
forもnext()するし中でも同じものをnext()する
続きがあるよとデータに書いてあるのに実際には無いならそれはエラーでいい
Ruby なら、
input_text = <<'EOT'
あい
aa
あい
あい
bb
あい
あい
EOT
prev_line = [ ] # 前の行
# 改行を削除して、1行ずつ処理する
input_text.each_line( chomp: true ) do |line|
if line == "あい"
prev_line.push( "あい" ) # 代入だけして処理はしない
else
puts prev_line.join + line # 表示
prev_line = [ ] # 内容を削除
end
end
# もし、中身が残っていれば表示する
puts prev_line.join if prev_line.length > 0
出力
あいaa
あいあいbb
あいあい
今の行だけで続きがあるか判別できれば楽だけど、
次を読んで始めて前ので終わりだったと判明する処理は厄介だな
実際にはそっちの方が多い
pythonのコードもそれ
次のを読んで確定ならまだいいけど、最後まで読んだら終わりとみなす処理も必ずつきまとう
なぁ・・ __pycache__とかいう雑草みたいに抜いても抜いても生え散らかす謎ディレクトリなんの役に立つのこれ・・
Twitterの自動投稿をスレッド形式でツイートしたいのですけどできるのでしょうか?
techiedelight.com/compiler/?~dictclass
こんな感じで実際にはデータが入ってる辞書型クラスがあるんですが
def get(self, _id:str):
if _id in self._results:
この時点では_idはstr型なのに
def __getitem__(self, key):
これにステップした瞬間keyがつねにintの0になります
デバッガで見ても何が何だかわからんのですが
どういう仕組みなんでしょうか?
>>282 それはシーケンス型の場合って書いてませんか?
dict型のエミュレーションが目的なんですが
ちなみにin比較しないでmyclass[key]の場合は動作は期待通りです
inで比較したいのにエラーなるのでなぜかわからない事態です
キーは実際にあるので__missing__の実装とは関係ないかと思うのですが
自己解決しました
>__contains__() を定義しないオブジェクトに対しては、メンバシップテストはまず、 __iter__() を使った反復を試みます
でした
a, b, c = list[:3]
とすると、中身があればいいけど無いとエラーになる
無い時はNoneが入るようにしようと思うと、
a, b, c = list[:3] + [None, None, None]
みたいにしないといけない
なんかもやもやするので、もっといい書き方ある?
List_A
List_B
List_C
があって、CSVに出力すると1行目にA,2行目にBっていうふうになります。
これを縦に並べて1列目にA,2列目にB,3列目にCと出力したいです。
パンダスで行列に変換してから転置、転置したものの1行目をリストA',2行目をリストB'みたいにして出力して対応はできたのですがもう少しスマートなやり方ないでしょうか?
>>285 いいやり方ないね
a, b, c = unpack_or_default(mylist, 3)のように自分で関数化かな
おおがかりでもよければ
from more_itertools import *
a, b, c = take(3, pad_none(lst))
やってること一緒だもんな
足りてない時はNoneで埋めます、を暗黙にする訳にはいかなくて、
何らかの方法でそれが判るように書かないといけないなら、元のままが一番素直かもしれん
a, b, c, _ = (list + [None] * 3)[:3]
printで文字列と数値を合わせて表示する場合
formatメソッド使うとstr関数で数値を文字列に変換する必要が無い?
n=1
print(f"とりあえず{n}回試してみたらいいんだよ")
古い人間なんで
print('とりあえず{}回試してみたらいいんだよ'.format(n))
Formatは使わずに
a=1
print("a:")
print(a)
とかやっちゃうな。
print(f'{a=}')
が使えない期間はどのくらいあったんだっけ
a=1
print('aは', a, 'です')
で1行に書ける。
桁数指定等しないならformatを使わなくてもよい。
それでいいじゃんという思いがあったから、f文字列の実装があんなに遅かったんだろうな
str = f'aは{a}です'
print(str)
ができるので、文字列にしちゃった方が取り回しがいい
PILでカウントアップするgif画像を生成するプログラムを作りたいのですが、gif画像が動きません。
https://dpaste.com/2ZDT9KPHC 希望では開くと順次数字がカウントアップされるgifファイルとなるはずなのですが、
どこがわるいのかわかりません。
自己解決しました。
最終行のパラメータが
append_image
になってました。正しくは、append_imagesでした。
スクレイピングしようとbs4でしたところ
URL:http---.jpgがあってそのままだと吸い出せず
そのあとにつづく.netでした
けれどの\sや\nなどでやっても結合できず
置き換えでやったところprintで見ると.netの部分が空白行になってました
要素か何か別々になってるような感じで、、、
初心者過ぎてよく分かりません
soup = BeautifulSoup(res.text, "html.parser")
[tag.extract() for tag in soup(string='n')]
elems = soup. find_all("img", class_="ほにゃらら")
for elems in elems:
elems = elems.get("data-src")
elems = elems.replace('.net','')
elems = elems.replace('jpg','jpg.net')
elems = elems.replace('png','png.net')
if elems.startswith("http") and (elems.endswith('')):
printした時こうなります
http jpg.net
http jpg.net
http jpg.net
改行のようではなかったのでどのように結合させて
ファイルを1.jpgから順に書き出すにはどうしたらいいですか?
import ffmpeg
# 出力①
stream = ffmpeg.input("test1.wav")
stream = stream.filter('afade', type='in', start_time=0, duration=5)
stream = ffmpeg.output(stream, "test1.mp3")
ffmpeg.run(stream)
# 出力②
stream = ffmpeg.input("test2.wav")
stream = stream.filter('afftdn')
stream = ffmpeg.output(stream, "test2.mp3")
ffmpeg.run(stream)
この様にした場合出力①のフィルターは出力2でも有効なのでしょうか
streamのオブジェクトをリセットできませんか
ffmpegの挙動は謎が多いからなあ
コマンドラインからでもよく判らんものをさらに上から被せたらもっと判らん
stream = Noneとかしておけばいいのかな
streamのインスタンスはそれしても変わらんから
ライブラリの実装がまずいならPython側でプロセス分けるとか
fork、multiprocessing他
>>308だけど
URLを格納したのを表示させたら\n\nでした
それを無くせば良かっただけでした
それで処理からカウントjpgにして、、、
このやり方だと元ファイルがpngとかのフォーマットだとjpgに置き換えてるだけでそれを変換するのが分からないのと
一つ一つDLするとものすごく遅いので
webには並列の非同期asyncioが良いとされているんですが
処理が終わった状態のからカウントjpgになるんですかね?
そのasyncioもこれからなんですけど初心者には難し過ぎるよ、、、
とりあえずテキストエディタの背景が白いのをやめるんだ
ピソン、
なんでもできる言語だと聞きましたが
ブログとか作ろうと思ったら
HTMLのほうがいいんですか?
JAVAの人気もそうですが、
パイソンが出てきても他の言語が駆逐されてないんですね…
出てきてもとか言ってるけどpython自体は確か30年以上前から開発されてる言語だけどな
1.5.2より前から使ってるから妻よりつきあい長くて草
会社の環境が3.6で固定されてるので、変な回避技が身につく
flaskを使ってloggingでログをファイルに出力しようとしています。
ログを見るとエスケープシーケンスがうまく働いていない?のですが、どうすれば綺麗に読める文字列のみ出力されるでしょうか。
自分なりに調べたらフォーマットを指定していないとこうなるという情報があったのですが、きちんと指定しており実際その通りの形式で出力されているので反映はされていると思っています。
図中の赤い箇所(ESC[31mなどとなっている部分)です。
環境による
多分windowsで、その場合は儀式が必要
https://qiita.com/nash_4ed9/items/85ab1660262a44d47a61 このPyAudioをつかう方のソースをコピペして、cmdで起動して
リブートってマイク入力すると再起動って表示されるんだけど
recognize_google()なにかおかしいのかな
>>329 chatGPTに聞いてみたよ
Flaskでログをファイルに出力する場合、デフォルトではログレベルがINFOに設定されており、色付きのログが出力されることがあります。これはターミナルでログを表示する際に役立つものであり、ログファイルではうまく表示されません。
ログフォーマットを指定する際に、色付きログを無効にするよう設定することで、ファイルに綺麗に読める文字列のみ出力されるようになります。具体的には、以下のような設定を追加してみてください:
```python
import logging
from flask import Flask
app = Flask(__name__)
app.logger.setLevel(logging.INFO)
# ログフォーマットを指定
formatter = logging.Formatter('%(asctime)s %(levelname)s: %(message)s')
# 色付きログを無効化するハンドラを追加
handler = logging.StreamHandler()
handler.setFormatter(formatter)
app.logger.addHandler(handler)
# 以下はログの出力例
app.logger.debug('デバッグメッセージ')
app.logger.info('インフォメーションメッセージ')
app.logger.warning('警告メッセージ')
app.logger.error('エラーメッセージ')
```
この設定を使用すると、色付きのエスケープシーケンスがログファイルに出力されず、綺麗に読める文字列のみが出力されるはずです。
>>330 同じく聞いてみた
以下のようなコードを使って、リブートと入力すると、再起動と表示されます。期待する結果はリブートとそのまま表示されることですが、何かおかしいところはありますか?
以下回答
会話が噛み合ってないけど内部で一度英語に変換されてるからなんだろうと思う
それを考慮すると噛み合ってんのかなあと
このコードにはいくつかの問題があります。
1. `import speech_recognition as sr`の前に`import pyaudio`を追加する必要があります。
2. `stream_callback=callback`の行の前に`callback`関数を定義する必要があります。コードの上部に`def callback(in_data, frame_count, time_info, status):`を追加してください。
3. `sprec.recognize_google(audiodata, language='ja-JP')`の行の前に`sprec`を初期化するコードが必要です。`main()`関数内の`sprec = sr.Recognizer()`をコメント解除してください。
これらの修正を行った後、再起動と入力すると、"再起動"と表示されるはずです。
アンカー間違えた
>>331だ
332
333
とも実際に試してはいない
通例エスケープシーケンスつけるのは出力先が対応してるときだけで
FlaskかPythonのWindows対応がマズくて画面に見えちゃってるけども
ファイル出力するならそうはならんでしょ
色付きで表示するよ、というパッケージはいろいろあるけど、
エスケープシーケンスの文字列を定数にしてるだけで、自分で作った方がまし
colorama.init() さえやっとけばok
windowsで人工知能 deep learning データ解析とかをpythonで勉強したいのですが、
wsl2とかいうのにpythonをインストールしたほうがいいのですか?
一応古くて安い奴だけどグラフィックボードgeforce2060が取り付けてます。これを生かすにはそっちのほうがいいのですか?
と思ったけどwindowsの方が遅いという計測結果があるから、linuxの方がいいらしい
ここで詰まるようではDLにたどり着くには何年かかるか…
まあ、高速化したいと思った時に乗り換えでも困らないけど
>>341 343
とりあえずwsl挑戦することにしました。ありがとうございました。
PythonからTorプロキシ刺してIP変わってるか確認するコード動かすとエラーになるんだけど、このスレで質問してもいいですか?
エラーメッセージ見ても対応できんのなら、ここで聞いても無駄じゃね?
ググって出てくること以上の回答なんかないぞ
ググりまくったけどわかんなかったんで聞こうと思ったんです。
5ちゃんの天才方なら知ってるかなぁって。
torなら自力で解決できるようになるまでさわるな
絶対に他人に迷惑かけてる
>>345 がどういうコードとエラーか知らんけどオレが試したら問題なかった
imgur.com/a/WGJSCEi
まあ、torで何をしたいのかをちゃんと説明したら
優しい人なら回答してくれるかもねw
そのコードでいうとTor依存じゃなくSOCKS Proxy使ってるだけだから
Tor側がちゃんと起動してないだけじゃないの?
ブラウザが同じProxy設定で使えてるかまず確認した方がいい
それかPythonを仮想マシンで動かしてるか
WSLでGUI動かすと激重だからコーディングするのWindows側になるじゃん
そしたらそのままVS Codeで起動すれば良くねってなるから
結局WSL要らなくね
基本的に仮想環境って自身の開発環境とは別の本番環境を想定して使うものじゃない?
自身のPCで動かすもの作ってるんだったらわざわざ仮想環境なんて作らなくていいと思うけど
windows用のバイナリを作るのにWSL2からクロスコンパイルした方が楽だったりする
あ、できてた!
345だけど、IPの秘匿化に関して実験してるだけなのよ。
興味があっただけでそれ以上何かするつもりないのよ。
力を貸してください(泣)
[目的]
Pythonでtorのプロキシを使って接続し、IPが変わってる事を確認したい。
[環境]
Torブラウザ(12.0.6)
PCはsurface go 3
python実行環境はjupyter lab
接続はテザリング
OSはWindows11
[結果]
[WinError 10061] 対象のコンピューターによって拒否されたため、接続できませんでした。 とエラーが出て接続できない
[参考]
・Torブラウザ単体でwebに接続した場合は問題なく接続でき、IPが変わってた。
・ファイアーウォール無効でもダメだった
・Torに設定されてるプロキシ情報がどこにも無くて困ってる(デフォは127.0.0.1で9050らしいけど...どこに設定されてるのよ)
・テザリングでも自宅のLANでも同じ現象が発生
[ソース]
import requests
proxies = { 'http':'socks5://127.0.0.1:9050', 'https':'socks5://127.0.0.1:9050' }
res = requests.get('IPインフォのURL',proxies=proxies).json()
print(res)
連投すません。
長すぎたのと、リンクがあると書き込みできなかったので小分けにしました。
何卒よろしくおねがいします。
EdgeでもChromeでもそのSOCKSプロキシを設定してみ
それで接続先が正しいか切り分けできるでしょ
>>349 が動いてるから明白だけど
>361
EdgeとChromeどちらでも、SOCKSプロキシを設定してみたのですが、ネット接続が切れるだけでダメでした。
いろんな人に聞いても、何も設定などせずTorブラウザ立ち上げとくだけで、PythonからTorプロキシ刺せるっていうんです。
自分の環境だけ何でできないんだろうか...
>>358 tor.exeを実行してるときとTorブラウザを実行してるときとで、使うポート番号違うんだけどそれはもう試した?
ブラウザの場合は9050じゃなくて9150で、読んだか分からんけど
>>349のURLに貼ってあるソースでは9150使ってる。
torは機械アクセスで使用するようなリソースじゃない
迷惑だからやめとか
念の為jupyter labからも試したけどちゃんとip変わった
copilotやってみたけど、
楽しいな
コードよりコメントを丁寧に書くようになるw
345です。
>364
あなたは天才です。
9150で刺したら通りました。
他にも回答していただいた方々本当にありがとうございました!
ちゃんと勉強します。
>>369 githubで申し込んで
vscodeのプラグインいれる
pycharmでも、いけるんかいな
>>371 有料だけど、未来が垣間見れる
出来たコードをgptに読ませると、また面白い
AIがAIを開発するようになるとシンギュラリティ起きるぞ
aiでエロ動画作りたいのですが、スタンダードなツールありますか(´・ω・`)
コメントを変数名まで指定して書くと
丁寧に補完してくれる
性格は結構せっかちだな
>>352 WSL側にファイルそのものや実行/デバッグ環境を置いて、WindowsのVSCodeからリモート接続する。
pythonというかおそらくVS code の問題なんだろうけど
特定のスクリプトを実行するときにデバッグポイント素通りしてしまいます
pyファイルにはclassが一つだけあって
スクリプト実行時にはそのクラスのインスタンスを作って
メソッド呼ぶだけなんですが
if __name__ == ‘__main__’:
にブレイクポイント置いてもそこすらすり抜けてもはや意味わかりません
別のスクリプトからモジュールとしてインポートする時は期待どおりに動きます
また、他のpyファイルではブレイクポイントに問題ありません
launch.jsonでは’stopOnEntry’ : trueにしてます
対処法教えてください
__name__ が '__main__' になるのは自分を実行したときだけだが
${file}をデバッグ起動してるから
__name__はmainになるはずだし
if __ name__ == ‘__ main__’:
pass
だと実際そこで止まるんだけど
if __ name__ == ‘__ main__’:
h == hoge()
とするとifで止める事すらできなくてなぜか全部実行されるので
意味がわからんのです
最初class hogeのdef __init__がおかしいのかなって思ったけど
そもそもすべてのブレークポイントが反応しない
1行ごとに置いてもだめ
syntax errorも出てないしもちろんマルチスレッドでもない
if __ name__ == ‘__ main__’:
以外のところで何かやってない?
ああ編集してるのと違うファイルが実行されてる可能性もあるな
>>382 from importが15行くらい
折りたたむと全部隠れるのでclass以外に実行してるコードは無し
自分の書いたモジュール以外だと
tqdmが外部ライブラリで
これが怪しそうだけど確信はない
>>383 “program : “${file}”で”module”は指定してません
MS標準のPython拡張だと問題なく止まるけどどういう環境?
こんなかんじで実行されてる
% /usr/bin/env /opt/homebrew/bin/python3 ~/.vscode/extensions/ms-python.python-2023.10.1/pythonFiles/lib/python/debugpy/adapter/../../debugpy/launcher 53796 -- /PATH/TO/test.py
windowsアップデート来てたから再起動かけたら直ったかも
止まるようになった…
エラーメッセージはChatGPTにコピペして教えてもってるわ
でも明らかなインデントエラーも見落とすからな、chatgpt
もうちょいでいいから、賢くなってくれればいいのに
可能性見てるだけやからな
つまり当たり外れあるよってこと
コードの一行一行はうまく解釈してくれる
でも全体を見るとなると、適当になるんだよな
次に来る字句が適切かの可能性を評価して学習して平均的かつ多数であれば、適切と評価しちゃうんだよな
多数であっても、評価結果に影響がないように出来てるっぽいので、可能性が高い方が出力される仕組みだよね
これはひどい
detail.chiebukuro.yahoo.co.jp
/qa/question_detail/q13281535528
a=100
if a == 100:
print("100点満点")
else:
print("ざんねん")
昨日勉強し始めたばっかりで質問です。
インデントはスペース4つか2つと書いてあり、ズレたらエラーになると書いてたのですが、0.2.3.4.5試したのですが、エラーにならないです。
どうやったらエラーになりますか?
ブロック内でインデントズレてるとエラーにならない?
例えば↓の100点満点とやったねはインデントが揃ってないといけないけどズレてるからエラーになるはず
if a == 100:
print("100点満点")
print("やったね")
else:
print("ざんねん")
>>399 インデントを揃えてたら何個でもいいってことですか?
(自分でやってみた方が早いんじゃないだろうか・・・)
strip()で全角スペースも除去するんだったら、
インデントに使わせてくれてもいいのに
https://github.com/discord-camp/discord-autoposter 短文だと問題ないのですが1000文字くらいの長文だと途切れてしまったり、一部分しか送信されなかったりするのですが何処が駄目なんですかね。
>>404 そもそもこのアプリケーション利用規約違反じゃね?
うろ覚えだけどボットアカウント以外を自動化して何か行うのダメだった気がするけど
>>404 規約も見つけたから URL 貼っておくわ
discord.com/developers/docs/topics/oauth2#bot-vs-user-accounts
> Developers must abide by the terms of service, which includes refraining from automating standard user accounts (generally called "self-bots") outside of the OAuth2/bot API.
以下 DeepL 訳
開発者は、OAuth2/bot API以外の標準的なユーザーアカウント(一般に「セルフボット」と呼ばれる)を自動化することを控えるなど、利用規約を遵守する必要があります。
>>405,406
となるとディスコ側で弾いてる可能性もありますね
BANされるのも嫌なので今回はやめておこうと思います
ありがとうございました
うん、一定間隔でメッセージ送信するくらいだったら簡単に作れると思うから、ボット作っちゃったほうがいいと思う。
ただ、サーバーの管理者じゃないとボット参加させられないけど。
まぁあとdiscord.pyは揉め事があって開発再開してから今どうなってるかわからないけど。
>>408 ディスコの運用初心者で詳しくないのですが、ボットで違うサーバに自動投稿というのは出来ないんですよね?
やりたいのはゲームのチーム募集で10時間に一回投稿という感じなのですが
ボットが参加してるサーバーじゃないと無理だね
あとチャンネルにメッセージ送信できる権限も必要
>>410 まあ自動投稿って荒らしがやりそうな事ですもんね
手動投稿でがんばります
環境変数の文字列を置換するのに何か方法ありませんか?
以下ではエラーでした。
aaa = "$HOME/xxx"
re.search("(\$[^/$ ]+)", f"{os.environ(\1)}", aaa)
>>412 hoge = re.sub("\$([^/$ ]+)", lambda x: os.environ[x.group(1)], aaa)
>>413 確認できました。
助かりました。ありがとうございます。
DISCOってよくわからんが、ブラウザで動くならSeleniumで自動化したらいいんじゃない?
APIだろうが外部のアプリケーションだろうが、Discordの利用規約では「ボットアカウント以外を自動化するのが禁止」という話。
もう終わった話だからこれ以上これについて議論する価値が無いと思う
>>404からをよく読んで欲しい
>>419 793d-C6j3 は自分のサーバーに自動投稿したいんじゃなくて、他のユーザーが管理してるサーバーに自動投稿したいという話。
なので Bot 作ってもそのサーバーの管理者がその Bot をサーバーに追加してくれないことには意味無い。
っていう話も
>>409 あたりから書いてあるんだけどちゃんと読んでからレスしてる?
あと Discord 公式に「bot API」なんてものは存在しないからよくドキュメント読んでから書いた方が良いよ
discord.com/developers/docs/intro
【プログラミング言語】企業が求めるエンジニア言語ランキング 2位「R」、3位「Go」 1位は? 企業DB運営会社が発表
http://2chb.net/r/scienceplus/1687350694/
ええー
perlは?
Perl大好きだったDeNAも今はほとんど使ってないだろ
機械語吐ける処理系は
便利さより簡明さの方が優先なんだろうな
Cが多いのはああそういう母集団なんだなと思うだけたがそれと同等でRが並ぶのは謎すぎる
これからRで新規に何か作ったりはしないだろうから、
既存システムのメンテ要員なんだろうけど、何をそんなにたくさんRで作ったんだ
aws transcribeをboto3で使ってるけど、凄い便利で精度も凄い
でもリアルタイム処理もやりたい
chromeからリアルタイムで音声を受け取ってawsに投げて、リアルタイムで音声認識できたら最高だけど
awsのサーバーレスLambdaでやればいいのか、それともflaskでやるのか迷ってる
いい方法ないかな
大人しくJavascriptでやれ、と言われそうだけど
多分これあれだな
求人情報で持ってて欲しいいろんなスキルを集計した奴だ
excelとかもあったけど、それは言語じゃないから省いた
Rも便利に使えて欲しくて、一応言語だから残ったけど、それで開発する訳ではない
RとJavaが逆じゃねってっくらい案件数違う
JavaScript入るのにmatlabは無いのおかしいだろ
Pythonをやってみてしみじみわかる
自分が昔Cに挫折した原因は、Cが原始的過ぎるのだと
何せCには俺らがPythonで何気なく使っているリストがなく、
データ構造の実現には配列や構造体を組み合わせてポインタでアクセスすることが求められる
これでは毎回Pythonのリスト機能を一から手実装しているようなものだ
コードの大半がデータ構造アクセスに浪費され、肝心のロジックを書く前にプログラマーが消耗してしまう
まあ各種データ型は一旦コードを書いたらライブラリ化して再利用してもいいし、
何かのAPIを使ってコード書いてるときにはそのAPIが各種の型も提供している場合がある
けどね
リスト型はともかく、
車輪が必要になって、「pip 車輪」すりゃよいものを、再発明してしまうことはよくある。
今日 AWS のテレビコマーシャル初めて観た
普通の人あれ観て何のCMか判るんかな
どういうマーケティングなんやろ
>>435 STL使うならC++
Cなら今はtcl/tkのクラス使うと便利
AIプログラマーになりたいんですが、書店の参考書読めばなれますか?
今まではXbox系、Playstation系のプログラマーをやってきて、
もちろんC++やPythonは使ってます。
>>442 くくりがでかすぎるから、まず本屋でどんな分野があるのか調べるとこからだと思うよ
てか、実績のくくりもおかしいから人に相談する前にまずは自身のスキルセットの整理からかも
Kaggle(じゃなくてもいいけど)に興味がある分野があれば挑戦してみては
本は基本遅いし誤りも多いからとっかかりで読むだけ
>>442 データサイエンスのある学部に3年次編入したら?書籍買買い漁るもありだけど、体系的に学ぶ方がとっかかりやすい
AIプログラマーにはなれないだろうけどe資格でも取ればいい
>>444 ありがとうございます。
Kaggleはよさそうですね。
無料で利用できるみたいですね。
>>446 ありがとうございます。
私は国立大学(東京大学)の情報工学出身なので、
それなりに基本は理解してるかなと思い、いい本で勉強できればいいな、とか思ってました。
東大卒が便所の落書きで質問して市販本で勉強するわけない
相手をしてもらっただけでめっけもんなんじゃないの?
養分とはよく言ったもんだ
def func():
func.counter += 1
みたいに、関数名.変数名で前回の値が保持できるけど、
これはどういう名称?
static変数でいいの?
バカどもが、
ゴミ書き込みをして、人を叩いて満足するスレ
バカが…
わざわざバカの集まるところにマウンティングをしにきて
自己肯定感を満足させようとするが
それすら叶わず捨て台詞を置いていくスレの間違いです
>>456 知らんけど、(関数オブジェクトの)オブジェクト変数?
逆に訊きたいのだけど、それ、保証された動作なの?
え、駄目なの?
グローバル変数を使うよりよっぽどスマートだと思うけど
外部から初期化するのが面倒なだけで
自動で初期化されるようにしようとすると面倒だし初期化を強制することもできないので
普通にモジュールグローバル・クラス変数・インスタンス変数を使ったほうがよっぽどスマートだと思う
クロージャだから外に変数おけばいいんだけど
名前空間汚さないのはいいかも
def func(): ...
func.counter = 0
並べて書けば必ず初期化はされるし
いろいろデメリットがあるから使い捨ての短いプログラム以外ではやめといたほうがいいと思う
クラスにするのがオーバーキルと感じる場合ならクロージャ使う
def make_counter(i=0):
__def inner():
____nonlocal i
____i += 1
____return i
__return inner
デフォルト引数にmutable objectを使うやり方もあるけど
あれもちょっとしたハックなので避けたほうがいい良いと思う
聞きたかったのは是非ではなく名称なんだけど
結局誰も知らないということかな
強い人はどのようなところを見ているか参考になるなぁ
命名規則が今いち定まらない
たとえばデータベースでリレーションシップ組むときに
userが投稿したpostという設計だったとき
UserモデルとPostモデル
そのリレーションモデル名をPostUserにするのかUserPostにするのか
user,postはまだ一対多なのでわかりやすいけど
もし一対一の関係だった場合、どっちがどっちでもいいじゃんってなるような・・
頻繁に困りはしないけどコードを後で見直したときに
どっちが先だったっけ?ってモヤモヤする
userpostだとユーザーがポストした内容そのもの
posruserだとポストしたユーザーの情報
変数ならなにをどうしたものか
メソッドならなにをどうするものか動詞句を用いて記述するのがオヌヌメ
曖昧さを回避するなら
create post session
get input by user from contentviewer
query results
validate from controller
とかが鉄板
そういうメソッド名の命名規則というより
JOIN文でどのテーブル名を先に書くか
みたいな問題と似てると思う
>>471-472 命名専用サイト使うほど、変数名つけること自体はそこまで難しくないし言うほど困らない
翻訳とかChatGPTでいいし
プログラミングの経験を聞かれた時に「パイソンチョトデキル」と答えてもいい基準は?
自分ができると思ってればそういえばいい
そんなフワッとした質問に厳密性は求めてない
今までJavaとかC++でコツコツコードを書いてたんですよね
で少し前から機械学習のことをやってて、Pythonはそこで各種ライブラリを呼び出すのに
しか使ってないんですよね、基本的には
Pythonそのものよりライブラリをどう使うかに重点がある感じ
こんなでも「パイソンチョトデキル」と言ってみてもいいですか?
応用情報とpython認定試験の2つの資格(基礎・データ分析)と実務経験5年以上位でちょっとできるでいいと思う
そんなのとってるPythonistaどこにおるん?
実際コーディング試験で能力測るからいいんじゃねーの
資格取ってる人は民間に証明してもらえるから案件獲得時のアピールにはなる
齢を取ればわかるが
こいつが 何がどの程度できるか 会っただけじゃわからんのだから
資格持ちかどうかでとりあえず足切りできる
判らんというとこまでは合ってる
使って駄目だった時に、でもこいつ資格持ってたから、と採用担当が言い訳する為にある
二次元配列の0埋め初期化調べたら
list = [[0]*13]*20
とか書いてあったけどこれ内側の配列のidがすべて同じになっててダメじゃん
なんで複数のサイトでコレで解説されてるの…解決に無駄に時間食った…
配列を埋めて初期化して
array[n]
にいつアクセスしてもエラーにならないんだ
という考えは古いので、そんなことをしなくても済む方法を考えた方がいい
列毎にencode指定するにはどうしたらいいの?
文字列にしたい列と数値にしたい列が混在してる。
csvインポート時に指定したらいいのかエクスポート時なのかもよく分かってない。
csvインポートしてsumまではできたけど文字化けと数値が文字列判定で文字がくっついた状態。12+34=1234みたいな。
でも文字列指定にしないと0落ちする列がある…。
>>490 いまだにそんな解説してるサイトは君がここに晒して知識の共有DB化に貢献してくれ
あと普通はリストじゃなくて配列はnumpy使え
配列とリストは似たようなもん
という考えを、perl使ってたから最近まで引きずってた
$array[10] = 1;
とかいきなり書いても平気
その時の$array[0]は空なので、1を足してもいいし文字列を結合してもいい
>>497 何それ。$array は
[1,0,0,0,0,0,0,0,0,0] になるの?
[1,1,1,1,1,1,1,1,1,1] になるの?
それとも全く別の何か?
あ、単に
[0,0,0,0,0,0,0,0,0,0,1] か。
>>497 配列と連想配列をいっしょくたにしてそうなのと
BASICのようなPerlの緩さはまた別の話
単に空になる
空は数字として評価すれば0だし、文字列として評価すれば''
>>497の意味が分からん
perlの配列とPythonのリストを同じようなものと考えてたっていうこと?
Cの配列だな
領域を切ってしまえば途中のインデックスにいきなりアクセスできて当然という感覚
perlのリストとpythonのリストは見た目も挙動もよく似てるけど、
根本のところが全然違う
すみませんasyncioなんですが
asyncio.run(main())
というのは
asyncio.run(main)
ならわかるんですが、なんで asyncio.run(main()) なんですか?
関数呼び出してますよね?
納得できる理解が出てこないんですが
それとも asyncio.run() は mainの返り値を受け取ってるだけでしょうか?
それならわかりますが
DataFrame df があったとき、たとえば
df["A"] > 0
とすれば列 df["A"] の各要素が 0 より大きいかどうかを示す真偽値の列が返りますよね。
10 より大きいか、0 より大きく 10 より小さいか、0 より小さいか、という 3 値の分類をしたいときはどのようにするのが良いでしょうか?
apply で行ごと処理するやり方は分かるのですが、上の例のような高速なやり方を知りたいです。
どう頑張っても真偽値は2種類なので、その組み合わせになるだろう
>>508 ああ間違えた
もちろん含むように定義します
>>509 DataFrameの書き方ではどうか、という質問です
(df['A']<0)*1+(0<df['A']<10)*2+(df['A']>10)*4
訂正
(df['A']<0)*1+((0<df['A'])*(df['A']<10))*2+(df['A']>10)*4
はるか昔にBASICで速度稼ぐために条件式組んでたのに似てるね
条件だけ見るとこれでよくね?
(df['A']<0)+((0<df['A'])*(df['A']<10))*2
あ、これでいいかw
(df['A']<0)+(df['A']>10)*2
3パターンしか無いのに3bit必要という時点でおかしい
3周することになっても単純に各条件でboolの結果を得たほうが速いと思う
1周で済ませたければTrue/Falseの意味がちょっと変わるけどブロードキャストすれば速い
df[‘A’].to_numpy()[..., None] < [0, 10]
>>511-512 ありがとうございます
locにブール列を渡すのでも良さそうだと思いました。
>>514-517さんももちろんありがとうございます
exeにしてダブルクリックすると起動するんだが黒い画面が出てくるんだけどこれって消せる?
exeにしてって操作がPython標準じゃないからなんともいえんけど
使ってるツールにコンソール無効化みたいなオプションあるはず
pyinstaller xxx.py --noconsole
pypyでbeautifulsoupとかのライブラリ使えないのなんとかならんの?
自分でhtmlパーサーなんて組めないぞ
>>520 ソースを hoge.pyw にすると消える
>>524 pypyつかうくらいだから問題はわかってんでしょ?
素直にPure Pythonなモジュールか
自前で外部ライブラリをCFFIやcppyyで使えばよろし
Pylanceが急に日本語に切り替わってて気持ち悪い
ファイルやディレクトリ名の頭文字を数字にすると
importするときにエラーになる
一体どうすれば・・
例 5chモジュール作りたい
5ch.py
import 5ch # error
_5ch.py
ch5.py
【目的】_5ch.py
なんかダサいけど仕方ないか
先頭数字の識別子が使えるほうがマイナーだから
命名の時点で候補から外すしかない
>>529 import importlib
_5ch = importlib.import_module("5ch")
>>529 例えに敢えて突っ込む。
ひろゆきが5chを奪還したら、モジュールを改名せなならんでしょ。なので、chmate に倣い ch.py。
そういえばAIに特化した言語が新しく出来るんじゃなかった?
それってもはや機械語じゃない?それに人間には読解不能な奇怪語かも知れん
AIが一人で考えるなら言語なんか要らないけど、
複数のAIが話し合いをしようとすると何らかの共通言語は要るだろうな
そんなニュースはあったな。
終わりの始まり…? 独自言語で話しはじめた人工知能、Facebookが強制終了させる
https://www.gizmodo.jp/2017/08/facebook-ai-sf.html AIイラストで背景や服に描かれてる謎の文字がそれじゃね?
ただでさえ人間の言語でも色々あるし
プログラミング言語だって一つじゃないのに
AIが言語使い始めたらそれこそ百花繚乱になるだろうな
地球ピジン語みたいなエスペラントに代わるものができるかもしれん
そんなことよりインタープリタからの脱却はまだまだ先なのかね
不美人語や醜女語、人三化七語があるのかと思ってしまった。
>>546 ソースと実行ファイル両方管理すんのマンドクセ
インタープリタこそ至高
つかPythonこそChatGPTのcode interpreterで十分やろと
別にコンパイルしようと思えば出来るじゃん
それにインタープリターのメリットは実行環境選ばないところにあるから
>>539 機械語じゃなくて中間言語になるだろ
機械語同士は方言多いから
>>550 計算によってはハードやOSの違いで値が変わることもあるけどな
ちょうどCythonがメジャーアップデートしたらしいから使ってみたら
お前ら知らないようだから教えてあげようと思ったんだがやはり止めることにしたんだ。
seleniumでプロキシを通すとき、ローテーションタイプのエンドポイントだといちいち認証ダイアログ突破しなきゃならないのがめんどい
例えば
http://username:password@host:port みたいなのだと
--proxy-server=でchromeドライバーのオプション設定しても認証無理だった
profile上書きして、みたいな解決策はあるみたいだが
>>557 それは自分で実際やってみて出来たってこと?
一応やってみようと思うが、過去にadd_optionとかでやった気がするかもしれないが
ぐぐってStackOverflowに無かったと思うのでたぶんできなさそうな気もする
>ぐぐってStackOverflowに無かったと思うので
技術者辞めたほうがいいよwww
そもそもselenium使うのがダメなんだと思うよ
>>559 なんで笑ってるのかまったくわからんけど
StackOverflowにすら無かったかも、逆にあったら試し済みかも
って意味な
で、結局
>HTTPヘッダで渡せん?
ってのは自分で試してできたのだろうか
そこ聞きたかったのに完全スルーされてる
ちなみに認証ヘッダ作成してadd_argumentする方法は通らなかった
というかその程度で解決してるならstackoverflowにすでにやってる人がいると思う
そもそもプロキシサービスが提供するベーシックな解決方法が
今のseleniumじゃ--headlessでは無理ですスマン、みたいな説明だったし
てかstackoverflowに限らずまずざっと同じ事例調べんのって普通のことだと思ってたけど違うのか
>>557>HTTPヘッダで渡せん?(だろうか)
のようにまずアタリつけて、「お、イケた よっしゃー!」みたいな?笑
もちろんそういう喜びはあるけど今回みたいにダメだった時どうすんだろ
べつに煽ってるわけではないが気になるなぁ
たしかに、自分で試したこともない方法で助言するメンタリティの人は何をやってもだめだろうなぁ
>>557は可能性の一つを示しただけだろ
それを否定して、しかもその根拠がQ&Aサイトに載ってないから、だぞ
だいぶやばいだろ
探し物してるときに一番ハッキリさせておきたいのは
そもそも無い物を探してた
かどうかってところ
あそこにあったんじゃなーい?
とか助言どころかむしろ邪魔でしかない
普通は可能性を示されたらそれが正か否かの確認を自分でしない?
パソコン自体の不具合もそうやって絞り込んでいくし
まずググれとは言うくせに
助言者には、出来ると思うじゃなくまず自分で試せ
とは言わない謎
相手がぐぐっていたら、それ試しましたって不毛になる可能性も高まるのに
なぜか上から目線で自分に甘い
実際、試して出来ました出来ませんでしたって事例があるのがstackoverflowなどのナレッジコミュニティ
>>565は根本的に勘違いしてるけど
>>555は1_も助言は求めてないぞ
どこそこで壺買ったらうまくいったぞ
という可能性を示されたら生か否か確認を自分でしないとな笑
いや、そんなことでうまくいかないと知ってる側からすれば確認などするわけない
まずおまえが自分で試せ、となるだけ
A「わからないんです 教えてください」 → B「○○すればええのでは」 → A「わかりました試します」
これはわかる
A「これは出来ないっぽいぞ」 → B「○○すればええのでは」 → A「そんな事例ないけど、自分それでできた?」 → B「知らんけど、可能性を示されたら自分で試せや」
これはまったく理屈がわからない
現実的に後者のやつがいたらごくごく普通に不信感抱くけど
>>555のURLみるとBasic認証だったんで
技術的には固定のHTTPヘッダを出力するだけなのを案内
うまくいかないのはヘッダ出力か、なーるほどとなると甘く考えてた
おなじように site:stackoverflow.com 縛りでググったけど
add_argumentは仕様でできないからrequest_interceptorをつかえと
いくらでもヒットするし意味わからん
ごめんなさい、間違ってました
悪いのはID:Ewgs5Hf50です
任意の長さのlistを受け取る関数で、listが一つの要素しか持たないときはlistの代わりにその要素を渡しても良いことにしたいのですがどうするべきでしょうか?
つまり
func([hoge])
の代わりに
func(hoge)
と書くのを許したいということです。
C++ならオーバーロードするだけですが、Pythonの場合はどのようにしますか。
>>573 API設計の良し悪しは置いとくとして
何もしなくても関数の引数に違う型を渡すのは許されてる
type hintの話ならunion使えばいい
int | list[int]
オーバーロード的に別関数にしたいなら関数名を変える
listが一つの要素しか持たないときでも、例外を設けずlistを渡すべきだ。
自前で型を判定して分岐する。
def func(arg):
if not isinstance(arg, list):
arg = [arg]
return arg
print(func(1)) # [1]
print(func([1,2,3])) # [1,2,3]
一応、オーバーロードっぽい書き方もできる。(結果は上と同じ)
singledispatch という名前の通り、先頭の引数にしか効かないけど。
from functools import singledispatch
@singledispatch
def func(arg):
return [arg]
@func.register
def _(arg: list):
return arg
a, _, b, _, c = list
みたいにせずに、
a, b, c = list[0, 2, 4] # 誤り
みたいな感じにリストの一部だけ抜き出すにはどうすれば
>577
a, b, c = (list[0], list[2], list[4])
あと変数名を'list'にするのはよせ
numpyやpandas使うともうちょっと気の利いた書き方もあり
>>577 >>> L = [1, 2, 3, 4, 5]
>>> a, b, c = (L[n] for n in [0, 2, 4])
>>> a, b, c
(1, 3, 5)
>>577 >>> import pandas as pd
>>> L = [1, 2, 3, 4, 5]
>>> L = pd.Series(L)
>>> a, b, c = L[[0, 2, 4]]
>>> a, b, c
(1, 3, 5)
>>577 >>> import numpy as np
>>> L = [1, 2, 3, 4, 5]
>>> L = np.array(L)
>>> L
array([1, 2, 3, 4, 5])
>>> a, b, c = L[[0, 2, 4]]
>>> a, b, c
(1, 3, 5)
現状はリストのインデックスにリストがくるとただのエラーになるから、
pythonがpandasやnumpyの仕様を取り込んでくれればいいのに
まあ、
a, b, c = L[[0, 2, 4]]
こう書く代わりに
a, b, c = np.array(L)[[0, 2, 4]]
こう書けばいいだけか
不要な要素を除去するステップと
個別の変数や辞書にマッピングするステップは
分けた方がいいんじゃないかという気がする
良く考えてみたら分けられてるといえば分けられてるのか
ただ両辺の要素数の一致を保証できるコードか
一致しない場合も考慮したコードじゃないとモヤモヤする
具体的にどういう用途だったかというと、excelのシートを一旦2次元配列に読み込んで、
その中から必要な部分を抜き出している
先頭の行をインデックスにして、そこに書かれた名前でやるのが普通だけど、
得体の知れない手作りデータがソースだと、そんなこともある
>>588 それならfilterのが楽じゃないか
>その中から必要な部分を抜き出している
これをコードに落とし込めるならだけど
filter(lambda x: x % 2 == 0, l)
飛び飛びだよ、という意味で0, 2, 4なだけで、もっと続けると、
0, 2, 4, 7, 11, 12 みたいな感じになる
そういう用途ならpandasのread_csvやread_excelでskiprowsやusecolsを指定して必要な部分だけ読み込むかな
csv.reader縛りでも同じように
usecols = [0, 2, 4]
[row[i] for i in usecols]的な処理をする
入力データを整形するステップと
整形したデータをもとに計算加工するステップは分離しておきたい
>>590 >>589のコードはあくまで例で、必要な部分を抜き出す処理を関数化できるならっていう意味です
官公庁から送られてくるデータで、csvとかjsonで送ってくれたら楽なのにexcelファイルでしか送ってくれないとかいうのあったな
取り消し線で消した部分は無効にしないといけないexcelとか地獄
あと何故かみんなセル結合大好き
マイナンバーは作った時に暗証番号の登録が大量にあった時点で、
これは絶対駄目だわと思った
行政に理系が皆無なんだよな
理系なら絶対せんやろということを平気でやって失敗する
システムは別に間違ってない
紐づけの処理を間違ったヒューマンエラー
何故間違ったかというと、前の人の画面のまま次の人の入力したから
うんちをすると、おしっこも同時に出るようなものかな。
>>593 官公庁はR使ってるからな
互換性持たせるためにpandasつかえってことでしょ
マイナンバーをプライマリーキーにすれば95%くらい解決する話
要件定義で失敗してる
その段階でのミスはただのバグで容易に修復が可能
仕様や要件がそもそも間違ってるので、もうどうしようもない
>>601 マイナンバーをプライマリキーにしたらダメだよ
クレジットカード番号をプライマリキーにしないのと同じ
一体どういうシステム組めば同姓同名の他人と取り違えて登録できるんだよというのは疑問だった
まあ普段からEXCELしか触らない事務員からすればcsv何それだからね
pandas使うにしろ目視手操作による前処理はまあ必要
人間一人一人を本気で識別しようと思ったら塩基パターンのダイジェスト値でも求めるしかなさそう
いやそれこそ個人情報だけどな
>>612 八卦占いレベルと聞いているが、向上したのかな。
>>598 主張1「前の人がログアウトしてない」
>>605 主張2「同姓同名の人が重複」
つまり2の原因が1だと言ってることになる
そんな奇蹟的なことがあるか?
政府の発表は嘘だということ
人とチンパンジーの遺伝子が99%同じって話もこれ100分率が尺度として粗すぎるって事だけどな
>>610 最近プーチンの影武者が話題になっているが
NE○が自慢してる画像だけで100億分の一で判定出来る顔認証AIで判定して欲しいものだ
>>601>>604
どのテーブル/エンティティを対象にしているかを抜かして議論するのがそもそもダメ。
マイナンバーに紐付くべき情報を保持するテーブルでマイナンバーをキーにするのは何もおかしなことはない。
>マイナンバーに紐付くべき情報を保持するテーブルでマイナンバーをキーにするのは何もおかしなことはない。
マイナンバーを発行する機構のシステムでもアクセスキーを持つ情報保有機関のシステムでもそんな設計したらダメだよ
詳しく知りたければDB設計スレにでもどうぞ
詳しくは知りたくないがざっくり説明すらできないのは何も知らんとしか
>>618 まずはどういう理由でダメなのかを一言で説明してみて。
更新異常とかパフォーマンスとかセキュリティとかいろいろあるわけだし。
マ板的な話題かも知れんね
なぜマイナンバーカードはうまくいかないのか
http://2chb.net/r/prog/1688658413/ まあこういう話題は身近なプロジェクトでも起こりうるのであながち無縁ではない
>個人番号(マイナンバー)は原則として生涯同じ番号を使い続けていただき、自由に変更することはできません。
>ただし、漏えいして不正に用いられるおそれがあると認められる場合に限り、ご本人の申請または市町村長の職権により変更することができます。
対策1
新しいレコードを作成して対応(個人番号を主キーと出来る)
対策2
個人番号+適用期間のテーブルを持つ(個人番号を主キーと出来ない)
DB設計的に綺麗なのは後者だけど、実装が楽で高速なのは前者
テーブル結合が発生するやり方は性能設計的にやりたくない
個人番号自体は悪用された場合等に変更されることもあるんじゃなかったっけ?
だとすれば、これをプライマリーキーにしたらまずいと思うんだけど
例外なく個人と生涯対応した隠しIDみたいなのがあって、それで管理されている
個人番号はそれと紐付けられた情報の一つ
>>624 それは個人とマイナンバーをちゃんと区別する話。
再発行があるなら古いナンバーに紐付く情報と新しいナンバーに紐付く情報が個別に存在するかもしれないし。
個人番号をある数値で割って剰余を〇〇みたいな古典的な暗号化だったら笑う
個人番号って秘密にするものなの?
身分証明証として使えばふつうに漏洩するじゃん。
どっかの店の会員登録したり、使うケースは今後多くなるんじゃない?
なぜなら保険証も免許証もなくなるのだから。
番号自体でどうこうできないけども
トラッキングに使えるから収集は制限されてる
個人情報は保護しなければ
と理由もなく思い込んでるフシがある
昔は住所も電話番号も普通に公開してたのに
スウェーデンみたいに番号知られたって何も困らんというスタンスの方がいろいろ便利
10年以上Python使ってきたけど、今日ドキュメントを見ていてmatch文て存在を初めて知って軽いカルチャーショックだわ
これCとかのswitchだよね?
Pythonはswitchがなく、複数の条件分岐にはif~elifを使うってのが常識だったように思うが俺が見落としていたのか
まあまあ最近に追加されたから知らなくてもおかしくはないかな
Cのswitch/caseとしても使えるしもっと複雑なこともできる
職場で個人的にEUCを推進していてさ
自分で書いた小物ツールを他者に説明したりするんだけど
偉そうに「Pythonはシンプルを旨とし、一つのことをするのに
複数の書き方はできないようになってる。
よって条件分岐はifしかない」なんて能書き垂れてたんだよね
人に教える立場の者は常に勉強してないといけないなって反省
>>634 ちなみに、utf-8よりEUCを推奨する理由についてはどう説明してるんですか
>>635の意味がわからなかったけど
>>637で把握
マジレスしとくとエンドユーザーコンピューティング
エンドユーザー部門が自力でツールを開発メンテすれば金がかからず仕事も楽になる
>>635 eucはsjisより後に作られた。もちろん理由があってのことだ。
UTF-8が標準なのもなんかなぁ
マルチバイト環境ならUTF-16のが効率よくね
世界的に普及している中で世界中の文字をそれなりに扱えるのがUTF-8だから
>>623 そもそも12桁って少な過ぎる
絶対将来枯渇するよな
>>628 そもそも秘密なら「教えろ」って言ってくるはずが無い訳だが
そういう仕組みにはなっていないね
>>642 unicodeのcodepointのうちで
sjisに変換不可能な文字は存在するが
eucなら変換出来るんじゃないかな
それだけでもsjisがいかに糞か判る
>>638 とりあえず、
>>637 っていうか、utf8普及しまくってるのに何でわざわざeucにするんですかって聞かれ時はどう答えてるの?
>>647 読み間違えてるよ
誤:EUC(Extended Unix Code)を推奨する
正:EUC(End User Computing)を推進する
EUC(European Union Center)だろ。
>>643 日本が存続する限り運用するなら何桁にしても枯渇する
足りなくなったら電話番号みたいに桁増やすでしょ
その時はお役所仕事でグダグダになるんだろうけど
IPアドレスの枯渇とかと同じだと思ってるな
ビット数なんか決まってないんだからどうにでもなる
内部的には19桁までいける筈
web3は国策のはずだがどうなったのだろうな
失敗するんだったらコッチで失敗した方が後の糧となるのにな
web 2.0の時点で何それ知らんだったのにまだやるのか
from importってどこで定義すれば良いのか規則とかあるのでしょうか?
from . import samples
def util():
pass
def main():
ここでsamples.aaaなどを参照する処理
とかやった場合にsample.aaaでutil参照してる場合に循環importエラーでますよね
なのでmain関数の中でfrom .import samples
にするかそもそもutile関数を分けるか、だとおもうのですが
そういう場合は、って慣習があるのか気になりました
as hogehoge するとか
ディレクトリ造って __init__.py の方でなんとかするとか
最小構成はこんな感じです
https://pastebin.com/1VEJDXPC 要は、samplesとhogeはお互いの機能を使い合いたい、感じです
仮に、aaaでしかsamples.util使わないならaaaの中でimportすれば循環は回避できます。
また、
hoge.utilの中ではsamplesを参照しない、
のは誰が書いても論理的に確定しているから
hoge.mainの中でsamplesをimportする
という方がしっくりきます
しかし、hoge.main以外にmain1,2と増えた場合に毎度その中で書くことになります
なのでそれが通例?なのかな、と。または別の慣習があるとか
それだったらもう、
「samplesの機能を使うようなモジュールとそうでないモジュール」
として、hoge.utilを完全に隔離した方がシンプルで迷うことは無いのではと考えました
こういうの__init__.pyとかで解決できるんですかね・・?
ちょっと調べてみようと思います
>>656 感情論で言うと
「hoge.util内でsamplesの機能ひとつも使っていないのに、どうしてhoge全体でsamplesをimportしたの?」
が根本的な問題なような気がして・・
hoge.py の中で from samples import aaa
>>658 >>655の>ここでsamples.aaaなどを参照する処理
の”など”というのは、もしかしたらbbbかもしれないしcccかもしれないし
mainの引数を受け取って条件分岐したりgetattrしたりするかもしれない
ということです
つまりhoge.mainをもう少し汎用的に書くとすれば
hoge内でsamplesから使う機能を把握しておき、例えば
from samples import aaa,bbb,ccc,ddd
など使う可能性のある機能だけを事前に宣言しておいて
def main(sample_type):
のように条件分岐する設計がベストということでしょうか
たしかにこれならmainと同じ場所にutilを書いても論理性が担保されるなと思いました。
デメリットは、samples側でsamples_typeに渡す引数に変更があった場合
import aaa,bbb,ccc,ddd の行 と hoge.mainの条件分岐内のコードも修正しなければならない
ということくらいでしょうか
というかsamplesでfrom .hoge import utilしていると
hoge.pyの中で部分的に from samples import しても循環エラー出ますね。
>>658 やはり、使わない機能は隔離して一方向でimportする
というのがベストなのかもしれない
何でそういう構成なのかよくわからんからあれだけど、そのままでいくならhoge.pyのmainを__int__.pyに移すとかじゃない
>何でそういう構成
構成にしているというか、現状はしてません
samples.pyとhoge.pyでお互いの機能をimportし合うケースってあるよね
というのが前提にあって、かつ
「hoge.mainとhoge.utilは機能的に関連性が高いので同じpyファイルにまとめる」
と循環が起きる
対策は
(1)importの場所を変える
(2)pyファイルを分ける
(3)__init__.pyでやる
で、今は(2)hoge.mainとhoge.utilをhoge.pyとhoge_util.pyに分けてます
>hoge.pyのmainを__int__.pyに移す
というのがいまいちわかりませんが
とりあえず__init__.pyで処理したのは
https://pastebin.com/DctEgQwC これですが、やはり循環エラーが出ます
やり方があっているのかはわかりません。
>>663-665 ありがとうございます
>mainを__int__.pyに移す
って文字通りだったんですね・・w
ただ、これってhoge_util.pyとhoge.pyに分ける
と何が違うんでしょうか??
hoge.mainという関数名はあくまで最小構成のための仮の命名なので
__init__.py内に書くのは雰囲気的には合ってますが
もっと具体的な機能名だった場合に
hogeモジュールとほぼ関係が断ち切られるので困るような
ちなみにhoge_util.py hoge.pyにあえて分けたやつです
https://pastebin.com/SkAM1JhB >>662 >samples.pyとhoge.pyでお互いの機能をimportし合うケースってあるよね
あるか?
__init__.pyってディレクトリ名を名前空間として
他のクラスを使う特殊なモジュールだという認識
言い換えればディレクトリ名というクラスのコンストラクタであり
ディレクトリ内のモジュールは内部クラスである
util分けずに
>>662の(1)のimportのスコープを替えて回避する、もついでに
https://pastebin.com/NsXLF3T2 やはりimportは自作モジュールか否かに関わらず
基本は一番上のスコープでimportするようにして
そのimportしたモジュールの機能を使っていないものは
素直に隔離して小分け、という規則に従った方がいいっぽいですね
まだ何か弊害ありそうな気はするものの
matplotlib.pyplot.show()すると一々ウィンドウができてスクリプトが止まるけど、そうならないでほしい
block=Falseにすると止まらないが図が一瞬で消える
show()する度に永続的な (=閉じるまで消えない) ウインドウを出しながらスクリプトは続行する方法ありますか
この手の質問してくる人が
>>671を見てパッと理解できるとは思えん
>show()する度に永続的な (=閉じるまで消えない) ウインドウを出しながら
って極論ブラクラみたいになるってこと?
>>670 そのやり方はわからないので必要ないかもだがあえて別の方法を掲示
自分がやるなら画像に出力して、ビューワで表示するなり
簡易的なhttp-serverでも立ててwebアプリにしてしまう
画像出力するだけの方をチャッピーに聞いてそのまま実行したけどできた
https://ideone.com/pNXjgN show()使わずにpause()してdraw()するんだよ
>>671,673
ええ。全くわかりません。
一時ファイルに書き出して最後に全部表示して消すとかで代替しようかと思います。
>>674 >> show()する度に永続的な (=閉じるまで消えない) ウインドウを出しながら
> って極論ブラクラみたいになるってこと?
そうです。
意外と難しいっぽいですね。
>>675 何も理解せず的外れなこと言ってるね。
いやよく見たら
>>671も同じウインドウ内で次々と違うプロットを出す方法じゃん。
show()毎に前のウインドウを残したまま新しいウインドウを出すというのが今やりたいことです。
>>670 その文面をChatGPTに入れて聞けよ
>>678 うん。で、なんで
>>675みたいな投稿しちゃった?
マルチスレッド、マルチプロセス、同期、非同期、その辺もろもろの基礎知識ないとダメかと
急がば回れでまずはそこを学ぼう
そうだよね
俺が間違ってたよ
画像のエンコードから学んでくる!
まず「急がば廻れ」(Walk, Don't Run) を聴きましょう。
ChatGPT4-DefaultとChatGPT4-Code Interpreter
に依頼しまくれば基礎知識無くてもアプリできちゃうよ
根気よく会話して、話が噛み合わなくなったら
チャットを新規で始める
エラーが出たらそれをそのままChatGPTに伝える
ChatGPT4-Code Interpreter+Custom instructionsの回答
matplotlib.pyplot.show()を使用すると、
通常、図を表示するウィンドウが開き、
そのウィンドウが閉じられるまでスクリプトが停止します。
しかし、スクリプトを停止させずに新しいウィンドウで図を表示したい場合は、
次の方法を試してみると良いでしょう。
ion()を使用してインタラクティブモードをオンにします。
figure()を呼び出すことで新しい図を作成します。
グラフをプロットします。
draw()を使用して図を更新します。
以下は、この方法を使用して3つの異なる図を作成し、
それぞれの図を新しいウィンドウに表示する例です。
import matplotlib.pyplot as plt
import numpy as np
# インタラクティブモードをオンにする
plt.ion()
# 最初の図
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
plt.figure() # 新しい図を作成
plt.plot(x, y1)
plt.title("図1: sin(x)") # 日本語のタイトル
plt.draw() # 図を更新
# 2番目の図
y2 = np.cos(x)
plt.figure() # 新しい図を作成
plt.plot(x, y2)
plt.title("図2: cos(x)") # 日本語のタイトル
plt.draw() # 図を更新
# 3番目の図
y3 = np.sin(x) * np.cos(x)
plt.figure() # 新しい図を作成
plt.plot(x, y3)
plt.title("図3: sin(x) * cos(x)") # 日本語のタイトル
plt.draw() # 図を更新
ChatGPT4-Code Interpreter+Custom instructionsの回答(別のチャット)
matplotlibのデフォルトの挙動では、plt.show()を呼び出すと、
ウィンドウが表示される際にスクリプトの実行が停止します。
しかし、block=Falseを設定すると、
ウィンドウがすぐに閉じてしまうという問題が生じます。
この挙動を変更して、
show()を呼び出すたびに新しいウィンドウを生成しながらスクリプトを続行するには、
以下の手順を試してみることができます。
plt.figure()を使用して新しいフィギュアを明示的に作成します。
プロットやサブプロットを作成します。
plt.show(block=False)を使用してフィギュアを非ブロッキングモードで表示します。
plt.pause()を使用して少しの間ウィンドウを表示させます。
この時間は調整できますが、通常は短い時間(例えば0.1秒)で十分です。
以下は、この手順を使用して連続して2つのグラフを表示するサンプルコードです。
import matplotlib.pyplot as plt
import numpy as np
# データの生成
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
# 最初のグラフを表示
plt.figure() # 新しいフィギュアを作成
plt.plot(x, y1)
plt.title("y = sin(x)")
plt.show(block=False)
plt.pause(0.1) # ウィンドウを少しの間表示させる
# 二つ目のグラフを表示
plt.figure() # 新しいフィギュアを作成
plt.plot(x, y2)
plt.title("y = cos(x)")
plt.show(block=False)
plt.pause(0.1) # ウィンドウを少しの間表示させる
Seleniumでwebdriver_manager当たり前のように使ってたけど、Chrome115問題でちょっと色々考えさせられた。
結局今後もGoogleがドライバーの場所変えたらエラー吐くわけだから対処するならchromeのアプデしないようにするべきか。
"""
Usage:
test.py [-t <test>]
"""
from docopt import docopt
args = docopt(__doc__)
print(args)
>test.py -t aaa
{'-t': False,
'<test>': None}
win11でdocoptが動いてない気がする
docopt 0.6.2
自決
>python test.py -t aaa
{'-t': True,
'<test>': 'aaa'}
win10と挙動が違う
test.py で起動すると、open('file')はtest.pyと同じ場所から開く
python test.py だとカレントの場所が変わるのでエラーになる
コードに絶対パス埋め込むのも何だし、pyのある場所を取得するのも面倒だし
きっちりすると面倒が増える
parent = Path(__file__).resolve().parent
parent.joinpath(file)
みたいにすれば相対で書ける
これは便利だと関数化ライブラリに登録すると、ライブラリのあるパスになってしまう
別のフォルダのライブラリにある関数を呼び出して、
open(add_current_path(LOG_FILE))
みたいにできないもんか
個人的に基本、pythonスクリプトで扱うファイルやディレクトリの絶対パスは
envファイルに書いてる
環境変数にしてもいいし、嫌ならenvファイルに直接アクセスさえ出来れば
出口が必ず絶対パスになるのでenvの編集だけ気にすればいいだけだし
__file__ を渡したらchdirしてくれる関数を作って、おまじないの1行を追加しよう
windowsでランチャーからスクリプト起動して処理させる使い方とvenvが合うと思えないんだよな
windowsのランチャーって何?サービスと違って実行環境にvenv指定できないの?
def find_data_file(filename):
if getattr(sys, "frozen", False):
datadir = os.path.dirname(sys.executable)
else:
datadir = os.path.dirname(__file__)
return os.path.join(datadir, filename)
だからそれだと、その関数を登録したライブラリのあるパスを返すんだって
漏れは、デスクトップにショートカットを作って、
WSL2, Ubuntu-18.04, VSCode を起動して、
プロジェクトフォルダを開いているけど
リンク先
C:\Windows\System32\wsl.exe code .
作業フォルダ
\\wsl$\Ubuntu-18.04\home\<ユーザー名>\test\proj1
pythonで扱うファイルのパスってほぼ100%
設定ファイルだったり静的だったりするから
pythonファイル毎に相対パスで扱うのは罰ゲームでしかない
同じディレクトリにconfig.iniを置いて、とかむしろ常套手段なのでは
だからenvするのが常套なんじゃないの
env後は相対パスになりようがないから
pythonスクリプト内で相対か絶対か処理を気にしなくてよくなる
venvは殆ど使ったことない上に、使うと混乱するのでむしろ避けてる
ぐぐってもコンソールから使ってる例しか見つからないけど、
例えばexcelのマクロからさらに呼び出して、みたいな時にも使える?
import traceback
print(traceback.extract_stack()[0].filename)
これで実行開始のファイル名が取れたりしない?
スタックトレースの1番最初を取ってくる感じだけど
試してないので、出来なかったらごめんなさい
>>718 env: 普通は環境変数のことを言う
venv: 公式の仮想環境ツール
だからまったく関係ないよ
python.exeのある場所をカレントディレクトリにして立ち上がるのが間違ってるんだよな
そんな場所に用はない
何かのオプションを付けると、pyの場所をカレントにして立ち上がるとかになってるべき
本当はそれがデフォルトであって欲しい
>>723 実行環境無視しろってこと?
インストールしてるライブラリーも環境によって違うのに?
if __name__ == '__main__': で __main__ 描いている人は多いと思うけど
__file__ で自分の .py の位置取れるの知らない人は多い
>>702 ググって分かることなのか...
> python.exeのある場所をカレントディレクトリにして立ち上がる
とか、京人が妄言を交わしているようにし見えないけど、皆真摯に話しているので事実なんだろうね...
眼の前に答えがあっても観えない
観ようともしないフシアナさんには
Pythonは無理
VSCODEでワークスペースに置いて作業すれば全て解決する話なのでは?
>test.py云々
>>716 venvなんてPythonの実行環境をvenvディレクトリ内にそのまま持ってるだけだから、そこのPython実行ファイルをフルパスで直接指定してやればいいだけ
普通はPythonにパスが通ってる状態で
python hoge.py
とかで実行するけど、それを
C:¥foo¥bar¥puroguramu¥venv¥bin¥python hoge.py
みたいにやる
venvそういうのなのか
コンソールでコマンド打って、今からここだけバージョンなんとか、みたいに使うんだと思ってた
複数のバージョンを切り替えたい要求は特に無いので全部最新で構わない
venvとhoge.pyが自分の場所が判ることとは関係ないよね
python hoge.pyしたらインストール先のpython.exeが呼ばれるけど、venvをactivateした場合はpython hoge.pyしたらvenvのpython.exeが呼ばれる
Lib\site-packagesも同様
仮想環境っていうかインストールした環境と切り離して実行環境を構築できるのがvenv
venv環境のPythonバージョンはvenv作るときに実行したPythonのバージョンと同じになる
<div class="form-input-wrapper" data-v-a0d39a18=""><input type="text" name="" value="" placeholder="メールアドレス" class="form-input" data-v-a0d39a18=""></div>
seleniumでこんなelementを取得してsend_keys()しても何も入らない
ぐぐって見つかる自動ログインの記事とhtmlの書き方が違う
何か別の方法が必要?
と思ったらできた
> input を削ったのを忘れてた
折角作ったのに、本番環境のwin7では動かなかった
selenium4だったのが原因みたいで3にしたら動いた
開発用は普通にインストールしたのになんで3だったんだ?
cwd(current working directory)の移動か?
VSCode の拡張機能・Code Runner なら、この設定をチェックしておく
Code-runner: File Directory As Cwd
Whether to use the directory of the file to be executed as the working directory.
そうすると実行時にcd で、そのファイルがある場所へカレントディレクトリを移動してから、
ruby "絶対パス/ファイル名.rb"
又は、ruby "絶対パス/tempCodeRunnerFile.rb"
で、そのファイルを実行する
tempCodeRunnerFile.rb は、Rubyのコード片をコピーした一時的なファイル
設定項目、executorMap には、多くの言語の実行コマンドが書いてある。
"code-runner.executorMap": {
"javascript": "node",
"c": "cd $dir && gcc $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt",
"cpp": "cd $dir && g++ $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt",
"python": "python -u",
"ruby": "ruby",
pythonには、-u が付く
ゲームのBGMの中から効果音を抽出するpythonプログラムを作りたいんですが、いいライブラリとかありますか。
>>711 >>719 今更だけどはsys.argv[0]でも実行開始のファイル名取得できる
config.ini読みたい場合はそこにchdirしてから読めばいい
os.chdir(os.path.dirname(os.path.abspath(sys.argv[0])))
exe化するとexeファイルの場所と__file__が別になったりするからこれ使う
ちなみに今どきはSeleniumよりpyppeteerの方がいいんじゃね?
test.pyのある場所に移動して
python test.py
とすると、sys.argv[0]はtest.pyなんだよな
test.pyの人はモジュール化した関数から実行開始ファイルの場所を取得して
設定ファイルとかを読みたかったみたいだけど
そもそもそういうのはmainがある場所でやって引数で渡すのが一般的
python勉強始めて1年半かかったけど
やっと機械学習動かせるようになった
numpyがpypy3.9までしか対応してなくてつらい
お前ら早く3.10対応させて
ライブラリ作者も大変だな
勝手に上がる本体バージョンに無償で対応させられて
openで新規書き込みで開く時に、そのファイルを他のソフトで見てたりするとエラーになる
問答無用で書き換えるオプションとかある?
ファイルハンドルの一覧を取得して
OSにファイルハンドルのクローズしてもらう
世の中の大抵のソフトはそんなことにならずに、もう一度開くとちゃんと更新されてるんだよな
それらがいちいちそんな面倒なことをしてるとは思えなくて、pythonだけがひ弱に作られているとしか
「世の中の大抵のソフト」と言うオマエの物差しなんぞ誰も知らん
バッチやpower shellでも同じ結果になるだろう
簡単なスクリプトで試すと、特にエラーにならずに期待通りに書き込んだ
条件を似せても成功する
もう少し具体的に書かないとアドバイスは出てこなさそう
seleniumでスクレイピングしながら取り込んだ情報をjsonに書き出す、
というのが実際にやってた処理で、そっちではエラーになるんだけど、
普通にjsonを書くだけでは問題が起きない
ファイルサイズが大きいからかな
OSError: [Errno 22] Invalid argument:
のエラーになるというのがよく判らない
大抵はパスの指定が間違ってるとかが原因だけど、普段はちゃんと動くのに
じゃあ「普段」通りにしてないって事なんだろうな
自分で答えだしてるじゃん
pythonでseleniumつかってブラウザ操作して自動ログインするときについて質問させていただきたいです。
画像を選ぶタイプの認証が存在する場合はどのようにして突破すればいいでしょうか?
一応試してみたことは、
・ログイン画面に遷移した後、ユーザ名、パスワードを自動入力後、
をsleep()を使って10秒止めている間に対象の画像を手動クリックで選択する
そのあと10秒経ったらシステムが自動でログインボタンを押下する
・ログイン画面に遷移した後、ユーザ名、パスワードを自動入力後、
現在のURLを取得して文字列として変数に保存(oldUrl)
2秒に一回回すwhile内でURLを改めて取得(newUrl)をoldUrlとnewUrlを比べて
異なるURLになったらば(ログイン後の画面に遷移できたら)
そのwhileループを抜けて続きのブラウザ操作の処理を実行する方法
この2つ目の方法は、whileが回っている間に画像の選択とログインボタン押下を手動で行うものとしています。
この2点を試してみましたが、うまくログイン後の画面に遷移することができませんでした。
両方法ともログインボタンはアクティブ表示になっていて、
見た目としてはクリックができてないとかそういう感じではなさそうです。
画像選択など、特別な認証が必要ない別サイトでログインを試してみましたが、ログインが可能だったので、
大まかな方法は間違っていないのかなあと思っているのですが...
なにか解決方法などご存じの方いらっしゃいましたら、ご教示いただきたいです。。。
ハイレベルでついていけないと言いつつ煽り文書ばっかだな
嫉妬か?
>>766 マウスの動き等で人間かCPUかの判断してるタイプの認証じゃね?
無駄な動きいれてみても同じかな
例えば同じ自動運転でもuwscみたいにマウスカーソルの制御もいれるとログイン出来るんじゃないだろうか
そのサイトを見ないと分からんのに、目隠しで想像して目的を達するモノを作れとか鬼畜…
マウスの動きなんかサーバには伝わってない
判断するとしてもクリック位置とタイミングから
>>766 手動タスクが必要な箇所にデバッガーのブレイクポイントを入れて
ゆっくり手動タスクを実行しながらブラウザのデベロッパーツールで
DOMやHTTPリクエスト/レスポンスを確認して原因を探ればいい
まずはログインボタン押下時のHTTP POSTリクエストの状況を見てみる
そんなやり方をオープンな場で聞くなよ
どうしてもやるなら自分の力だけでやらないと
>>773も言ってるが、他人の家や車の鍵の開け方を聞いてるのと同じだよ
手動ログインした後の情報を取得しなくちゃと難しく考えて、
再度get()してしまってログイン前に戻っているとエスパー
766です。
回答くださった方も、
あんまりよろしくないのでは?とご指摘くださったも方ありがとうございました。
今回いずれの方法も画像認証の部分は完全に手動の想定で、かつアカウント自体も自分自身のものを使用していましたので、
他人の家の鍵を開けるような悪い方法でセキュリティを突破しているという意識はありませんでした...
確かに便利な技術なので、悪用してしまう方もいるかもしれませんから自動でログインすることを
画像認証は手動だったとしてもエラーを起こす高いレベルで防止している可能性はありますね...
お騒がせしてしまってすみません、みなさんありがとうございました...
・フリーエンジニアが年間3,600万円の売上を上げた方法を解説する
・26歳で独立して月収150万になった 元引きこもりエンジニアの物語
・ブラック企業から退職し、独立後11ヶ月で“月収300万円超え”になるまでの軌跡を
デザイナー社長船越良太に聞いてみた!
・ITフリーランスで月額単価150万円!万が一の就業不能に備える
無料の保険もある「クラウドテック」
・フリーランス時代に月収4万円→最高340万円を達成した船越さんに、
「お金」との向き合い方を聞いてみる
・フリーランスSEってどれくらい稼げるの?月単価160万円の案件を扱う定番エージェント
・フリーランスの仕事や職業の種類って何があるの?独立5年目で月収200万の僕が詳しく解説
>>781 seleniumよりplaywrightでstorage_stateを使ってセッション情報再利用した方が簡単だよ
ログイン処理は手動になるけど
ユーザ名、パスワードを自動入力する所までを、
selenium で自動操作して、
これ以後を手動にすれば?
データベースから取得したレコードを、requestsでどこかに投げるときって
データベースから取得した時点でセッションから抜けた方が良いと思うのだがみんなどうやってるの?
セッション開く → レコードを取得 → レコードを変換して変数に格納 → セッション閉じる
→ 変数に格納されたレコードの内容をrequests.post → 成功or失敗など
→ セッション開く → idなどからレコードを特定 → レコードを更新 → セッション閉じる
セッション開いたままだと
セッション開く → レコードを取得 → レコードの内容を成型してrequests.post → 成功or失敗など
→ レコードを更新 → セッション閉じる
簡潔だが「成功or失敗など」の部分でtimeoutがある場合その影響が気になる
普段使ってないからseleniumでchromeを使ってるのに、勝手にupdateしてエラーになる
しかも116用はテスト版しか無い
>>785 DBへの更新が必要なら基本コネクション維持してやってしまうな
更新時にコネクション状態をチェックして、閉じていたら再接続する処理を入れる
DBへの接続はコネクションプールを使用
メモ
txt.replace("条件","置換")
re.sub("条件","置換",txt)
この引数の順番間違って
re.sub("条件",txt,"置換")
ってやってしまってイラッとする
エラーでないし
>>789 > re.sub("条件",txt,"置換")
sed 's/条件/' txt '/置換/g'
とするような発想はなかなか得られない。誇っていい。
意を決してseleniumを3から4に上げる
影響むっさ少ない
Microsoft「Python in Excel」を発表
猫も杓子もpythonPythonって
数値計算や機械学習ならRやc++で扱いたいわ
Rが適した用途はRがいいんだけど、
範囲が狭いから便利になる人が少ないんだよな
エクセルでpython使えるとか前から言われてたけどついにそうなったのか
mysqlやsqlite3,postgresqlなんかと違って
表示前提のRDBMSって感じ?
まあVBAを嫌ってた人にとっては選択肢が増えるのは喜ばしい事なんだろうな
まだまだ限定的な利用しか出来ないんだな
LibreOfficeとかかなり前から使えてるのに
excelの形式そのものがガンなんだけどな
データを読み込んでxlsxにして保存するだけで30秒とかかかる
100万行に上限がある
ちゃんと処理したいならexcelは極力避けて、人間とのIF部分だけに留めるべき
その程度ならVBAでも大した手間にはならない
ネットからデータ取得出来る様になってれば大分捗るな
外部アクセスは機能制限されてそうだけど
>>804 Dim var とか変数宣言する Python かもしれないよ。Py# とか名づけられて。
>>800 それはわかってるよ
逆説的に、例えば「pythonで、データベース部分をmysqlで、エクセルっぽいアプリ作りました」と変わらくなってくんじゃないのってこと
詳しくは知らないけどGoogle Sheetsとかまさにそうじゃないの?
データベース操作有りきのpythonってことにはなりそうではある
そりゃまぁ表計算ソフトってどう考えても計算機能主体よりもデータベース主体で考えた方が合理的だわな
次はあえてpythonでゲームプログラミング周りを強化してほしい
excelを扱わないといけないこともあるけど、pandasとかそういういい感じのは使えない
ただの2次元配列として読み込んで、必要なデータは自力で探す
機械で素直に読めるようにと気を使うような人だったら、
最初からデータ形式にexcelを選ばんのよ
>>806 記事を見る限りはVBAやマクロの代わりにpythonが書けるようになったとしか思えないが
Pythonでexcel弄るのは
15年以上前から出来てるのを今更
excel上のpythonで実行する方が遅い可能性まである
単にVBAでいじるのが嫌ってだけでしょ。俺もVBAは嫌い。
あんなもんは懲役刑の一種だ
被告をVBA開発3年の刑に処す
リストのappendって順序保証されてたっけ・・?
>>815 ワークシートにコードを書くと、自オブジェクトがワークシートなので、excel.workbooks[x].worksheets[x] みたいに辿らなくて済む「気安さ」はあるのかもしれない。
や、想像だけど。
excelからpython使いたい人はもう使ってるわな
罫線やらフォントやら背景やら
装飾の手間が省けるといいのだがな
excelやpoor point使うのは多様な見せかたができるからだろ
画像の貼り付けとか出来なかったな
似たようなのをフォントと色を工夫して作った
そもそもExcelだけPython OKにするのは違和感でしかないので
Pythonは学習コストが低いから
その点JSでも良いんだけど、そっちは10進数型使えなくて数値計算に向かない
しかし編集はVBA用の糞エディタつかうのかなぁ?
VS Code埋め込んで欲しいわ
学習コスト低いって学習しやすい訳ではなくて応用の幅が広いからコスト低いだけやからな
マルチスレッドや純粋仮想関数などもあるので他の言語と学習時間そのものはそんなに変わらない
学習しやすいってcに比較しても学ぶこと多いのにか?
学習しやすいって何をもって学習しやすいって言ってる?
オブジェクト指向言語であれば他とそんな変わらないだろう
Excel搭載のPythonが古くてクソって言われる未来が見える
>>830 > 学習しやすいってcに比較しても学ぶこと多いのにか?
少ないのでないか。ハードウェアを気にする必要ないし。
>>832 >>794を見る限りクラウド上で実行されるからそれはなさそう
その代わりオフラインでは使えないんだな
Pythonは豊富なライブラリ使ってなんぼだから、
そっちの方向学んでいくとなるとめちゃくちゃに広い
Pythonは外部ライブラリを使わない素の状態が最強
何かツールを作って、ユーザが機能拡張できるようにする
関数とか変数を提供して、それを組み合わせてロジックを自由に作って貰う
そういう時のスクリプトの文法としてpythonは最適
classとかライブラリとかは無くても素直に書ける
Excel上のPythonからExcelを操作する
Excel上のPythonからOpenOfficeを操作できたりするのだろうか。
>>837 名前も文法もゲテモノだろ。早く消えてもらいたい。
enumerateが便利なんだけど使い倒してもいい?
i=0でi+=1で再帰とかした方がいいとか無いよね
大抵は、list_a[i]とlist_b[i]をセットで扱いたい時だからなあ
list[i].a と list[i].b の方が絶対素直
emumerateは地獄の関数
無分別な使用は冥府魔道を行くことになる
具体的にはざっくりこういうことをしたんだけど
何かいい方法ないかな
items = [item1,item2,item3]
prms = [prm1,prm2,prm3]
# prms = [prm1]
max_prm_index = len(prms)-1
for i,item in enumerate(items):
item( prms[min(i,max_prm_index)] )
prmsがprm1の一個しかなかったら、itemsのitem全部にprm1を適用
prmsがitemsと同じ数だけ複数入ってたら、順番通りにitemsにprmsを適用
って感じ
もちろん場合分けでいいとは思うけど
再帰内にかぶる処理があるのでどうしたもんか
>>846 prmsの要素数が1個でもなくitemsと同じ要素数でもない場合はどうするの?
そのmin(i, max_prm_index)でやってるようにprmsの最後の値を適用し続けたいの?
prmsの最後の値を適用し続けたいということであれば
なるべくその意図を反映したコードにする
from more_itertools import repeat_last
zip(items, repeat_last(prms))
more-itertoolsみたいな変なのを使うのが本当に望ましいのか疑問
こんだけ簡潔に書けるpythonてすごいなぁ
コードを文章として読んだ場合、はしょり過ぎてて誤解を招き安いのが玉に瑕
>場合はどうするの?
単にエラー吐いて終わり
>prmsの最後の値を
ではない
>そのmin(i, max_prm_index)でやってるように
は
prmsが1個の場合 → max_prm_index = 0
itemsを再帰したときの i → 0,1,2,,,,,,,,,,
min(i, max_prm_index)の値 → min(0,0)=0,min(1,0)=0,min(2,0)=0,,,,,,,
prmsが複数の場合 → 例max_prm_index = 2
itemsを再帰したときの i → 0,1,2
min(i, max_prm_index)の値 → min(0,2)=0,min(1,2)=1,min(2,2)=2
uncompile6もdecompile3もpydumpckもmarshal使った逆シリアル化も
できないpycファイルの逆コンパイルどうやったらええんや
>>851 >単にエラー吐いて終わり
それなら場合分け必須なので1件の場合と要素数が一致してる場合を含めて
最初から分岐させたほうが効率的
min(i, max_prm_index)はprmsが2件でitemsが4件のときだと
(prms[0], item[0]), (prms[1], item[1]), (prms[1], item[2]), (prms[1], item[3])になるでしょ
つまり不足してる要素数分だけprmsの最後の要素を適用し続ける
そういう処理を意図してないならやめたほうがいい
あとループもしくはイテレートのことを再帰と呼んでない?
>>853
>min(i, max_prm_index)はprmsが2件でitemsが4件のときだと
それは>>846の>prmsがitemsと同じ数だけ
とは違うしあなたが設定したルールだと思う
>あとループもしくはイテレートのことを再帰と呼んでない?
なにか問題が?
>最初から分岐させたほうが
全部を分岐するってこと?
>場合分け必須
から察するに、例えば
if itemsとprmsのチェック:
if prms複数の場合 and :
for item in items:
ここに処理
elif prmsひとつの場合:
for item in items:
ここに処理
みたいなことだろうか?
話はずれるけど前から条件分岐でこういうの疑問だったんだけど
if itemsとprmsチェック:
raise
if 条件:
pass
else:
pass
みたいなことってしないほうが良いのだろうか?
>>846では意図的にif itemsとprmsチェック:rase
の部分を(それ以降の処理に関係ないので)省略したんだけど shutil周りを調べていて気になったのですが
更新日時や作成日時が引き継がれるような、Windowsの通常のファイル移動は
shutil.copy2()で実現できますか?
調べるとos.system()にcopyコマンドを投げる方法なども出てきました
少し気になったのですが、そもそもWindowsの標準的なファイル移動ってcopyコマンドと等価なのでしょうか?
os周りはわざわざimportして頑張ってもどうせ互換性なんか無いし、
コマンド実行するのが確実で簡単にやりたいことがやれる
ふと思ったけどすんごい重いファイルをpythonスクリプトでmvなりコピーしたときって
OS側?で処理してる間はpython側で並列作業になりそう
要はpython側で
重いファイルを移動する処理()
print("まだ移動し終わっていないのにここ実行される")
ってなってもええんか?
os.system()じゃなくてsubprocess.run()とか
asyncioのcreate_subprocess_exec()やcreate_subprocess_shell()で待ち受けて
>>854
enumerateとかminとか使わず、zipで処理しちゃえば?
>>848のrepeat_lastを無くしただけだけど
if len(prms) == 1 or len(prms) == len(items):
for item,prm in zip(items,prms):
item(prm) >>1 carnetsのデータが消えたのだが、
どうすればいいのか、、、
>>858 横だけど
良いヒントを得た
ありがとう
>>859
itemsが3つ、prmsが1つのとき結果はどうなった?
items = ["items","item2","item3"]
#prms = ["prm1","prm2","prm3"]
prms = ["prm1"]
if len(prms) == 1 or len(prms) == len(items):
for item,prm in zip(items,prms):
print(item,prm) shutil.copy(), shutil.copy2(), shutil.copyfile():
これらのメソッドは、ファイルの内容をバイトで読み取り、
コピー先のファイルに書き込みます。
ファイルのサイズが大きい場合、このプロセスは時間がかかりますが、
Pythonは他のタスクをブロックせず、他の操作を進行させます。
os.systemを使用した場合
子シェルを作成し、そのシェルでコマンドを実行します。
ファイルのサイズが大きい場合、コピーに時間がかかりますが、
os.systemはコマンドの実行が完了するまでプログラムの実行をブロックします。
そのため、他の操作を進行させることはできません。
osモジュールを使用した場合
ファイルの内容をバイトで読み取り、コピー先のファイルに書き込むため、
ファイルのサイズが大きい場合、このプロセスは時間がかかります。
しかし、Pythonは他のタスクをブロックせず、他の操作を進行させます。
subprocessモジュールのrun関数を使用した場合
ファイルのサイズが大きい場合、コピーに時間がかかりますが、
subprocess.runはコマンドの実行が完了するまでプログラムの実行をブロックします。
そのため、他の操作を進行させることはできません。
subprocess.runは、デフォルトで子プロセスの標準出力と標準エラーを
親プロセスにリダイレクトします。
そのため、コピー中にエラーが発生した場合、
エラーメッセージは親プロセスに表示されます。
subprocess は popen とともに使うもの
run なんてしたら subprocess の意味ない
初心者が誤解する嘘は良くない
>>864 詳細にありがとうございます
手続きの順序が前後したら大抵困るので
shutilよりもos.systemやsubprocessを使うべきという感じでしょうか
Windows標準のコピーもバイトを読んでバイトを書くという仕様なのでしょうか?
すみません、Windows標準の移動も です
あちらは同じドライブ間のファイル移動だと一瞬で終わるので読み込み書き込みはしていないのかなと思ったのですが
プログラムの動作が遅くなるのはIOが詰まってる場合が大半なので、
ボトルネック部分が100%働くように調節するとむっさ速くなる
ファイルのコピーは遅延書き込みでまだ完了してないのに先に進むことでさらに速くなる
>>868 同じドライブならファイルの中身を移動されるわけではなく、どこに格納されているかの位置情報を変えるだけだから速い。
あ、できた
試せばいいだけだな
ぐぐってもそんなサンプル無いから出来ないのかと思った
単に複数の変数を一つに束ねたい、というだけの理由でクラスを作る時に、
コンストラクタに値をずらずら並べて渡すことになるけど、
それを順序で管理するのはどう考えてもおかしいと思ってた
C言語だとstructだけど、pythonのはバイナリデータを扱う奴なのでは
>>873 リストをアンパックで渡せばスッキリ書ける
位置引数として渡された引数は関数内の処理の変数としては何という名前で渡されてるんでしょうか?
原理的に完全に無名ですか?
フレームの中では何かは付いてる?
お詳しい方ご教示ください。
@Pythonのライブラリxlwingsで、ピボットテーブルを更新したいと思っています。
A今、FILE.xlsxには「Sheet1」にデータ、「Sheet2」にピボットテーブル(Pivottable1)が入力されています。
B以下のようにプログラムを組みました。
import xlwings as xw
app_excel = xw.App(visible = True)
wbook = xw.Book('FILE.xlsx')
wbook.sheets['Sheet2'].select()
wbook.api.ActiveSheet.PivotTables('Pivottable1').PivotCache().refresh()
wbook.save()
wbook.close()
Cエクエルは立ち上がるのですが、ピボットテーブルは更新されずにそのまま止まってしまいます。
どなたか原因を教えて頂けますでしょうか。
Pythonは3.10、Windows10を使用しています。
よろしくお願いします。
import xlwings as xw
# Excelアプリケーションを表示しない場合は、visible=Falseに設定
app_excel = xw.App(visible=False)
try:
# ワークブックを開く
wbook = xw.Book('FILE.xlsx')
# シート2を選択
sheet2 = wbook.sheets['Sheet2']
sheet2.select()
# ピボットテーブルを更新
pivot_table = sheet2.api.PivotTables('Pivottable1')
pivot_table.refresh()
# ワークブックを保存
wbook.save()
finally:
# ワークブックを閉じ、Excelアプリケーションを終了
wbook.close()
app_excel.quit()
excel の話題は 「excel python スレ」 でやってほしいな
pythonからexcelへのアプローチはxlwingsとopenpyxlの2つがあって、
openpyxlはpythonの内容だけど、xlwingsはもうexcelというかVBAの内容なんだよな
どうしても駄目な部分以外はopenpyxlで頑張る方が幸せになれる
ご回答ありがとうございます。
ご教示頂いたとおりにやってみましたが
「・・object has no attribute 'refresh'」
「pywintypes.com_error: (-2147352570, '名前が不明です。', None, None)」
とエラーが出ました。
これ以降は「excel python スレ」で伺ってみます。
お手数をおかけしました。
pandasが別にexcelの機能を持ってる訳ではなくて、openpyxlのラッパーなだけ
そしてpandasを通すとインデックスとか付いた変なデータ構造を扱わないといけなくなる
ピンと来るなら、もったいぶらず、教えてあげると良いじゃない。
5chで質問者の成長とか考える必要ない
どんな奴か分からないから
こんな事も分からないの?
痴呆症を疑うレベルw
エラーメッセージ
object has no attribute 'refresh'
# ピボットテーブルを更新
pivot_table = sheet2.api.PivotTables('Pivottable1')
pivot_table.refresh()
>>893 分からなくて相談に来た相手に、こういう言葉を投げる意味はあるのかな。
> こんな事も分からないの?
> 痴呆症を疑うレベルw
>>894 だったらお前が教えれば済む話だろ
教えていないと言うことはお前も俺も同類なんだよ
仮に宿題だろうがなんだろうが普通に解答を教えればいい
>>891 自分が成長させてあげてるとか恩着せがましいにも程がある
回答者が与える影響など世界規模で見ればたかが知れてる
ワシが育てなければ
なんでもかんでも答え教えられると困るやつってようは
ワシの活躍する場が・・
みたいなことでしょ
うん、普通にキモい
AIに対してもなんでもかんでも教えるな
とか言ってそう
30代Pythonバカチョン男は強姦魔の犯罪者です!
あなたの近くにいます!
父母と祖父母の戸籍謄本を提出させましょう!
「^クソチョンw$」をNGワード登録推奨
「^クソチョンw$」をNGワード登録推奨
「^クソチョンw$」をNGワード登録推奨
「^クソチョンw$」をNGワード登録推奨
「^クソチョンw$」をNGワード登録推奨
「^クソチョンw$」をNGワード登録推奨
「^クソチョンw$」をNGワード登録推奨
「^クソチョンw$」をNGワード登録推奨
「^クソチョンw$」をNGワード登録推奨
「^クソチョンw$」をNGワード登録推奨
「^クソチョンw$」をNGワード登録推奨
「^クソチョンw$」をNGワード登録推奨
「^クソチョンw$」をNGワード登録推奨
「^クソチョンw$」をNGワード登録推奨
30代Pythonバカチョン男は強姦魔の犯罪者です!
あなたの近くにいます!
父母と祖父母の戸籍謄本を提出させましょう!
スレ主はチョンw
スレ主はチョンw
スレ主はチョンw
スレ主はチョンw
スレ主はチョンw
30代Pythonバカチョン男は強姦魔の犯罪者です!
あなたの近くにいます!
父母と祖父母の戸籍謄本を提出させましょう!
クソチョンは、
いきなりオレを攻撃しはじめた。
理由がわからず、過去の書き込みを調べてみると、
「馬鹿でもチョンでも」と書いたのが原因だとわかった。
もちろん、日本人なら知ってるが「馬鹿でもチョンでも」の
チョンは韓国人のことではない!
が、そのクソチョンはオレが韓国人を差別したと勘違いして、
猛烈におれを攻撃しはじめた。
そして、おれが反撃を開始したわけだ。
それが全ての始まり。
チョンは諸悪の根源!
まだこんなことやってるヤツが居るんだな
仕事に活かせば良いのに
そのクソチョンは、
もう何年もおれを攻撃し続けているわけだ。
自分の勘違いから人を攻撃しておいて、
まじで糞チョンだと思った。
チョンはそうなんだよ。
だから次に地震のあったときも、
チョンは日本人を強姦・虐殺するだろうな。
だからチョンは皆殺しにしなければならない。
それを覚えておくことだ!
>>910 興味深いテーマを与えれば勝手に行動するみたいだから
人に聞かないとなんにもできないお前らよりコイツの方がよっぽど使えるだろう
おれは元々、差別はいかん!
という主義だった。
そのおれに差別発言させるまで
攻撃をつづけたんだから、
まあ、恐るべき怨み粘着性だなと感心する。
調べてみると、それがチョンの性質らしい。
それで決心した。
おれは死ぬまでチョンを差別するぞ、と。
チョンを全員半島に追い返すまで戦います!
之を如何せん、之を如何せんと曰わざる者は、吾之を如何ともするなきのみ
と古人は言いました。分からない事は積極的に訊きましょう。
おれは元々、差別はいかん!
という主義だった。
そのおれに差別発言させるまで
攻撃をつづけたんだから、
まあ、恐るべき怨み粘着性だなと感心する。
調べてみると、それがチョンの性質らしい。
それで決心した。
おれは死ぬまでチョンを差別するぞ、と。
チョンを全員半島に追い返すまで戦います!
Pythonやるならまず「多重継承」な!
なぜ多重継承かというと、自然言語処理において語句の意味は「文脈」によって異なるからだ!
随意筋 不随意筋
↖ ↗
チンポ
チンコの随意筋と不随意筋
http://d.hatena.ne.jp/tottokotokoroten/20130516/1368716650
https://mobile.twitter.com/daikidomon/status/1385368820240437248
土門大貴/Daiki Domon
@daikidomon
Pythonの多重継承がわかりづらい。
継承クラスの左のクラス名を指定とかあたおか。
https://twitter.com/5chan_nel (5ch newer account)
https://twitter.com/5chan_nel (5ch newer account) 多重継承とか何に使うのか想像すらつかんけどpathlibがガッツリやってるらしいね
何に使うの?
ほんとに想像つかない
クラスを集合と捉えて排反でない分割したいこととかそんなあるか?
入れ子した辞書同士の同定って
d1 = {"a":{"aa":1},"b":2,"c":{"cc":{"ccc":3}}}
d2 = {"a":{"aa":1},"b":2,"c":{"cc":{"ccc":3}}}
キーと値の総当りをやるのが確実なんだろうけど
if d1==d2でいいよね・・?と思ってふと値がインスタンスだった場合もやってみたら
class Hoge:
def __init__(self,a):
self.a=a
d1 = {"a":{"aa":1},"b":2,"c":{"cc":{"ccc":Hoge(10)}}}
d2 = {"a":{"aa":1},"b":2,"c":{"cc":{"ccc":Hoge(10)}}}
d1==d2 # False
Falseだった
辞書の値が、辞書 or リスト or str or int or boolean or Noneしか取らない
って前提だったらもうd1==d2でいいか・・
json.dumps(d1)==json.dumps(d2)ってのもどこかでみたことあるけどなんかメリットあるのかこれ
==は同じオブジェクトという意味だしな
インスタンスは別のオブジェクト
>>919 class Hoge(int):
def __init__(self,a):
self.a=a
d1 = {"a":{"aa":1},"b":2,"c":{"cc":{"ccc":Hoge(10)}}}
d2 = {"a":{"aa":1},"b":2,"c":{"cc":{"ccc":Hoge(10)}}}
print(d1==d2) # True
d1 = {"a":{"aa":1},"b":2,"c":{"cc":{"ccc":Hoge(1)}}}
d2 = {"a":{"aa":1},"b":2,"c":{"cc":{"ccc":Hoge(10)}}}
print(d1==d2) # False
Hogeを値で比較したいなら__eq__と__hash__を書くかdataclass的なものを活用するか
>>919-920 ==は同じオブジェクトという意味ではない
x1 = {"a":{"aa":1},"b":2,"c":{"cc":{"ccc":3}}}
x2 = {"a":{"aa":1},"b":2,"c":{"cc":{"ccc":3}}}
print(x1 == x2)
print(x1 is x2)
class Hoge:
def __init__(self,a):
self.a=a
d1 = {"a":{"aa":1},"b":2,"c":{"cc":{"ccc":Hoge(10)}}}
d2 = {"a":{"aa":1},"b":2,"c":{"cc":{"ccc":Hoge(10)}}}
print(d1 == d2)
print(d1 is d2)
ようは早い話が
Hogeがもし非自作だったりしたときも
__eq__で拡張しとけば、いちいちforとかで回したりせずに
d1==d2だけでイケるってことでいいのか
わざわざ__eq__だけ実装するよりもdataclassのほうがいいと思う
今Paizaで勉強してる
一通り終えたら入門書として、入門Python3 第2版を買おうと思うのですが、他に良いのあれば教えてください
本読むと良いよ
めっちゃ興奮するしエロ本と変わらん
プロ向きなら、Perfect series が良いけど、
パーフェクト Python [改訂2版] (PERFECT SERIES 5)、2020
改訂2版 パーフェクトRuby、Rubyサポーターズ、2017
パーフェクト Ruby on Rails 【増補改訂版】 (Perfect series)、2020
>>933 ネタにマジレスするけど
そこはperlじゃないん?
RORってGPLに汚染されて使えなくなったって聞いた
>>929 paizaは学習コースあるんだから本なんて要らんが
>>929 本で仕入れた知識なんて糞の役にも立たん
ITは実践あるのみ
実用になるコードを書きまくって動かしまくれ
effective pythonはたまに開いて刺激を得てる
本ばかり読んでもなんにもならないが
本を読まないのは馬鹿
余計な苦労を避ける為の上手い書き方に納得するには、
一度は余計な苦労をしてる必要があるんだよな
Pythonは本かサイト使いながら勉強するのが良いよ
Pythonチュートリアルを読み解く実力がある人なら必要ないけど
そうじゃないなら、体系的知識を身につけるには入門書読むのが早い
というかベスト
Paizaの入門コース終えたなら何か作ってみたらいいのに
っていうか、まず作るんだよ
で、本を読んでもっといい方法を知る
書籍で言ったら秀和システムの『実践100本ノック』はどれも良かった
O'Reillyが一番なんだろうが
Effective Ruby は良い。
バグが起きにくい、安全で効率的なコーディングと、
間違いやすいポイントを解説
Effectiveシリーズも、日本人の著者もあるから、気を付ける。
「Effective Modern C++」の元祖・Scott Meyers と関係ないのに、
Effectiveと付けている本もある
その点、Effective Rubyは、Meyersにレビューをしてもらっている。
Effective Python は知らないけど
effective perlは読んでる最中にperlに対する興味を失ってしまった
T,o,k(迷惑という方は←をあぼーんしてください。)
家族に紹介する側になり、加えて¥4000×人数をGET!
自分で書くのは時間の無駄
今はChatGPTにこんなコードが欲しいと聞けば一瞬で書いてくれる
プログラマにはもはやコードを書く能力は求められていない
ChatGPTの仕組みを知らないと、頼ってもいいかもと思えてしまうんだよな
過去に誰かが書いたコードの丸コピーならうまくいくというだけ
簡単な算数すら間違う奴に論理的思考を期待するのが間違い
>>949 死ね
>>953 それ
ChatGPT持ち上げてる連中は文系馬鹿だけ
Python勉強し始めたけど環境構築について調べてるだけであっという間に時間が溶けてく・・・
>>956 環境構築は出来る限りするな
・使うツールはテキストエディタとコマンドプロンプトのみ。VSCodeなど言語道断
・外部ライブラリは一切使わない
この二つを守ればトラブルのないPythonライフを送ることができる
>>957 それ言語の初学者には良いだろうけど
業務で使うなら超縛りプレイじゃない?
>>958 業務なら環境構築の規約や手順が整備されているだろうし同僚の真似をすればいいからな
初学者が自力で一から環境構築ってのはあまりに無理ゲー
とりあえずVSCodeのdevcontainerを利用して環境構築中
パッケージ管理はpoetryってのを使ってみることに
macでpythonやってる人も多いんだよな
macの人がコード書くとか全然イメージ無いのに
他の言語の人はmac使わないのに、何故かpythonだけmac多い
YouTube で有名な雑食系エンジニア・KENTA のベストセラー本、
「21世紀最強の職業 Web系エンジニアになろう」にも、
Web系自社開発企業は、東京でMac を使って、
Ruby on Rails で開発すると定義しているけど、
YouTubeのRailsの第一人者・Deanin は、WSL2 で開発している。
VSCode, React, Docker なども使う
BeautifulSoupでfindするのも、使わずに正規表現でリストにするのも、
階層を辿っていくから本質的になんも変わらんなと思ってたけど、
selectだと一発で行けるんだな
今更CSSを基礎からやってる
CSS Selector の書き方でしょ?
jQuery でも見れば?
タグ #ID .class だけ覚えて、> で連結するだけだから1分で判る
flaskを勉強中なんだけど、これって静的なhtmlを表示したいとき、
return render_template('hoge.html')
だけの関数をhtmlファイルの数用意しなきゃいけないのかな?
>>973
テンプレートエンジンでぐぐれ
大抵は雛形(テンプレート)となる穴あきのbase.htmlとか作って再利用できるような仕組みになってる
イメージ
base.html側
<html>
{% block head %}{% endblock %}
<body>
{% block body %}{% endblock %}
</body>
</html>
hoge.html側
{% extends "base.html" %}
{% block head %}
<title>hogeタイトル</title>
{% endblock %}
{% block content %}
<span>hogeコンテンツ</span>
{% endblock %}
結果 hoge.html
<html>
<title>hogeタイトル</title>
<body>
<span>hogeコンテンツ</span>
</body>
</html> で、もちろん例えば引数で値を渡したりして動的に生成できる
return render_template('hoge.html',{"title":"hogeタイトル","content":"hogeコンテンツ"})
flaskでのやり方はあってるかどうかはしらんが
大体どれも同じ
大抵はデータベースのレコードの値を渡して
テンプレート側で展開してあたかも静的なhtmlにみせる、みたいな使い方だと思う
jinja2使うならデータベースのselectで返ってきたオブジェクトをそのままテンプレートエンジンに渡せたはず
プログラムはちんぷんかんぷんで他の人の書いたコードを動かす事くらいしか出来ない者ですが質問良いですか
コマンドプロンプトをつかって一週間以上前までは動いていたコードが(完了まで長くても15分くらい)
昨晩起動したら全く進まずタイムアウトするようになってしまいました
環境の変化で思い当たる節が一昨日辺りにパソコンの更新を下くらいです
更新後コードが動かなくなるってありますか?
更新でpythonやプログラムで使っているライブラリのバージョンも更新されて動かなくなることはある
もしそれが原因なら、そのプログラムで使われているライブラリのバージョンさえわかればなんとかなる
README見ると大抵は「このバージョン使って」と書いてある
>>978 了解しました
ライブラリのバージョン確認仕方わかったら出来たら再度質問させてもらいます
ファイルの読み書きの操作をしたいのですが
間違ってもシステムに関わるような重要なファイルは消さないようにしたいです
Windowsでスクリプトを扱うとして、スクリプトにベタ書きされているパス文字列を多少いじってもカレントディレクトリを絶対に動かさない、システムファイルを消さないような設定にするにはどうしたらよいでしょうか?
管理者権限のないアカウントで動かそうと思っているのですが、それだけでは足りないでしょうか?
管理者権限のあるアカウントで動かす場合にはどのような安全対策が考えられますでしょうか?
質問する前にぶっこわしてもいい環境で好きなだけやってみたら?
何をしたいのかも知らんし。
>>982 管理者権限のないユーザーで実行すれば、最悪ユーザーファイルがおかしくなるまでに留まると思う
本当に不安ならVMとかコンテナとかColabで試すという手もある
例えばリネームするならfrom toをprintして確認してからリネームするなどできることはある
自分がミスしないようにしたいのか、悪意のある誰かが悪いことをできないようにしたいのか
>>978 お世話になってます
確認したましたところおそらく推奨Pythonが3.10.6で入っていた私のPythonは3.10 64-bitでした、これが原因でしょうか
あと使用しているコードはnoteで公開されていた物で、クラウド環境modalにHugging Faceで発行したトークンを使用して実行しています
>>981 エラーメッセージは自分で分かる範囲が
タスクの状態がタイムアウトしました程度にしかわからなくて
スタック?にはPythonのフォルダが多いのPythonのバージョンが合わなくなったのかと思い込んでるんですがどうでしょう
>>988 わからんならそのまま検索ボックスに投げるかchatgptに聞け
hugging faceから何か大きいサイズのモデルダウンロード中に6000sタイムアウトしたとかではなくて?
もしそうであれば全ソースコードから"6000"って数値いじれば応急処置にはなるかも
詳しくは見てないけどここら辺なんか似たような症状ぽい
間違ってたらすまんが
https://zenn.dev/link/comments/b1a978d1a65058 >>992 ありがとうございます
そうですそちらの該当記事をを参考に作成してました
多分追加機能を入れる際に何かしら大きな物をダウンロードしているのだと思います
教えていただいた症状の方と症状は違いますが時間の弄り方は見落として居たので助かります
時間を伸ばして再度チャレンジしてみます
ならこんなスレでふんわりした聞き方するよりstable diffusionのスレで聞いた方がいいんじゃない?
同じような現象に遭遇した人もいるかもだし
>>994 すみません
プログラム知識に長けた人こちらの方が多いかと思ってこちらで相談させて頂きました
>>977程度の情報ではプログラム知識もへったくれもないよ
同じものを触ってる人達のノウハウの方がよっぽど頼りになる
お勉強スレならPython全く書けない人の質問は流石に反応すべきでない
-curl
lud20250104044902caID:MxLxGpNx0のレス一覧:
>>853
>min(i, max_prm_index)はprmsが2件でitemsが4件のときだと
それは>>846の>prmsがitemsと同じ数だけ
とは違うしあなたが設定したルールだと思う
>あとループもしくはイテレートのことを再帰と呼んでない?
なにか問題が?
>最初から分岐させたほうが
全部を分岐するってこと?
>場合分け必須
から察するに、例えば
if itemsとprmsのチェック:
if prms複数の場合 and :
for item in items:
ここに処理
elif prmsひとつの場合:
for item in items:
ここに処理
みたいなことだろうか?
話はずれるけど前から条件分岐でこういうの疑問だったんだけど
if itemsとprmsチェック:
raise
if 条件:
pass
else:
pass
みたいなことってしないほうが良いのだろうか?
>>846では意図的にif itemsとprmsチェック:rase
の部分を(それ以降の処理に関係ないので)省略したんだけど レス:1-200 201-400 401-600 601-800 801-1000 ALL
このスレへの固定リンク: http://5chb.net/r/tech/1677856680/
ヒント:5chスレのurlに http://xxxx.5chb.net/xxxx のようにbを入れるだけでここでスレ保存、閲覧できます。
TOPへ TOPへ
全掲示板一覧 この掲示板へ 人気スレ |
Youtube 動画
>50
>100
>200
>300
>500
>1000枚
新着画像
↓「Pythonのお勉強 Part70 YouTube動画>1本 ->画像>11枚 」を見た人も見ています:
・Pythonのお勉強 Part5
・Pythonのお勉強 Part46
・Pythonのお勉強 Part49
・Pythonのお勉強 Part67
・Pythonのお勉強 Part51
・Pythonのお勉強 Part63
・Pythonのお勉強 Part74
・Pythonのお勉強 Part68
・Pythonのお勉強 Part75
・Pythonのお勉強 Part76
・Pythonのお勉強 Part72
・Pythonのお勉強 Part62
・Pythonのお勉強 Part62
・Pythonのお勉強 Part57
・Python3を勉強中の初心者ですが
・Python勉強しようと思うんだが、実際どうなん?
・【嫌儲IT部】VueやWebpackにPython3……『流行の技術』を勉強する必要って本当にあるの?結局やることは生PHPやJava+Servletと一緒やんけ
・Pythonista総合スレ【iOSで勉強できる】 2 (3)
・Python2終了のお知らせ
・洋画・海外ドラマで英語のお勉強 Part14 [無断転載禁止]
・洋画・海外ドラマで英語のお勉強 Part15 [無断転載禁止]
・【離散に最も】マウマウのお勉強日誌2【近いスレ】
・【勉強会】The QABALISTIC TAROT【+雑談】Part6
・【英作文】マウマウのお勉強日誌(離散編)3【強化月間】
・【TAC 2022年合格目標行政書士講座】行政書士試験のお勉強
・【実は合格?】マウマウのお勉強日誌(失踪編)7【不合格?】
・冗談抜きに「文系=小説のお勉強してる」と思ってる奴が相当数居てビビるよな。この国いかれてんだろ
・【小学生】お母さんの為のお勉強講座151204【総合】 (c)2ch.net [無断転載禁止]
・鋳物工場の社長 見学者の親に「ちゃんと勉強しないとあのおじさんみたいになるわよ」と言われる
・【くら寿司からのお知らせ】信頼回復に向けて「・全店舗で勉強会 ・監視カメラで確認強化 ・スマホ持ち込み禁止」
・海外ってどういう風に英語勉強してんの?日本人だけ英語喋れないのおかしいだろって!国民のための英語教育をやれよ!
・PyQt5 Python
・Python初心者スレ
・【急募】英語の勉強法
・Pythonが嫌いな理由
・世界史勉強法part13
・Python4系に期待すること
・pythonに詳しいやつ来てくれ
・pythonについておしえて
・Pythonをやってみようと思う
・Pythonマスターきてくれ
・Kivy Pythonライブラリ
・プログラミングの勉強法
・数学の勉強の仕方 Part229
・プログラムの勉強がしたい
・大学でpythonってやつやるらしいんだが
・くだすれPython(超初心者用) その29
・結局Python上達するには何をすればよき?
・英語の勉強の仕方【第二スレッド】
・英会話 英語勉強系Youtuber Part4
・プログラミングを勉強したいんだけど
・くだすれPython(超初心者用) その32
・Pythonistaなネラーさんいますか?
・物理の参考書・勉強の仕方Part122
・英会話 英語勉強系Youtuber Part 2
・電通大志望だけど来年の勉強予定評価してや
・くだすれPython(超初心者用) その37
・くだすれPython(超初心者用) その34
・くだすれPython(超初心者用) その39
・Python単純すぎくそワロタwwww
・完全未経験がプログラムを勉強したい
・Python上げVBA下げしてる気持ち悪い奴ら
・くだすれPython(超初心者用) その48【まず1嫁】
13:25:31 up 15 days, 4:47, 0 users, load average: 19.98, 20.74, 22.07
in 0.03764796257019 sec
@[email protected] on 110703
|