小编Scr*_*ffy的帖子

lambda*args,**kwargs:无

考虑:

blank_fn = lambda *args, **kwargs: None

def callback(x, y, z=''):
    print x, y, z

def perform_task(callback=blank_fn):
    print 'doing stuff'
    callback('x', 'y', z='z' )
Run Code Online (Sandbox Code Playgroud)

这样做的动机是我不需要输入逻辑来检查是否已经分配了回调,因为它默认为blank_fn,它什么都不做.

这有效,但是有一些原因我不应该这样做吗?它是pythonic吗?有没有更好的方法呢?是否内置了:

lambda *args, **kwargs: None
Run Code Online (Sandbox Code Playgroud)

python lambda default-arguments

26
推荐指数
1
解决办法
2万
查看次数

逻辑运算符替换if语句

以下是使用符合Pythonic/pep8的逻辑表达式吗?

  1. 这个:

    x = a or b
    
    Run Code Online (Sandbox Code Playgroud)

    代替:

    if not a:
        x = b
    else:
        x = a
    
    Run Code Online (Sandbox Code Playgroud)
  2. 这个:

    x = a and b
    
    Run Code Online (Sandbox Code Playgroud)

    代替:

    if not a:
        x = a
    else:
        x = b
    
    Run Code Online (Sandbox Code Playgroud)
  3. (曲线球?)这个:

    x = x or y
    
    Run Code Online (Sandbox Code Playgroud)

    代替:

    if not x:
        x = y
    
    Run Code Online (Sandbox Code Playgroud)

python pep8 logical-operators

8
推荐指数
2
解决办法
1823
查看次数

我如何子类threading.Event?

在Python 2.7.5中:

from threading import Event

class State(Event):
    def __init__(self, name):
        super(Event, self).__init__()
        self.name = name

    def __repr__(self):
        return self.name + ' / ' + self.is_set()
Run Code Online (Sandbox Code Playgroud)

我明白了:

TypeError:调用元类base
函数时出错()参数1必须是代码,而不是str

为什么?

我所知道的关于线程的一切.事件我从以下网站学习:http://docs.python.org/2/library/threading.html?highlight = threading # event-objects

当它说threading.Event()是类threading.Event ???的工厂函数时它是什么意思?(呃......看起来对我很平常).

python factory metaclass subclass

3
推荐指数
1
解决办法
768
查看次数

为什么 list.remove 只删除每隔一个的项目?

在我的 Python 2.7.2 IDLE 解释器中:

>>> mylist = [1, 2, 3, 4, 5]
>>> for item in mylist:
        mylist.remove(item)

>>> mylist
[2, 4]
Run Code Online (Sandbox Code Playgroud)

为什么?

python enumeration list

2
推荐指数
1
解决办法
2237
查看次数