特色枚举而不是开关。。。通过使用lambda、enum、closures函数
抱歉,我想在看了一个关于以下内容的教程后,我有点理解了:
编程术语:闭包-如何使用闭包以及为什么闭包有用 https://www.youtube.com/watch?v=swU3c34d2NQ
我有一些问题,想在这里更好地理解代码
在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
就像通过functionname()
调用函数一样
(在字典里)
像这样
switcher = {
...
11: eleven(),
12: twelve()
}
在“switcher.get(argument, lambda: (" ...
”中
IFtrue:返回值:参数[IF excist]否则
其他:[无]默认值
这里“lambda
”的目的或意义是什么
如果我用字符串替换它,它将抛出一个错误
func = switcher.get(argument, 'Invalid month [1-12]')
# TypeError: 'str' object is not callable
我的经验是,这只是为了创建一个函数。 没有它就不行
(如果我对该部分理解正确)
当我在函数“12中替换时
def twelve():
return ("December")
进入
return ("December : {input}".format(input=argument))
要显示参数:“参数”这将导致
NameError: name 'argument' is not defined
(我只使用了同一个变量,但它可以是任何其他类型的变量、实例、列表、字典、集合、字符串…
代码
#!/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)
每个函数1到12都必须接受参数/参数
...
def twelve(argument):
print(' --- in function : twelve : {input}'.format(input=argument))
...
func = switcher.get(argument, lambda arg : ("Invalid month [1-12] : your input : {input}".format(input=argument)))
...
print(func(78))
原始代码/教程:https://jaxenter.com/implement-switch-case-statement-python-138315.html
python中有一种东西,叫做函数对象。在声明新函数时创建一个
所以现在
func
-是对象。您可以将它存储在某个地方,例如在dict中(就像您所做的那样),以后再使用它。您可以调用它func(1)
并得到一个结果。Pycharm足够聪明,可以找到您在哪里声明了方法,并向您显示有关它的信息切换器必须返回函数对象,即稍后调用
所以默认对象也必须是函数对象。Lambda只是创建它的另一种方式。看这里https://book.pythontips.com/en/latest/lambdas.html
print
的键从切换器中获取李>UPD 调用之前存储的函数时,可以将参数传递给该函数。让我们用我前面的例子来试试:
输出:
相关问题 更多 >
编程相关推荐