语法
整型
默认参数必须是不变对象
def foo(v, l=[]):
l.append(v)
print(id(l))
print(l)
foo(1)
foo(2)
foo(3)
#输出
4537323400
[1]
4537323400
[1, 2]
4537323400
[1, 2, 3]
def foo(v, l=None):
if not l:
l = []
l.append(v)
print(id(l))
print(l)
foo(1)
foo(2)
foo(3)
#输出
4451487624
[1]
4451487624
[2]
4451487624
[3]
循环引用
Py3.4及以后处理循环引用问题。
在 3.4 版更改: 根据 PEP 442 ,带有 del() 方法的对象最终不再会进入 gc.garbage 。
class Data:
def __del__(self):
print('Data.__del__')
class Node:
def __init__(self):
self.data = Data()
self.parent = None
self.children = []
def add_child(self, child):
self.children.append(child)
child.parent = self
a = Node()
a.add_child(Node())
del a
type和isinstance
class A:
pass
class B(A):
pass
isinstance(A(), A) # returns True
type(A()) == A # returns True
isinstance(B(), A) # returns True
type(B()) == A # returns False
运行脚本
-m和不加的区别
两种执行方法的sys.path不同(注意每个path输出中的第一条),Python中的sys.path是Python用来搜索包和模块的路径。通过python -m执行一个脚本时会将当前路径加入到系统路径中,而使用python xxx.py执行脚本则会将脚本所在文件夹加入到系统路径中(如果取消inner.py中的注释会报找不到模块的错误)
文档
https://www.crummy.com/software/BeautifulSoup/bs4/doc/
https://requests.kennethreitz.org/en/master/