我正在尝试使用函数返回给定列表.
def get_ext(file_type):
text = ['txt', 'doc']
audio = ['mp3', 'wav']
video = ['mp4', 'mkv']
return ?????
get_ext('audio') #should return de list ['mp3', 'wav']
Run Code Online (Sandbox Code Playgroud)
然后我被卡住了.这是一个扩展列表的简单/简短示例.最简单的方法是什么?
我有一些话题需要讨论.我有一个24 ifs/elifs 的代码片段.Operation是我自己的类,表示类似的功能Enum.
这是一段代码:
if operation == Operation.START:
strategy = strategy_objects.StartObject()
elif operation == Operation.STOP:
strategy = strategy_objects.StopObject()
elif operation == Operation.STATUS:
strategy = strategy_objects.StatusObject()
(...)
Run Code Online (Sandbox Code Playgroud)
从可读性的角度来看,我有一些顾虑.更好的是将它改成24个类并使用多态?我不相信它会使我的代码可维护......从一方面来说,这些代码if非常清晰,并且不应该难以理解,另一方面,有太多if的代码.
我的问题相当普遍,但是我用Python编写代码所以我不能使用像switch.
你怎么看?
更新:
一个重要的是StartObject(),StopObject()并且StatusObject()是构造函数,我想分配一个对象来strategy引用.
python conditional if-statement code-readability code-maintainability
好吧,所以我的头衔糟透了.一个例子效果更好:
input = 'check yahoo.com'
Run Code Online (Sandbox Code Playgroud)
我想解析输入,使用第一个单词作为"命令",并将字符串的其余部分作为参数.这是我的非Pythonic思想编码的简单版本:
if len(input) > 0:
a = input.split(' ')
if a[0] == 'check':
if len(a) > 1:
do_check(a[1])
elif a[0] == 'search':
if len(a) > 1:
do_search(a[1])
Run Code Online (Sandbox Code Playgroud)
我喜欢Python,因为它将通常很复杂的东西变成了相当简单的东西.我对它没有太多的经验,而且我相信有更好的方法来做这些事情...某种程度上更加诡异.我已经看到一些人用dicts和lambda函数替换switch语句的例子,而其他人只是推荐if..else嵌套.
假设我想使用以下语法打开一个文本文件进行阅读:
with open(fname,'r') as f:
# do something
pass
Run Code Online (Sandbox Code Playgroud)
但如果我发现它以.gz结尾,我会调用gzip.open().
if fname.endswith('.gz'):
with gzip.open(fname,'rt') as f:
# do something
pass
else:
with open(fname,'r') as f:
# do something
pass
Run Code Online (Sandbox Code Playgroud)
如果"做某事"部分很长并且不方便在函数中写入(例如,它会创建一个无法序列化的嵌套函数),那么使用gzip.open或基于返回的打开来调用最短的方法是什么? fname.endswith( '广州')?
假设我问用户原始输入,他们说:"这是一条消息." 如果该原始输入包含单词"message",则它将在此之后执行操作.我能看出这是怎么做到的吗?
我有一个Python程序要求用户输入像shell一样,如果我检测到一些特定的关键字,我想进入一些特定的函数.
问题是,我想避免做大量的if和else if.通常在C中为了避免这种情况,我使用了一个函数指针数组,我while用它strcmp来旅行并用来检查输入.
如果有可能的话,我想知道如何在Python中做到这一点.
我想使用“switch/case”结构来根据某些参数来决定为哪个变量赋值:
a, b = [init_val] * 2
# This doesn't exist in Python.
switch param
case 'a':
a = final_val
case 'b':
b = final_val
Run Code Online (Sandbox Code Playgroud)
问题Replacements for switch statements in Python中描述的字典方法在这里不起作用,因为您既不能分配给函数调用,
a, b = [init_val] * 2
switcher = {
'a': a,
'b': b
}
switcher.get(param) = final_val
Run Code Online (Sandbox Code Playgroud)
也不通过将变量存储在字典中来更改变量的值:
switcher[param] = final_val # switcher['a'] is only a copy of variable a
Run Code Online (Sandbox Code Playgroud)
我可以坚持使用“if/elif”,但由于我经常看到基于某些参数确定输出的漂亮字典解决方案(如上述问题),我很好奇是否有类似的解决方案来确定要向一组变量中的哪个变量赋值。
我通常使用字典实现 Switch/Case 进行相等比较。
dict = {0:'zero', 1:'one', 2:'two'};
a=1; res = dict[a]
Run Code Online (Sandbox Code Playgroud)
代替
if a==0 :
res = 'zero'
elif a == 1:
res = 'one'
elif a==2:
res = 'two'
Run Code Online (Sandbox Code Playgroud)
是否有策略来实施类似的非等比较方法?
if score <=10 :
cat = 'A'
elif score >10 and score <=30:
cat = 'B'
elif score >30 and score <=50 :
cat = 'C'
elif score >50 and score <=90 :
cat = 'D'
else:
cat = 'E'
Run Code Online (Sandbox Code Playgroud)
我知道使用 <、<=、>、>= 可能很棘手,但是是否有任何策略可以概括它或从列表中生成自动语句
{[10]:'A', [10,30]:'B', [30,50]:'C',[50,90]:'D',[90]:'E'}
Run Code Online (Sandbox Code Playgroud)
还有一些标志来说明它是 < …
我知道 python 中没有 switch case,可以使用字典代替。但是如果我想将参数传递给函数 zero() 而没有参数给 one() 呢?我没有发现任何与此相关的问题。
def zero(number):
return number == "zero"
def one():
return "one"
def numbers_to_functions_to_strings(argument):
switcher = {
0: zero,
1: one,
2: lambda: "two",
}
# Get the function from switcher dictionary
func = switcher.get(argument, lambda: "nothing")
# Execute the function
return func()
Run Code Online (Sandbox Code Playgroud)
在不必将它们分成两种情况的情况下实现这一点的最简单方法是什么?我认为 func() 需要采用(可选)参数?