Python 基础语法
认识
Python 是一种动态类型语言(运行时做数据类型检查)、也是一种强类型语言(强制类型定义)
对象模型
python 中处理的每样 “东西” 都是对象
- 内置对象:可直接使用
- 如数字、字符串、列表、del 等;
- 非内置对象:需要导入模块才能使用
- 如 sin(x),random() 等。
内存管理
python 采用基于值的内存管理
- 在 Python 中,即使是简单的赋值语句
a = 1
,也只是将变量标识符a
引用向对象1
- 基于值的内存管理:小整数、短字符串等对象都被 Python 缓存,多个变量值相等时,可能会有相同的 id
- 在
a = b
中,建立的是a
对b
的引用。 - 使用
a is b
来判断 a 和 b 是否引用同一对象,a is b
是id(a) == id(b)
的充分非必要条件 - 解释器会跟踪所有值,没有变量指向的自动删除,但自动内存管理不保证及时释放内存
- 使用
del(a)
主动释放一个变量,但如果对象还被引用不会导致对象被消除 - 形如
a.append(a)
会造成引用环,对垃圾回收会造成一定困难
操作符
>>> [1,2,3] * 3
[1,2,3,1,2,3,1,2,3]
>>> '1' * 5
'11111'
>> 3 * 'a'
'aaa'
>>> [1, 2, 3] + [4, 5, 6]
[1, 2, 3, 4, 5, 6]
浅拷贝与深拷贝
- 浅拷贝出来的是一个独立的对象,但它的子对象还是原对象中的子对象
- 深拷贝会递归地拷贝原对象中的每一个子对象,因此拷贝后的对象和原对象互不相关。
列表的切片是浅拷贝,是对原列表的引用。当列表含列表元素时,会产生问题
要实现对列表的深拷贝:
import copy
original_list = [1, 2, [3, 4]]
copied_list = copy.deepcopy(original_list)
选择结构
格式
if <condition1>:
<statement1>
elif < condition2>:
<statement2>
elif < condition3>:
<statement3>
else:
<statement4>
注意冒号和缩进
循环结构
循环后可以跟 else
语句,当循环正常结束时执行,不正常结束就不执行
for 循环
格式
for < variable> in < sequence >:
<statements>
else:
<statements>
特殊语句
- break 语句可以跳出 for 和 while 的循环体。如果你从 for 或 while 循环中终止,任何对应的循环 else 块将不执行
- continue 语句被用来告诉 Python 跳过当前循环块中的剩余语句,然后继续进行下一轮循环
迭代
如果给定一个 list 或 tuple,我们可以通过 for 循环来遍历这个 list 或 tuple,这种遍历我们称为迭代(Iteration)。在 Python 中,迭代是通过 for ... in 来完成的。Python 的 for 循环不仅可以用在 list 或 tuple 上,还可以作用在其他可迭代对象(Iterable)上
- 默认情况下,dict 迭代的是 key。如果要迭代 value,可以用
for value in d.values()
,如果要同时迭代 key 和 value,可以用for k, v in d.items()
>>> d = {'a': 1, 'b': 2, 'c': 3}
>>> for key in d:
... print(key)
...
a
c
b
- 由于字符串也是可迭代对象,因此,也可以作用于 for 循环
>>> for ch in 'ABC':
... print(ch)
...
A
B
C
如何判断一个对象是可迭代对象呢?方法是通过 collections 模块的 Iterable 类型判断
>>> from collections import Iterable
>>> isinstance('abc', Iterable) # str是否可迭代
True
>>> isinstance([1,2,3], Iterable) # list是否可迭代
True
>>> isinstance(123, Iterable) # 整数是否可迭代
False
迭代时,产生的是临时变量,修改此临时变量不会影响本身迭代对象里对应元素的值
while 循环
while <condition>:
<statements>
循环的 else 语句
循环自然结束,就执行 else 中的语句,如果遇到 break,则不执行 else 中的语句
for < variable> in < sequence >:
<statements>
else:
# 循环正常退出则执行
<statements>
# or
while <conditions>:
<statements>
else:
# 循环正常退出则执行
<statements>
其他
- 除法:/
- 结果可能为浮点数
- 取整://
- 向下取整(向小区整)
- 取余:%
函数
定义
def 函数名(参数列表):
函数体