def get_response(url):
r = requests.get("www.baidu.com")
return r.content
引用计数、标记回收、隔代回收
引用计数:当一个对象被引用,则会+1,反之-1,如果为0则消除没对象,但是会导致一个循环引用的问题,所以引出标记回收。
标记回收:成本较高
隔代回收:分三代回收
1.HTTP是无状态请求,cookie和session都是为了记录客户端状态,cookie是保存在客服端的,大小限制为4K。session保存存在服务器,相对cookie更安全,存储信息更多,缺点就是服务器压力大
2.GET请求获取数据,POST提交数据,DELETE删除数据,PUT更新单挑数据,PATCH更新部分数据
方法:进程、协程、线程,io多路复用(select、poll、epoll)
场景:爬虫(进程+协程)、nginx(IO多路复用)
装饰器:在不改变原来函数代码基础上,增加额外的功能
@classmethod:类方法
@staticmethod:静态方法
@property:属性,把类的方法,装饰城属性一样调用
在python中对象的赋值其实就是对象的引用。当创建一个对象,把它赋值给另外一个变量的时候,python并没有拷贝这个对象,只是拷贝这个对象的引用而已。
浅拷贝:拷贝了最外围的对象本身,内部的元素都只是拷贝了一个引用而已,也就是,把对象复制一遍,但是该对象中引用的其他对象我不复制
深拷贝:外围和内部元素都进行了拷贝对象本身,而不是引用。也就是说,把对象复制一遍,并且该对象中引用的其他对象我也复制
编码:encode
解码:encode
编码:在python3中将str转化成bytes类型,python2将unicode转化为str
解码:在python3中将bytes按照utf-8或者gdk编码方式转为成str类型,python2是将str转化为unicode
xrange用户与range完全相同,所不同的就是生成的不是一个数组,而是一个生成器
要生成很大的数字序列的时候,用xrange会比range性能优很多,因为不需要一上来就开辟一块很大的内存空间,在python3中,range()是像xrange()那样实现,xrange()被抛弃
def foo():
print("Function foo")
double a,b
a = 0.1 * 3
b = 0.1 + 0.1 + 0.1,
a == b
一张雇员表employee,例如:
id | name | salary | department id |
---|---|---|---|
1 | Joe | 7000 | 1 |
2 | Henry | 8000 | 2 |
3 | Sam | 6000 | 2 |
4 | Max | 9000 | 1 |
5 | Janet | 9000 | 1 |
6 | Randv | 8500 | 1 |
一张部门表department,例如:
id | name |
---|---|
1 | IT |
2 | Sales |
1)请写出sql,找出IT部门薪水最高的3个人
select name from employee order by salary desc where department_id=(select id from department where name='IT') limit 3 ;
2)请写出sql,找出每个部门薪水最高的人(可能有多人并列最高)
数组A:[1,5,8,14,16,25,28,39]
数组B:[2,3,6,8,12,13,16,21,25,28]
请你写一段代码,找出里面重复的元素
a=[21,22,55]
b=[21,55,77]
这一段json中第一个人的名字:
{"person":[{"name":"yu","age":"23"},{"name":"zhang","age":"34"}]}
元祖、列表、字典、集合,分别写出定义、新增、更改、删除
a = [1,2,3,4,5]
a[::2] = ?
a[-2] = ?
git clone <url> :克隆远程版本库
git init :初始化本地版本库
git status :查看状态
git diff :查看变更内容
git add . :跟踪所有改动过的文件
git add <file> :跟踪指定的文件
git commit -m "commit message" :提交所有更新过的文件
git log :查看提交历史
git reset --hard HEAD : 撤销工作目录中所有未提交文件的修改内容
git branch :显示所有本地分支
git checkout <branch/tag> :切换到指定分支或标签
git branch <new-branch> :切换到指定分支或标签
git push <remote> <branch> :上传代码并快速合并
git push <remote> : <branch/tag-name> :删除远程分支或标签
is比较的是两个实体对象是不是完全相同,它们是不是同一个对象,占用的内存地址是否相同
== 比较的是两个对象的内容是否相等,即内存地址可以不一样,内容一样就可以了
单引号和双引号:主要用来表示字符串
三单引号’‘‘Python’’':也可以标识字符串一般用来输入多行文本,或者用户大段的注释
三双引号"““Python””":一般用在类里面,用来注释类
list_element = ['a','c','z','x','a']
delete_element = list(set(list_element)) #利用集合的唯一性删除重复元素
delete_element.sort(key=list_element.index) #对修改后的列表进行排序
1.屏蔽192.168.1.5访问本机dns服务端口?
2.允许10.1.1.0/24访问本机的udp 8888 9999端口
要求:同一个IP暴力破解超过10次,自动屏蔽IP地址
指定办公室IP地址(192.168.100.100)为可信任IP地址,不受屏蔽规则限制,以下为日志格式
May 4 03:43:07 tz-monitor sshd[14003]: Failed password for root 124.232.135.84 port 25251 ssh2
May 4 03:43:07 tz-monitor sshd[14082]: Invalid user postgres from 124.232.135.84
tmp={'carry':'17','bob':'21','matty':'23','jack':'33','tom':'16','alex':'23'}
def test():
try:
if 2 > 1:
raise ValueError("Something wrong!")
except ValueError as e:
print("Error occurred!")
return
finally:
print("Done")
test()
x=[0,1]
i= 0
i,x[i]=1,2 #i=1,x[1]=2
print(x)
## return:[0,2]
list1 = [2, 3, 8, 4, 9, 5, 6]
list2 = [2, 3, 8, 4, 9, 5, 7]
print(list(set(list1 + list2))) # 交集
print(list(set(list1) - set(list2)) + list(set(list2) - set(list1))) # 并集合
1.深浅拷贝都是对源对象的复制,占用不同的内存空间
2.不可变类型的对象,对于深浅拷贝毫无影响,最终的地址值和值都是相等的
3.可变类型:
= 浅拷贝:值相等,地址相等
copy浅拷贝:值相等,地址不相等
deepcopy深拷贝:值相等,地址不相等
l = [1,4,9]
def f(x,l=[]):
for i in range(x):
l.append(i**2)
return l
print(f(4),l)
print(f(5,l),l)
print(f(6),l)
#[0, 1, 4, 9] [1, 4, 9]
#[1, 4, 9, 0, 1, 4, 9, 16] [1, 4, 9, 0, 1, 4, 9, 16]
#[0, 1, 4, 9, 0, 1, 4, 9, 16, 25] [1, 4, 9, 0, 1, 4, 9, 16]
L = [1, 2, 3, 4, 5, 6, 7]
print(L[1:]) # 读取列表中第二个元素 [2, 3, 4, 5, 6, 7]
print(L[3:5]) # [4, 5] # 左开右闭,左边读取第四个到第五个
print(L[::2]) # [1,3,5,7]
print(L[-2:-5]) # [] #顺序不对,需要从小到大
print(L[-3:-1]) # [5, 6] #从小到大,右边第三个开始数
__call__
__iter__
__enter__
__exit__
table 1:student(name,age,gender)
table 2:course(name,teacher_name(对应teacher表name字段))
table 3:grade(student_name(对应student表name字段),course_name(对应course表name字段),score)
table 4:teacher(name)
其是那个course表中的name包括三种:math、english、physics
1)查询所有数学成绩好于英语成绩的学生姓名
2)查询所有没有学习过'Alice'老师的课的学生的姓名
3)查询各门课程的最高分和最低分,并以课程名,课程最高分,课程最低分的顺序显示
list_a = {
{"name": "p1", "source": 100},
{"name": "p2", "source": 10},
{"name": "p3", "source": 30},
{"name": "p4", "source": 20},
{"name": "p5", "source": 80},
{"name": "p6", "source": 70},
{"name": "p7", "source": 70},
{"name": "p8", "source": 90},
{"name": "p9", "source": 50},
}
liat_a=[12,213,22,2,2,2,22,2,32,]
1.根据表A和表B,查询余额为零所有客户,列出客户ID、客户名称
2.根据表C,查询今天的所有入资,列出客户ID、入资方式
3.根据表C,以客户ID为单位,查询入资方式为“网上银行”的入资总和,列出客户ID、"网上银行"方式入资的总和
4.根据表A和表C,以客户ID为单位,查询入资方式为“网上银行”的入资总和,并且,在该方式下入资总和大于500000的数据,列出客户ID、客户名称、网上银行方式入资的总和
class A(object):
def go(self):
print("go A go!")
class B(A):
def go(self):
super(B,self).go()
print("go B go!")
class C(A):
def go(self):
super(C,self).go()
print("go C go!")
class D(B,C):
def go(self):
super(D,self).go()
print("go D go!")
class E(B,C):pass
a=A()
b=B()
c=C()
d=D()
e=E()
print("---------------a.go()---------------")
a.go()
print("---------------b.go()---------------")
b.go()
print("---------------c.go()---------------")
c.go()
print("---------------d.go()---------------")
d.go()
print("---------------e.go()---------------")
e.go()
[{'name':'Andy','age':'25'},
{'name':'Joe','age':'40'},
{'name':'ken','age':'30'},
{'name':'Jane','age':'50'},
]
将里面的元素按照age排序
>>>d=MyDict()
>>>d['abc']=3
>>>d.abc
3
>>>d.cde
>>>d.cde=6
>>>d['cde']
6
a=11;b=2;a/b=
a=11.0;b=2;a/b=
a=None;b=2;a/b=
a=None;b=2;a+b=
a=None;a is True =
a=None;a is False =
a=None;not a is False =
import copy
a = [1, 2, 3, [4, 5], 6]
b = a
c = copy.copy(a)
d = copy.deepcopy(a)
b.append(10)
c[3].append(11)
d[3].append(12)
seq = [1, 2, 3, 4]
print(seq[:2]) #[1, 2]
print(seq[-2:]) #[3, 4]
print(seq[10:]) #[]
print(seq[::-1]) #[4, 3, 2, 1]
print(seq[:]) #[1, 2, 3, 4]
print(id(seq[:]) == id(seq)) #False