题目题目

阿里云双11来了!从本博客参与阿里云,服务器最低只要86元/年!

一、python的标准库:
1、sys.path是python的搜索模块的路径集,是一个list。可以在python 环境下使用sys.path.append(path)添加相关的路径,但在退出python环境后自己添加的路径就会自动消失!
sys.modules.keys() 返回所有已经导入的模块列表

os.path 主要是用于对系统路径文件的操作。
sys.path 主要是对 Python 解释器的系统环境参数的操作(动态的改变 Python 解释器搜索路径)

2、os模块
os.path.join()将分离的各部分组合成一个路径名
os.getcwd() : 查看当前所在路径。(只到项目名目录E:\papapa\scy)
os.path.abspath(path) :返回path的绝对路径。
os.path.basename(path) :给个路径他,去掉目录路径,返回文件名。
os.path.getsize(path) :文件或文件夹的大小,若是文件夹返回0。
os.path.exists(path) :文件或文件夹是否存在,返回True 或 False。
b=os.listdir(‘E:\papapa\scy/one/ds’) :列举目录下的所有文件。返回的是列表类型。
os.makedir(‘file1’) os.makedirs(‘file1/file2’)
3、time模块
time.time() : 返回值:返回当前时间的时间戳
time.ctime() : Thu Nov 7 13:11:32 2019
time.sleep(t) : 暂停几秒
datetime模块
datetime.datetime.now() :2019-11-07 13:17:18.963352
datetime.date(year=19,month=1,day=1)得到0019-01-01这样的结果
做一个简单的查询今天是今年的第几个天的查询软件,如下:

import datetime
year=input('输入查询的年')
month=input('输入查询的月')
day=input('输入查询的日')
a=datetime.date(year=int(year),month=int(month),day=int(day))
b=datetime.date(year=int(year),month=1,day=1)
print(a)#0019-02-11
print(b)#0019-01-01
c=(a-b).days+1
print(c)

4、random模块
1、random.random() : [0, 1).大于等于0小于一的随机小数
2、random.uniform(1,2) :生成1到2之间的一个小数
3、random.randint(1,3) 随机整数1,2,3
4、random.randrange(1,3),随机生成1-2的数字,不包括3
5、random.choice(),随机字符
6、random.shuffle(传入参数,只能list),洗牌功能
chr(65,90)大写字母,chr(97,122)小写字母

#生成二维码的实现
import random
checkcode=''
a=random.randint(1,4)
for i in range(1,5):
    if a==i:
        code=chr(random.randint(65,90))
    else:
        code=random.randint(0,9)
    checkcode+=str(code)
print(checkcode)

5、re正则
‘.’ 默认匹配除\n之外的任意一个字符,若指定flag DOTALL,则匹配任意字符,包括\n

‘^’ 匹配字符开头

‘$’ 匹配字符结尾

‘ 匹配号前的字符0次或多次
‘+’ 匹配前一个字符1次或多次
‘?’ 匹配前一个字符1次或0次
‘{m}’ 匹配前一个字符m次

‘{n,m} 匹配前一个字符n到m次

‘|’ 匹配符号两边的任意一个,相当于或

‘(…)’ 分组匹配

‘\A’只从字符开头匹配,比如re.search(“\Aabc”,”gggggabc”) 是匹配不到的

‘\Z’匹配字符结尾,和$一样

‘\d’匹配数字0-9

‘\D’匹配非数字

‘\w’匹配[A-Za-z0-9]

‘\W’匹配非[A-Za-z0-9]

‘\s’匹配空白字符、\t、\n、\r
python的第三方库:
django 和 flask 也是第三方库,requests,virtualenv,selenium,scrapy,xadmin,celery,
re,hashlib,md5。

二、赋值,深浅copy
赋值:简单的对象引用,指向同一个内存地址,没有开辟新的内存空间
浅拷贝:只是在内存中只额外创建第一层数据,和赋值不同,浅拷贝的内存地址并不相同,对于嵌套数据的操作,会有影响
深拷贝:内存中重新开辟一块空间,互不影响
拷贝的注意点
1、对于非容器类型,如数字、字符,以及其他的“原子”类型,没有拷贝一说,产生的都是原对象的引用。
2、如果元组变量值包含原子类型对象,即使采用了深拷贝,也只能得到浅拷贝

三、面向对象:
面向对象是相对于面向过程而言的。面向对象是一种基于结构分析的、以数据为中心的程序设计思想。在面向对象语言中有一个有很重要东西,叫做类。面向过程语言是一种基于功能分析的、以算法为中心的程序设计方法;
面向对象编程有三大重要特征:封装、继承、多态。
封装:封装是指将【数据】和【具体操作】的实现代码放在某个对象内部,外界只能通过接口使用该对象
继承:继承机制实现了代码的复用,多个类公用的代码部分可以只在一个类中提供,而其它类只需要继承这个类即可
多态:多态同一个行为具有多个不同表现形式或形态的能力。是指一个类实例(对象)的相同方法在不同情形有不同表现形式。多态机制使具有不同内部结构的对象可以共享相同的外部接口。这意味着,虽然针对不同对象的具体操作不同,但通过一个公共的类,它们(那些操作)可以通过相同的方式予以调用。

过接口使用
实例方法、静态方法、类方法
实例方法:类的实例方法由实例调用,至少包含一个self参数,且为第一个参数。执行实例方法时,会自动调用该方法的实例赋值给self。self代表的是类的实例,而非类本身。
self不是关键字,而是Python约定的命名,可以自定义但是不建议自定义。

class Student:
    classroom = "120"
    address   = "广州"
    def __init__(self,name,age):
       self.name = name
       self.age  = age
    def print_age(self): #实例方法
        print("{0}:{1}".format(self.name,self.age))
wang = Student("老王",32)   #创建一个实例
liu  = Student("老刘",23) #创建一个实例
#调用方法
wang.print_age()
liu.print_age()

静态方法:静态方法由类调用,无默认参数。将实例方法中self去掉,然后在方法定义上加上@staticmethod,就成为静态方法。它属于类,和实例无关。使用类名.静态方法的调用方式。(虽然也可以使用实例名.静态方法的方式调用)

class Zoo:
    @staticmethod
    def dog():
        name='wangwang'
        print(name)
#调用方法,直接类调用
Zoo.dog()

类方法:类方法由类调用,采用@classmethod装饰,至少传入一个cls(指类本身,类似于self)参数。执行类方法时,自动将调用该方

class Foo:
    @classmethod
    def class_method(cls):
        pass
Foo.class_method()

四、initnew的区别?
init 在对象创建后,对对象进行初始化。
new 是在对象创建之前创建一个对象,并将该对象返回给 init

五、模块
模块:逻辑上来说模块就是一组功能的组合;实质上一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀。
包:个包含许多 Python 代码的文件夹是一个包。一个包可以包含模块和子文件夹

六、进程,线程,协程
进程:一个运行的程序(代码)就是一个进程,没有运行的代码叫程序,进程是系统资源分配的最小单位,进程拥有自己独立的内存空间,所以进程间数据不共享,开销大。

线程: 调度执行的最小单位,也叫执行路径,不能独立存在,依赖进程存在一个进程至少有一个线程,叫主线程,而多个线程共享内存(数据共享,共享全局变量),从而极大地提高了程序的运行效率。

协程:是一种用户态的轻量级线程,协程的调度完全由用户控制。协程拥有自己的寄存器上下文和栈。 协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈,直接操作栈则基本没有内核切换的开销,可以不加锁的访问全局变量,所以上下文的切换非常快。

七、get、post请求的区别
GET 请求,GET 请求的数据会暴露在地址栏中,以?分割 URL 和传输数据,多个参数用&连接。 在 HTTP 规范中,没有对 URL 的长度和传输的数据大小进行限制。但是在实际开发过程中,对于 GET,特定的浏览器和服务器对 URL 的长度有限制。因此,在使用 GET 请求时,传输数据会
受到 URL 长度的限制。
POST 请求:POST 请求会把请求的数据放置在 HTTP 请求包的包体中,安全性会强些。
效率:GET 比 POST 效率高。
POST 请求的过程:
1.浏览器请求 tcp 连接(第一次握手)
2.服务器答应进行 tcp 连接(第二次握手)
3.浏览器确认,并发送 post 请求头(第三次握手,这个报文比较小,所以 http 会在此时进行
第一次数据发送)
4.服务器返回 100 continue 响应
5.浏览器开始发送数据
6.服务器返回 200 ok 响应
GET 请求的过程:
1.浏览器请求 tcp 连接(第一次握手)
2.服务器答应进行 tcp 连接(第二次握手)
3.浏览器确认,并发送 get 请求头和数据(第三次握手,这个报文比较小,所以 http 会在此时
进行第一次数据发送)
4.服务器返回 200 OK 响应

八、cookie 和 session 的区别?
1、cookie 数据存放在客户的浏览器上,session 数据放在服务器上。
2、cookie 不是很安全,别人可以分析存放在本地的 cookie 并进行 cookie 欺骗考虑到安全应当使用 session。
3、session 会在一定时间内保存在服务器上。当访问增多,会比较占用服务器的性能考虑到减轻服务器性能方面,应当使用 cookie。
4、单个 cookie 保存的数据不能超过 4K,很多浏览器都限制一个站点最多保存 20 个 cookie。
5、建议: 将登陆信息等重要信息存放为 SESSION ,其他信息如果需要保留,可以放在 cookie 中

九、HTTP 协议的状态码
100:表示服务器成功接收部分请求,要求客户端继续提交其余请求才能完成整个处理过程。
200表示服务器成功接收请求并已完成处理过程 (OK 请求成功)。
302为完成请求,客户需要进一步细化请求。(所有请求页面已经临时转移到新的 url)
304、307(使用缓存资源)。
客户端请求有错误,常用 404(服务器无法找到被请求页面),403(服务器拒绝访问,
权限不够)。
500服务器端出现错误(请求未完成,服务器遇到不可预知的情况)

https://www.jianshu.com/p/1d2b658884b2

Python量化投资网携手4326手游为资深游戏玩家推荐:《魔窟-无尽的地下城下载

「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论