Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中为函数赋值pass_Python_Function_Optional Parameters_Optional Arguments - Fatal编程技术网

在Python中为函数赋值pass

在Python中为函数赋值pass,python,function,optional-parameters,optional-arguments,Python,Function,Optional Parameters,Optional Arguments,我有一段代码,它定义了一个函数,该函数将函数作为参数,如下所示: def stuff(n, f): f(n) def stuff(n, f = None): if(f is None): f = pass f(n) 现在,我想提供一些不起任何作用的默认值f。所以我想我应该使用pass,就像这样: def stuff(n, f): f(n) def stuff(n, f = None): if(f is None): f = pass f(n) 但这

我有一段代码,它定义了一个函数,该函数将函数作为参数,如下所示:

def stuff(n, f):
  f(n)
def stuff(n, f = None):
  if(f is None):
    f = pass
  f(n)
现在,我想提供一些不起任何作用的默认值f。所以我想我应该使用pass,就像这样:

def stuff(n, f):
  f(n)
def stuff(n, f = None):
  if(f is None):
    f = pass
  f(n)

但这并不适用于编译。我该怎么做呢?

你不能空着。但您可以创建内部函数,将其分配给
f

def stuff(n, f=None):
  def empty(n):
    pass
  if f is None:
    f = empty
  f(n)
为什么不干脆这样呢

def stuff(n, f=None):
    if f is None:
        return
    return f(n)

pass
是解释器的关键字,在其他情况下不占任何位置。它不是可以指定的对象。您可以使用无操作lambda

f = lambda x: None
稍微短一点:

def stuff(n, f=None):
  f = f or (lambda x: None)
  f(n)
或者更好:

def stuff(n, f=None):
    f(n) if f is not None else None

通用noop函数:

f = lambda *x,**y:None
你可以打电话

f()
f(0,foo=0)
我会和一个朋友一起去

def nop(*args, **kwargs):
    pass

def algo(func=nop):
    do_something()
    func()
    do_something_else()

algo() # nop is called
algo(some_callback) # some_callback is called
我看起来比你干净

if foo:
    foo()

关于格式:不要在函数签名中的
=
周围留空格。当我们记录格式时,不要用少于4个空格来缩进——2个空格基本上是不可读的——不要在条件句周围放括号,就像你在写C一样。每个人都说你应该读Ah,我的C++/Java/Perl背景显示=PIs您的第一个版本是Python3K吗?该语法似乎对Python2.7无效。@Bethor:谢谢,修复了。在2.6.0或更简单的版本上测试:
def stuff(n,f=None):f和f(n)
@codecraft:确实如此。但我认为,在这种情况下,清晰度会受到不必要的影响。为控制流使用逻辑运算符使事情变得非常像perl,可能不是很像Pythonic小改进:建议使用
is None
而不是
==None
()。谢谢,我想知道哪一个是最好的,但从未想过要检查!答案相应固定。+1比其他解决方案好得多,因为它清楚地说明了目的。只要这个问题有一个“正确”的答案,就是它。其他答案都不必要地混淆了这样一个微不足道的函数。如果OP想要将函数对象传递给另一个函数,这种方法不起作用。OT,但是为什么设计者需要为noop创建一个新的关键字?bizarre@jberryman因为Python没有块分隔符。您通常会使用这样的语言编写
{}
。但在Python中它将是。。。没有什么。所以
pass
可以使其语法完整。@jberryman在哪里
pass
只是一个关键字,用作其他空块的占位符。这可能会使解析更容易。它不是一个物体。None是指没有其他值的对象。它们有不同的语义。