语句
一种可通过名称来访问其各个值的数据结构。这种数据结构称为映射(mapping)。字典是Python中唯一的内置映射类型,
其中的值不按顺序排列,而是存储在键下。键可能是数、字符串或元组。
print 与 import
你可同时打印多个表达式,条件是用逗号分隔它们:
>>> print('Age:', 42)
Age: 42
自定义分隔符:
>>> print("I", "wish", "to", "register", "a", "complaint", sep="_")
I_wish_to_register_a_complaint
自定义结束字符串,以替换默认的换行符
print('Hello,', end='')
print('world!')
从模块导入时,通常使用 import somemodule
或使用 from somemodule import somefunction
或 from somemodule import somefunction, anotherfunction, yetanotherfunction
或 from somemodule import *
# 导入时重命名
from module1 import open as open1
from module2 import open as open2
赋值
# 序列解包
同时(并行)给多个变量赋值
>>> x, y, z = 1, 2, 3
>>> print(x, y, z)
1 2 3
>>> x, y = y, x
>>> print(x, y, z)
2 1 3
实际上,这里执行的操作称为序列解包(或可迭代对象解包):将一个序列(或任何可迭代对象)解包,并将得到的值存储到一系列变量中
>>> values = 1, 2, 3
>>> values
(1, 2, 3)
>>> x, y, z = values
>>> x
1
>>> scoundrel = {'name': 'Robin', 'girlfriend': 'Marion'}
>>> key, value = scoundrel.popitem()
>>> key
'girlfriend'
>>> value
'Marion'
可使用星号运算符( * )来收集多余的值,这样无需确保值和变量的个数相同
>>> a, b, *rest = [1, 2, 3, 4]
>>> rest
[3, 4]
>>> name = "Albus Percival Wulfric Brian Dumbledore"
>>> first, *middle, last = name.split()
>>> middle
['Percival', 'Wulfric', 'Brian']
# 链式赋值
x = y = somefunction()
# 增强赋值
x += 1 ,这称为增强赋值 适用于所有标准运算符,如 * 、 / 、 %
条件语句
下面的值都将被解释器视为假(False):
False None 0 "" () [] {}
#条件语句
if condition: //不需要用括号括起来条件表达式,最后要有冒号
statement1
statement2
elseif condition2:
statement3
statement4
else:
statement5
statement6
/*上述方式可以嵌套*/
if elif else
condition:布尔表达式,关系表示式,逻辑表达式(and or not)
is(相同) 与 ==(相等) 的区别 is是代表是一个对象 我理解的就是地址一样 ==仅仅代表内容一样
>>> x = y = [1, 2, 3]
>>> z = [1, 2, 3]
>>> x == y
True
>>> x == z
True
>>> x is y
True
>>> x is z
False
# 链式比较 1 <= number <= 10
循环
while
name = ''
while not name:
name = input('Please enter your name: ')
print('Hello, {}!'.format(name))
for
words = ['this', 'is', 'an', 'ex', 'parrot']
for word in words:
print(word)
# 迭代字典
for key, value in d.items():
print(key, 'corresponds to', value)
迭代工具
# 并行迭代
函数 zip 可用于“缝合”任意数量的序列。需要指出的是,当序列的长度不同时,函数 zip 将在最短的序列用完后停止“缝合”。
names = ['anne', 'beth', 'george', 'damon']
ages = [12, 45, 32, 102]
for name, age in zip(names, ages):
print(name, 'is', age, 'years old')
# 迭代时获取索引
enumerate函数让你能够迭代索引-值对,其中的索引是自动提供的
for index, string in enumerate(strings):
if 'xxx' in string:
strings[index] = '[censored]'
跳出循环
from math import sqrt
for n in range(99, 0, -1):
root = sqrt(n)
if root == int(root):
print(n)
break
for x in seq:
if condition1: continue
if condition2: continue
if condition3: continue
do_something()
do_something_else()
do_another_thing()
etc()
简单推导
>>> [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)]
函数 exec 将字符串作为代码执行。
>>> exec("print('Hello, world!')")
Hello, world!
添加第二个参数——字典,用作代码字符串的命名空间
>>> from math import sqrt
>>> scope = {}
>>> exec('sqrt = 1', scope)
>>> sqrt(4)
2.0
>>> scope['sqrt']
1
eval 是一个类似于 exec 的内置函数。 exec 执行一系列Python语句,而 eval 计算用字符串表示的Python表达式的值,并返回结果( exec 什么都不返回,因为它本身是条语句)
>>> eval(input("Enter an arithmetic expression: "))
Enter an arithmetic expression: 6 + 18 * 2
42
>>> scope = {}
>>> scope['x'] = 2
>>> scope['y'] = 3
>>> eval('x * y', scope)
6