wangjuju123

上下文管理器

with语句实际上是一个非常通用的结构,允许你使用所谓的上下文管理器。上下文管理 器是支持两个方法的对象:__enter__和__exit__。 方法__enter__不接受任何参数,在进入with语句时被调用,其返回值被赋给关键字as后 面的变量。 方法__exit__接受三个参数:异常类型、异常对象和异常跟踪。它在离开方法时被调用 (通过前述参数将引发的异常提供给它)。如果__exit__返回

wangjuju123

2018-11-26

0.0000 0 0
  • 关注作者
  • 收藏

关闭文件

别忘了调用方法close将文件关闭。通常,程序退出时将自动关闭文件对象(也可能在退出 程序前这样做),因此是否将读取的文件关闭并不那么重要。然而,关闭文件没有坏处,在有些 操作系统和设置中,还可避免无意义地锁定文件以防修改。另外,这样做还可避免用完系统可能 指定的文件打开配额。 对于写入过的文件,一定要将其关闭,因为Python可能缓冲你写入的数据(将数据暂时存储 在某个地方,以提高效率)。因此如

wangjuju123

2018-11-26

0.0000 0 4
  • 关注作者
  • 收藏

读取和写入行

实际上,本章前面所做的都不太实用。与其逐个读取流中的字符,不如成行地读取。要读取 一行(从当前位置到下一个分行符的文本),可使用方法readline。调用这个方法时,可不提供 任何参数(在这种情况下,将读取一行并返回它);也可提供一个非负整数,指定readline多 可读取多少个字符。因此,如果some_file. readline()返回的是'Hello, World!\n',那么 some_f

wangjuju123

2018-11-26

0.0000 0 3
  • 关注作者
  • 收藏

文件读取和写入

文件重要的功能是提供和接收数据。如果有一个名为f的类似于文件的对象,可使用 f.write来写入数据,还可使用f.read来读取数据。与Python的其他大多数功能一样,在哪些东西 可用作数据方面,也存在一定的灵活性,但在文本和二进制模式下,基本上分别将str和bytes类 用作数据。 每当调用f.write(string)时,你提供的字符串都将写入到文件中既有内容的后面。 >>> f = op

wangjuju123

2018-11-26

0.0000 0 2
  • 关注作者
  • 收藏

用Python打开文件

要打开文件,可使用函数open,它位于自动导入的模块io中。函数open将文件名作为唯一必 不可少的参数,并返回一个文件对象。如果当前目录中有一个名为somefile.txt的文本文件(可能 是使用文本编辑器创建的),则可像下面这样打开它: >>> f = open('somefile.txt') 如果文件位于其他地方,可指定完整的路径。如果指定的文件不存在,将看到类似于下面的 异常: Trace

wangjuju123

2018-11-26

0.0000 0 6
  • 关注作者
  • 收藏

循环中的 else 子句

通常,在循环中使用break是因为你“发现”了什么或“出现”了什么情况。要在循环提前 结束时采取某种措施很容易,但有时候你可能想在循环正常结束时才采取某种措施。如何判断循 环是提前结束还是正常结束的呢?可在循环开始前定义一个布尔变量并将其设置为False,再在跳 出循环时将其设置为True。这样就可在循环后面使用一条if语句来判断循环是否是提前结束的。 broke_out = False fo

wangjuju123

2018-11-26

0.0000 0 5
  • 关注作者
  • 收藏

while True/break成例

在Python中,for和while循环非常灵活,但偶尔遇到的一些问题可能让你禁不住想:如果这 些循环的功能更强些就好了。例如,假设你要在用户根据提示输入单词时执行某种操作,并在用 户没有提供单词时结束循环。为此,一种办法如下: word = 'dummy' while word: word = input('Please enter a word: ') # 使用这个单词做

wangjuju123

2018-11-26

0.0000 0 1
  • 关注作者
  • 收藏

跳出循环 -continue

语句continue没有break用得多。它结束当前迭代,并跳到下一次迭代开头。这基本上意味 着跳过循环体中余下的语句,但不结束循环。这在循环体庞大而复杂,且存在多个要跳过它的原 因时很有用。在这种情况下,可使用continue,如下所示: for x in seq: if condition1: continu if condition2: continue

wangjuju123

2018-11-26

0.0000 0 1
  • 关注作者
  • 收藏

跳出循环 - break

要结束(跳出)循环,可使用break。假设你要找出小于100的大平方值(整数与自己相乘 的结果),可从100开始向下迭代。找到一个平方值后,无需再迭代,因此直接跳出循环。 from math import sqrt for n in range(99, 0, -1): root = sqrt(n) if root == int(root): print(n)

wangjuju123

2018-11-26

0.0000 0 2
  • 关注作者
  • 收藏

反向迭代和排序后再迭代

来看另外两个很有用的函数:reversed和sorted。它们类似于列表方法reverse和sort(sorted 接受的参数也与sort类似),但可用于任何序列或可迭代的对象,且不就地修改对象,而是返回 反转和排序后的版本。 >>> sorted([4, 3, 6, 8, 3]) [3, 3, 4, 6, 8] >>> sorted('Hello, world!') [' ', '!',

wangjuju123

2018-11-26

0.0000 0 6
  • 关注作者
  • 收藏

迭代时获取索引

在有些情况下,你需要在迭代对象序列的同时获取当前对象的索引。例如,你可能想替换一 个字符串列表中所有包含子串'xxx'的字符串。当然,完成这种任务的方法有很多,但这里假设 你要像下面这样做: for string in strings: if 'xxx' in string: index = strings.index(string) # 在字符串列表

wangjuju123

2018-11-23

0.0000 0 2
  • 关注作者
  • 收藏

并行迭代

有时候,你可能想同时迭代两个序列。假设有下面两个列表: names = ['anne', 'beth', 'george', 'damon'] ages = [12, 45, 32, 102] 如果要打印名字和对应的年龄,可以像下面这样做: for i in range(len(names)): print(names[i], 'is', ages[i], 'years old'

wangjuju123

2018-11-23

0.0000 0 1
  • 关注作者
  • 收藏

迭代字典

要遍历字典的所有关键字,可像遍历序列那样使用普通的for语句。 d = {'x': 1, 'y': 2, 'z': 3} for key in d: print(key, 'corresponds to', d[key]) 也可使用keys等字典方法来获取所有的键。如果只对值感兴趣,可使用d.values。你可能还 记得,d.items以元组的方式返回键值对。for循环的优点之一

wangjuju123

2018-11-23

0.0000 0 2
  • 关注作者
  • 收藏

for 循环

while语句非常灵活,可用于在条件为真时反复执行代码块。这在通常情况下很好,但有时 候你可能想根据需要进行定制。一种这样的需求是为序列(或其他可迭代对象)中每个元素执行 代码块。 注意 基本上,可迭代对象是可使用for循环进行遍历的对象。第9章将详细介绍可迭代对象和 迭代器。就目前而言,只需将可迭代对象视为序列即可。 为此,可使用for语句: words = ['this', 'is',

wangjuju123

2018-11-23

0.0000 0 4
  • 关注作者
  • 收藏

while 循环

为避免前述示例所示的繁琐代码,能够像下面这样做很有帮助: x = 1 while x <= 100: print(x) x = 1 那么如何使用Python来实现的?你猜对了,就像上面那样做。不太复杂,不是吗?你还可以 使用循环来确保用户输入名字,如下所示: name = '' while not name: name = input('Please enter y

wangjuju123

2018-11-23

0.0000 0 3
  • 关注作者
  • 收藏

循环

至此,你知道了如何在条件为真(或假)时执行操作,但如何重复操作多次呢?例如,你可 能想创建一个程序,每月都提醒支付房租。如果只使用已介绍过的工具,必须像下面这样编写这 个程序(伪代码): send mail wait one month send mail wait one month send mail wait one month (... and so on) 但是如果希望程序这

wangjuju123

2018-11-23

0.0000 0 3
  • 关注作者
  • 收藏

短路逻辑和条件表达式

布尔运算符有个有趣的特征:只做必要的计算。例如,仅当x和y都为真时,表达式x and y才为真。因此如果x为假,这个表达式将立即返回假,而不关心y。实际上,如果x为假,这 个表达式将返回x,否则返回y。(这将提供预期的结果,你明白了其中的原理吗?)这种行为 称为短路逻辑(或者延迟求值):布尔运算符常被称为逻辑运算符,如你所见,在有些情况下 将“绕过”第二个值。对于运算符or,情况亦如此。在表达式x

wangjuju123

2018-11-23

0.0000 0 3
  • 关注作者
  • 收藏

增强赋值

可以不编写代码x = x + 1,而将右边表达式中的运算符(这里是+)移到赋值运算符(=)的前面,从而写成x += 1。这称为增强赋值,适用于所有标准运算符,如*、/、%等。 >>> x = 2 >>> x += 1 >>> x *= 2 >>> x 6 增强赋值也可用于其他数据类型(只要使用的双目运算符可用于这些数据类型)。 >>> fnord = 'foo' >>> fnord

wangjuju123

2018-11-23

0.0000 0 2
  • 关注作者
  • 收藏

链式赋值

链式赋值是一种快捷方式,用于将多个变量关联到同一个值。这有点像前一节介绍的并行赋 值,但只涉及一个值: x = y = somefunction() 上述代码与下面的代码等价: y = somefunction() x = y 请注意,这两条语句可能与下面的语句不等价: x = somefunction() y = somefunction()

wangjuju123

2018-11-23

0.0000 0 2
  • 关注作者
  • 收藏

序列解包

赋值语句你见过很多,有的给变量赋值,还有的给数据结构的一部分(如列表中的元素和切 片,或者字典项)赋值,但还有其他类型的赋值语句。例如,可同时(并行)给多个变量赋值: >>> x, y, z = 1, 2, 3 >>> print(x, y, z) 1 2 3 看似用处不大?看好了,使用这种方式还可交换多个变量的值。 >>> x, y = y, x >>> print(x, y, z)

wangjuju123

2018-11-23

0.0000 0 3
  • 关注作者
  • 收藏
<12313>