11、简述面向对象中__new__和__init__区别
init 和 new 最主要的区别在于:
1.init 通常用于初始化一个新实例,控制这个初始化的过程,比如添加一些属性, 做一些额外的操作,发生在类实例被创建完以后。它是实例级别的方法。
2.new 通常用于控制生成一个新实例的过程。它是类级别的方法。
12、简述with方法打开处理文件帮我们做了什么?
打开文件在进行读写的时候可能会出现一些异常状况,如果按照常规的f.open写法,我们需要try,except,finally,做异常判断,并且文件最终不管遇到什么情况,都要执行finally f.close()关闭文件,with方法帮我们实现了finally中f.close。
13、列表[1,2,3,4,5],请使用map()函数输出[1,4,9,16,25],并使用列表推导式提取出大于10的数,最终输出[16,25]。
def f(x):
return x ** 2
res = map(f, [1, 2, 3, 4, 5])
print([i for i in res if i > 10])
14、python中生成随机整数、随机小数、0–1之间小数方法。
random模块
随机整数:
random.randint(a,b):返回随机整数x,a<=x<=b
random.randrange(start,stop,[,step]):返回一个范围在(start,stop,step)之间的随机整数,不包括结束值。
import random
a = random.randint(1,10)
print(a)
b = random.randrange(1,5)
print(b)
15、避免转义给字符串加哪个字母表示原始字符串?
r , 表示需要原始字符串,不转义特殊字符
16、<div class=“name”>中国</div>,用正则匹配出标签里面的内容(“中国”),其中class的类名是不确定的。
import re
s = r'<div class="name">中国</div>'
pl = r'<div class="name">(.*?)</div>'
patternl = re.compile(pl)
res = patternl.findall(s)
print(res)
17、python中断言方法举例。
"""断言"""
k = 6
assert (k>1)
print("断言成功,程序继续进行")
assert (k>7)
print("断言失败,程序报错")
18、数据表student有id,name,score,city字段,其中name中的名字可有重复,需要消除重复行,请写sql语句。
select distinct name from student
19、10个Linux常用命令。
mv :移动文件/重命名文件
cp :拷贝文件/备份文件
cd :切换路径
mkdir : 创建目录
scp :远程拷贝文件
ifconfig :查看网络设备
ssh : 远程登录服务器
df :查看挂载盘使用情况
ls :列出文件
chmod :修改权限
chown :修改文件所属用户
20、python2和python3区别?列举5个
除法运算
Python 中的除法较其它语言显得非常高端,有套很复杂的规则。Python 中的除法有两个运算符,/ 和 //
首先来说 / 除法:
在 Python 2.x 中 / 除法就跟我们熟悉的大多数语言,比如 Java 和 C ,整数相除的结果是一个整数,把小数部分完全忽略掉,浮点数除法会保留小数点的部分得到一个浮点数的结果。
在 Python 3.x 中 / 除法不再这么做了,对于整数之间的相除,结果也会是浮点数。
print语句
python2中print是一个语句,不论想输出什么,直接放到print关键字后面即可。python3里,print()是一个函数,像其他函数一样,print()需要你将要输出的东西作为参数传给它。
UNICODE字符串
python2中有两种字符串类型:Unicode字符串和非Unicode字符串。Python3中只有一种类型:Unicode字符串。
全局函数UNICODE()
python2有两个全局函数可以把对象强制转换成字符串:unicode()把对象转换成unicode字符串,还有str()把对象转换为非Unicode字符串。Python3只有一种字符串类型,unicode字符串,所以str()函数即可完成所有的功能。
xrange
在 Python 2 中 xrange() 创建迭代对象的用法是非常流行的。比如: for 循环或者是列表/集合/字典推导式。
这个表现十分像生成器(比如。“惰性求值”)。但是这个 xrange-iterable 是无穷的,意味着你可以无限遍历。
由于它的惰性求值,如果你不得仅仅不遍历它一次,xrange() 函数 比 range() 更快(比如 for 循环)。尽管如此,对比迭代一次,不建议你重复迭代多次,因为生成器每次都从头开始。
在 Python 3 中,range() 是像 xrange() 那样实现以至于一个专门的 xrange() 函数都不再存在(在 Python 3 中 xrange() 会抛出命名异常)。
21、列出python中可变数据类型和不可变数据类型,并简述原理
可变类型(mutable):变量进行append、+=等这种操作后 == 改变了变量的值,而不会新建一个对象,变量引用的对象的地址也不会变化,不过对于相同的值的不同对象,在内存中则会存在不同的对象,即每个对象都有自己的地址,相当于内存中对于同值的对象保存了多份,这里不存在引用计数,是实实在在的对象。
- list
- dict
- set
- byte
- array
- user-defined
- classes (除非是特别定义的不可变)
不可变类型(immutable):改变了变量的值 == 新建了一个对象,而对于相同的值的对象,在内存中则只有一个对象(一个地址), python的id() 方法让你明白
- int
- float
- decimal
- complex
- bool
- string
- tuple
- range
- frozenset
- bytes
22、s = “ajldjlajfdljfddd”,去重并从小到大排序输出"adfjl"
t = "ajldjlajfdljfddd"
t = set(t)
t = list(t)
t.sort(reverse=False)
s = "".join(t)
print(s)
23、用lambda函数实现两个数相乘
res = lambda j,k : j*k
print(res(9,9))
24、字典根据键从小到大排序
a = {'a1':2, 'a2':4, 'a4':1,'a3':3,}
for k in sorted(a):
print(k,a[k])
25、利用collections库的Counter方法统计字符串每个单词出现的次数"kjalfj;ldsjafl;hdsllfdhg;lahfbl;hl;ahlf;h"
from collections import Counter
a = "kjalfj;ldsjafl;hdsllfdhg;lahfbl;hl;ahlf;h"
res = Counter(a)
print(res)
26、字符串a = “not 404 found 张三 99 深圳”,每个词中间是空格,用正则过滤掉英文和数字,最终输出"张三 深圳"
import re
S = "not 404 found 张三 99 深圳"
L = S.split(" ") # ['not', '404', 'found', '张三', '99', '深圳']
res = re.findall("\d+|[a-zA-Z]+", S) # ['not', '404', 'found', '99']
tmp = [item for item in L if not item in res] # ['张三', '深圳']
print(" ".join(tmp)) # 张三 深圳