Python2.7.10:在DICT中使用LAMBDA和逻辑运算符选择cas

2024-09-29 22:29:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我只是在和一些代码战斗,需要你的帮助!你知道吗

目标:

  • 不使用IF语句
  • 选择一个案例并根据案例做一些事情
  • 没有Python开关,因为使用了python2.7.10!你知道吗

下面是尚未运行的代码-->;根据值NBINS,它应该选择某个函数或直接进行计算(例如lambda x: x==nbins: bucket-=1

   def caseSwitcherCheckBucket(bucket):

        choose = {
            lambda x: x==nbins: maxBucket,
            lambda x: x<nbins: defaultBucket,
            }

        func = choose.get(bucket)
        return func()


    def defaultBucket(bucket):
        print 'defaultBucket():', bucket
        return bucket

    def maxBucket(bucket):          
        bucket-=1
        print 'maxBucket():', bucket
        return bucket

我在这里找到了一个例子:Python dictionary instead of switch/case,我想按照戴夫·韦伯的建议去做。这是他的密码:

values = {
    lambda x: x < 4: foo,
    lambda x: x > 4: bar
}

不幸的是,在这种情况下它不起作用!我该怎么解决这个问题?

+

通常我使用这种“案例切换程序”-->这里是一个例子!你知道吗

   def caseSwitcherCheckLogStatus(check_log_status):

        choose = {
            True: entLog,               
            False: doNothing,
            }

        func = choose.get(check_log_status)
        return func()

    def entLog():
        data[i,[0,1,2]] = 10**(data[i,[0,1,2]])

    def doNothing():
        pass

+

如果您知道我如何改进我的“案例转换器”,我也很高兴得到一些建议。


Tags: lambda代码getreturnbucketdef建议案例
1条回答
网友
1楼 · 发布于 2024-09-29 22:29:13

可以这样实现:

def switcher(cases, default_func=None):
    def switch(value):
        for case_func, result in cases:
            if case_func(value):
                return result(value)

        if default_func is not None:
            return default_func(value)
        else:
            raise RuntimeError("No case matched and no default given")

    return switch

可用作

my_switch = switcher([
    (lambda value: value == nBins, maxBucket),
    (lambda value: value < nBins, defaultBucket),
])

my_switch(val)

相关问题 更多 >

    热门问题