小编And*_*ewF的帖子

把猫扔出窗外

想象一下,你在一座有猫的高楼里.这只猫可以在低矮的故事窗口中摔下来,但如果从高楼层抛出,它就会死亡.你怎么能用最少的尝试数来计算猫可以存活的最长时间?

显然,如果你只有一只猫,那么你只能线性搜索.先从一楼扔猫.如果它存活下来,从第二个扔掉它.最终,从地板f抛出后,猫会死.然后你知道楼层f-1是最大的安全楼层.

但是,如果你有一只以上的猫怎么办?您现在可以尝试某种对数搜索.让我们说这个版本有100层,你有两个相同的猫.如果你将第一只猫从50楼扔出去并且死亡,那么你只需要线性搜索50个楼层.如果您为第一次尝试选择较低楼层,则可以做得更好.假设您选择一次解决20个楼层的问题,并且第一个致命楼层是#50.在这种情况下,你的第一只猫将在从60楼死亡之前从20楼和40楼的飞行中幸存下来.你只需要分别检查楼层41到49.这总共有12次尝试,这比你试图使用二进制消除所需的50次要好得多.

一般来说,对于有2只猫的n层建筑来说,最好的策略和最坏情况的复杂性是什么?n楼和m猫怎么样?

假设所有猫都是等同的:它们都将从给定窗口的摔倒中幸存或死亡.此外,每一次尝试都是独立的:如果一只猫在跌倒时幸存下来,它就完全没有受到伤害.

这不是家庭作业,虽然我可能已经解决了一次学校作业.这只是一个异想天开的问题,今天突然出现在我脑海中,我不记得解决方案了.如果有人知道此问题的名称或解决方案算法的加分点.

language-agnostic algorithm dynamic-programming asymptotic-complexity

150
推荐指数
4
解决办法
1万
查看次数

而(1)Vs. for while(True) - 为什么会有区别?

这个关于perl中无限循环的问题很感兴趣:while(1)vs.for(;;)有速度差吗?,我决定在python中运行类似的比较.我期望编译器会为while(True): pass和生成相同的字节代码while(1): pass,但实际上并非python2.7中的情况.

以下脚本:

import dis

def while_one():
    while 1:
        pass

def while_true():
    while True:
        pass

print("while 1")
print("----------------------------")
dis.dis(while_one)

print("while True")
print("----------------------------")
dis.dis(while_true)
Run Code Online (Sandbox Code Playgroud)

产生以下结果:

while 1
----------------------------
  4           0 SETUP_LOOP               3 (to 6)

  5     >>    3 JUMP_ABSOLUTE            3
        >>    6 LOAD_CONST               0 (None)
              9 RETURN_VALUE        
while True
----------------------------
  8           0 SETUP_LOOP              12 (to 15)
        >>    3 LOAD_GLOBAL              0 (True)
              6 JUMP_IF_FALSE            4 (to 13)
              9 POP_TOP             

  9          10 JUMP_ABSOLUTE            3
        >>   13 POP_TOP …
Run Code Online (Sandbox Code Playgroud)

python

110
推荐指数
3
解决办法
7万
查看次数

使用functools.wraps和日志记录装饰器

我正在尝试编写一个简单的装饰器,在调用装饰函数之前记录给定的语句.记录的语句应该看起来都来自同一个函数,我认为这是functools.wraps()的目的.

为什么以下代码:

import logging
logging.basicConfig(
    level=logging.DEBUG,
    format='%(funcName)20s - %(message)s')

from functools import wraps

def log_and_call(statement):
    def decorator(func):
        @wraps(func)
        def wrapper(*args, **kwargs):
            logging.info(statement)            
            return func(*args, **kwargs)
        return wrapper
    return decorator


@log_and_call("This should be logged by 'decorated_function'")
def decorated_function():
    logging.info('I ran')

decorated_function()
Run Code Online (Sandbox Code Playgroud)

导致日志语句如:

             wrapper - This should be logged by 'decorated_function'
  decorated_function - I ran
Run Code Online (Sandbox Code Playgroud)

我认为对换行的调用会用wrapped_function的名称重命名包装器.

我正在使用python 2.7.1.

python logging

19
推荐指数
2
解决办法
5526
查看次数

检查厨师是否以厨师独奏的形式运行

我正在使用Vagrant和chef-solo来测试我的食谱,但我有一个特殊的食谱需要厨师服务器(它使用搜索).我希望我的默认配方如下所示:

include_recipe 'some_recipe'
include_recipe 'some_other_recipe'
unless running_as_chef_solo?
  include_recipe 'a_recipe_that_requires_chef_server'
end
Run Code Online (Sandbox Code Playgroud)

如何检查厨师是否在菜谱中作为厨师独奏运行,所以我可以跳过不支持的食谱?

chef-infra chef-recipe vagrant

13
推荐指数
1
解决办法
3043
查看次数

自定义Django字段以存储电子邮件地址列表

我正在尝试将一个字段添加到Django模型中,该模型将代表电子邮件地址列表.我希望用户在管理员的表单中输入逗号分隔的地址列表,然后我的应用程序将解析以发送一系列电子邮件.

我目前的实现涵盖了基本概念,但有很大的局限性.在管理员中,如果我输入一个类似的字符串foo@example.com, bar@example.com,那么它会正确地将其写入数据库中[u'foo@example.com', u'bar@example.com'].但管理员显示此序列化值而不是人性化字符串.更重要的是,如果我编辑并保存记录而不进行任何更改,则相同的转换将更[u'foo@example.com', u'bar@example.com']改为[u"[u'foo@example.com'", u"u'bar@example.com']"].

如何将python列表表示转换回用于管理员的字符串?这是value_to_string方法的目的还是我需要在其他地方进行转换?

我目前的自定义模型字段如下:

class EmailListField(models.TextField):
    __metaclass__ = models.SubfieldBase

    def to_python(self, value):
        if not value:
            return
        if isinstance(value, list):
            return value
        return [address.strip() for address in value.split(',')]

    def get_db_prep_value(self, value):
        if not value:
            return
        return ','.join(unicode(s) for s in value)

    def value_to_string(self, obj):
        value = self._get_val_from_obj(obj)
        return self.get_db_prep_value(value)
Run Code Online (Sandbox Code Playgroud)

这是基于SeparatedValuesField这里描述的:http://www.davidcramer.net/code/181/custom-fields-in-django.html.

python django

8
推荐指数
1
解决办法
5808
查看次数

为什么在自定义迭代器上隐式调用__len __()

我正在编写一个简单的链表实现,如下所示:

class Node(object):
    def __init__(self, value):
        self.value = value
        self._next = None

    def __iter__(self):
        here = self
        while here:
            yield here
            here = here._next

    def __len__(self):
        print("Calling __len__ on: {}".format(self))
        return sum(1 for _ in self)

    def append_to_tail(self, value):
        if self._next is None:
            self._next = Node(value)
        else:
            self._next.append_to_tail(value)

def print_list(ll):
    print(ll.value)
    if ll._next:
        print_list(ll._next)

my_list = Node('a')
my_list.append_to_tail('b')
my_list.append_to_tail('c')

print_list(my_list)
Run Code Online (Sandbox Code Playgroud)

没有__len__方法,此代码运行正常.删除这三行并运行上面的代码输出:

  first
  second
  third
Run Code Online (Sandbox Code Playgroud)

但是,如果__len__存在该方法,则结果为:

    first
    Calling __len__ on: <__main__.Node object at 0x108804dd0>
    Calling __len__ on: …
Run Code Online (Sandbox Code Playgroud)

python

7
推荐指数
1
解决办法
137
查看次数

重装mod_wsgi守护进程时的停机时间?

我正在使用mod_wsgi在Apache上运行Django应用程序.升级期间会有停机时间吗?

Mod_wsgi以守护进程模式运行,因此我可以通过触摸.wsgi脚本文件重新加载我的代码,如"ReloadingSourceCode"文档中所述:http://code.google.com/p/modwsgi/wiki/ReloadingSourceCode.据推测,重新加载需要一些非零时间.如果在重新加载期间有请求,会发生什么?Apache会将请求排队,然后在wsgi守护程序准备就绪后完成它吗?

该文档包括以下声明:

因此,如果您在守护程序模式下使用Django并且需要更改"settings.py"文件,则在完成所需更改后,还要触摸包含WSGI应用程序入口点的脚本文件.完成后,在下一个请求中,将重新启动进程并重新加载Django应用程序.

对我来说,这表明Apache将优雅地处理每个请求,但我想我会要求确定.我的应用程序并不重要(一点停机时间不会是灾难性的)所以问题主要是学术问题.

谢谢.

python apache django mod-wsgi

5
推荐指数
1
解决办法
1841
查看次数