print()
的其他参数
>>> print("I", "wish", "to", "register", "a", "complaint", sep="_",end="")
#end参数替换默认的换行符
I_wish_to_register_a_complaint
赋值魔法
序列解包
将一个序列(或任何可迭代对象)解包,并将得到的值存储到一系列变量中。
>>> values = 1, 2, 3
>>> values
(1, 2, 3)
>>> x, y, z = values
>>> x 1
>>> x, y, z = 1, 2, 3 # 这其实就是运用了序列解包
可使用星号运算符`(*)来收集多余的值
>>> a, b, *rest = [1, 2, 3, 4]
>>> rest
[3, 4]
链式赋值
x = y = somefunction()
#上述代码与下面的代码等价:
y = somefunction()
x = y
#请注意,这两条语句可能与下面的语句不等价:
x = somefunction()
y = somefunction()
增强赋值
增强赋值也可用于其他数据类型(只要使用的双目运算符可用于这些数据类型)。
>>> fnord = 'foo'
>>> fnord += 'bar'
>>> fnord *= 2
>>> fnord
'foobarfoobar'
条件和条件语句
虽然[]和""都为假(即bool([]) == bool("") == False
),但它们并不相等(即[] != ""
)。对其他各种为假的对象来说,情况亦如此(一个更显而易见的例子是() != False
)
条件表达式——C语言中三目运算符的Python版本:
status = "friend" if name.endswith("Gumby") else "stranger"
is运算符:
x is y
代表 x和y是同一个对象。
>>> x = y = [1, 2, 3]
>>> z = [1, 2, 3]
>>> x == y
True
>>> x == z
True
>>> x is z
False
字符串和序列的比较:
要获悉字母的顺序值,可使用函数ord
。chr
与之作用相反。
链式比较 1 <= number <= 10
短路逻辑
断言
如果知道必须满足特定条件,程序才能正确地运行,可在程序中添加assert
语句充当检查点,这很有帮助。还可在条件后面添加一个字符串,对断言做出说明。
>>> age = -1
>>> assert 0 < age < 100, 'The age must be realistic'
Traceback (most recent call last):
循环
迭代字典
d.items
以元组的方式返回键-
for key, value in d.items():
print(key, 'corresponds to', value)
一些迭代工具
- 并行迭代
函数zip
,它将两个序列“缝合”起来,并返回一个由元组组成的序列。返回值是一个适合迭代的对象,要查看其内容,可使用list将其转换为列表。
当序列的长度不同时,函数zip将在最短的序列用完后停止“缝合”。
- 迭代时获取索引
函数enumerate
。这个函数让你能够迭代索引值对,其中的索引是自动提供的。
-
反向迭代和排序后再迭代
函数
reversed
和sorted
, 可用于任何序列或可迭代的对象,且不就地修改对象,而是返回反转和排序后的版本。要按字母表排序,可先转换为小写。为此,可将sort或sorted的
key
参数设置为str.lower
。例如,sorted("aBc", key=str.lower)
返回['a', 'B', 'c']
跳出循环
while True/break
成例
word = input('Please enter a word: ')
while word:
print('The word was ', word)
word = input('Please enter a word: ')
#改进
while True:
word = input('Please enter a word: ')
if not word: break
print('The word was ', word)
循环中的else子句
else子句,它仅在没有调用break for:...else:
平行
简单推倒
从其他列表创建列表的方式
>>> [x*x for x in range(10) if x % 3 == 0]
[0, 9, 36, 81]
>>> [(x, y) for x in range(3) for y in range(3)]
[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]
圆括号代替方括号并不能实现元组推导,而是将创建生成器,
然而,可使用花括号来执行字典推导。
>>> squares = {i:"{} squared is {}".format(i, i**2) for i in range(10)}
>>> squares[8]
'8 squared is 64'
三人行
-
pass
在你编写代码时,可将其用作占位符
也可不使用注释和pass语句,而是插入一个字符串。这种做法尤其适用于未完成的函数 和 类,因为这种字符串将充当文档字符串。
-
del
对于你不再使用的对象,Python通常会将其删除, 这通常被称为垃圾收集。
使用
del
语句。不仅会删除到对象的引用,还会删除名称本身。>>> x = ["Hello", "world"] >>> y = x >>> y[1] = "Python" >>> x ['Hello', 'Python'] #你可能认为通过删除x,也将删除y,但情况并非如此。 >>> del x >>> y ['Hello', 'Python']
x和y指向同一个列表,但删除x对y没有任何影响,因为你只删除名称x,没有删除列表本身(值)。事实上,在Python中,根本就没有办法删除值,而且你也不需要这样做,因为对于你不再使用的值,Python解释器会立即将其删除。
-
使用
exec
和eval
执行字符串及计算其结果-
exec
函数exec将字符串作为代码执行。(exec什么都不返回,因为它本身是条语句)。
>>> exec("print('Hello, world!')") Hello, world!
在大多数情况下,还应向它传递一个命名空间——用于放置变量的地方;否则代码将污染你的命名空间,即修改你的变量。
第二个参数——字典,用作代码字符串的命名空间。
>>> from math import sqrt >>> scope = {} >>> exec('sqrt = 1', scope) >>> sqrt(4) 2.0 >>> scope['sqrt'] 1
-
eval
eval
计算用字符串表示的Python表达式的值,并返回结果
-
-
xrange([start,] stop[, step])
创建一个用于迭代的xrange对象