46740


分析用の言語としてPythonを使い始めたばかりの初心者です。  
今までコードをべた書きしていましたが、汚いのでブロックごとに関数にまとめて書いていこうと試みていますが、ググってもなかなかそういう趣旨のページに行き当たらず苦戦しています。  
一応func1でデータを読み込み、func2で分析を行おうと考えています。  
が、func1でtrainやtestがローカル変数化してしまうため無理やりグローバル変数化しています。あまり賢くない方法のような気がするので他の方法等ありますでしょうか？  
また、classとselfを使った書き方のほうがうまくいくでしょうか？  
曖昧な質問ですいませんがよろしくお願いいたします。

[code]

    import 必要なモジュール
    
    def main():
        func1()
        func2()
    
    
    def func1():
        bc = datasets.load_breast_cancer()
        X, y = bc.data, bc.target
    
        # 訓練データとテストデータに分割する
        global X_train, X_test, y_train, y_test
        X_train, X_test, y_train, y_test = train_test_split(X, y)
    
    
    def func2():
        lgb_train = lgb.Dataset(X_train, y_train)
        lgb_eval = lgb.Dataset(X_test, y_test, reference=lgb_train)
    
[/code]


CC BY-SA 4.0
2018-07-19T16:07:12.833
46736
2018-07-19T17:08:07.460
2018-07-19T17:08:07.460
19110
12457
question
python
Pythonでグローバル変数化を避けるためのdefやclassについて


グローバル変数を避けたいという要望であれば、`func1`の返り値と`func2`の引数でデータのやり取りをすれば良さそうですが、どうでしょうか。

[code]

    def main():
        func2(*func1)
    
    def func1():
        bc = datasets.load_breast_cancer()
        X, y = bc.data, bc.target
    
        return train_test_split(X, y)
    
    def func2(X_train, X_test, y_train, y_test):
        lgb_train = lgb.Dataset(X_train, y_train)
        lgb_eval = lgb.Dataset(X_test, y_test, reference=lgb_train)
    
[/code]


CC BY-SA 4.0
2018-07-19T16:28:19.307
46740
2018-07-19T16:28:19.307
13199
46736
answer