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

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

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

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

4439閲覧

Pythonでモジュール間で共通のグローバル変数を扱う方法

ITOMO5963

総合スコア98

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2022/12/26 01:22

参考情報

https://qiita.com/minidaruma/items/11eafc95855c007335f6

バージョン

Python 3.10.5

実現したいこと

Pythonでモジュール間でひとつのグローバル変数を扱いたいです。
mainやほかのモジュールで変数の参照や書き換えを行いたいです。
参考情報サイトをもとにできるのか、やってみましたが、参照もできませんでした。
お力沿いお願いいたします。

発生している問題

何も出力されない。
想定していた出力結果「1」です。

コード

global_value.py

1#中身は空っぽ

my_function.py

1import global_value as g 2 3def func1(): 4 g.val1 = 1

main.py

1import my_function 2import global_value as g 3 4def main(): 5 func1() 6 print(g.val1)

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

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

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

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

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

guest

回答2

0

質問の題名とコードの問題は、別問題です。

何も出力されない。
想定していた出力結果「1」です。

python

1import my_function 2import global_value as g 3 4def main(): 5 my_function.func1() 6 print(g.val1) 7 8 9if __name__ == "__main__": 10 main() 11

問題点:

  • main() 関数が何処からも呼び出されてません。
  • my_function.func1() という風に呼び出します。

上記2点を解消すれば、期待通り「1」と表示されます。

投稿2022/12/26 06:39

編集2022/12/26 06:39
teamikl

総合スコア8817

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

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

0

ベストアンサー

グローバル変数は、グローバルと言ってもモジュール内までが有効範囲なので、全てのモジュールから参照できる変数を作ることはできません。 また、 プログラムの構造・可読性・保守性などの観点からもできたとしても推奨されないでしょう。

方法としては、

  • モジュールに、値を提供する関数を持たせる。
  • モジュールに値を提供するクラスを持たせ、インスタンスを共有する

などでしょうか。

投稿2022/12/26 01:34

TakaiY

総合スコア14286

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

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

teamikl

2022/12/26 06:31 編集

> 全てのモジュールから参照できる変数を作ることはできません。 方法自体はあって、Pythonでは、「ビルトイン」__builtins__ がこれに該当します。 推奨されないのはその通りで、 楽ができると思っても、欠点の方が多いので、 設計を見直した方がよい場合が殆どです。 実際に使われてる場面は、 pygame zero みたいなフレームワークでは、毎回の import を省けたり利便性が増しますが、 欠点は、影響が広範囲、単体テストが作りづらくなる、 IDE等によっては追加設定しないと未定義の変数扱いになる、等。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問