作为参数传递给函数时的值会导致使用默认值吗?

Caf*_*der 5 python function python-2.7

我正在尝试简化我的一些代码,并且想知道哪些值作为参数传递给函数时会导致该参数默认为它设置值(如def语句中所定义).例:

在我的一个课程中,我有以下功能

def scrape(self, search_term='animals'):
Run Code Online (Sandbox Code Playgroud)

可以将除了没有值之外的任何值传递给scrape将导致函数使用它的默认值(动物)的函数?

在我的主类中的以下函数中,我使用默认设置为的变量调用该函数None,我认为这将导致scrape使用animals,但它实际上设置了search_term=None

def list_channels(query=None):
    live_source = exploreorg.Site()
    links = live_source.scrape(query)
Run Code Online (Sandbox Code Playgroud)

是否有一些值可以传递给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)
Run Code Online (Sandbox Code Playgroud)

我觉得这太笨重了,但如果这是最好的方式,那我就可以了.我想有一种更好的方法来完成我想要做的事情.

Lau*_*ent 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)
Run Code Online (Sandbox Code Playgroud)

或者重用变量?

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)
Run Code Online (Sandbox Code Playgroud)