1. 一行代码实现求和
sum(range(begin,end+1))
2. 如何在一个函数内部修改全局变量
a = 5
def fn():
global a
a = 4
fn()
print(a)
3. 字典如何删除键和合并两个字典
del 和 update方法
dic = {'name':'Alan','age':'18'}
del dic['name']
print(dic) # {'age': '18'}
dic2 = {'name':'Klan'}
dic.update(dic2)
print(dic) # {'age': '18', 'name': 'Klan'}
4. 谈下Python的GIL
GIL 是python的全局解释器锁,同一进程中假如有多个线程运行,一个线程在运行python程序的时候会霸占python解释器(加了一把锁即GIL),使该进程内的其他线程无法运行,等该线程运行完后其他线程才能运行。如果线程运行过程中遇到耗时操作,则解释器锁解开,使其他线程运行。所以在多线程中,线程的运行仍是有先后顺序的,并不是同时进行。
多进程中因为每个进程都能被系统分配资源,相当于每个进程有了一个python解释器,所以多进程可以实现多个进程的同时运行,缺点是进程系统资源开销大
5. Python实现列表去重的方法
先通过集合去重,再转列表
list = [11, 12, 13, 12, 15, 16, 13]
a = set(list)
print(a) # {11, 12, 13, 15, 16}
y = [x for x in a]
print(y) # [11, 12, 13, 15, 16]
6. fun(args,**kwargs) 中的args, **kwargs什么意思?
args 和**kwargs主要用于函数定义,你可以将不定数量的参数传递给一个函数.这里的不定的意思是:预先并不知道,函数使用者会传递多少个参数给你,
所以在这个场景下使用这两个关键字.args是用来发送一个非关键值对的可变数量的参数列表给一个函数.
def demo(args_f, *args_v):
print (args_f)
for x in args_v:
print (x)
demo('a','b','c','d')
a
b
c
d
kwargs允许你将不定长度的键值对,作为参数传递给一个函数.如果你想要在一个函数里处理带名字的参数,你应该使用kwargs.
def demo(**args_v):
for k,v in args_v.items():
print(k, v)
demo(name = 'Alan') # name Alan
7.简述面向对象中__new__和__init__区别
__init__
是初始化方法,创建对象后,就立刻被默认调用了,可接收参数.
class Bike:
def __init__(self, newWheelNum, newColor):
self.wheelNum = newWheelNum
self.color = newColor
def move(self):
print('车会跑')
# 创建对象
BM = Bike(2, 'green')
print('车的颜色为:%s' % BM.color) # 车的颜色为:green
print('车轮数量为:%s' % BM.wheelNum) # 车轮数量为:2
1、__new__至少要有一个参数cls,代表当前类,此参数在实例化时由Python解释器自动识别
2、__new__必须要有返回值,返回实例化出来的实例,这点在自己实现__new__时要特别注意,可以return父类(通过super(当前类名, cls))__new__出来的实例,或者直接是object的__new__出来的实例
3、__init__有一个参数self,就是这个__new__返回的实例,__init__在__new__的基础上可以完成一些其它初始化的动作,__init__不需要返回值
4、如果__new__创建的是当前类的实例,会自动调用__init__函数,通过return语句里面调用的__new__函数的第一个参数是cls来保证是当前类实例,如果是其他类的类名,;那么实际创建返回的就是其他类的实例,其实就不会调用当前类的__init__函数,也不会调用其他类的__init__函数。
class A(object):
def __init__(self):
print('这是 init 方法', self)
def __new__(cls):
print('这是cls的ID', id(cls))
print('这是new方法',object.__new__(cls))
return object.__new__(cls)
A()
print('这是类A的ID', id(A))
'''
这是cls的ID 42010392
这是new方法 <__main__.A object at 0x7f65d7093a58>
这是 init 方法 <__main__.A object at 0x7f65d7093a58>(init方法中的self和new方法返回值地址一样说明返回值是对象)
这是类A的ID 42010392
(cls和类ID一样,说明指向同一个类,也就是cls就是创建的实例类)
'''
8. 简述with方法打开处理文件帮我们做了什么?
f = open("./1.txt", "wb")
try:
f.write("hello world")
except:
pass
finally:
f.close() # 生成一个1.txt文件
'''
打开文件在进行读写的时候可能会出现一些异常状况,如果按照常规的f.open
写法,我们需要try,except,finally,做异常判断,并且文件最终不管遇到什么情况,
都要执行finally f.close()关闭文件,with方法帮我们实现了finally中f.close
'''
with open( '/path/to/file', 'r' ) as f: # with的作用就是调用close()方法
print( f.read() )
'''
调用read()会一次性读取文件的全部内容,如果文件有10G,内存就爆了。
要保险起见,可以反复调用read(size)方法,每次最多读取size个字节的内容。例如,read(1024) 每次读取1024个字节的数据内容
调用readline()可以每次读取一行内容,调用readlines()一次读取所有内容并按行返回list。因此,要根据需要决定怎么调用。
如果文件很小,read()一次性读取最方便;如果不能确定文件大小,反复调用read(size)比较保险;如果是配置文件,调用readlines()最方便:
'''
9. 列表[1,2,3,4,5],请使用map()函数输出[1,4,9,16,25],并使用列表推导式提取出大于10的数,最终输出[16,25]
map()函数第一个参数是fun,第二个参数一般是list,第三个参数可以写list,也可以不写,根据需求
list = [1, 2, 3, 4, 5]
def fn(x):
return x**2
res = map(fn, list)
print(res) # <map object at 0x7f776605ffd0>
res = [i for i in res if i > 10]
print(res) # [16, 25]
10. python中生成随机整数、随机小数、0~1之间小数方法
import numpy
import random
# print(numpy.random.randn(5))
result = random.randint(10, 20)
result1 = numpy.random.randn(5)
result2 = random.random()
print(result) # 12 正整数
print(result1) # [0.81075497 0.78092836 0.06221569 0.51125404 0.91506187] 五个随机小数
print(result2) # 0.4374961761162436 0~1之间随机小数
11.
题目: <div class="nam">中国</div>
,用正则匹配出标签里面的内容(“中国”),其中class的类名是不确定的
import re
str = '<div class="nam">中国</div>'
res = re.findall(r'<div class=".*">(.*?)</div>', str)
print(res) # ['中国']
'''
.代表可有可无
*代表任意字符
(.*?)提取文本
'''
12. 数据表student有id,name,score,city字段,其中name中的名字可有重复,需要消除重复行,请写sql语句
select distinct name from student;
13. s = "ajldjlajfdljfddd",去重并从小到大排序输出"adfjl"
方法:set去重,去重转成list,利用sort方法排序,reeverse=False是从小到大排
list是不变数据类型,是s.sort时候没有返回值,所以注释的代码写法不正确
s = "ajldjlajfdljfddd"
s = set(s)
s = list(s)
s.sort(reverse=False)
# s = s.sort(reverse=False)
res = "".join(s)
print(res) # adfjl
14. 用lambda函数实现两个数相乘
sum = lambda a,b:a*b
print(sum(5,4)) # 20