回答
不,它不。谈到语言本身时,Python的核心原则之一就是只有一种方法来做某件事。该开关是冗余的:
if x == 1:
pass
elif x == 5:
pass
elif x == 10:
pass
(当然没有跌倒)。
该开关最初是作为C编译器优化引入的。现代编译器不再需要这些提示来优化这种逻辑语句。
任何认为Python“只有一种方法去做某事”的人都很困惑。 – 2009-09-15 22:49:12
固定。我想我可以声称它是python-esque的伪代码,嘿嘿。 – Soviut 2009-09-15 22:49:39
@Glenn Maynard:可能有不止一种方式来做到这一点,但是“应该有一个 - 最好只有一个 - **明显的方式来做到这一点”,根据PEP 20(“The Zen of Python “)。 – 2009-09-15 22:53:38
我在你的链接中嵌入了一个片段,如果你不喜欢它,请将它回滚一下。 – 2009-09-15 20:45:30
这也没有落空。 – dlamblin 2009-09-15 20:58:48
In * theory *您可以通过使用defaultdict: >>>从集合中实现一个单行程式输入defaultdict >>> functions = defaultdict(lambda:not_found,a = function_1,b = function_2) 但在实践中可能不是一个好主意,特别是如果这种情况很常见的话:) – 2009-09-15 21:58:05
试试这个:
def on_function(*args, **kwargs):
# do something
def off_function(*args, **kwargs):
# do something
function_dict = { '0' : off_function, '1' : on_function }
for ch in binary_string:
function_dict[ch]()
或者,如果你的函数返回值,你可以使用列表理解或发电机的表达:
result_list = [function_dict[ch]() for ch in binary_string]
这真的很聪明。 – twneale 2009-09-15 21:45:44
否则,如果是不好的做法,因为它们是不安全的时候它们变得太长,并且涉及不必要的条件分支(可能影响编译器/缓存)。
试试这个...
class Functions():
@staticmethod
def func():
print("so - foo")
@staticmethod
def funcWithArgs(junk):
print(junk, "foo")
# fill in your cases here...
cases = {
"a" : Functions.func ,
"b" : Functions.funcWithArgs ,
"c" : Functions.funcWithArgs
}
def switch(ch, cases, *args):
try:
len(*args) # empty args
except TypeError:
return cases[ ch ]()
return cases[ ch ](*args)
# try out your switch...
switch("a", cases) # "so - foo"
switch("b", cases, "b -") # "b - foo"
switch("c", cases, "c -") # "c - foo"
函数需要将变量传递到范围中 – Jason 2017-01-30 00:52:14
- 1. python是否具有与C#的Enumerable.Aggregate等效的功能?
- 2. Rust是否具有与Python的unichr()函数等效的功能?
- 3. Python是否具有与java.lang.Math.nextUp等效的功能?
- 4. JavaScript是否具有与VBScript的ExecuteGlobal等效的功能?
- 5. Apache Hive是否具有与PostgreSQL的pg_dump等效的功能?
- 6. .NET是否具有与Java的.properties文件等效的功能?
- 7. Ruby on Rails是否具有与Django的ModelForm等效的功能?
- 8. MySQL是否具有与SQL Server rowversion等效的功能?
- 9. D是否具有与C++ nullptr_t等效的功能?
- 10. GraphicsMagick是否具有与ImageMagick'convert -auto-orient'选项等效的功能?
- 11. JPA是否具有与Hibernate SQLQuery.addScalar()等效的功能?
- 12. OS X是否具有与/ dev/shm等效的功能?
- 13. Rails 3是否具有与MVC3区域等效的功能?
- 14. jQuery是否具有与dojo.require等效的功能?
- 15. VML是否具有与SVG标记元素等效的功能?
- 16. SQLite是否具有与TO_CHAR等效的功能?
- 17. Python列表是否具有与__contains__等效的测试身份的功能?
- 18. Io是否具有与C的退出(信号)功能等效的功能?
- 19. Mathematica是否具有与Matlab的“独特”功能等效的功能
- 20. SQL Server是否具有Excel的KURT函数的等效功能?
- 21. ActionScript是否具有“核心转储”的等效功能?
- 22. Crystal Reports是否具有主页面的等效功能?
- 23. PostgreSQL是否具有Oracle ArrayBind的等效功能?
- 24. .NET是否具有与Delphi的VCL组件模型等效的功能?
- 25. Rails 3是否具有与Merb的run_later内置函数等效的功能?
- 26. 是否有与WebExtensions的nsIBrowserSearchService等效的功能?
- 27. lift-json JValue类是否具有与scala.xml.Node.text方法等效的功能?
- 28. MySQL是否具有与SQL Server“索引视图”等效的功能?
- 29. Java是否具有与C#的Environment.GetCommandLineArgs()等价的功能?
- 30. 在Transact-SQL中是否有与typedef等效的功能?
你尝试做[{ '0': '关', '1': '在'}。获得(二)b在 “01101101”] – joeforker 2009-09-15 20:47:21