くだすれPython(超初心者用) その42【Ruby禁止】
■ このスレッドは過去ログ倉庫に格納されています
★当スレにRubyのソースコード類を書くことを禁ず
☆Ruby等、Pythonではないプログラミング言語での回答類を書くことも禁ず
このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。
へび使いが優しくコメントを返しますが、お礼は Python の布教と初心者の救済をお願いします。
エラーを解決したいときはエラー表示や環境(バージョン/IDEまたはcommand line/OS)を略さずに書き込んで下さい。
騙りが頻発しています。質問する方は一時的なトリップをつけることを検討して下さい。
次スレは >>985 辺りで
前スレ
くだすれPython(超初心者用) その41【Ruby禁止】
http://mevius.5ch.net/test/read.cgi/tech/1549282930/
◆PythonのHome Page
http://www.python.org/
◆まとめwiki
ttp://python.rdy.jp/
◆Pythonのソースコードをそのまま5ちゃんにコピペすると
インデントが崩れるので
こういうところ↓にはってきてください
ttp://ideone.com/ Pythonするにはぷち手間あるのがめんどうかなぁ
ttp://codepad.org/ ほぼ直感的に使える。Run codeボタンあり。
ttp://pastebin.com/ まずまずシンプル。
ttp://dpaste.com/ とてもシンプル。消えるまでの日数を長めに指定しる。
ttps://jupyter.org/try (旧try.jupyter.org)ちょっとめんどうそう
ttps://ja.osdn.net/pastebin/ ログイン必須になりやがった(゚Д゚#)
−−−−天麩羅ここまで−−−− >>173
seleniumはjava製ソフトで各種言語にドライバーが出てる。
pythonやnode向けドライバーのほうがよっぽど利用者多くてよくメンテされてる。
クソ言語信者は他人のフンドシで相撲とってるだけ。
java製ソフトにjavascript実行させてるのを誇るというギャグw Ruby で、Nokogiri, Selenium WebDriver なら、
execute_script で直接、JavaScript の命令文を実行できる
jQuery も実行できるから、CSS Selector で検索もできる。
複雑な検索は、Nokogiri で、Xpath でも良いし
jsCode = <<"EOT"
var text = $( "#btn1" ).text( );
$( "#parent" ).append( text );
EOT
# JavaScript を実行
driver.execute_script jsCode driver.execute_script jsCode
↑javaのコードに ↑jsコード文字列
渡してるだけwwwww
もちろんこんなのPython用ドライバーもnode用ドライバーもあって、
当然できることも同じ。
どころか不人気クソ言語用ドライバーよりよっぽどよくメンテされており使用者も多いw Pythonにも言えるだろうけど、JavaScriptはwebのアセンブラみたいな地位だから変えられないけど、
型がないからデバッグが大変という事でTypeScriptとかelmとか出てるご時世に生のJavaScript動かせるって言うのも逆に危険じゃね?
TypeScript動かせますとか、生JavaScriptの型検査出来ますとかでも無ければ、むしろ嫌われ機能じゃ。。。 文字通りの布教活動してないで、pycallのメンテでもしてて欲しいんだけど
サナダ虫言語くん 質問ばかりで申し訳ないのですが、
webkit2からjavascriptを呼んで値を取得するまではできたのですが、
その値を今度は別のjavascriptに渡して
window.scrollto(0, self.js_value),)
とやりたいのですが、どうすればpythonの値(self.js_value)をjavascriptに渡せるのでしょうか? import pandas as pd
abc =[["a", 1, 2], ["b", 3, 4], ["a", 5, 6], ["b", 7, 8]]
df = pd.DataFrame(abc)
このデータフレームから、query関数を使って、
aを含む行だけを抽出したいのですが、エラーが出てしまいます。。。
df.query("0=='a'")
どなたかお助けください。 >>181
参考までに、Ruby で、Selenium WebDriver なら、
>>172
に書いたように、execute_script で直接、JavaScript の命令文(文字列)を実行できる
execute_script( 文字列 )
TOPまでスクロール
execute_script('window.scroll(0,1);')
BOTTOMまでスクロール
execute_script('window.scroll(0,10000);') selfにはインスタンスが渡されるといいますが、インスタンスの何が渡されているんですか?selfを出力すると場所ということになりますが、場所にあるデータを渡しているのでしょうか?だとしたらそのデータはなんですか?
selfによってクラス内で変数が共有される仕組みがわからない
http://codepad.org/Cpl7EKpb
class test():
def __init__(self,var):
self.v= var
def func(self):
print(self.v)
print(self)
print(vars(self))
a = test("aaa")
a.func() >>187
何度も同じ事を質問してるけど、返信のレスの内容やサイトを見たのか こういうタイプはアセンブリ言語から順に勉強していった方がいいんじゃないかと思う Pythonに代わる独自言語を開発したいとかかもしれない >>186
参考にならないから消え失せろ。二度と来るな。 >>188
もちろん見たのですが、どういう形で渡されているかわからないのです
クラス自身が渡されているとしたら
class.class.v = var
という構造になっているということですか? >>192
関数はある程度理解してて自分で書くことができる? 「python クラス変数 インスタンス変数」とかでググれば説明サイトが大量にあるけど、
プログラミングそのものが理解できてない感じだよね >>193
簡単な関数ならもちろんかけます
def func(hikisuu):
print(hikisuu)
func("引数") >>194
概念はなんとなくわかりますが、どういう形で渡されているかがわからないのです >>192
selfはtestクラスのインスタンスを指してる
func()の第一引数にそのselfがあるんだから、そのメソッド内でselfのインスタンス変数にアクセス出来るのはなんにもおかしくないと思うんだけど >>198
なんとなくわかってきました
ただ、selfがtestクラスのインスタンスということであれば、testクラスの中にさらにクラスのインスタンスがあるという状態はおかしくないでしょうか? ここ数日これずっとやってるのか
PyConにくる小学生ですらもう少しマシ >>185です。
どなたかお助けください。。。
本当に困ってます。 >>195
じゃ仮に変数をまとめて入れられる変数があるとする(変数の中に変数が入っている)
a = {
hensu1 = "ABC"
hensu2 = 22
}
b = {
hensu1 = "DEF"
hensu2 = 55
}
変数にアクセスするためにはこうやるとする
print(a.hensu1) // ABCが出力される
b.hensu2 = 44 // bの中のhensu2に44が入る
もう一つ仮に、関数をまとめられる変数があるとする(変数の中に関数が入っている)
funcs = {
def func1(hikisu):
print(hikisu.hensu1)
def func2(hikisu, var):
hikisu.hensu2 = var
}
中の関数を呼び出すにはこうやるとする
funcs.func1(a) // ABCが出力される
funcs.func2(b, 87) // b.hensu2 に87が入る >>192
>クラス自身が渡されているとしたら
誰がクラス自身なんて言った
渡されるのはクラス自身じゃない
もう自分でソース読んでみるのもいいんじゃないですかね >>199
"testクラスの中にさらにクラスのインスタンスがあるという状態"という考えはどこから出てくるんや
>>202
エラーを貼ったほうがいい どう実装されていますかっていう質問でしょ
ソース見るのが一番早いよ
C分からなくてソース読めないっていうなら、これ以上の説明も理解できないよ >>199
引数として渡されているだけなんだから何らおかしくない
> testクラスの中にさらにクラスのインスタンスがあるという状態はおかしくないでしょうか?
自分の中で「こうあるべき」って感情的に決めつけてない?
それの何がどうおかしいのか論理的に説明してみて >>205
import pandas as pd
abc =[["a", 1, 2], ["b", 3, 4], ["a", 5, 6], ["b", 7, 8]]
df = pd.DataFrame(abc)
df.query("0=='a'")
pandasで上記コードを実行すると
KeyError: False
というエラーが出てしまいます。 >>204
渡されるのはインスタンスですよね
クラスの中のselfではなくて、生成されたインスタンスの中にあるselfに渡されているということでしょうか? >>203
ありがとうございます
これは例えばのコードですよね?
この波括弧(コレクション?)を使うとエラーが出るのですが >>209
クラスとインスタンスの違いが分かっていなかったのか
>クラスの中のselfではなくて、生成されたインスタンスの中にあるselfに渡されているということでしょうか?
そう
クラスはあくまで設計図
実体を作って何かを行うのは全てインスタンス クラスにも実体はあるし、クラス内の関数を呼び出したりもするけどね >>212
staticも考えたけど、もう終わらせた方がいいんじゃないかなって >>212
超初心者にあれこれ詰め込んでも混乱するだけだろうし、多少の嘘は許容してまずは本当に基本的なことを大雑把に理解させないと一歩も先に進まないんじゃないかな。 口だけは立派な先生方
self がなにか説明できない 説明はもう済んでるよ、理解出来てないだけ。
それも当然で、基礎知識が無いからどうしようもない
このまま行けばC言語に手を出すことになるのだろう >>209
それでいい
クラスから実体化しまインスタンスはクラスとは別のメモリ領域にある
そのインスタンスの中に、selfというそのインスタンス自身をさすインスタンス変数があるということ
頼むからか>>149の1章から3章まで読んでくれ
あんたの知りたいことがすべて書いてある
そのサイト以上に簡単に説明してるところを俺はしらん(´・ω・`) ↑ありがとうございます
最後に一つ
self.n= name
とあったらself側が変数名で、nは属性という扱いでいいんですか? >>185です。
解決ができそうにないので質問をキャンセルします。
スレを移動します。 道標とは?
self.nで
インスタンス化されたクラス/その中にある変数n
というフォルダのような構造になっているという意味でしょうか? インスタンスの構造を出力してくれる関数とかないでしょうか?
これがあれば理解できるかも >>185
Python詳しく無いけど、Haskellで言うfilter関数見たいのが有るんじゃ無いのか?
自作しても良いと思うけど。
def filter(f,lst):
newlst = []
for i in lst:
if f(i) then:
newlst.append(i)
return newlst
Haskellとの比較用にしか使ってないから、クラスとか知らんで悪いけど。 >>187
>>53で文句言われたpython初心者が別の言語での知見からの推測で良ければ?
selfに入ってるのは__init__付けてない時はclass定義そのもののアドレス(参照)が入るみたい。(各インスタンスで別々の値を持てなかった)
__init__付けるとインスタンスのアドレスが入るみたいね。
クラスによって(インスタンスの)先頭アドレスから何バイト先がメソッドのアドレスとか分かるから(その為のクラス定義)。 instance = test("hge")
pprint.pprint(instance)
pprintしてもメモリの場所しか表示されないのですが、何か設定が必要でしょうか もしかしてクラスを設計図としたインスタンス(の構造)には、クラスの宣言部分は含まれていないのですか?
class testclass():
def __init__(self,hoge):
self.h = hoge
def func(self):
print(self.h)
instance = testclass("output")
instance.func()
とあったら、instance部分の構造は
def __init__(self,hoge):
self.h = hoge
def func(self):
print(self.h)
となってるわけですか? >>222
ご明察のとおり
だから、メモリ空間上に実体として存在するのは、
変数名.n
なので、外部からアクセスするときには、
変数名.n
でアクセスする。
self.n
で朝とできるのは、同じ変数名インスタンス内部からだけという仕掛け この子にはもしかしてrubyが似合うんじゃないかなって思っちゃった >>228
難しく考えすぎ
self(正確には第1仮引数名).変数名があると、下記の順番で処理されるだけ
1. インスタンス変数が定義されていれば、それにアクセス
2. クラス変数が定義されていれば、それにアクセス
3. どちらも無ければインスタンス変数を作成 (参照だったら例外発生)
Pythonインタープリタは、そう実装されているってだけ
だから概念とか考えてもしょうがない
はっきり言って、「selfに意味はない」 >>227-228
どーでもよくないことだが
またインデント崩壊してるわ
タイポが散見されるわで
どうにもはや
pprontはpprintじゃないとおもうぞ >>232が すごくイイ!!(・∀・)こといった
selfをselfとかいとくことに
意味がないところでつっかかってんだ、
self野郎くんは >>232
selfはローカル変数かフィールド(クラス変数)かを見分けると言う意味はある。
メソッドの引数にする意味はないと思うけど。(他の引数と一貫性を保つ為?)
class Myclass:
def func(str):
name = str #nameはローカル変数かフィールドか見分けられない。
そこでrubyは@nameとし、pythonはself.nameにした。
静的型言語だとクラス定義の時点でメソッドよりフィールドを先に定義するから、クラスで何個のフィールドが有るのか分かるけど、
動的型言語だと全メソッド見ないとフィールドが何個あるのか把握出来ない。
同じ使われ方してるフィールドが複数あっても気付きにくい。
__init__にフィールドの宣言と初期化を集約するとか、セオリー頼り。
class Myclass:
def func1(self,str):
self.name = str
def func2(self,str):
self.myname = str >>236
>メソッドの引数にする意味はないと思うけど。(他の引数と一貫性を保つ為?)
それな
開発者は、次回には直しとけよ >>236>>237
開発者からの言葉
・self不要論は死ぬほど聞いている
・以下が大きい理由
'foo'が 'C'のインスタンスであることを考えると、
パラメータリストで明示的な 'self'を必要とすることは、メソッドを呼び出すこれら2つの方法の間の理論的等価性を強化することになります。
foo.meth(arg)== C.meth(foo、arg)
俺には分からんかった
以下ソース
http://neopythonic.blogspot.com/2008/10/why-explicit-self-has-to-stay.html
https://coreblog.org/ats/translation-of-why-explicit-self-has-to-stay/ >>237
いあ、個人的にはメソッドの引数からフィールドを生成または使用してるのが分かって便利だから残してて欲しいが。 pythonのC-APIは
CallObjectとか
CallFuncとか
CallMethodとか
使い分けてるよな dive into python3を読んでIterator作ってみたら少し理解が進んだ気がする
dive into python3を何とか理解したレベルで次に読むべきものって何なんやろ anacondaで個別に環境作ってsqlite3入れたがそれらを個別にイジるにはどうすればいい?コマンドプロンプトでsqlite3と叩いても違うバージョンのsqlite3が表示される activateでsqliteを入れた環境に切り替える >>249
ありがとうできた
PowerShellでactivate出来なかったから調べてみると使えるようにするにはconda install -n root -c pscondaenvs pscondaenvsで使えるように出来た ごめんvscodeのmicrosoft.python.languagesserver.exeってのが13gbくらいメモリ食っててメモリ使用率とディスクが99%なんだけどこれウィルス? 1人みたら100人いるとの格言の通り
self概念を理解できない人間はそれくらいいる
pythonに限らず他の言語でも 実装がどうなってようが俺の要求する通りの出力結果が得られれば
細かいことはどうでもいい >>254
疑問点をブラックボックスに閉じ込める事も大事だよね
考えていたらキリがない .sort()がマージソートだろうがクイックソートだろうが気にしないって事やろ そうそうそーとしてくれりゃいいのよ
アルゴの違いなんて、CPU命令セットの違いで成績は簡単に逆転しちゃうんだから >>258
そうそう
それで速度が足りないとか不具合起きるとかアリえんし、例え速度に多少問題あってもそんなもん改善しない webkit2+gtk3でimport threadingで子プロセスからwebkit2.webview.run_javascriptでjavascriptを呼ぶと下記のようなエラーが出てしまうのですが、
仕様なんでしょうか?
1 0x7f4853d050f9 /usr/lib/x86_64-linux-gnu/libjavascriptcoregtk-4.0.so.18(WTFCrash+0x9) [0x7f4853d050f9]
2 0x7f4860cdfeda /usr/lib/x86_64-linux-gnu/libwebkit2gtk-4.0.so.37(+0x792eda) [0x7f4860cdfeda]
3 0x7f4860cbc8a4 /usr/lib/x86_64-linux-gnu/libwebkit2gtk-4.0.so.37(+0x76f8a4) [0x7f4860cbc8a4]
4 0x7f4860d68cf3 /usr/lib/x86_64-linux-gnu/libwebkit2gtk-4.0.so.37(webkit_web_view_run_javascript+0xc3) [0x7f4860d68cf3] multiprocessingだと、javascriptだけ読み込まれないようです。(printや他の関数呼び出しなどは機能します)
これだと常時子プロセスでページのスクロール位置を記録するスクリプトが組めないので困っています。
どなたか原因がわかる方、お助けください。 >>262
なんでマルチプロセスしてるかわかんないけど
一旦全部のプロセスの足並みそろうまで待つ命令入れたらどうなるのん >>263
レスありがとうございます。
本来はアプリ終了時にページの既読位置を記録したかったので、gtk windowのdestroy
シグナルからjavascriptを書いたコールバック関数を呼ぼうと思ったのですが、
gtk windowがdestroyされるとwebviewも消えてしまって、値が取得できなかったので、
常時スクロール位置を記録する無限ループを作り、その中でjavascriptを呼ぶ子プロセスを作ろうと思ったのです。
マルチプロセスにせずクラスのdef __init__()にループの関数を書くと無限ループなのでwebviewが読み込まれず、
仕方がなくマルチプロセスにしました。子プロセスから親プロセスの変数を書き換えられないなどの基本的なことは
検索してわかったのですが、なぜ子プロセスから親プロセスのdefに書いてあるjavascriptを呼べないかがわからんのです。
普通の関数なら呼べるようですが。 >>264
よべないものは呼べないんだろうから
なんか別の攻略法を考えるしかなさそうだなそれ。。。
スクロール位置の記録は
パイプに書いてるの?
その他の方法でやってる? >>265
スクロール位置の記録はjavascript(y_pos_js ="var y; y = window.scrollY;")
とそれのresultを保管する変数でやっています。
変数の共有は
from multiprocessing import Value
のshared_double = Value('d', 0.0)などとやっています。 >>232
クラス変数にselfは使えないですよね? self.nはだたのurlと考えることにしました
http://self/n >>267
誤解を招く表現を訂正
それでもうまくいかないんだ。。。。。 (´・ω・`) 要はselfに自分自身を入れると、class.nみたいな感じで変数だとかにアクセス出来るってだけのことじゃないですか >>267
Process(target=self.js_run(y_pos_js))
としたら今度はスクリプトを読み込んでくれました。
別プロセスにしたのが原因ではないようです。
もうちょっと考えてみます。レスありがとうございました。 ■ このスレッドは過去ログ倉庫に格納されています