Python Learning Note Day 12

今天是Python学习第十二天,主要学习内容是针对条件、循环及其他语句,其中print打印多个参数、序列解包、链式赋值、断言、并行迭代、exec 和 eval等都是上一本书里没有提到过的东西。

接下就来总结下这部分补充的知识。

补充知识

1. print可以打印多个参数

还可自定义分隔符

你还可自定义结束字符串,以替换默认的换行符。例如,如果将结束字符串指定为空字符串,以后就可继续打印到当前行。

2. 可同时(并行)给多个变量赋值

3. 序列解包(或可迭代对象解包)

将一个序列(或任何可迭代对象)解包,并将得到的值存储到一系列变量中。

方法popitem它随便获取一个键-值对并以元组的方式返回。接下来,可直接将返回的元组解包到两个变量中。

可使用星号运算符(*)来收集多余的值,这样无需确保值和变量的个数相同

还可将带星号的变量放在其他位置。

赋值语句的右边可以是任何类型的序列,但带星号的变量最终包含的总是一个列表。在变量和值的个数相同时亦如此。

4. 链式赋值

5. endswith(str)方法

如果某个字符串以str结尾就返回真,反之亦然

6. 三目运算符(???)

7. 关键字assert

8. 并行迭代

函数zip,它将两个序列“缝合”起来,并返回一个由元组组成的序列。返回值是一个适合迭代的对象,要查看其内容,可使用list将其转换为列表。

函数zip可用于“缝合”任意数量的序列。需要指出的是,当序列的长度不同时,函数zip将在最短的序列用完后停止“缝合”。

内置函数enumerate让你能够迭代索引-值对,其中的索引是自动提供的。

9. 函数exec

函数exec将字符串作为代码执行。

调用函数exec时只给它提供一个参数绝非好事。在大多数情况下,还应向它传递一个命名空间——用于放置变量的地方;否则代码将污染你的命名空间,即修改你的变量。例如,假设代码使用了名称sqrt,结果将如何呢?

既然如此,为何要将字符串作为代码执行呢?函数exec主要用于动态地创建代码字符串。如果这种字符串来自其他地方(可能是用户),几乎无法确定它将包含什么内容。因此为了安全起见,要提供一个字典以充当命名空间。

10. eval
eval是一个类似于exec的内置函数。exec执行一系列Python语句,而eval计算用字符串表示的Python表达式的值,并返回结果(exec什么都不返回,因为它本身是条语句)。例如,你可使用如下代码来创建一个Python计算器:

与exec一样,也可向eval提供一个命名空间,虽然表达式通常不会像语句那样给变量重新赋值。

虽然表达式通常不会给变量重新赋值,但绝对能够这样做,如调用给全局变量重新赋值的函数。因此,将eval用于不可信任的代码并不比使用exec安全。当前,在Python中执行不可信任的代码时,没有安全的办法。一种替代解决方案是使用Jython等Python实现,以使用Java沙箱等原生机制。

11. 新函数

函数描述
chr(n)返回一个字符串,其中只包含一个字符,这个字符对应于传入的顺序值n(0 ≤
n < 256)
eval(source[,globals[,locals]])计算并返回字符串表示的表达式的结果
exec(source[, globals[, locals]])将字符串作为语句执行
enumerate(seq) 生成可迭代的索引值对
ord(c)接受一个只包含一个字符的字符串,并返回这个字符的顺序值(一个整数)
range([start,] stop[, step])创建一个由整数组成的列表
reversed(seq)按相反的顺序返回seq中的值,以便用于迭代
sorted(seq[,cmp][,key][,reverse])返回一个列表,其中包含seq中的所有值且这些值是经过排序的
xrange([start,] stop[, step])创建一个用于迭代的xrange对象
zip(seq1, seq2,…) 创建一个适合用于并行迭代的新序列

点赞

发表评论

电子邮件地址不会被公开。