質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

5525閲覧

python ファイル別 変数共通化 につきまして

raonarud

総合スコア88

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/03/01 06:19

編集2019/03/01 06:19

ULRから値を取得してその値を変数に保存。そしてファイル別でその変数を使いたいです。目的としましては、一回のURLアクセスで複数のファイルの変数を共通化にしたいのですが、よくやり方が分かりません。
イメージとしましては。親ファイルで変数を取得して、それを子ファイル(複数)で使いたいです。
モジュールで処理を外部化して引き出すことはできますが、URLアクセスを子ファイルでもしないといけなくなってしまうため、困っています。

# main01.py import other print(other.test.x)
# main02.py import other print(other.test.x)
# other.py def test(): ulr = ここでulrアクセスする x = ulr

この処理のやり方だと毎回urlにアクセスしないといけないので X の変数を直接共有したいのですがいい方法はありますでしょうか? main01.py と main02.py でother.pyで取得したXの変数を使いたいです。 又、ulrで取得した値は毎回変わります。 どうぞ宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nico25

2019/03/01 06:51

あまり全体の処理を理解していないのですが、 無理に「関数」にしないで「変数」のまま用すればいいのではないでしょうか? import すれば関数だけでなく変数も、使うことができます。
toshi17922062

2019/03/01 20:14

あれ?もしかして別プロセスのお話でしたか?プロセス間通信とか、socketとか、そっち系の話だったのですかね?
guest

回答2

0

ベストアンサー

親、子という言葉が何を意図しているのかはよくわかりませんが、直接実行するメインモジュールのファイルは

  • main01.py
  • main02.py

の2つで、

  • other.py

はユーティリティなどを入れてあるということでしょうか。

とりあえず、other.test.xのように書いてできるということはありません。xは関数のローカル変数なので、呼び出しが終われば消えてしまいます。仮にグローバル変数にしたとしても、プロセスごとに独立していますからプロセスが終われば消えるし、別々に起動したmain01.pyとmain02.pyで相互参照するすべはありません。

素直に考えると、ファイルにでも書き出しておいて、それを読み込めばよいのでは。

other.py

python

1def test(): 2 URLアクセスした結果をファイル(仮に名前をurl.txtとする)に書き出す

main01.py

python

1import other 2 3# 単に最後に取得したURLを使いたければファイルを読む 4with open("url.txt") as f: 5 data = f.read() 6 7# 更新したければother.testを呼び出す 8other.test()

投稿2019/03/01 18:11

hayataka2049

総合スコア30933

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

raonarud

2019/03/02 04:51

ありがとうございます。とても分かり易かったです。申し訳ありませんが、複数の変数をtxtに入れて、その値を取り出したいのですが、綺麗な書き方はありますでしょうか? 例えば a = 1 b = 2 c = 3を txtに書き込んで、別ファイルで aの変数の値を読み込みたいです。よろしくお願いします
hayataka2049

2019/03/02 04:57

JSONにするとか、辞書のpickleにするとか、いろいろあるんじゃないでしょうか。
guest

0

既出のこの内容そのものと思われますが、いかがでしょう?個人的にはクラス化するか、もし複数の共通変数が存在するなら、まとめて共通で使用する変数を辞書にしてしまう手とか?
Python - Python 外部ファイルで定義した変数を使用したい|teratail

とりあえず、以上をまとめてみました。まだ初心者なので違っていたらすいません。

python3

1#te177123other.py 2 3x='' 4mainx='' 5objclass='' 6 7dictx={ 8 'dx':'' 9} 10 11def testglobal(): 12 global x 13 ulr = "ここでulrアクセスする" 14 x = ulr 15 dictx['dx']= ulr 16 17class Testclass(): 18 def __init__(self): 19 ulr = "ここでulrアクセスする" 20 Testclass.cx = ulr 21 self.ix= ulr 22 def retix(self): 23 return self.ix

python3

1#te177123main02.py 2import te177123other 3 4print("otherのglobal指定") 5print("te177123main02:te177123other.x:{}".format(te177123other.x)) 6print("otherの辞書変数指定") 7print("te177123main02:te177123other.dictx['dx']:{}".format(te177123other.dictx['dx'])) 8print("te177123main00内でte177123other.mainx指定") 9print("te177123main02:te177123other.mainx:{}".format(te177123other.mainx)) 10 11obj=te177123other.objclass 12print("otherのClassインスタンス変数指定") 13print("te177123main02:te177123other.objclass.ix:{}".format(obj.ix)) 14print("otherのClassインスタンス変数の戻り値指定") 15print("te177123main02:te177123other.objclass.retix():{}".format(obj.retix())) 16print("otherのClassクラス変数指定") 17print("te177123main02:te177123other.objclass.cx:{}".format(obj.cx))

python3

1#te177123main00.py 2import te177123other 3def init(): 4 te177123other.testglobal() 5 te177123other.objclass=te177123other.Testclass() 6 ulr = "ここでulrアクセスする" 7 te177123other.mainx= ulr

python3

1#te177123.py 2import te177123main00 3te177123main00.init() 4import te177123main02 5 6print("test ok")

result

1otherのglobal指定 2te177123main02:te177123other.x:ここでulrアクセスする 3otherの辞書変数指定 4te177123main02:te177123other.dictx['dx']:ここでulrアクセスする 5te177123main00内でte177123other.mainx指定 6te177123main02:te177123other.mainx:ここでulrアクセスする 7otherのClassインスタンス変数指定 8te177123main02:te177123other.objclass.ix:ここでulrアクセスする 9otherのClassインスタンス変数の戻り値指定 10te177123main02:te177123other.objclass.retix():ここでulrアクセスする 11otherのClassクラス変数指定 12te177123main02:te177123other.objclass.cx:ここでulrアクセスする 13test ok

こんな感じで間違ってないですかね?ちょっと自信ないですが。
te177123.py(主プログラム)
te177123other.py(定義)
te177123main00.py(URLを設定するプログラム)
te177123main02.py(それぞれのプログラム)

投稿2019/03/01 07:17

編集2019/03/01 16:09
toshi17922062

総合スコア183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問