Python基础知识
1、python中is和==的区别
Python中对象包含的三个基本要素,分别是:id(身份标识) 、type(数据类型)和value(值)。
‘==’比较的是value值
‘is’比较的是id
2、简述read、readline、readlines的区别
read读取整个文件
readline读取下一行数据
readlines读取整个文件到一个迭代器以供我们遍历(读取 到一个list中,以供使用,比较方便)
3、举例说明创建字典的至少两种方法
1、传统的文字表达式:
>>> d={
'name':'Allen','age':21,'gender':'male'}
>>> d
{
'age': 21, 'name': 'Allen', 'gender': 'male'}
如果你可以事先拼出整个字典,这种方式是很方便的。
2、动态分配键值:
>>> d={
}
>>> d['name']='Allen'
>>> d['age']=21
>>> d['gender']='male'
>>> d
{
'age': 21, 'name': 'Allen', 'gender': 'male'}
如果你需要一次动态地建立一个字典的一个字段,那么这种方式比较合适。
字典与列表不同,不能通过偏移量进行复制,只能通过键来读取或赋值,所以也可以这样为字典赋值,当然访问不存在的键会报错:
>>> d[1]='abcd'
>>> d
{
1: 'abcd', 'age': 21, 'name': 'Allen', 'gender': 'male'}
>>> d[2]
Traceback (most recent call last):
File "<pyshell#9>", line 1, in <module>
d[2]
KeyError: 2
3、字典键值表
>>> c = dict(name='Allen', age=14, gender='male')
>>> c
{
'gender': 'male', 'name': 'Allen', 'age': 14}
因为这种形式语法简单,不易出错,所以非常流行。
这种形式所需的代码比常量少,但是键必须都是字符串才行,所以下列代码会报错:
>>> c = dict(name='Allen', age=14, gender='male', 1='abcd')
SyntaxError: keyword can't be an expression
4、字典键值元组表
>>> e=dict([('name','Allen'),('age',21),('gender','male')])
>>> e
{
'age': 21, 'name': 'Allen', 'gender': 'male'}
如果你需要在程序运行时把键和值逐步建成序列,那么这种方式比较有用。
5、所有键的值都相同或者赋予初始值:
>>> f=dict.fromkeys(['height','weight'],'normal')
>>> f
{
'weight': 'normal', 'height': 'normal'}
4、*args,**kwargs的作用是什么?如何使用?
*args和**kwargs通常使用在函数定义里,
*args允许函数传入不定量个数的非关键字参数,
**kwargs允许函数传入不定量个数的关键字参数
5、python中match()和search()的区别?
match() 函数只检测RE是不是在string的开始位置匹配,search() 会扫描整个string查找匹配, 也就是说match() 只有在0位置匹配成功的话才有返回,如果不是开始位置匹配成功的话,match() 就返回none
6、描述yield作用
保存当前运行状态(断点),然后暂停执行,即将函数挂起
将yield关键字后面表达式的值作为返回值返回,此时可以理解为起到了return的作用,当使用next()、send()函数让函数从断点处继续执行,即唤醒函数。
7、装饰器
装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象。
功能:
1.引入日志;
2.函数执行时间统计;
3.执行函数前预备处理;
4.执行函数后清理功能;
5.权限校验;
6.缓存
8、你对多线程和多进程的理解。
进程是系统进行资源分配和调度的一个独立单位,线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源;
一个程序至少有一个进程,一个进程至少有一个线程;
线程的划分尺度小于进程(资源比进程少),使得多线程程序的并发性高;
进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率 ;
多线程不能够独立执行,必须依存在进程中;
优缺点:线程和进程在使用上各有优缺点:线程执行开销小,但不利于资源的管理和保护;而进程正相反。
9、线程中start方法和run方法的区别?
若调用start,则先执行主进程,后执行子进程;
若调用run,相当于正常的函数调用,将按照程序的顺序执行
10、python是怎么进行内存管理的?
引用计数:python内部使用引用计数,来保持追踪内存中的对象,Python内部记录了对象有多少个引用,即引用计数,当对象被创建时就创建了一个引用计数,当对象不再需要时,这个对象的引用计数为0时,它被垃圾回收。
引用计数加