小编dmz*_*rsk的帖子

Pythonic迭代整数位的方法

让我们a=1091101101二进制.如何迭代此数字的位,例如:[64, 32, 8, 4, 1]

python binary iterator

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

使用超类"protected final"方法来保留子类的公共代码

作为一个(迂腐的)初学Java程序员,我想知道,将所有子类使用的公共代码块移动到父类中的单独的受保护(最终)方法是一种好习惯吗?使用常用值填充列表或常用过滤算法等任务...是否也可以使用受保护的静态方法?

class A {
    protected final List<String> getVariants() {...}
    protected final List<String> filterResults(List<String> variants) {...}
}

class B extends A {
    public List<String> doSomethingUsefull() {
        List<String> commonVariants = getVariants();
        ...
        return filterResults(commonVariants);
    }
}

class C extends A {
    public void doSomethingUsefull() {
        List<String> commonVariants = getVariants();
        ...
        return filterResults(commonVariants);
    }

    public void doMoreUsefullThings() {
        List<String> commonVariants = getVariants();
        ...
        return filterResults(commonVariants);
    }
}
Run Code Online (Sandbox Code Playgroud)

java inheritance final protected

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

购物车最小化算法

我有一个列表products,其中包含shops销售它的列表.

{
    'Book A': [ShopA, ShopB, ShopC],
    'Book B': [ShopC, ShopD],
    'Movie C': [ShopA, ShopB, ShopD, ShopE],
    ...
}
Run Code Online (Sandbox Code Playgroud)

(商店之间的价格不同)

每个商店也有运费.这是一个"按订单"运输成本,我的购物车中有多少项无关紧要.商店之间也有所不同.

例如:如果我从ShopA购买"Book A",从ShopC购买"Book B",从ShopA购买"Movie C",结果价格为:Book A price in ShopA+ Book B price in ShopC+ Movie C price in ShopA+ ShopC shipping cost+ShopA shipping cost

如果运费是零或者是基于每个项目并且是常数,那么我将按字段对商品列表进行排序price+shipping并从每个集合中获取第一个结果.

我需要购买所有物品一次,找到最低价格最终产品.

我不是很擅长优化算法和动态编程,所以我需要一个解决方案或只是向正确的方向点头.

algorithm mathematical-optimization

7
推荐指数
2
解决办法
2140
查看次数

在Haskell中结合使用应用程序风格的验证器

我对命令式编程有很好的把握,但现在我自学了一个Haskell非常好.

我想,我对Monads,Functors和Applicatives有很好的理论认识,但我需要一些练习.而对于练习,我有时会从当前的工作任务中带来一些东西.

而且我在应用方式上结合了一些东西

第一个问题

我有两个验证功能:

import Prelude hiding (even)

even :: Integer -> Maybe Integer
even x = if rem x 2 == 0 then Just x else Nothing

isSmall :: Integer -> Maybe Integer
isSmall x = if x < 10 then Just x else Nothing
Run Code Online (Sandbox Code Playgroud)

现在我想validate :: Integer -> Maybe Integereven和建造isSmall

我最好的解决方案是

validate a = isSmall a *> even a *> Just a
Run Code Online (Sandbox Code Playgroud)

这不是免费的

我可以使用monad

validate x = do
  even x
  isSmall x …
Run Code Online (Sandbox Code Playgroud)

haskell composition applicative

6
推荐指数
2
解决办法
167
查看次数

Domen驱动的架构和用户拼写错误/错误

DDD教我们像我们的真实世界原型一样构建我们的类.

所以不要使用setter

job = new Job
job.person = person
job.since = time.Now()
job.title = title
Run Code Online (Sandbox Code Playgroud)

我们在聚合根中定义了命名良好的方法

job = person.promote(title, /** since=time.Now() **/)
Run Code Online (Sandbox Code Playgroud)

现在是棘手的部分

假设我们有一个title人工智能的用户界面,他/她通过HTML表单输入新内容并制作一个类似"prgrammer"的拼写错误(当然在实际应用中有一个选择列表,但这里我们有一个文本输入),或选择错误的日期(如今天默认)

现在我们遇到了问题.现实世界中没有拼写错误.我们的John Doe绝对是一名"程序员"而且绝不是"程序员"

我们如何在域模型中解决这个错误?

我们Person刚刚promote,demote,fire,等方法,反映了人力资源领域模型.

我们可以稍微欺骗并Job直接更改记录,但现在我们有一个Job.setTitle方法,它不反映我们的域模型,而且,setter是邪恶的,你知道.

这可能看起来有点"学术性",但当我尝试为复杂的应用程序构建一个好的域模型时,这真的让我感到困惑

setter encapsulation domain-driven-design

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

Haskell:运行两个monad,保留第一个monad的结果

和Haskell一起玩,现在我尝试创建一个类似的函数

keepValue :: (Monad m) => m a -> (a -> m b) -> m a
Run Code Online (Sandbox Code Playgroud)

具有以下语义:它应该将monad值应用于函数,该函数返回第二个monad,并保留第一个monad 的结果,但是第二个monad的效果

我有Maybemonad 的工作函数:

keepValueMaybe :: Maybe a -> (a -> Maybe b) -> Maybe a

keepValue ma f = case ma >>= f of
    Nothing -> Nothing
    Just _ -> ma
Run Code Online (Sandbox Code Playgroud)

因此,如果第一个值是Nothing,则不运行该函数(因此没有第二个副作用),但如果第一个值是Just,则运行该函数(带副作用).我保持第二次计算的效果(例如,Nothing使整个表达式Nothing),但原始值.

现在我好奇.它适用于任何monad吗?

它看起来有点内置>>,但我在标准库中找不到任何东西.

monads haskell

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

不可变对象设计的性能

我的应用程序中需要很多小对象.它们必须是不可变的,并在设置新属性时返回一个新实例.

我找到了许多禁用obj.prop = newValue行为的方法,现在我需要这个:

newObj = obj.setTitle(title)
newObj = obj.setDirection(x, y)
newObj = obj.incrementCount()
newObj = obj.swap()
Run Code Online (Sandbox Code Playgroud)

目前我这样做:

class Info(object):
    __slots__ = ['_x', '_y', ...]

    def setDirection(self, x, y):
        newObj = copy.copy(self)  # shallow copy is OK
        newObj._x = x
        newObj._y = y
        return newObj

    def swap(self):
        newObj = copy.copy(self)
        #  methods can do different things
        newObj._x, newObj._y = self._y, self._x
        return newObj
Run Code Online (Sandbox Code Playgroud)

在性能方面这是好的吗?是否有更快的方法返回对象的克隆,并更改了一些属性?

我用__slots__.我的对象有预定义的属性.我没有通用的.set(prop, value)方法

(欢迎使用Python 3.5+)

python performance immutability python-3.x

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

Kotlin替代了Python的协程产量和发送

以下Python协程代码段的Kotlin惯用替代品是什么:

def generator():
  c = 1
  while True:
    op = yield c
    if op == 'inc':
      c += 1
    elif op == 'mult':
      c *= 2

# main
g = generator()
a = g.send(None) # start
b = g.send('inc')
c = g.send('mult')
d = g.send('inc')

print([a, b, c, d]) # 1, 2, 4, 5
Run Code Online (Sandbox Code Playgroud)

因此,我需要从协程中获取值(通过通道?),还需要将这些值发送回协程中。我需要两个渠道吗?

python concurrency channel coroutine kotlin

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

asyncio 协程/任务准备好后立即对其进行迭代

我使用aiohttp. 有没有办法在每个请求完成后立即获得结果?

也许使用类似的东西async for?还是 Python 3.6 异步生成器?

目前我await asyncio.gather(*requests)并在所有这些完成后处理它们。

python python-asyncio

3
推荐指数
2
解决办法
1530
查看次数

限制从 HTTP 响应读取的字节数

我需要读取用户提供的 URL 的响应

我不希望他们通过大文件的链接使我的服务器超载。

我想最多读取 N 个字节,如果还有更多字节要读取,则返回错误。

我可以读取 N 个字节,但是我如何检测该文件不完整(假设远程文件正好是 N 个字节长的极端情况)?

http go

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