`

with 和 if-else条件表达式

 
阅读更多

对于要确保即使发生一个错误时也能运行一些清理代码而言,try...finally语句是很有用的。对此有许多使用场景,例如:

 

  • 关闭一个文件
  • 释放一个锁
  • 创建一个临时的代码补丁
  • 在特殊环境中运行受保护的代码
with语句覆盖了这些使用场景,为在一个代码块前后调用一些代码提供了一种简单的方法。例如,使用一个文件通常可以如下实现。
hosts = file('/etc/hosts')
try:
    for line in hosts:
        if line.startswith('#'):
            continue
        print line
finally:
     hosts.close()
 
使用with语句,以上代码可以重写如下:
from __future__ import with_statement
with file('/etc/hosts') as hosts:
    for line in hosts:
        if line.startswith('#'):
            contine
        print host
 注意,在2.5版本中with语句仍然位于__future__模块里,而在2.6版本中则可以直接使用。

与这条语句兼容的其他项目是来自thread和threading模块的类:
  • thread.LockType
  • threading.Lock
  • threading.RLock
  • threading.Condition
  • threading.Semaphore
  • threading.BoundedSemaphore
这些类都实现两个方法__enter__和__exit__,这都来自于with协议。换句话说,任何类都可以实现为如下的所示:
class Context(object):
    def __enter__(self):
        print 'entering the zone'

    def __exit__(self, exception_type, exception_value, exception_traceback):
        print 'leaving the zone'
        if exception_type is None:
            print 'with no error'
        else:
            print 'with an error (%s)' % exception_value

with Context():
    print 'i am the zone'

with Context():
    print 'i am the buggy zone'
    raise TypeError('i am the bug')
  

Python2.5新增if-else条件表达式

条件表达式,C风格的如下:

condition? exp1 : exp2

也称为三元表达式。

 

Python2.5新增了这一功能,但形式有了变化:

 

exp1 if condition else exp2

 

实例:

>>> a = 1 if 2 == 3 else 4
>>> a
4
>>> isLeapYear = lambda year: not (year % 4 if year % 100 else year % 400) # 判断闰年
>>> isLeapYear(1234)
False
>>> isLeapYear(1236)
True
>>> isLeapYear(1000)
False
>>> isLeapYear(2000)
True
>>> [i + 1 if i % 2 for i in xrange(10)] # 不能省略else
  File "<stdin>", line 1
    [i + 1 if i % 2 for i in xrange(10)]
                      ^
SyntaxError: invalid syntax
>>> [i + 1 if i % 2 else i for i in xrange(10)]
[0, 2, 2, 4, 4, 6, 6, 8, 8, 10]
>>> [i % 2 and i + 1 or  i for i in xrange(10)] # 之前的语法
[0, 2, 2, 4, 4, 6, 6, 8, 8, 10]
 
分享到:
评论

相关推荐

    IF-ELSE条件语句的翻译程序设计(LR方法、输出三地址表示)

    在处理IF-ELSE条件语句时,LR方法可以有效地识别出条件部分和两个可能的代码块,确保语义正确性。 LR方法分为几个主要步骤:LR(0)、SLR、LALR和LR(1),其中LALR(Look-Ahead Left-to-Right with One Look-Ahead)是...

    python零基础学习篇数据爬虫技巧-4正则表达式.zip

    在Python的世界里,正则表达式(Regular Expression)是一种强大的文本处理工具,它能用于查找、替换和提取符合特定模式的字符串。对于数据爬虫来说,正则表达式是不可或缺的一部分,因为它能帮助我们从复杂的网页源...

    ios-运用正则表达式判断移动、联通、电信手机号码格式.zip

    在iOS开发中,正则表达式(Regular Expression)是一种强大...通过学习和理解这段代码,开发者可以学习到如何在iOS应用中使用正则表达式进行数据验证,并进一步扩展到其他类型的数据格式验证,如邮箱地址、身份证号等。

    :umbrella_with_rain_drops:一些if-else语句(可为null和布尔值)的流利的Kotlin表达式。-Android开发

    WhatIf:umbrella_with_rain_drops:WhatIf是kotlin扩展,用于表达单个if-else语句,可为null和布尔值。 下载Gradle将依赖项代码添加到模块的build.gradle文件中。 dependenci WhatIf:umbrella_with_rain_drops:WhatIf...

    swift-RegexSwift正则表达式工具

    在Swift编程语言中,正则表达式(Regex)是一种强大的文本处理工具,用于匹配、查找、替换和解析字符串。在iOS和macOS开发中,Swift提供了`NSRegularExpression`类来处理正则表达式,它是Foundation框架的一部分。`...

    【RPA之家转载AA视频教程】32.IF, Elseif -.rar

    在RPA编程中,逻辑控制结构是不可或缺的一部分,其中,IF、Elseif和Else语句是进行条件判断和流程分支的核心。本视频教程——"32.IF, Elseif - A2019 Automation anywhere IF, Elseif & Else actions overview with ...

    WhatIf::umbrella_with_rain_drops:Kotlin的流利表达式,用于处理单个if-else语句,可为空,集合和布尔值

    在Kotlin编程语言中,`WhatIf`是一个实用的扩展库,它提供了更优雅、流利的方式来处理单个if-...如果你在项目中经常遇到条件判断,特别是涉及可为空值、集合和布尔逻辑的情况,考虑引入`WhatIf`库会是一个不错的选择。

    Learn-to-Code-with-MATLAB-main.zip

    5. **控制流语句**:包括条件语句(if-else-end,switch-case-end)和循环(for,while),用于实现程序的分支和重复执行。 6. **数据可视化**:MATLAB强大的图形功能,如plot函数用于绘制线图、散点图、柱状图等,...

    groovy代码-测试正则表达式

    正则表达式(Regular Expression)是由字符和特殊符号组成的模式,用于描述字符串的某种模式。例如,`\d{3}-\d{4}`可以匹配美国电话号码格式。在Groovy中,你可以直接使用Java的正则表达式API,因为Groovy是基于...

    java if语句和switch语句.pdf

    当你使用嵌套 if 语句时,需记住的要点就是:一个 else 语句总是对应着和它在同一个块中的最近的 if 语句,而且该 if 语句没有与其他 else 语句相关联。 下面是一个例子: if(i == 10) { if(j ) a = b; if(k &gt; ...

    1. for - else).docx

    这里使用了三元表达式 `(y 是一个负数 if y &lt; 0 else y 是一个非负数)` 来判断变量 `y` 的值是否小于零,如果小于零则输出 `y 是一个负数`,否则输出 `y 是一个非负数`。 ### 4. `with`-`as` 语句 `with`-`as` ...

    Grade-with-C-:使用IF Else进行简单的成绩计算

    这对于初学者理解控制流程和条件判断至关重要。 首先,`if`语句用于基于某个条件执行特定的代码块。基本语法如下: ```cpp if (condition) { // 当条件为真时执行的代码 } ``` 在这里,`condition`是一个布尔...

    三目运算法则

    1. **简化if语句**:可以用三目运算符替代简单的if-else语句,使代码更简洁。 ```java int a = 10; int b = 20; int max = (a &gt; b) ? a : b; // 如果a大于b,max等于a;否则max等于b ``` 2. **动态赋值**:...

    正则表达式

    JavaScript的RegExp对象和String对象定义了使用正则表达式来执行强大的模式匹配和文本检索与替换函数的方法. 在JavaScript中,正则表达式是由一个RegExp对象表示的.当然,可以使用一个RegExp()构造函数来创建RegExp...

    ID-card-with-date-of-birth.rar_birth

    标题中的“ID-card-with-date-of-birth.rar_birth”暗示了我们正在处理与身份证相关的数据,特别是涉及出生日期和性别的信息。身份证在中国是公民的重要身份证明,其中包含了个人的18位或15位身份证号码。这个压缩包...

    Programming with Transact-SQL

    - **条件判断**: 使用`IF...ELSE`语句可以根据条件执行不同的代码块。此外,`CASE`语句提供了更复杂的条件分支选择。 - **循环**: `WHILE`循环允许重复执行一段代码直到满足特定条件为止。 - **跳转**: `GOTO`语句...

    IF语句_if_源码

    通过`if`、`else`、`elif`和嵌套`if`,我们可以构建灵活的逻辑控制,以适应各种情况。在实际编程中,`if`语句通常与变量、函数、比较和逻辑运算符等结合使用,实现复杂的决策逻辑。在学习和使用`if`语句时,理解其...

    Starting Out with Java Early Objects 5th 第5版 pdf 0分

    理解控制流程的逻辑和条件判断。 10. 循环结构(The while Loop) 学习while循环的使用方法和循环控制语句(如break和continue)。理解循环的执行条件和如何处理循环内的变量。 11. 数组的使用(Accessing Array ...

Global site tag (gtag.js) - Google Analytics