有关问题:特色枚举而不是Switch…使用lambda,enum,闭包函数

问题描述 投票:0回答:1

通过使用lambda,枚举,闭包函数来实现特色枚举而不是Switch ...

对不起,我想在看了有关::>的教程后我对它有所了解。

编程术语:闭包-如何使用它们以及为什么有用https://www.youtube.com/watch?v=swU3c34d2NQ

我有一些问题,想要在这里更好地理解代码的问题。

  1. 在pycharm中:

    switcher = {                # info : dictionary
                ...
                11: eleven,
                12: twelve      # info : enum def twelve() -> str
     }
    

    如果我将鼠标悬停在'switcher'上->信息:dictionary

    如果我将鼠标悬停在切换台的“元素”上-

    例如十二12: twelve->信息:enum def twelve() -> str

    在这里如何与功能建立联系,关系?
    12: twelve --> info : enum   def twelve() -> str
    

    为什么NOT与()-父母在一起?

    就像调用函数一样-由functionname()(在字典中)

    喜欢这样?

    switcher = {  
                ...
                11: eleven(),
                12: twelve()
     }
    
  2. in'switcher.get(argument, lambda: (" ...',

  • IF

    true:返回值:参数[如果存在,则为参数,否则

    ELSE

    :[NONE]默认值
  • lambda”的目标或含义是什么?

  • 如果我将其替换为字符串,则会引发错误。

    func = switcher.get(argument, 'Invalid month [1-12]') # TypeError: 'str' object is not callable

    我的经验,那只是为了创建一个函数。没有它是行不通的。

    所以为什么它必须是一个函数(lambda)?

    ((如果我理解正确的话)

    https://docs.python.org/3/library/stdtypes.html#dict.get

  • 当我替换为功能“ 十二

  • ']时>

    def twelve(): return ("December")

    进入

    return ("December : {input}".format(input=argument))

    显示参数:'argument

    '产生一个

    NameError: name 'argument' is not defined

    如何给函数赋予[[argument?(我只使用了相同的变量,但是它可能是任何其他种类的变量,实例,列表,字典,集合,字符串...)


    代码

    #!/usr/bin/env python3 def one(): return "January" def two(): return "February" def three(): return "March" def four(): return "April" def five(): return "May" def six(): return "June" def seven(): return "July" def eight(): return "August" def nine(): return "September" def ten(): return "October" def eleven(): return "November" def twelve(): # def twelve(argument): print(' --- in function : twelve') # print(' --- in function : twelve : {input}'.format(input=argument)) # results in a NameError: name 'argument' is not defined return ("December") # return ("December : {input}".format(input=argument)) # results in a NameError: name 'argument' is not defined def numbers_to_months(argument): # switcher - dictionary with all months switcher = { 1: one, 2: two, 3: three, 4: four, 5: five, 6: six, 7: seven, 8: eight, 9: nine, 10: ten, 11: eleven, 12: twelve # enum def twelve() -> str # 12: twelve(argument) } # get the function from switcher dictionary func = switcher.get(argument, lambda: ("Invalid month [1-12] : your input : {input}".format(input=argument))) # more information print(" - switcher.get : {info} - {arg}".format(info=switcher.get(argument), arg=argument)) print(" - func : {info} - {arg}".format(info=func, arg=argument)) # execute the function print(func()) print() numbers_to_months(13) numbers_to_months(3) numbers_to_months(12) numbers_to_months(31)

    原始代码/教程:https://jaxenter.com/implement-switch-case-statement-python-138315.html

    功能强大的枚举代替Switch ...通过使用lambda,enum,闭包函数抱歉,我看完有关以下内容的教程后,对它有所了解:编程术语:闭包-如何使用...

    python enums switch-statement closures
    1个回答
    1
    投票
      python中有一个东西,叫做函数对象。您在声明新功能时创建一个。
    1. def func(arg): print(arg) return arg
    © www.soinside.com 2019 - 2024. All rights reserved.