2017-06-22 11 views
5

私はいくつかのコードを単純化しようとしており、関数にパラメータとして渡されたときにどの値が(def文で定義されているように)そのパラメータをデフォルト値にする原因になっているのか疑問に思っています。例:私はそれがデフォルトだ機能を使用するようになりますscrape関数に渡すことができるか、まったく値以外の値(s)は、以下の機能関数にパラメータとして渡されたときにどのような値が使用されると、デフォルト値が使用されますか?

def scrape(self, search_term='animals'): 

を持っている私のクラスの一つで

値(動物)?

animalsを使用するよう scrapeを引き起こす私は私が考えていた Noneに設定デフォルトでは、変数と関数を呼び出す私のメインクラスに次の関数で

が、それは実際にsearch_term=None

def list_channels(query=None): 
    live_source = exploreorg.Site() 
    links = live_source.scrape(query) 

を設定し、この動作を有効にするscrape関数に渡すことができるいくつかの値はありますか?それともif/elseを行う唯一のオプションですか?

def list_channels(query=None): 
    live_source = exploreorg.Site() 
    if query is None: 
     links = live_source.scrape() 
    else: 
     links = live_source.scrape(query) 

私はそれがとてもかさばるように感じますが、それが最良の方法なら、私はそれで大丈夫です。私は自分がやろうとしていることを達成するためのより良い方法があると思います。

+5

値を渡さない場合のみ、デフォルト値が使用されます。 –

+0

デフォルトの引数は使用しないでください。これらの 'if/else'文は必要ありません。 – ForceBru

+1

もちろん、実際のデフォルト値を渡すこともできます。 – JohanL

答えて

1

値が渡されない場合にのみ、Pythonはデフォルト値を使用します。値の繰り返しを避けるには、Noneをデフォルト値として使用できますか?

def scrape(self, search_term=None): 
    search_term = search_term or 'animals' 

def list_channels(query=None): 
    live_source = exploreorg.Site() 
    links = live_source.scrape(query) 

変数を再利用しますか?

DEFAULT_SEARCH_TERM = 'animals' 
def scrape(self, search_term=DEFAULT_SEARCH_TERM): 
    ... 

def list_channels(query=DEFAULT_SEARCH_TERM): 
    live_source = exploreorg.Site() 
    links = live_source.scrape(query) 
+0

最初のオプションでは、関数内で変数を定義する必要はありません。 2番目のオプションでは、 'scrape'と' list_channels'関数が異なるモジュール/ファイルにあるので、これはうまくいきません。 – CaffeinatedCoder

+0

なぜ関数内で変数を定義したくないのですか?どうしましたか? – Laurent

関連する問題