只是为了好奇/方便:C#提供了两个我知道的很酷的条件表达式功能:
string trimmed = (input == null) ? null : input.Trim();
Run Code Online (Sandbox Code Playgroud)
和
string trimmed = (input ?? "").Trim();
Run Code Online (Sandbox Code Playgroud)
对于我经常遇到的情况,我想念另一个这样的表达:
如果输入引用为null,则输出应为null.否则,输出应该是访问输入对象的方法或属性的结果.
我在第一个例子中完成了这一点,但是(input == null) ? null : input.Trim()非常冗长且难以理解.
这种情况是否有另一个条件表达式,或者我可以??优雅地使用运算符吗?
今天在我们的代码库中注意到一行,我认为肯定会因为语法错误而无法构建,但是测试正在通过,所以显然它实际上是有效的python(在2.x和3中).
条件表达式有时不需要空格:
>>> 1if True else 0
1
Run Code Online (Sandbox Code Playgroud)
如果LHS是变量,它不起作用:
>>> x = 1
>>> xif True else 0
File "<stdin>", line 1
xif True else 0
^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)
但它似乎仍然适用于其他类型的文字:
>>> {'hello'}if False else 'potato'
'potato'
Run Code Online (Sandbox Code Playgroud)
这里发生了什么,它是出于某种原因故意成为语法的一部分吗?这个奇怪的怪癖是一种已知/记录的行为吗?
我知道你可以在makefile中使用if语句如下:
foo: $(objects)
ifeq ($(CC),gcc)
$(CC) -o foo $(objects) $(libs_for_gcc)
else
$(CC) -o foo $(objects) $(normal_libs)
endif
Run Code Online (Sandbox Code Playgroud)
有没有办法像可能的三元类型运算符那样进行条件替换.
(condition?$(CC):$(CC2)) -o foo $(objects) $(libs_for_gcc)
Run Code Online (Sandbox Code Playgroud)
如果没有什么是最惯用的方式来实现这个例子
我添加了c ++标签,因为这个问题只有7个视图,我认为使用c ++的人可能会知道答案,我知道这不是一个严格的c ++问题(虽然我打算用它编译c ++)
编辑:看起来有一个if函数使用这种语法
$(if condition,then-part[,else-part])
我仍然有点困惑它如何工作
我有一个特定的情况,我想做以下(实际上它比这更多涉及,但我把问题简化为本质):
>>> (lambda e: 1)(0) if (lambda e: True)(0) else (lambda e: 2)(0)
True
Run Code Online (Sandbox Code Playgroud)
这是一种难以写的方式:
>>> 1 if True else 2
1
Run Code Online (Sandbox Code Playgroud)
但实际上'1','True'和'2'是需要评估的附加表达式,需要变量'e',我为此简化代码示例设置为'0'.
请注意上面两个表达式的输出差异
>>> (lambda e: 1)(0)
1
>>> (lambda e: True)(0)
True
>>> (lambda e: 2)(0)
2
Run Code Online (Sandbox Code Playgroud)
有趣的是,这是一个特殊情况,因为如果我将'1'替换为'3',我会获得预期/期望的结果:
>>> (lambda e: 3)(0) if (lambda e: True)(0) else (lambda e: 2)(0)
3
Run Code Online (Sandbox Code Playgroud)
如果我将'1'替换为'0'(这也可能是特殊情况,因为1 == True和0 == False),这甚至是正确的
>>> (lambda e: 0)(0) if (lambda e: True)(0) else (lambda e: 2)(0)
0
Run Code Online (Sandbox Code Playgroud)
另外,如果我将'True'替换为'not False'或'not not True',它仍然有效:
>>> (lambda e: 1)(0) if …Run Code Online (Sandbox Code Playgroud) 请考虑以下代码段:
requires
designide,
rtl,
vcl,
{$IF RTLVersion < 19.0} // E2026 Constant expression expected
//{$IF CompilerVersion = 22.0} // same as above
vcljpg;
{$ELSE}
vclimg;
{$IFEND}
Run Code Online (Sandbox Code Playgroud)
它似乎在语法上是正确的.但是,编译器会对其进行扼流并报告Constant expression expected.这里到底发生了什么?
技术:目前仅在XE(15.0.3953.35171)上测试过.
当然,也欢迎变通方法的建议.
delphi compiler-construction conditional-compilation conditional-expressions delphi-xe
什么'条件表达式只能是布尔值,而不是整数.' 意思?我不知道Java,我知道C++ deffenetly不应该强调它意味着什么..请帮助(在比较C++和Java项目中找到http://www.javacoffeebreak.com/articles/thinkinginjava/comparingc++andjava.html 7子项目1)
我有一种情况,我想有条件地从报告的'@'符号位置切片一个字符串; 条件是:如果'@'在那里,则对字符串进行切片,否则保持不变.我想到了两种方法,一种是使用函数,另一种是使用内联条件表达式.哪种方法最Pythonic?
使用功能
>>> def slice_from_at(inp):
... res = inp.find('@')
... if res == -1:
... return None
... else:
... return res
>>> c = 'agent_address@agent_address'
>>> c[:slice_from_at(c)]
... 'agent_address'
Run Code Online (Sandbox Code Playgroud)
使用内联条件表达式
>>> c = 'agent_address@agent_address'
>>> c[:None if c.find('@') == -1 else c.find('@')]
... 'agent_address'
Run Code Online (Sandbox Code Playgroud)
虽然使用内联条件表达式更简洁,但有些人可能认为更经济 - 函数方法更具Pythonic,因为它更具可读性?
python coding-style ternary-operator conditional-expressions
我想知道条件表达式是否是Java中的线程安全操作.
例如:
return (mObject != null ? mObject.toString() : "null");
Run Code Online (Sandbox Code Playgroud)
所以,我的问题是:如果两个线程可以更改mObject,这个代码线程是安全的,还是开发人员需要处理任何竞争条件?
java multithreading thread-safety race-condition conditional-expressions
我想构建类似的东西:
A = (
'parlament',
'queen/king' if not country in ('england', 'sweden', …),
'press',
'judges'
)
Run Code Online (Sandbox Code Playgroud)
有没有办法建立这样的元组?
我试过了
'queen/king' if not country in ('england', 'sweden', …) else None,
'queen/king' if not country in ('england', 'sweden', …) else tuple(),
'queen/king' if not country in ('england', 'sweden', …) else (),
Run Code Online (Sandbox Code Playgroud)
但没有什么工作,似乎没有元组 - 无元素,所以我为英格兰,瑞典等国家的所有国家提供了3元组,我得到了一个4元组
关注此主题一行if-condition-assignment
有没有办法缩短那里的建议陈述:
num1 = (20 if intvalue else 10)
Run Code Online (Sandbox Code Playgroud)
如果指定值在条件中是相同的值?
这就是它现在的样子:
num1 = (intvalue if intvalue else 10)
Run Code Online (Sandbox Code Playgroud)
intvalue出现两次.有没有办法只使用intvalue一次并获得相同的声明?更优雅的东西?
我有以下字符串
mystr = "foo.tsv"
Run Code Online (Sandbox Code Playgroud)
要么
mystr = "foo.csv"
Run Code Online (Sandbox Code Playgroud)
鉴于这种情况,我希望上面的两个字符串始终打印"OK".但为什么它失败了?
if not mystr.endswith('.tsv') or not mystr.endswith(".csv"):
print "ERROR"
else:
print "OK"
Run Code Online (Sandbox Code Playgroud)
什么是正确的方法呢?
我有这个:
msg = time + b' - ' + Logger.LEVELS_WORD[msg_loglevel] + b': ' + msg.encode('utf-8') + b'\n'
Run Code Online (Sandbox Code Playgroud)
由于有时 msg 已经是字节,如果它是字符串或者只是 msg,我想连接 msg.encode('utf-8'),所以我这样做了:
msg = time + b' - ' + Logger.LEVELS_WORD[msg_loglevel] + b': ' + msg if isinstance(msg, bytes) else msg.encode('utf-8') + b'\n'
Run Code Online (Sandbox Code Playgroud)
但它并没有像我预期的那样工作,因为现在msg equals msg。(时间 + 日志级别没有被添加)。
我应该做 if/else 吗?
我正在摆弄一行if if和for python中的语句并遇到以下问题:
我可以做类似以下的工作:
state = 1 if state == 4 else 2
Run Code Online (Sandbox Code Playgroud)
但我想在相同的上下文中使用=和+ =,如下所示:
state = 1 if state == 4 else state+=1
Run Code Online (Sandbox Code Playgroud)
我怎样才能在一行中实现这一点?