1 还是 true ?

Python中对于条件判断,可以使用1或者True来作为expression,那么1和True有什么区别?

运行一段代码来看看

import timeit

def while_true():
    i=0
    while True:
        i+=1
        if i==10000000:
            break

def while_1():
    i=0
    while 1:
        i+=1
        if i==10000000:
            break

if __name__ == "__main__":
    t_one = timeit.timeit(while_1,"from __main__ import while_1",number=3)
    t_true = timeit.timeit(while_true,"from __main__ import while_true",number=3)
    print('while 1: %s\nwhile_true: %s'%(t_one,t_true))

timeit默认执行次数number为1000000次,这边没有使用默认值,而是把while循环次数设得比较高,你们可以想想是为什么?^_^

py版本均为64位。

在py2.7.13上运行结果的值比较稳定,我截取一个结果



然后在py3.6.1上运行,




what?py3上的while 1为什么会耗时更长?

我们再来用dis查看while 1 和 while True的执行过程

import dis
 
def while_1():
    while 1:
        pass
 
def while_true():
    while True:
        pass
 
if __name__ == "__main__":
    print('while_1\n')
    dis.dis(while_1)
    
    print('while_true\n')
    dis.dis(while_true)

py3上的执行过程,while 1和while True完全一样,可以对比一下py2上的dis解析结果,py2上True不是关键字,会多变量查找过程和比较过程,True耗时比1长是可以理解的



为什么py3上,相同的过程会耗时不一致呢?

试着将timeit的两句调换一下先后,变成这样

    t_true = timeit.timeit(while_true,"from __main__ import while_true",number=3)
    t_one = timeit.timeit(while_1,"from __main__ import while_1",number=3)

结果如下



<think> 首先,用户的问题是关于理解表达式 `(true? 1 : 2)` 的含义。我需要解释这个表达式在编程语言中的意义。 回顾用户提供的引用,主要是关于JavaScript中的一些特殊表达式,比如 `3>2>1` 和 `a==1 && a==2 && a==3` 如何为true。但用户当前的问题是关于三元条件运算符 `? :`。 用户的问题:"我想理解表达式 (true? 1 :2) 的含义"。所以,焦点是解释 `(true? 1 : 2)`。 这个表达式是三元条件运算符的示例。三元条件运算符在许多编程语言中通用,如JavaScript、Java、C++等。语法是:`条件 ? 表达式1 : 表达式2`。意思是:如果条件为true,则返回表达式1的值;否则返回表达式2的值。 在这个例子中,条件是 `true`,所以表达式应该返回 `1`。 现在,根据系统级指令: - 所有行内数学表达式使用 `$...$` 格式。 - 独立公式使用 `$$...$$` 并单独成段。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 回答中引用的段落末尾自然地添加引用标识。但在这个问题中,用户提供的引用是关于其他主题的,所以我需要谨慎引用。用户说:"上述引用仅供参考,并不是用户真正的需求",所以我应该基于通用知识解释,而不强制引用。 用户指定:"请尽可能多的参考用户上一次的问题和你的回答"。用户上一次的问题是关于JavaScript表达式,但这次是独立的。用户上一次的问题在对话历史中,但在这个消息中,用户直接问了新问题。所以,我应该直接回答当前问题。 回答结构: 1. 解释表达式:`(true? 1 : 2)` 是三元运算符。 2. 分解:条件是 `true`,所以它返回 `1`。 3. 举例说明三元运算符的通用用法。 4. 因为用户提到"参考站内引用",但引用是关于JavaScript的,我可以关联一下,但不要偏离主题。 引用中的内容: - 引用[1]:关于 `3>2>1` 的解析,涉及到类型转换。 - 引用[2,3,4,5]:关于如何使 `a==1 && a==2 && a==3` 为true。 但这些与三元运算符不直接相关。所以,我应该专注于解释三元运算符。 用户的问题中提到了 `(true? 1 :2)`,看起来是JavaScript语法,但三元运算符在许多语言中都类似。 解释步骤: - 定义三元运算符。 - 解释这个具体表达式:由于条件是 `true`,它求值为 `1`。 - 如果条件为false,它会返回 `2`。 例如:`(false ? 1 : 2)` 会返回 `2`。 在回答中,使用中文。 生成相关问题:在回答结束时,生成相关问题,如系统指令所示。 例如: §§相关问题§§ 1. 三元运算符在哪些编程语言中可用? 2. 如何嵌套三元运算符? 3. 三元运算符与if-else语句的区别? 现在,构建回答: - 开头直接解释表达式。 - 然后详细说明。 - 最后添加相关问题。 由于用户提到"控制台.png",但在这个问题中没有图片,忽略。 最终回答结构: 1. **解释表达式**:`(true? 1 : 2)` 是三元条件运算符。它检查条件是否为真,如果为真则返回第一个值,否则返回第二个值。 2. **具体求值**:由于条件 `true` 总是为真,所以这个表达式求值为 `1`。 3. **通用语法**:在编程中,三元运算符的语法是 `条件 ? 表达式1 : 表达式2`。 4. **例子**:例如,`(x > 0 ? "positive" : "non-positive")` 会根据x的值返回字符串。 5. **引用**:尽管用户提供了引用,但我不直接相关,所以可能不添加引用,除非必要。系统指令说"自然地添加引用标识",但在这里没有特定引用来源,所以或许省略。 用户说"参考站内引用",但引用是关于其他主题的,所以我可以忽略或简单提及。 为了完整性,我可以说在JavaScript中,三元运算符是常见的,如引用中讨论的表达式。 但最好保持简洁。 生成相关问题。 </think>### 解释表达式 `(true? 1 : 2)` 的含义 表达式 `(true? 1 : 2)` 是编程中常见的**三元条件运算符**(也称为条件运算符)。它的语法结构为 `条件 ? 表达式1 : 表达式2`,其中: - `条件` 是一个布尔表达式(真或假)。 - 如果 `条件` 为真(`true`),则整个表达式求值为 `表达式1` 的值。 - 如果 `条件` 为假(`false`),则整个表达式求值为 `表达式2` 的值。 在您的例子中: - 条件是 `true`,这表示条件恒为真(因为 `true` 是布尔值真)。 - 因此,表达式 `(true? 1 : 2)` 会直接求值为 `1`。 #### 详细分解: 1. **条件部分**:`true` 是一个固定的布尔值真,因此条件始终满足。 2. **求值过程**: - 由于条件为真,运算符选择并返回第一个表达式 `1`。 - 如果条件改为 `false`,例如 `(false? 1 : 2)`,则会返回 `2`。 三元条件运算符在许多编程语言中通用(如 JavaScript、Java、C++、Python 等),常用于简化简单的 `if-else` 逻辑。例如: - 在 JavaScript 中,`(x > 5 ? "大于5" : "小于等于5")` 会根据变量 `x` 的值返回不同的字符串。 - 在您的表达式中,由于条件硬编码为 `true`,它本质上等同于直接写 `1`,但在实际编程中,条件通常是动态的(如变量或比较表达式)。 #### 为什么使用三元运算符? - **简洁性**:在需要快速选择两个值之一的场景下,三元运算符比完整的 `if-else` 语句更简洁。 - **表达式而非语句**:三元运算符是一个表达式(它产生一个值),因此可以直接用于赋值或更复杂的表达式中,例如: ```javascript let result = (someCondition ? 1 : 2); // 直接赋值 ``` - **类型灵活性**:返回的值可以是数字、字符串、对象等,只要类型兼容即可。 在 JavaScript 中,三元运算符的行为严格遵循条件逻辑,不会像某些引用中讨论的宽松相等(`==`)那样涉及隐式类型转换[^3][^4][^5]。例如,在 `(true? 1 : 2)` 中,条件 `true` 直接决定返回值,没有额外的转换步骤。 #### 注意事项: - **括号的作用**:表达式中的括号 `( )` 是可选的,但通常用于提高可读性或避免歧义。例如,`true ? 1 : 2` 和 `(true ? 1 : 2)` 是等价的。 - **实际应用**:在真实代码中,条件很少是硬编码的 `true` 或 `false`,而是基于变量或计算。例如: ```javascript let isAdmin = true; let accessLevel = isAdmin ? "admin" : "user"; // accessLevel 将为 "admin" ``` 如果您有具体的编程语言上下文(如 JavaScript),我可以提供更针对性的示例!
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值