31个答案
a如果条件其他b
>>>如果为true,则为“true”,否则为“false” “true” >>>如果为False,则为“true”,否则为“False” “false”
>>>如果False,则通过 文件“<stdin>”,第1行 如果False,则通过 ^ 语法错误:无效语法 >>>#Python将其解析为`x=(1 if False else y)=2` >>>#“(1 if False else x)”部分实际上有效,但 >>>#它不能在`=`的左侧。 >>>如果为假,则x=1,否则y=2 文件“<stdin>”,第1行 语法错误:无法分配给条件表达式 >>>#如果我们改为用括号括起来。。。 >>>如果为False,则为(x=1),否则为(y=2) 文件“<stdin>”,第1行 如果为False,则为(x=1),否则为(y=2) ^ 语法错误:无效语法
#无效语法:如果 #条件不满足。 我们是否可以验证这一点并不重要 #提前。 a如果为True
x=如果为True,则为a,否则为b
#当然,我们应该只使用标准库“max”; #这只是为了演示。 定义my_max(a,b): 如果a>b,则返回a,否则返回b
参数的顺序与经典的不同 条件? 甲:乙 来自许多其他语言(例如 C类 , C类++ , 去吧 , Perl语言 , 红宝石 , Java语言 , JavaScript脚本 等),当不熟悉Python“令人惊讶”的行为的人使用它时,可能会导致错误(他们可能会颠倒参数顺序)。 有些人认为它“笨拙”,因为它与正常的思维流(先考虑条件,然后考虑效果)背道而驰。 风格原因。 (尽管“内联” 如果 '可以是 真正地 非常有用,并且使脚本更简洁,这确实会使代码复杂化)
-
360 然而,对于编码人员来说,这个顺序似乎很奇怪 f(x)=|x|=x如果x>0否则-x 对数学家来说,这听起来很自然。 在大多数情况下,你也可以像理解A一样理解它,除了当C时,你应该做B。。。 – 约塔 评论 2016年1月25日15:07 -
174 使用此选项时,请注意操作顺序。 例如,行 如果x<y else y,z=3+x .如果 x=2 和 y=1 ,您可能会期望得到4,但实际上会得到1。 z=3+(如果x>y,则为x) 是正确的用法。 – 卡尔·泽克多 评论 2016年3月6日9:23 -
20 关键是如果你想进行额外的评估 之后 条件被求值,就像向结果中添加值一样,您要么需要向两边添加附加表达式( z=3+x,如果x<y,则为3+y ),或将条件分组( z=3+(如果x<其他y,则为x) 或 z=(x如果x<y其他y)+3 ) – 卡尔·泽克多 评论 2016年4月15日0:36 -
7 @Geek先生,我明白你的意思了,所以你基本上会嵌套操作:`“foo”if Bool-else(“bar”if Bool-else“foobar”)` – 迪梅西奥 评论 2017年8月11日0:04 -
11 程序员甚至比数学家更需要精确正确的公式,因为在数学中总是要诉诸底层概念。 一个令人信服的论点是%操作符,模仿“mod”在数学中的用法将是一场灾难。 所以不,我不接受你的论点。 这就像坚持英制单位。 格罗杰斯·艾伯特 评论 2018年6月17日12:50
(false值,trueValue)[测试]
(falseValue,trueValue)[测试=真]
(falseValue,trueValue)[bool(<表达式>)]
[expression]和[on_true]或[on_false]
-
77 -
8 -
10 -
6 -
a=1 b=2 如果a>b其他-1,则为1 #输出为-1 1如果a>b else-1如果a<b else 0 #输出为-1
<表达式1>如果<条件>其他<表达式2>
如果<条件>:<表达式1>其他:<表达式2>
结果=x,如果a>b其他y
结果=(λ:y,λ:x)[a>b]()
结果=(y,x)[a>b]
结果={True:x,False:y}[a>b]
结果=(a>b)和x或y
结果=((a>b)和[x]或[y])[0]
结果=((a>b)和(x,)或(y,))[0]
shell=os.environ.get('shell',“/bin/sh”)
(false值,trueValue)[测试]
(λ:假值,λ:真值)[测试]()
[on_true]如果[cond]其他[on_false]
cond和on_true或on_false
{True:on_True,False:on_False}[条件为True]#为True,not==True
定义q(cond,on_true,on_false) return{True:on_True,False:on_False}[条件为True]
q(cond,on_true,on_false)
cond和on_true或on_false
>>>x=0 >>>打印x==0和0或1 1 >>>x=1 >>>打印x==0和0或1 1
>>>x=0 >>>如果x==0,则打印0,否则打印1 0 >>>x=1 >>>如果x==0,则打印0,否则打印1 1
Python有三元条件运算符吗?
test:or_test['if'或_test'else'测试]| lambdef
或_测试[“if”或_测试“else”测试]
表达式1 if表达式2 else表达式3
表达式1 if表达式2 else表达式3 if表达式4 else表达式5,依此类推
用法说明:
[expression1 if expression2 for iterable中的元素] #^--此处需要其他
[expression1 for iterable if expression2]中的元素
适用于更窄情况的替代语法:
表达式1 if表达式1 else表达式2
表达式1或表达式2
-
1 -
1 谢谢,@selurvedu——在你弄清之前,它可能会让你感到困惑。 我是通过艰难的方式学会的,所以你的方式可能没有那么艰难 在生成器表达式或列表理解的末尾使用if而不使用else将过滤iterable。 在前面,它是一个三元条件运算,需要else。 干杯!! 评论 2016年5月27日4:37 -
@AaronHall尽管你使用了元语法 表达式N 由于所有实例都是一致的,因此通过将条件测试表达式与两个结果表达式区分开来的命名可能更容易理解; 如, 结果1如果条件为其他结果2 。这在嵌套(也称为链接)时尤为明显: 结果1如果条件1其他结果2如果条件2其他结果3 看这样读有多好? – 切斯特人 评论 2019年1月26日14:12 -
1 @感谢你的评论&如果你看看修订历史,这篇文章目前有两次修订。 我的大多数其他答案,尤其是最重要的答案,都被反复地考虑过。 这个答案从来没有引起我的注意,因为社区维基状态对我的内容没有任何评价,所以我从来没有看到任何投票。由于我现在真的没有时间对此进行编辑,青蛙知道我将来什么时候会再次关注它。 我可以看到你已经编辑了最重要的答案,所以请随意在那篇文章中借用/引用我的材料(如果合适,请引用我!) 评论 2019年1月26日18:24
如果布尔值为“否”,则为“是”
{True:“是”,False:“否”}[布尔值]
{True:“是”,False:“否”,None:“可能”}[boolean_or_None]
(“否”,“是”)[布尔值]
yes()if boolean else no()
(no(),yes())[boolean]#bad:调用no()和yes(
(否,是)[布尔值]()
yes(“ok”)if boolean else no()#(1)
yes(“ok”)if boolean else no(“对不起”)#(2)
msg=(“对不起”,“好”)[布尔值] (否,是)[布尔值](消息)
符号=“+-”[n<0]
打印(f“总计:{n}项{的'[n==1:]}”)
<表达式1>如果<条件>其他<表达式2>
a=0 b=1 #而不是这样: x=a如果a其他b #计算为“a if bool(a)else b” #您可以使用短路评估: x=a或b
x=a或b或c或d或e
#评估功能: 定义foo(x): 打印(“未执行”) 返回x 定义栏(y): 打印(“已执行”) 返回y 定义blubb(z): 打印(“已执行块”) 返回z #三元运算符表达式1等于False 打印(如果foo(0)else栏(1),则为foo(零)) “”foo和bar执行一次 已执行foo 执行的酒吧 1 ''' #三元运算符表达式1等于True 打印(如果foo(2)else栏(3)) “”foo执行了两次! 已执行foo 已执行foo 2 ''' #短路评估秒等于真 打印(foo(0)或bar(1)或blubb(2)) 未执行“”blubb 已执行foo 执行的酒吧 1 ''' #第三次短路评估等于True 打印(foo(0)、bar(0)或blubb(2)) ''' foo已执行 执行的酒吧 已执行blubb 2 ''' #短路评估均等于False 打印(foo(0)、bar(0)或blubb(0)) “”结果为0(来自blubb(0)),因为没有值等于True 已执行foo 执行的酒吧 已执行blubb 0 '''
a、 b,x,y=1,2,‘a大于b’,‘b大于a’ 结果=(λ:y,λ:x)[a>b]()
“b大于a”
-
1 -
6 -
2 -
@GrijeshChauhan简而言之,这实现了所谓的“ 短路求值 ”. 一般来说, P? x:y(x:y) 或 x如果P其他y 可以写为 (λ:y,λ:x)[P]() -但我怀疑它有更好的性能,因此它的必要性。 评论 2021年1月19日10:11
注意,条件句是一个 表达 ,不是 陈述 。这意味着您不能使用赋值语句或
通过 或其他 声明 在条件内 表达
Python 3.8中的Walrus操作符
(a:=3)如果为真(b:=5)
(a:=3)如果为假(b:=5)
c=(a:=3)如果为假(b:=5)
语法:
[on_true]if[expression]else[on_false]
1-使用三元运算符的简单方法:
#演示条件运算符的程序 a、 b=10、20 #如果a<b else Copy b,则以min为单位复制a的值 min=a如果a<b其他b 打印(分钟)#输出:10
2-使用元组、字典和lambda的直接方法:
#演示三元运算符的Python程序 a、 b=10、20 #使用元组选择项目 打印((b,a)[a<b]) #使用字典选择项目 打印({True:a,False:b}[a<b]) #lambda比上述两种方法更有效 #因为在兰姆达,我们确信 #与中不同的是,只计算一个表达式 #元组和字典 print((lambda:b,lambda:a)[a<b]())#在输出中应该看到三个10
3-三元运算符可以写为嵌套if-else:
#演示嵌套三元运算符的Python程序 a、 b=10、20 打印(“如果a==b其他”a大于b,则a和b都相等” 如果a>b,则“b大于a”)
#演示嵌套三元运算符的Python程序 a、 b=10、20 如果a!= b: 如果a>b: 打印(“a大于b”) 其他: 打印(“b大于a”) 其他: 打印(“a和b都相等”) #输出:b大于a
[条件]和[表达式1]或[表达式2];
打印(数字%2和“奇数”或“偶数”)
其工作原理如下:
0和exp
1或exp
True和exp1或exp2
False和exp1或exp2
[条件]和([表达式1]或1)或[表达式2];
如果条件X: 打印(“是”) 其他: 打印('nah')
打印('yes')if conditionX else打印('nah')
-
8 -
1 如果你想的话 打印() 在这两种情况下——我不得不承认,它看起来有点像pythonic:)但是如果表达式/函数不一样怎么办 如果条件X为True,则打印(“是”) -以获得 打印() 只有真实的 条件X – 托多·米纳科夫 评论 2017年10月26日11:40 -
除了Frederick99的评论之外,还有另一个需要避免的原因 打印('yes')if conditionX else打印('nah') 它在Python2中给出SyntaxError。 – 蒂埃里·拉特维尔 评论 2018年10月21日21:51 -
它产生语法错误的唯一原因是因为在Python 2中print是一个语句- 打印“是” ,而在Python 3中它是一个函数- 打印(“是”) 。这可以通过将其用作语句或更好的方式解决- 从未来导入print_function . – 托多尔·米纳科夫 评论 2018年10月22日4:09
<条件>< 表达式1>:<表达式2>
<表达式1>如果<条件>其他<表达式2>
压力=10 打印(如果压力<20,则为“高”,否则为“严重”) #结果为“高”
压力=5 打印(如果压力<10则为“正常”,如果压力<20则为“高”,否则为“严重”) #结果为“正常”
压力=5 如果压力<20: 如果压力<10: 打印(“正常”) 其他: 打印(“高”) 其他: 打印(“关键”) #结果为“正常”
#[On true]if[expression]else[On false] #如果表达式的计算结果为true,则将传递On true,否则传递On false a=输入(“输入第一个数字”) b=输入(“输入第二个数字”) 如果A>b否则打印(“b更大”),则打印(“A更大”
-
-
1 -
@Thierry Lathuille在这里我使用了print()函数而不是print语句,print函数用于Python 3,而print语句用于Pytython 2 评论 2018年10月21日21:54 -
SO上已经有人问过这个问题,只需用Python 2试试,你就会看到了。” print('hello')在Python2.7中是一个完全有效的语法,但它的解析方式会使上面的代码抛出SyntaxError。 – 蒂埃里·拉特维尔 评论 2018年10月21日21:58
run_algorithm(如果option_value不是None else 10,则为option_value)
run_algorithm(option_value if option_value else 10)
run_algorithm(option_value或10)
-
5 这是一个很有价值的补充,但我不同意: option_value或10 是 不 比…更好 如果option_value不是None else,则为option_value 10 。它确实较短,但在我看来很奇怪,可能会导致错误。 如果 option_value=0 比如说? 第一个代码段将运行 运行算法(0) 因为 选项值 不是 无 。但是,第二个和第三个代码段将运行 运行算法(10) 因为 0 是假的。 这两个代码段并不等价,因此其中一个并不比另一个好。 而且显性优于隐性。 – 鲁安科梅利 评论 2020年10月20日15:21 -
-
4 至于它看起来很奇怪,我想知道它在你看来是否很奇怪,因为你注意到了它的不精确性(它实际上并不等同)。 对我来说,这听起来很自然,因为它提醒我用英语说:“使用这个或那个(如果第一个选项不可用)”。 但这当然是主观的。 知道这对每个人来说都不是很自然是很有用的。 – 用户118967 评论 2020年10月22日14:06 -
2 好多了! 感谢您对“或”习语的解释。 我觉得很奇怪,因为我倾向于 或 作为将两个参数映射为布尔值的函数,所以我希望它返回 真的 或 False(错误) (这在许多其他编程语言中都会发生)。 但是“用这个或那个”是一个很好的记忆法,它肯定会帮助我(希望其他人)记住这个模式。 – 鲁安科梅利 评论 2020年10月28日19:44
game_type='主页' 如果game_type=='home'其他为'green',则衬衫='white'
>>>li1=无 >>>li2=[1,2,3] >>> >>>如果li1: …a=li1 …其他: …a=li2 ... >>>一个 [1, 2, 3]
>>>a=li1如果li1其他li2 >>> >>>一个 [1, 2, 3] >>>
>>>a=li1或li2 >>> >>>一个 [1, 2, 3] >>>
>>>li1=[] >>>li2=[1,2,3] >>> >>>a=li1或li2 >>> >>>一个 [1, 2, 3] >>>
>>>s1=“” >>>s2=“你好世界” >>> >>>a=s1或s2 >>> >>>一个 “你好,世界” >>>
打印(如果数字==20,则为“二十”,否则为“不二十”)
如果数字==20: 打印(“二十”) 其他: 打印(“非二十”)
如果数字==20: 打印(“二十”) elif编号<20: 打印(“较小”) elif 30>编号>20: 打印(“中间”) 其他: 打印(“更大”)
打印(如果数字==20,则为“二十”;如果数字<20,则表示“较小”;如果30,则表示为“介于”;如果20,则表明为“较大”)
sample_set=“train”if在full_path else中“train”(“test”if“test”in full_path else“validation”)
f=λx,y:如果x>y,则为“较大”;如果y>x,则为”较小“ 数组=[(0,0),(0,1),(1,0) 对于数组中的: x、 y=a[0],a[1] 打印(f(x,y)) #输出为: #相等, #更少, #更大, #相等
iif=λ(cond,a,b):a如果cond否则b #所以我可以这样使用它: val=iif(秒,a,b)
d0=“-679 58 1029” d1=d0.拆分(“”) strg=(d1[0][:-2]if len(d1[0])>=3 else“0”)+“”+d1[0][-2:]+“”+(d1[1][:-2-]if lang(d1\1])>=3 else“”0“)+“ 打印(strg)