2016-09-11 8 views
1
def outerFunc(number): 
    if number < 0: 
     def innerFunc(factor): 
      return number * factor 
    else: 
     def innerFunc(summand): 
      return number + summand 
    return innerFunc 

x = outerFunc(-8) 
print(x(4)) 

期待通りにprintステートメントの結果は-32です。私は、Python 3.5.2を使用していPythonで返された関数から属性を取得

私はこのコードスニペットに関する二つの質問お願いしたいと思います

  1. 声明でxinnerFuncをバインドした後、内部機能のnumberプロパティにアクセスすることは可能ですがx = outerFunc(-8)?言い換えれば、閉鎖を実行した後に、numberの保存された値、この場合は-8に直接アクセスすることは可能ですか?
  2. if文の評価に応じて関数を返すのは良いプログラミングスタイルですか?個人的には、より良いアプローチがあると思いますが、わかりません。あなたの助けのための

感謝。

+0

内部構造にアクセスしようとするとスタイルが良くありません。どうしてあなたは '数字 'を取得したいのですか? – Daniel

+0

あなたは絶対に正しいです。それらの構造にアクセスすることはかなり悪い考えです。どんな種類の生産的なコードでも私はそれを使用しません。この場合、私は内部でクロージャーがどのように機能するかを理解するだけです。 – 6q9nqBjo

答えて

2

それはそれは財産ではありません内部機能のnumberプロパティ

にアクセスすることが可能です。あなたは、技術的には特に良い方法でそれにアクセスすることはできませんが、:

if文の評価に応じて、機能を返すために、それは良いプログラミングスタイル
number = x.__closure__[0].cell_contents 

ですか?

うん、それは大丈夫です。まれ

+0

ご協力ありがとうございます。あなたの提案はうまくいきました。申し訳ありませんが、もし私が 'number'にプロパティを指定するとします。私は、この文脈で正しい用語についてはわかりません。どのようにそれを呼びますか? – 6q9nqBjo

+0

@ 6q9nqBjo:クロージャ変数。 – user2357112

-1
  1. が、それは意味を作ることができる場合があります。質問をしなければならない場合は、少なくとも今のところ答えは「いいえ」と考えるべきでしょう。
関連する問題