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

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

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

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

Q&A

解決済

2回答

1000閲覧

関数中でのライブラリインポート

cc_hk

総合スコア2

Python

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

0グッド

0クリップ

投稿2020/05/27 00:33

編集2020/06/03 01:36

pythonを使い、関数の中でライブラリを定義しようとしています。
実行したいのですが、名前が定義されてないと表示されてしまいました。

発生している問題・エラーメッセージ

NameError Traceback (most recent call last) <ipython-input-32-b1db57d5012b> in <module> 2 from sklearn.datasets import data 3 ----> 4 analysis(load_iris) NameError: name 'load_iris' is not defined

該当のソースコード

python

1def analysis(data): 2 from sklearn.datasets import data 3 4analysis(load_iris)

解決策がありましたら教えていただきたいです。
よろしくお願いします。

回答への補足

python

1iris=load_iris() 2def analysis(data): 3 exec(f'from sklearn.datasets import {data}')#文字列を実行 4analysis('load_iris') 56iris=load_iris()

NameError Traceback (most recent call last)
<ipython-input-10-6abab8af5c71> in <module>
4 analysis('load_iris')
5
----> 6 iris=load_iris()

NameError: name 'load_iris' is not defined

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

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

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

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

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

quickquip

2020/05/27 02:05

やりたいこと=analysisにどんな引数を渡したいのか、analysisは何をしたいのかが、伝わってないように思います。
guest

回答2

0

ベストアンサー

まずローカルな名前空間(ローカル変数)を理解していないようです。

python

1def hoge(): 2 a = 1 3 4hoge() 5print(a) # ここで名前aがないというエラー

これが動かないことは分かりますか。


もう一つ、execを(そのまま使っただけでは)ローカルな名前空間に影響しないことを知らないようです。

python

1def hoge(): 2 exec('a=1') 3 return a # ここで名前aがないというエラー 4 5hoge()

うまく動かない理由はこれでいいとしてやりたいことは

python

1import sklearn.datasets 2 3def get_dataset_function(function_name): 4 return sklearn.datasets.__dict__[function_name] 5 6dataset_function = get_dataset_function('load_iris') 7 8data = dataset_function() 9 10# 実行の確認 11print(type(data)) 12print(data.target_names) 13print(data.target[[10, 25, 50]])

でいいんじゃないでしょうか。

実行結果

plain

1<class 'sklearn.utils.Bunch'> 2['setosa' 'versicolor' 'virginica'] 3[0 0 1]

参考
https://docs.python.org/ja/3/library/stdtypes.html#object.dict

投稿2020/06/03 02:00

quickquip

総合スコア11235

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

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

cc_hk

2020/06/03 10:08

ありがとうございます!
guest

0

やるとしたらこんな感じでしょうか。

python

1def analysis(data): 2 exec(f'from sklearn.datasets import {data}') 3 4analysis('load_iris') 5

投稿2020/05/27 00:55

x98000

総合スコア1096

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

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

cc_hk

2020/05/29 02:01

回答ありがとうございます。やってみたところdefまでは実行できているようですが、analysis()でエラーになってました。 もう少しやってみます。
x98000

2020/05/29 02:44

どういうエラーですか?
cc_hk

2020/05/31 11:31

質問で書いてあるものと同じエラーです。
x98000

2020/05/31 23:36

まず、from sklearn.datasets import load_iris だけでエラーが出ないことを確認してください。 また、エラー内容をすべて見せてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問