くだすれPython(超初心者用) その39

1デフォルトの名無しさん2018/08/24(金) 07:50:35.97ID:VD4/++xS
このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。
へび使いが優しくコメントを返しますが、お礼は Python の布教と初心者の救済をお願いします。

エラーを解決したいときはエラー表示や環境(バージョン/IDE or command line)を略さずに書き込んで下さい。
騙りが頻発しています。質問する方は一時的なトリップをつけることを検討して下さい。
次スレは >>985 辺りで

前スレ
くだすれPython(超初心者用) その38
https://mevius.5ch.net/test/read.cgi/tech/1526522954/

468デフォルトの名無しさん2018/10/15(月) 12:38:01.14ID:A4+xGAqj
なんなの遊園地?

469デフォルトの名無しさん2018/10/15(月) 16:32:59.34ID:13a7w8hI
>>467
天才現る!

470デフォルトの名無しさん2018/10/15(月) 18:05:35.02ID:5iEXqQwD
>>460
スコープ内で有効だから確かめられないではなくグローバル変数にすれば良いのでは

def func():
import re as _re
global re
re = _re

def main():
func() #コメントアウトするとprintでエラー
print(re)

471デフォルトの名無しさん2018/10/15(月) 18:19:51.97ID:/DZZgAIK
def main():
#func() #func()無関係にprintでエラー
import re as _re
print(re)

472デフォルトの名無しさん2018/10/15(月) 21:29:43.28ID:E6pr56BO
 私たち日本人の、日本国憲法を改正しましょう。
総ム省の、『憲法改正國民投票法』、でググって
みてください。拡散も含め、お願い致します。

473デフォルトの名無しさん2018/10/15(月) 21:35:11.02ID:E6pr56BO
 私たち日本人の、日本国憲法を改正しましょう。
総ム省の、『憲法改正國民投票法』、でググって
みてください。拡散も含め、お願い致します。

474デフォルトの名無しさん2018/10/16(火) 17:08:42.26ID:u7YyW5Kg
自作クラスのインスタンスが持ってる変数を全て、保存しておいた値に戻すようなコードを書きたいのだけれど、どうやって書けばいいかな?
ある時点の値にロールバックしたいということなのだけれど、継承していてもちゃんと動作するようにしたい
想定している処理はこんな感じ

class A:
 def rollback(self):
   全部のインスタンス変数を self.backup の値に戻す

 def make_backup(self):
   self.backup = バックアップを作成

class B(A):
 def proc(self):
   self.make_backup()
   # なんか処理
   self.rollback()

設計が悪いと感じたらなにか代替案を教えていただければ嬉しいです

475デフォルトの名無しさん2018/10/16(火) 18:16:27.10ID:YLHbxnbG
pickle

476デフォルトの名無しさん2018/10/16(火) 18:24:52.10ID:LVmCdvc6
あの、プログラム終わったら次のプログラムを起動したいのですがどうやったら開けますか?
最後にはシャットダウンしたいです。

p1.py実行
→最後の行でp2.pyを呼び出す
→p2.py実行
...
→最後の行でpn.pyを呼び出す
→pn.py実行
→最後の行でシャットダウン

こんな感じでやりたいです。

477デフォルトの名無しさん2018/10/16(火) 18:28:08.45ID:YLHbxnbG
subprocess.Popen

478デフォルトの名無しさん2018/10/16(火) 18:32:15.10ID:LVmCdvc6
ありがとうございます、できそうです。

479デフォルトの名無しさん2018/10/16(火) 18:34:41.31ID:+Y6Wm7U2
パイパイを実行?

480デフォルトの名無しさん2018/10/16(火) 21:07:08.91ID:uMB0oNTu
>>476
それチェーンにしないとダメなの?
普通にp1.py, p2.py, ..., pn.pyを次々に呼び出して最後にシャットダウンするシェルスクリプトなりバッチファイルなりを書けばいいような気もするんだが

481デフォルトの名無しさん2018/10/17(水) 11:21:44.01ID:tSH31TrF
>>474
グローバル変数使うんじゃだめ?

482デフォルトの名無しさん2018/10/17(水) 11:49:20.45ID:LtC7K5yP
ORM

483デフォルトの名無しさん2018/10/17(水) 12:47:48.23ID:tSH31TrF
>>474
>>481です。知ったかぶりしてすみません。グローバル変数ではなくクラス変数でした。
test.pyで
class MyClass:
  commonVALUE=0
  def __init__(self,initv):
    self.value=initv
  def p(self):
    print(f'instance value= {self.value}')
    print(f'class value= {MyClass.commonVALUE}')
  def bkup(self):
    MyClass.commonVALUE=self.value
  def bkload(self):
    self.value=MyClass.commonVALUE
としといて
>>> from test import *
>>> a=MyClass(100)
>>> b=Myclass(0)
>>> a.bkup()
>>> b.p()
instance value= 0
class value= 100
>>> b.bkload()
>>> b.p()
instance value= 100
class value= 100
この後で
>>> c=MyClass(-1)とあらたにインスタンスを作っても
>>> c.p()
instance value= -1
class value= 100
で、クラス変数は0にはならないみたい。

484デフォルトの名無しさん2018/10/17(水) 13:06:09.93ID:tSH31TrF
行数制限のため連投ですみません。
継承も大丈夫です。
>>> class B(MyClass):
...   def dec(self):
...    self.value-=1
>>> d=B(1)
>>> d.p()
instance value= 1
class value= 100
>>> a.bkup()
>>> d.p()
instance value= 1
class value= 100
>>> d.bkload()
>>> d.dec()
>>> d.p()
instance value= 99
class value= 100

485デフォルトの名無しさん2018/10/17(水) 13:31:27.53ID:LGIAN4QA
pickle

486デフォルトの名無しさん2018/10/17(水) 13:35:53.65ID:cWz6TRDk
>>483
それじゃクラス共通になってまうやん
インスタンス毎にバックアップデータ持てないから意図と違うと思う
>>474 で良いと思うけど、何を懸念してるのかを書くともっといい案をもらえそう

487デフォルトの名無しさん2018/10/17(水) 17:07:18.34ID:tSH31TrF
>>486
クラスと継承クラス共通でバックアップって意味じゃないの? そりゃスマンコってす
...
各インスタンスごとのバックアップを作って、一括でpush/popしたいなら、
リストの要素を各インスタンスをにしといて、
for i in in instance_list:
 i.backup()
とかにすればいいだけなんでねの?

488デフォルトの名無しさん2018/10/18(木) 10:08:35.95ID:0gY6dccD
>>487
push-popと言いながらプログラムはpush-popじゃないのはわざと?

489デフォルトの名無しさん2018/10/18(木) 16:41:15.03ID:551Ojw2f
def 関数(arg1,arg2):
ゴニョゴニョ


return ←これが全く理解できないんだけど、目からウロコみたいなページみたいなのないです?


returnが入ると全くわからない。

490デフォルトの名無しさん2018/10/19(金) 07:14:22.21ID:97FgwNUY
codecs.openて普通のopenより処理重いきがするんですが認識あってるかね?
2.7使ってて文字コード指定で100mb前後のtxtなりcsvてり触りたいんだけど通常のopenでは文字指定出来ず、ioモジュールのopen使うと他のライブラリで使ってるopenの挙動がおかしくなる(?)し、codecs遅いしでどうするのがスマートなのかわからん

491デフォルトの名無しさん2018/10/19(金) 08:17:42.62ID:5hJcbR3H
codecs.openを使う
そもそもopenに追加処理をしてるのだから、重くて当たり前だろう

492デフォルトの名無しさん2018/10/19(金) 12:51:38.13ID:jQ8EJjtV

493デフォルトの名無しさん2018/10/20(土) 14:00:43.26ID:aYMp4dZA
https://github.com/michaldaniel/Ebook-Viewer
こちらのgitで公開されているLinux用epubビューアを改造して使いやすくしようと思っているのですが、
行き詰まってしまいました。
ブラウザの戻るボタンのようにリンク先(引用元など)に飛んだ後、直前に戻るボタンを実装したいのですが
(ボタンはgtk3の都合上up arrowボタンを使っています)
改造したのはheader_bar.pyでして、

def __populate_headerbar(self):
(途中省略)
# Adds up arrow chapter navigation button
self.up_arrow_button = Gtk.Button()
self.up_arrow_button.add(Gtk.Arrow(Gtk.ArrowType.UP, Gtk.ShadowType.NONE))
self.up_arrow_button.set_sensitive(False);
self.up_arrow_button.connect("clicked", self.__on_up_arrow_clicked)
navigation_box.add(self.up_arrow_button)
(途中省略)
def __on_up_arrow_clicked(self, button):
"""
Handles Up Arrow clicked navigation event, go backward
:param button:
"""
if viewer.Viewer.can_go_back():
viewer.Viewer.go_back()

とすると、
WebKit.WebView.can_go_back() takes exactly 1 argument (0 given)
というエラーがでてしまいます。
(viewer.Viewerはwebkitを継承したものです)
どなたかお知恵をお貸し願えたら幸いです。

494デフォルトの名無しさん2018/10/20(土) 14:07:46.36ID:u8BRF3D8

495デフォルトの名無しさん2018/10/20(土) 14:24:18.46ID:n6bj2eyU
>>493
インスタンスメソッドをクラスメソッドみたいにして読んでるから、第一引数として暗黙的に渡されるはずだったselfが足りないって怒られてる。

ソースを斜め読みするとViewerのインスタンスはインスタンス構造上の親であるMainWindowが持っているようなので、
self.__window.viewer.can_go_back()でアクセスできるんじゃないかな

4964932018/10/20(土) 15:04:15.12ID:aYMp4dZA
>>495
if self.__window.viewer.can_go_back():
self.__window.viewer.go_back()

と書いてやってみたらエラーメッセージはでませんでしたが画面が真っ白になってしまいました。
とはいえ、当初のエラーは解消したので大きな進歩です。どうもありがとうございました。
後は勉強がてら自分でやってみます。

497デフォルトの名無しさん2018/10/20(土) 15:04:58.12ID:aYMp4dZA
>>494
さんもレスありがとうございました。

498デフォルトの名無しさん2018/10/20(土) 18:30:22.23ID:V2vR4ZZl
>>489
defがここでおしまいですよ 呼び出し元にかえりんしゃー

という意味

499デフォルトの名無しさん2018/10/20(土) 18:31:25.93ID:V2vR4ZZl
>>490
from codecs import open as codecsopen
とかやって、
codecsまるごとじゃなくcodecs.openだけ読むようにすればちょっとははやくできる
ちょっとは。

500デフォルトの名無しさん2018/10/22(月) 23:03:44.42ID:bT6j7LGV
素人質問で申し訳ないのですが助けていただきたく質問します。

いま「みんなのPython」をやりはじめたのですが
Anacondaがうまくできません

最初に普通?のPythonをインストールして
そのあとにPythonをアンインストールしたあと
Anacondaをインストールしました。
そして「ファイル名を指定して実行」で「python.exe」と入力しても
「'python.exe'が見つかりません」となってしまいます。
Windows PowerShellで「>python」と入力しても
「用語 'python' は、コマンドレット、関数、スクリプト ファイル、または操作可能なプログラムの名前として認識されません」
となってしまいます。

Anacondaのインストールでは
「Add Anaconda to my PATH environment variable」にはチェックは入れてません
「Register Anaconda as my default Python 3.6」にはチェックを入れました。

501デフォルトの名無しさん2018/10/22(月) 23:37:57.82ID:aY20u7RH
英語よめや。

502デフォルトの名無しさん2018/10/22(月) 23:54:05.62ID:bT6j7LGV
>>501
環境変数PATHを設定する | Pythonインストールと環境設定
https://www.javadrive.jp/python/install/index3.html

このサイトに書いてあるようにやったらできたんですけど
これでいいんですか?

503デフォルトの名無しさん2018/10/23(火) 01:14:29.19ID:uxH9lXGD
カレントフォルダからは「相対パス/python.exe」で実行できる。
カレントフォルダ以外からも実行したいのなら「絶対パス/python.exe」で実行できる

カレントフォルダ以外からも「python」というコマンドで実行したいのなら、
「python.exe」のあるフォルダを、ユーザー環境変数PATH に登録しないといけない

例えば、コマンドプロンプトで、以下のように入力すると、
where notepad
where python

そのコマンドの実行ファイルのある、場所を表示できる

504デフォルトの名無しさん2018/10/23(火) 06:47:31.22ID:EmL9QD5v
はじめまして ラズパイでpythonを利用してます。
Python3 ide?でファイルを実行するとmoduleエラーが起きるんですけど、lxterminalで実行したりcronで実行するとエラーはでないで実行できます。
実行できるので問題ないのですが、なんでpython3 ideで実行するとmoduleエラーになるのかが気になります
詳しい方 お気づきがあれば教えてください

505デフォルトの名無しさん2018/10/23(火) 07:07:12.22ID:EmL9QD5v
追加ですが温度センサー使ってます。githubからすべて入手したものです。
ググってもなぜかエラー出るよみたいなことが書かれていて原因は不明だったのでお聞きしました。

506デフォルトの名無しさん2018/10/23(火) 10:24:36.04ID:d2CNB2CT
Python3でのsqlalchemyについて教えてください

https://ideone.com/tVSjwB

56行目のsession.commit()でエラーになってしまいます。

sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) CHECK constraint failed: winners
[SQL: 'INSERT INTO winners (name, category, year, nationality, sex) VALUES (?, ?, ?, ?, ?)']
[parameters: ('Marie Curie', 'Chemistry', 1911, 'Polish', 'Female')] (Background on this error at: http://sqlalche.me/e/gkpj)

こんな風に書かれてあります。(長いのでここに書くときに改行しました)
何がいけないのでしょうか?

507デフォルトの名無しさん2018/10/23(火) 10:29:07.79ID:ki4w8hD+
>>504
同じPythonを実行してる?(公式の純正PythonとAnacondaとか)

508デフォルトの名無しさん2018/10/23(火) 10:35:04.61ID:ki4w8hD+
>>506
yearはStringじゃなくてIntegerじゃ…?

509デフォルトの名無しさん2018/10/23(火) 10:40:12.34ID:d2CNB2CT
>>508
ほんとだ!あと、リストのMarieの性別も頭が大文字になってました。
凡ミスなのにありがとうございます!

510デフォルトの名無しさん2018/10/23(火) 10:45:40.79ID:d2CNB2CT
>>506
あと、29行目の%の所でpep8のE228の注意が出てしまいます。

%の前後にスペースを入れて、こう書くのが正しいんでしょうか?
https://ideone.com/qhYas5

511デフォルトの名無しさん2018/10/23(火) 10:48:34.83ID:ki4w8hD+
>>510
その方がpep8に則ると正しいね

512デフォルトの名無しさん2018/10/23(火) 10:56:47.49ID:zGwQ/J/L
>>511
どうもありがとうございました

513デフォルトの名無しさん2018/10/23(火) 11:09:52.98ID:zGwQ/J/L
連投すみません

SQLAlchemyでのデータベースへのアクセスについてですが、filterとfilter_byってどう使い分けするんでしょうか?
違いが分からないです

# スイス人受賞者の取得

# filter_by の場合
result = session.query(Winner).filter_by(nationality='Swiss')

# filter の場合
result = session.query(Winner).filter(Winner.nationality == 'Swiss')


print(list(result))

514デフォルトの名無しさん2018/10/23(火) 11:13:00.78ID:aeA+1VC2
gtk3とpythonのpygobjectで質問があります。
https://stackoverflow.com/questions/41696515/webkit2gtk-webview-touchscreen-scrolling
こちらの質問にあるとおり、webkit2gtkを使うとlibwebkit1-3.0の時のようなタッチスクリーンによる
スクロールができなくなってしまうのですが、何とかタッチによるスクロール(パンというようですが)
をしたいのです。こちらの質問者の方はコールバック関数にスクロールイベントを書いたらできたと
書いてありましたが、具体的にはどのように記述すれば良いのでしょうか?

https://lazka.github.io/pgi-docs/

こちらのpygobjectのAPIを見てもよくわかりませんでした。どうかよろしくお願いします。

515デフォルトの名無しさん2018/10/23(火) 11:16:03.36ID:zGwQ/J/L
>>513ですけど、
ふた通りの書き方があるよ、Pythonらしく、より簡単に書く方法はfilter_byの方だよって事ですかね?

516デフォルトの名無しさん2018/10/23(火) 12:43:50.18ID:EmL9QD5v
>>507
同じpythonです。ラズパイにはじめからはいってるやつです。
ほんと謎
パスかなと思ったけど動いてるから違うんやとおもうけど

517デフォルトの名無しさん2018/10/23(火) 13:18:18.96ID:ki4w8hD+

518デフォルトの名無しさん2018/10/23(火) 13:20:20.07ID:ki4w8hD+
>>516
バージョンも同じなら、理由はわからんなぁ…

新着レスの表示
レスを投稿する