X



くだすれPython(超初心者用) その42【Ruby禁止】

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
垢版 |
2019/03/18(月) 13:42:55.36ID:+MPRGO7m
★当スレに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/ ログイン必須になりやがった(゚Д゚#)
−−−−天麩羅ここまで−−−−
0158デフォルトの名無しさん
垢版 |
2019/03/21(木) 20:23:39.72ID:yLWBHIB/
ありがとう
勉強してきます
0162デフォルトの名無しさん
垢版 |
2019/03/21(木) 21:04:49.41ID:yLWBHIB/
selfに参照渡しされるアドレスってのはインスタンスといいますが、インスタンスの引数のアドレスことではないのですか?
0163デフォルトの名無しさん
垢版 |
2019/03/22(金) 04:34:23.47ID:4np0yjmV
[100,200,-50,150,-100]

こんな感じで一日毎のFXの収支が入った配列があった時
要素を順番に足して収支が積み上がるような配列を作りたいんだけど。。。

0+100=100
100+200=300
300+(-50)=250
250+150=400
400+(-100)=300

こんな計算をして

[100,300,250,400,300]

こんな配列を作りたいんだけどいい方法教えてエロい人
forとか使わないでシンプルなので頼んます><
0164デフォルトの名無しさん
垢版 |
2019/03/22(金) 05:21:41.85ID:jRDRMKF2
cumsum
0165デフォルトの名無しさん
垢版 |
2019/03/22(金) 05:29:25.13ID:4np0yjmV
>>164
うわぁ、ありがとう
僕がイメージしてた通りの関数でした!!
ぜひ使わせていただきます
0166デフォルトの名無しさん
垢版 |
2019/03/22(金) 05:30:39.63ID:khPW0F9t
>>163
普通にnumpyで加算すれば良いだけでは?
0168デフォルトの名無しさん
垢版 |
2019/03/22(金) 11:46:18.44ID:ZTaR0qbl
前にも書き込ませていただいたものですが、
gtk3+python+webkit2でepubビューアを作っているのですが、現在のスクロール位置を取得したいのですが、

y_pos_js ="var x; x=document.body.scrollTop"
def js_run(self, js_name, js_return=True):

run_js_finish = self._js_finish if js_return else None
self.viewer.view.run_javascript(js_name, None, run_js_finish, None);

def _js_finish(self, webview, result, user_data=None):
js_result = self.viewer.view.run_javascript_finish(result)
if js_result is not None:

value = js_result.get_js_value()
self.js_value = value.to_double()

print((self.js_value))

と書いても、0.0となってしまい、値を取得できません。
ひょっとすると、
https://havelog.ayumusato.com/develop/javascript/e332-android_scrolltop_refresh_delay.html
ここのページにあるようにdocument.body.scrollTopは即座に反映されないのかもしれませんが(情報が古い?)、
javascirptがわからずどうすることもできません。
pythonのtimeで遅延させても無駄なようで、javascirptの方で遅延させるしかないのでしょうか?
どなたかお知恵を拝借できると幸甚です。

https://stackoverflow.com/questions/52870923/webkit2-and-domdocument-javascriptcore-python3
上のpythonスクリプトの元ネタはここです。
0172デフォルトの名無しさん
垢版 |
2019/03/22(金) 13:21:26.19ID:g5h3mGP7
Ruby で、Selenium WebDriver なら、
execute_script で直接、JavaScript の命令文を実行できる

TOPまでスクロール
execute_script('window.scroll(0,1);')

BOTTOMまでスクロール
execute_script('window.scroll(0,10000);')
0175デフォルトの名無しさん
垢版 |
2019/03/22(金) 14:04:08.80ID:aiMUayIq
>>173
seleniumはjava製ソフトで各種言語にドライバーが出てる。
pythonやnode向けドライバーのほうがよっぽど利用者多くてよくメンテされてる。
クソ言語信者は他人のフンドシで相撲とってるだけ。
java製ソフトにjavascript実行させてるのを誇るというギャグw
0176172
垢版 |
2019/03/22(金) 15:07:59.51ID:g5h3mGP7
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
0178デフォルトの名無しさん
垢版 |
2019/03/22(金) 15:19:14.86ID:aiMUayIq
driver.execute_script jsCode
 ↑javaのコードに  ↑jsコード文字列

渡してるだけwwwww
もちろんこんなのPython用ドライバーもnode用ドライバーもあって、
当然できることも同じ。
どころか不人気クソ言語用ドライバーよりよっぽどよくメンテされており使用者も多いw
0179デフォルトの名無しさん
垢版 |
2019/03/22(金) 15:54:48.11ID:t/nkQ3ne
Pythonにも言えるだろうけど、JavaScriptはwebのアセンブラみたいな地位だから変えられないけど、
型がないからデバッグが大変という事でTypeScriptとかelmとか出てるご時世に生のJavaScript動かせるって言うのも逆に危険じゃね?
TypeScript動かせますとか、生JavaScriptの型検査出来ますとかでも無ければ、むしろ嫌われ機能じゃ。。。
0180デフォルトの名無しさん
垢版 |
2019/03/22(金) 16:19:38.63ID:lvSXHllC
文字通りの布教活動してないで、pycallのメンテでもしてて欲しいんだけど
サナダ虫言語くん
0181デフォルトの名無しさん
垢版 |
2019/03/22(金) 18:25:24.02ID:ZTaR0qbl
質問ばかりで申し訳ないのですが、
webkit2からjavascriptを呼んで値を取得するまではできたのですが、
その値を今度は別のjavascriptに渡して
window.scrollto(0, self.js_value),)
とやりたいのですが、どうすればpythonの値(self.js_value)をjavascriptに渡せるのでしょうか?
0183181
垢版 |
2019/03/22(金) 18:49:26.10ID:ZTaR0qbl
>>182
失礼しました。コピペを間違えました。
0185デフォルトの名無しさん
垢版 |
2019/03/23(土) 03:50:03.33ID:oN2Crbw2
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'")

どなたかお助けください。
0186172
垢版 |
2019/03/23(土) 06:05:42.92ID:4V4ijAbJ
>>181
参考までに、Ruby で、Selenium WebDriver なら、
>>172
に書いたように、execute_script で直接、JavaScript の命令文(文字列)を実行できる

execute_script( 文字列 )

TOPまでスクロール
execute_script('window.scroll(0,1);')

BOTTOMまでスクロール
execute_script('window.scroll(0,10000);')
0187デフォルトの名無しさん
垢版 |
2019/03/23(土) 07:43:05.24ID:ydnViaEq
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()
0189デフォルトの名無しさん
垢版 |
2019/03/23(土) 08:33:26.98ID:ZeoqDrwt
こういうタイプはアセンブリ言語から順に勉強していった方がいいんじゃないかと思う
0192デフォルトの名無しさん
垢版 |
2019/03/23(土) 09:42:24.98ID:ydnViaEq
>>188
もちろん見たのですが、どういう形で渡されているかわからないのです

クラス自身が渡されているとしたら
class.class.v = var
という構造になっているということですか?
0193デフォルトの名無しさん
垢版 |
2019/03/23(土) 10:26:17.73ID:ZeoqDrwt
>>192
関数はある程度理解してて自分で書くことができる?
0194デフォルトの名無しさん
垢版 |
2019/03/23(土) 10:40:50.71ID:I3Pj7rcK
「python クラス変数 インスタンス変数」とかでググれば説明サイトが大量にあるけど、
プログラミングそのものが理解できてない感じだよね
0195デフォルトの名無しさん
垢版 |
2019/03/23(土) 10:50:20.39ID:ydnViaEq
>>193
簡単な関数ならもちろんかけます

def func(hikisuu):
print(hikisuu)

func("引数")
0196デフォルトの名無しさん
垢版 |
2019/03/23(土) 10:50:59.12ID:ydnViaEq
>>194
概念はなんとなくわかりますが、どういう形で渡されているかがわからないのです
0198デフォルトの名無しさん
垢版 |
2019/03/23(土) 11:03:23.41ID:hJSauuzM
>>192
selfはtestクラスのインスタンスを指してる
func()の第一引数にそのselfがあるんだから、そのメソッド内でselfのインスタンス変数にアクセス出来るのはなんにもおかしくないと思うんだけど
0199デフォルトの名無しさん
垢版 |
2019/03/23(土) 11:10:08.58ID:ydnViaEq
>>198
なんとなくわかってきました
ただ、selfがtestクラスのインスタンスということであれば、testクラスの中にさらにクラスのインスタンスがあるという状態はおかしくないでしょうか?
0203デフォルトの名無しさん
垢版 |
2019/03/23(土) 11:22:14.02ID:ZeoqDrwt
>>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が入る
0204デフォルトの名無しさん
垢版 |
2019/03/23(土) 11:29:25.52ID:7srBUnhE
>>192
>クラス自身が渡されているとしたら
誰がクラス自身なんて言った
渡されるのはクラス自身じゃない

もう自分でソース読んでみるのもいいんじゃないですかね
0205デフォルトの名無しさん
垢版 |
2019/03/23(土) 11:34:13.97ID:hJSauuzM
>>199
"testクラスの中にさらにクラスのインスタンスがあるという状態"という考えはどこから出てくるんや

>>202
エラーを貼ったほうがいい
0206デフォルトの名無しさん
垢版 |
2019/03/23(土) 11:34:24.50ID:7srBUnhE
どう実装されていますかっていう質問でしょ
ソース見るのが一番早いよ
C分からなくてソース読めないっていうなら、これ以上の説明も理解できないよ
0207デフォルトの名無しさん
垢版 |
2019/03/23(土) 11:41:58.39ID:VYeUbhBG
>>199
引数として渡されているだけなんだから何らおかしくない

> testクラスの中にさらにクラスのインスタンスがあるという状態はおかしくないでしょうか?

自分の中で「こうあるべき」って感情的に決めつけてない?
それの何がどうおかしいのか論理的に説明してみて
0208デフォルトの名無しさん
垢版 |
2019/03/23(土) 11:48:53.36ID:oN2Crbw2
>>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
というエラーが出てしまいます。
0209デフォルトの名無しさん
垢版 |
2019/03/23(土) 12:24:51.07ID:ydnViaEq
>>204
渡されるのはインスタンスですよね
クラスの中のselfではなくて、生成されたインスタンスの中にあるselfに渡されているということでしょうか?
0210デフォルトの名無しさん
垢版 |
2019/03/23(土) 12:28:48.09ID:ydnViaEq
>>203
ありがとうございます
これは例えばのコードですよね?
この波括弧(コレクション?)を使うとエラーが出るのですが
0211デフォルトの名無しさん
垢版 |
2019/03/23(土) 12:33:20.28ID:jhd39dfA
>>209
クラスとインスタンスの違いが分かっていなかったのか

>クラスの中のselfではなくて、生成されたインスタンスの中にあるselfに渡されているということでしょうか?
そう
クラスはあくまで設計図
実体を作って何かを行うのは全てインスタンス
0212デフォルトの名無しさん
垢版 |
2019/03/23(土) 12:41:08.01ID:7srBUnhE
クラスにも実体はあるし、クラス内の関数を呼び出したりもするけどね
0214デフォルトの名無しさん
垢版 |
2019/03/23(土) 13:55:46.82ID:f3qHSm8q
>>212
超初心者にあれこれ詰め込んでも混乱するだけだろうし、多少の嘘は許容してまずは本当に基本的なことを大雑把に理解させないと一歩も先に進まないんじゃないかな。
0216デフォルトの名無しさん
垢版 |
2019/03/23(土) 15:55:15.05ID:VsaUG60l
説明はもう済んでるよ、理解出来てないだけ。
それも当然で、基礎知識が無いからどうしようもない
このまま行けばC言語に手を出すことになるのだろう
0217デフォルトの名無しさん
垢版 |
2019/03/23(土) 15:59:25.81ID:hJSauuzM
>>209
それでいい
クラスから実体化しまインスタンスはクラスとは別のメモリ領域にある
そのインスタンスの中に、selfというそのインスタンス自身をさすインスタンス変数があるということ

頼むからか>>149の1章から3章まで読んでくれ
あんたの知りたいことがすべて書いてある
そのサイト以上に簡単に説明してるところを俺はしらん(´・ω・`)
0219デフォルトの名無しさん
垢版 |
2019/03/23(土) 17:31:55.04ID:ydnViaEq
↑ありがとうございます
最後に一つ

self.n= name
とあったらself側が変数名で、nは属性という扱いでいいんですか?
0222デフォルトの名無しさん
垢版 |
2019/03/23(土) 18:15:49.99ID:ydnViaEq
道標とは?
self.nで
インスタンス化されたクラス/その中にある変数n
というフォルダのような構造になっているという意味でしょうか?
0223デフォルトの名無しさん
垢版 |
2019/03/23(土) 18:22:35.82ID:ydnViaEq
インスタンスの構造を出力してくれる関数とかないでしょうか?
これがあれば理解できるかも
0224デフォルトの名無しさん
垢版 |
2019/03/23(土) 19:16:34.22ID:iMO+WCpL
ppront
pydoc
0225デフォルトの名無しさん
垢版 |
2019/03/23(土) 20:15:49.89ID:abrpiqJH
>>185
Python詳しく無いけど、Haskellで言うfilter関数見たいのが有るんじゃ無いのか?
自作しても良いと思うけど。

def filter(f,lst):
newlst = []
for i in lst:
if f(i) then:
newlst.append(i)
return newlst

Haskellとの比較用にしか使ってないから、クラスとか知らんで悪いけど。
0226デフォルトの名無しさん
垢版 |
2019/03/23(土) 20:30:07.59ID:abrpiqJH
>>187

>>53で文句言われたpython初心者が別の言語での知見からの推測で良ければ?
selfに入ってるのは__init__付けてない時はclass定義そのもののアドレス(参照)が入るみたい。(各インスタンスで別々の値を持てなかった)
__init__付けるとインスタンスのアドレスが入るみたいね。
クラスによって(インスタンスの)先頭アドレスから何バイト先がメソッドのアドレスとか分かるから(その為のクラス定義)。
0227デフォルトの名無しさん
垢版 |
2019/03/23(土) 20:31:20.91ID:ydnViaEq
instance = test("hge")
pprint.pprint(instance)
pprintしてもメモリの場所しか表示されないのですが、何か設定が必要でしょうか
0228デフォルトの名無しさん
垢版 |
2019/03/23(土) 20:43:03.84ID:ydnViaEq
もしかしてクラスを設計図としたインスタンス(の構造)には、クラスの宣言部分は含まれていないのですか?
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)
となってるわけですか?
0229デフォルトの名無しさん
垢版 |
2019/03/23(土) 20:50:14.72ID:A1HHpCkB
>>222

ご明察のとおり
だから、メモリ空間上に実体として存在するのは、

変数名.n

なので、外部からアクセスするときには、

変数名.n

でアクセスする。

self.n

で朝とできるのは、同じ変数名インスタンス内部からだけという仕掛け
0232デフォルトの名無しさん
垢版 |
2019/03/23(土) 21:18:50.51ID:I3Pj7rcK
>>228
難しく考えすぎ

self(正確には第1仮引数名).変数名があると、下記の順番で処理されるだけ

1. インスタンス変数が定義されていれば、それにアクセス
2. クラス変数が定義されていれば、それにアクセス
3. どちらも無ければインスタンス変数を作成 (参照だったら例外発生)

Pythonインタープリタは、そう実装されているってだけ
だから概念とか考えてもしょうがない
はっきり言って、「selfに意味はない」
0233デフォルトの名無しさん
垢版 |
2019/03/23(土) 21:21:25.01ID:lUpPBvQP
>>227-228
どーでもよくないことだが
またインデント崩壊してるわ
タイポが散見されるわで
どうにもはや

pprontはpprintじゃないとおもうぞ
0234デフォルトの名無しさん
垢版 |
2019/03/23(土) 21:22:53.90ID:lUpPBvQP
>>232が すごくイイ!!(・∀・)こといった
selfをselfとかいとくことに
意味がないところでつっかかってんだ、
self野郎くんは
0236デフォルトの名無しさん
垢版 |
2019/03/23(土) 22:04:22.60ID:abrpiqJH
>>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
0237デフォルトの名無しさん
垢版 |
2019/03/24(日) 00:18:34.34ID:9O9Vp0iS
>>236
>メソッドの引数にする意味はないと思うけど。(他の引数と一貫性を保つ為?)



それな
開発者は、次回には直しとけよ
0238デフォルトの名無しさん
垢版 |
2019/03/24(日) 00:26:51.70ID:aL5blMH8
>>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/
0243デフォルトの名無しさん
垢版 |
2019/03/24(日) 05:01:07.62ID:XxZqoAge
>>237
いあ、個人的にはメソッドの引数からフィールドを生成または使用してるのが分かって便利だから残してて欲しいが。
0244デフォルトの名無しさん
垢版 |
2019/03/24(日) 05:39:07.49ID:NAaHZN6A
pythonのC-APIは
CallObjectとか
CallFuncとか
CallMethodとか
使い分けてるよな
0245デフォルトの名無しさん
垢版 |
2019/03/24(日) 08:33:50.69ID:XvYqXbWf
dive into python3を読んでIterator作ってみたら少し理解が進んだ気がする
dive into python3を何とか理解したレベルで次に読むべきものって何なんやろ
0246デフォルトの名無しさん
垢版 |
2019/03/24(日) 09:23:31.67ID:1qlluyio
つくれ
0248デフォルトの名無しさん
垢版 |
2019/03/24(日) 10:49:21.59ID:0uhW8miJ
anacondaで個別に環境作ってsqlite3入れたがそれらを個別にイジるにはどうすればいい?コマンドプロンプトでsqlite3と叩いても違うバージョンのsqlite3が表示される
0250デフォルトの名無しさん
垢版 |
2019/03/24(日) 11:22:47.21ID:0uhW8miJ
>>249
ありがとうできた

PowerShellでactivate出来なかったから調べてみると使えるようにするにはconda install -n root -c pscondaenvs pscondaenvsで使えるように出来た
0251デフォルトの名無しさん
垢版 |
2019/03/24(日) 11:37:43.08ID:0uhW8miJ
ごめんvscodeのmicrosoft.python.languagesserver.exeってのが13gbくらいメモリ食っててメモリ使用率とディスクが99%なんだけどこれウィルス?
0253デフォルトの名無しさん
垢版 |
2019/03/24(日) 12:04:20.29ID:byELi1J1
1人みたら100人いるとの格言の通り
self概念を理解できない人間はそれくらいいる
pythonに限らず他の言語でも
0254デフォルトの名無しさん
垢版 |
2019/03/24(日) 12:45:59.87ID:6XL2+Wvk
実装がどうなってようが俺の要求する通りの出力結果が得られれば
細かいことはどうでもいい
■ このスレッドは過去ログ倉庫に格納されています

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