プログラムの構造として、以下の例のように、def文で機能を定義し、メイン実行部でどの機能を使うかを指定する記載方法をよく見かけます。この方法だと各機能が明確になるし、変数が混乱しないのでわかりやすいのですが、いざ採用してみると、各関数のデバッグが面倒という問題にぶつかっています。
例えば関数Aをデバッグする時には、x=30とかx=10など、値をいろいろと代入した方がわかりやすいのですが、変数の数が多くなると、いちいち手で値を代入するのが面倒です。そこで、この構造を使いつつ、デバッグしやすい方法を教えていただけないでしょうか?
ちなみに、PyCharmを使っているので、使いこなしてはいないものの、デバッガはあります。
def A(x): return x**2 def B(x): return x+300 def C(x): return 2*x # メイン実行部 print(C(B(A(100)))) # 20600
##以下追記
質問が曖昧との指摘をいただいたので、もう少し具体的に例を挙げてみました。
前者はdefを使わない例です。
この場合、各処理(3倍したり2乗したり正規化したりするなど)の機能修正は上から順にスクリプトを処理していけば実施できる一方、プログラムが長くなってくると、各機能がわかりにくくなってくるデメリットがあります。
一方、後者のdefを使った場合、各関数で何をやっているのかがわかりやすくなり(この例だと短いのであまり意味がないですが)、各機能で機能修正もしやすいなどのメリットがあります。
ただ、**後者で機能修正/追加する場合、以下の操作をしないといけないため、面倒と感じてしまいます。そこで、もっとよりやり方はないでしょうか?というのが質問の意図です。**その対応の1つとして、test機能を使ったら?という回答をいただきました。
- def文を使わない形に直す
- xを100とか10など入力して機能修正/追加(変数の数が多いと特に面倒)
- またdef文にしてreturnを定義する
defを使わない場合
import pandas as pd df = pd.DataFrame([[1,50,100],[5,12,200],[6,23,335]],columns=['A','B','C']) df['A'] = df['A'] * 3 # 3倍する df['B'] = df['B'] **2 # 2乗する autoscale_df = (df-df.mean())/df.std() # 正規化する
defを使う場合
# 機能定義部 def multiply_3(x): return x * 3 def square(x): return x**2 def autoscale(df): return (df-df.mean())/df.std() # メイン関数 df = pd.DataFrame([[1,50,100],[5,12,200],[6,23,335]],columns=['A','B','C']) df['A'] = multiply_3(df['A']) df['B'] = square(df['B']) autoscale_df = autoscale(df)
回答1件
あなたの回答
tips
プレビュー