我一直在玩Go,我在运行以下代码时遇到了Go的(非?)功能:
a := 1 //int
b := 1.0 //float64
c := a/b //should be float64
Run Code Online (Sandbox Code Playgroud)
当我运行它时,我得到以下运行时错误:
invalid operation: a / b (mismatched types int and float64)
Run Code Online (Sandbox Code Playgroud)
我认为GoLang应该对类型推断很好.我为什么要写:
c := float64(a)/b //float64
Run Code Online (Sandbox Code Playgroud)
通常,给定两种数字类型,c应该被推断为包含两者的最小类型.我不认为这是一种疏忽,所以我只是想弄清楚为什么这种行为已经决定了.仅出于可读性原因?或者我的建议行为是否会导致语言或其他某种逻辑上的不一致?
我有一个字符串列表,其中一些恰好是None:
headers = ['Name', None, 'HW1', 'HW2', None, 'HW4', 'EX1', None, None]
Run Code Online (Sandbox Code Playgroud)
现在我想迭代这个列表,但跳过None条目.例如,像这样的东西会很好:
for header in headers if header: print(header)
Run Code Online (Sandbox Code Playgroud)
但这不起作用.有两种方法我可以使用它,但我不喜欢这两种方法:
for header in (item for item in headers if item): print(header)
Run Code Online (Sandbox Code Playgroud)
和
for header in headers:
if header: print(header)
Run Code Online (Sandbox Code Playgroud)
我只是好奇是否有更好的方法.我觉得无视无.应该是非常基本的.