我是一名相对较新的 Python 开发人员,但我有 Java 背景。在 Java 中,有一行布尔检查器/分配器(由于缺乏更好的术语):
int result = (x)?y:z;
Run Code Online (Sandbox Code Playgroud)
我试图在Python中使用类似的方法,但我不确定这个结构是否存在。有没有一种方法可以声明一个变量,检查条件是否为真并将其分配给两个值之一而不使用 if/else?
我有一个带有我的main()函数的翻译单元和另一个没有 main 的翻译单元。假设即使我只控制第二个而无法触摸第一个。
现在,由于我不会讨论的原因,我希望能够在运行之前运行一些代码main()。我知道这可以通过使用函数调用初始化全局变量来完成,但我想隐藏这一点 - 尽可能少地使用宏(我敢说不使用宏吗?可能不可能,C++ 中没有适当的静态块)
什么是优雅的,或者我们可以说,不是很丑的做这件事的方式?更清楚地说,我正在寻找可以多次使用此功能的东西,而不仅仅是让它工作一次的东西。我希望它尽可能接近:
// ... at global scope ...
static {
// my code here
}
Run Code Online (Sandbox Code Playgroud)
PS:这个问题与这个关于初始化静态类成员的问题有关,但不一样。它还希望清楚地反驳这个声明,它不能在 C++ 中完成。
注意:是的,我知道静态初始化顺序失败,不需要提醒我……而且我不是要求绕过它的东西。显然,静态运行代码需要一些谨慎。
我们希望在 a 上运行一个函数,Result或者如果结果实际上是一个错误,则有一个默认值。就像是:
let is_dir = entry.file_type().is_dir() || false
// ^--- file_type() returns a Result
// ^--- default to false if Result is an IOError
Run Code Online (Sandbox Code Playgroud)
目前,我们正在这样做:
let is_dir = entry.file_type().map(|t| t.is_dir()).unwrap_or(false);
Run Code Online (Sandbox Code Playgroud)
但这似乎非常令人困惑,对map单个项目结果运行 a 。有更好的方法吗?
如果我们在 GO 中有以下方法:
GetCustomer(id string) (*Customer, error)
Run Code Online (Sandbox Code Playgroud)
数据库中可能不存在给定 ID 的客户。当没有找到客户时,代码可以
return nil, nil
Run Code Online (Sandbox Code Playgroud)
这在 Go 中被认为是糟糕的编码实践吗?或者惯用的 Go 代码看起来像
return nil, errCustomerNotFound
Run Code Online (Sandbox Code Playgroud)
我在第二种方法中看到的问题是您最终会检查此特定错误并单独处理它。
Go 源代码或库中是否有出现这种情况并且首选其中一种方法的示例?
更新
如果return nil, nil被认为是不惯用的。我想知道为什么在这种情况下这是真的?由于 *Customer 是一个指针,我想返回 nil 来表示没有值
我有一个MutableMap<String, MutableList<String>我正在向其中添加项目,基本上是一个集合,其中相同的键与多个值相关联。
每当我想添加一个新值时,我需要首先检查是否已经有一个与同一个键关联的列表,如果没有则初始化一个,然后将该值添加到列表中。
我可以通过这样做以非常冗长的方式做到这一点
if (map.containsKey(key)) {
map[key].add(value)
} else {
map[key] = mutableListOf(value)
}
Run Code Online (Sandbox Code Playgroud)
我也可以通过这样做以非常简洁的方式做到这一点
map[key] = (map[key] ?: mutableListOf()) + mutableListOf(value)).toMutableList()
Run Code Online (Sandbox Code Playgroud)
以及介于冗长与简洁之间的其他几种方式。
但是,在 Kotlin 中执行此操作的惯用方法是什么?
我并不是真正的目标是简洁,而是要立即识别和理解的形式。
今天只需要为一个非常接近此的项目编写一些代码:
private static string CreateColorFromPercentage(double percentage, bool isPrimaryGroup)
{
if (isPrimaryGroup)
{
if (percentage >= 97.0)
{
return "#000000"; // black
}
else if (percentage > 80.0)
{
return "#FF0000"; // red
}
else
{
return "#FFA500"; // orange
}
}
else
{
if (percentage > 97.5)
{
return "#000000"; // black
}
else if (percentage > 80.0)
{
return "#FFA500"; // orange
}
else
{
return "#008000"; // green
}
}
}
Run Code Online (Sandbox Code Playgroud)
在测试范围时,是否有更多的 C# 9 / .NET 5 惯用方式来表达 …
怎样用什么成语才能达到预期的效果呢?
val input = "aaaabbbcca"
val result = input.(here do the transformations)
val output = listOf("a" to 4, "b" to 3, "c" to 2, "a" to 1)
assert(result == output)
Run Code Online (Sandbox Code Playgroud) package main
import (
"fmt"
"time"
)
func main() {
n := 1024
dst1 := make([]byte, n)
dst2 := make([]byte, 0, n)
dst3 := make([]byte, 0, n)
start := time.Now()
for i := 0; i < n; i++ {
dst1[i] = byte(i)
}
fmt.Println(uint64(time.Since(start).Microseconds()))
start = time.Now()
for i := 0; i < n; i++ {
dst2 = append(dst2, dst1[i])
}
fmt.Println(uint64(time.Since(start).Microseconds()))
start = time.Now()
for i := 0; i < n; i++ {
dst3 = append(dst3, dst1...)
}
fmt.Println(uint64(time.Since(start).Microseconds())) …Run Code Online (Sandbox Code Playgroud) 考虑的情况下进行的其他内部的
int f( ... )
{
for (int i = start_a; i < end_a; i++)
{
for (int j = start_b; j < end_b; j++)
{
// make some computation
if( i_must_exit == true)
{
// exit from all for
}
}
}
// I want arrive here
}
Run Code Online (Sandbox Code Playgroud)
我们想要摆脱两个for循环.在没有分解内部函数,抛出异常等的情况下,这在C++ 03中并不容易.我想知道C++ 11是否引入了一种机制来执行此操作.
idioms ×9
c++ ×2
go ×2
kotlin ×2
.net-5 ×1
boolean ×1
c# ×1
c++11 ×1
collections ×1
map-function ×1
performance ×1
python ×1
readability ×1
rust ×1
static-block ×1