python名词简析

深拷贝:将对象本身复制给另一个对象,副本改变不影响原对象,使用deepcopy()
浅拷贝:将对象的应用复制给另一个对象,改变副本,影响原对象,使用copy
python应用领域:web应用程序开发,自动化,数学建模,大数据应用程序,胶水代码
pythonpath:环境变量,python解释器用它来确定要加载的模块
三元运算:on true if true else on false
魔术方法:
init:对象初始化调用
new:创建对象时候执行的方法,单利模式会用到
str:使用print输出对象时调用,
del:删除对象时调用
退出python时那些具有对象循环引用或者全局命名空间引用的变量,和c库保留的部分内容是不会被释放的
猴子补丁:运行时动态修改类和模块
**args可变参数,不知道要传多少个参数的时候就用可变参数,可变参数是一个元祖或列表
**kwargs命名关键字参数,传入的是一个不确定字典
负索引:从右向左检索
闭包函数:当某个函数被当成对象返回时,夹带了外部变量,就形成一个闭包(如果在一个函数里,对在外部作用域的变量进行引用,那么内部函数就是一个闭包)
函数可以作为参数传递的语言,都可以使用装饰器
匿名函数:lambda a,b(参数):a*b(表达式)

GIL(全局解释器锁):同一个进程如果有多个线程运行,GIL锁定一个线程,使该进程内其他线程无法运行,等该线程运行完后其他线程才能运行,如果线程运行过程中遇到耗时操作,则解释器锁打开,使其他线程运行,因此多线程运行是有先后顺序的,并不是同时进行。多进程因为每个进程都能被系统分配资源,相当于每个进程都有一个python解释器,所以多进程可以实现多个进程同时进行,缺点是系统资源开销大
进程:1.操作系统进行资源分配和调度的 基本单位,多个进程之间相互独立
2.稳定性好,一个进程奔溃,不影响其他进程,进程消耗资源大,开启的数量有限制
线程:1.CPU进行资源分配和调度的基本单位,线程是进程的一部分,是比进程更小的能独立运行的基本单位,一个进程下的多个线程可以共享该进程的资源
2.如果IO操作密集,则可以多线程运行效率高,缺点是一个线程奔溃,都会造成整个进程奔溃
应用:1.IO密集的多用线程,在用户输入sleep时,可以切换到其他线程执行,减少等待时间
2.CPU密集的多用进程,因为加入IO操作少,用多线程的话,因为线程共享一个GIL,当前运行的线程会霸占GIL,其他线程没有GIL,就不能充分利用多核CPU的优势

python的内存管理方式:
1.垃圾回收机制:以引用计数为主,引用计数法,当一个变量保存了对象的引用时,此对象的引用计数就加1,当使用del删除变量指向的对象时,只会让对象的引用计数减1,引用计数为0的时候,这个对象才真的被删除
2.引用计数机制:
3.内存池机制
常见的网络传输协议:UDP,TCP,FTP,HTPP,SMTP
单例模式:只实例化一次的类
提高python执行效率的方法:
1,使用生成器,节约大量内存
2,循环代码优化,避免过多重复代码的执行
3,核心模块使用cython,pypy等,提高效率
4,多进程,多线程,协程
前端优化:
1,减少http请求
2,html跟css放在页面上部,js放在页面下部,因为js比html,css加载慢,所以要优先加载html,css
后端优化:
1,缓存存储读写次数高,变化少的数据,在应用程序读取数据时,一般是先从缓存中读取,如果读取不到或者数据已经失效,再访问磁盘数据库,并将数据再次写入缓存
2,异步方式,如果有耗时操作,可以采用异步,比如celery
3,优化代码,避免循环判断次数太多,多个ifelse,优先判断最有可能发生的

数据库优化:
2,建立索引,外键
3,优化索引,sql语句,分析慢查询
4,设计表结构的时候严格按照数据库设计规范
5,使用缓存,常用,变化不大的数据放在缓存中,节省IO
6,优化硬件,采用SSD,使用磁盘队列技术(RAID0,RAID1,RDID5)
7,采用mysql内部自带的表分区技术,把数据分层不同的文件,提高磁盘的读取效率
8,垂直分表,主从分离读写,分库分表
9,选择合适的引擎
10,进行架构级别的缓存,静态化,分布式
11,不用全文索引,用更快的存储方式
sql注入:在你执行的sql语句后面加入要执行的sql,通过form表单传入,可以通过参数
mysql跟redis区别:
redis:内存型菲关系数据库,数据保存在内存中,速度快
mysql:关系型数据库,数据保存在磁盘中,检索的话,会有一定IO操作,访问速度慢
MyISAM跟InnoDB区别:
1.innodb支持事务处理,myisam不支持
2,myisam适合查询跟插入为主的应用,INNODB适合频繁修改以及涉及到安全性较高的应用
3,INNODB支持外键,myisam不支持
4,对于自增长字段,innodb必须包含只有该字段的索引,myisam可以和其他字段建立联合索引
5,清空表时,innodb是按行删除,效率慢,myisam则会重新建表
6,innodb支持事务处理,支持外键,支持奔溃修复能力和并发控制
7,myisam数据插入快,空间和内存使用比较低
8,memeory所有的数据都存在内存中,数据的处理速度快,但是安全性不高,不能建立太大的表

python2跟python3的区别:
1.range(),python2返回列表,python3返回迭代器节约内存
2.print(),python2可以不带括号,python必须带括号
3.python2使用ascii编码,python3使用utf-8
4.python2中unicode表示字符串序列,str表示字节序列
pthon3中str表示字符串序列,byte表示字节序列
5.python2显示中文需要引入coding,python3不需要
6.python2raw_input()相当于python3input()

同源策略:
1,协议相同
2,域名相同
3,端口相同
只要有任何一项不同,那就是跨域
django解决跨域
安装django-cors-headers
配置settings.py文件,cors-headers的中间件CorsMiddleware在注册时必须放在django-common中间件的前一个
INSTALLED_APPS = [

‘corsheaders’,

]

			MIDDLEWARE_CLASSES = (
			    ...
			    'corsheaders.middleware.CorsMiddleware',
			    'django.middleware.common.CommonMiddleware', # 注意顺序
			    ...
			)
			#跨域增加忽略
			CORS_ALLOW_CREDENTIALS = True
			CORS_ORIGIN_ALLOW_ALL = True
			CORS_ORIGIN_WHITELIST = (
			    '*'
			)
			 
			CORS_ALLOW_METHODS = (
			    'DELETE',
			    'GET',
			    'OPTIONS',
			    'PATCH',
			    'POST',
			    'PUT',
			    'VIEW',
			)
			 
			CORS_ALLOW_HEADERS = (
			    'XMLHttpRequest',
			    'X_FILENAME',
			    'accept-encoding',
			    'authorization',
			    'content-type',
			    'dnt',
			    'origin',
			    'user-agent',
			    'x-csrftoken',
			    'x-requested-with',
			)

python中返回false的元素:0,空字符串,空列表,空字典,空元祖,None,False
any()只要迭代器中有一个是真就返回true
all()迭代器中所有的判断项都是真才返回true

错误代码解释:
IOError:输入输出异常
AttributeError:试图访问一个对象没有的属性
ImportError:无法引入模块或包,基本都是路径问题
IndentationError:语法错误,代码没有正确的对齐
IndexError:下标索引超出序列边界
KeyError:试图访问你字典里不存在的键
SyntaxError:Python代码逻辑语法出错,不能执行
NameError:使用一个还未赋予对象的对量
生成器:生成器是创建迭代器的简单而强大的工具,带有yield的函数就是生成器,列表元素可以按照某种算法算出来,在循环中不断推导它,这样就不必创建完整的列表,大大节省了空间
可迭代对象:可以直接作用于for循环的对象统称为可迭代对象,比如list,tuple,dict,set,str,generator,生成器,带yield的生成器函数
迭代器:可以被next()函数调用并不断返回下一个值的对象成为迭代器
1,所有iterable(可迭代对象)都可以通过内置函数iter()转换为iterator(迭代器)
2,迭代器的优点:省内存,通过延时创建的方式生成一个序列,需要的时候才创建
3,迭代器对象从集合的第一个元素开始访问,直到最后一个元素,只能往前不能后退
4,迭代器有两个基本的方法:iter,next
5,内置函数iter(),next(),本质都是用的iter()next()方法
迭代器不一定是生成器,但是生成器一定是迭代器
迭代器类似于一个只能向外弹出数据的栈,但它的深度只有1,也就是说它占的内存也只是一个数据的内存,比如说,我们有1到10000的一个列表,通常情况下,内存中会存放10000个数,如果用迭代器,它只会存放一个数,然后根据这个数跟特定的算法,通过next方法获取下一个数,最大的优点是大大的节约了内存,但如果需要的数据是最后一个数据时,会比直接从内存中得到慢,即时间换空间
使用iter方法执行可迭代对象,就会生成一个迭代器
区别:生成器能做到迭代器做到的所有事,而且因为自动创建了__iter__()跟next()方法,生成器显得特别简洁,而且生成器也是高效的,使用生成器表达式取代列表解析可以同时节省内存,除了创建和保持程序状态的自动生成,当发生器终结时,还会自动跳出StopIterration异常
数组:连续的空间中存储数据
链表:非连续的空间中存储
队列:先进先出
堆栈:后进先出
常见反爬虫以及应对方法:
通过headers反爬虫:一些目标网站会对客户端的headers进行检测,我们可以在爬虫中修改或添加headers,以此绕过反爬
基于用户行为反爬虫:目标网站检测同一IP短时间内多次访问同一页面,这种情况我们可以使用IP代理,随时更换IP,另一种情况是同一账户短时间内多次进行相同操作,我们可以在请求中间隔几秒
动态页面的反爬虫:目标网站的数据是通过ajax请求得到的,或者是通过js生成的,这种情况,我们首先用fiddler抓包工具分析网络请求,如果能够找到ajax请求,并分析出具体的参数和相应的具体含义,就可以直接用request,如果目标网站的ajax请求的所有参数都加密了,我们可以用selenium+phantomjs,调用浏览器内核,利用phantomjs执行js模拟人为操作触发页面中的js脚本,完完整整把人浏览页面获取数据的过程模拟一遍
分布式爬虫主要解决的问题:IP,带宽,CPU,IO
爬虫过程验证码的处理方式:scarpy,付费
scrapy:

装饰器
scrapy

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值