1.一行代码实现 1--100之和
sum(range(0,101))
2.如何在一个函数内部修改全局变量
c=5201314
def s_():
global c
c=500
s_()
print(c)
3.谈下python的GIL
GIL 是python的全局解释器锁,同一进程中假如有多个线程运行,一个线程在运行python程序的时候会霸占python解释器(加了一把锁即GIL),使该进程内的其他线程无法运行,等该线程运行完后其他线程才能运行。如果线程运行过程中遇到耗时操作,则解释器锁解开,使其他线程运行。所以在多线程中,线程的运行仍是有先后顺序的,并不是同时进行。
多进程中因为每个进程都能被系统分配资源,相当于每个进程有了一个python解释器,所以多进程可以实现多个进程的同时运行,缺点是进程系统资源开销大
4.python实现列表去重的方法
方法1
a=[12,11,20,12,13,45,45,66,66,11]
b = set(a)#转化为集合
[x for x in b]
方法2
a=[12,11,20,12,13,45,45,66,66,11]
b=[]
for x in a:
if x not in b:
b.append(x)
a=b
5、fun(args,kwargs)中的args,**kwargs什么意思?
当函数的参数不确定时,可以使用args 和kwargs,args 没有key值,**kwargs有key值。
def fun_var_args(farg, *args):
print "arg:", farg
for value in args:
print "another arg:", value
fun_var_args(1, "two", 3) # *args可以当作可容纳多个变量组成的list
result:
arg: 1
another arg: two
another arg: 3
**kwargs:
def fun_var_kwargs(farg, **kwargs):
print "arg:", farg
for key in kwargs:
print "another keyword arg: %s: %s" % (key, kwargs[key])
fun_var_kwargs(farg=1, myarg2="two", myarg3=3) # myarg2和myarg3被视为key, 感觉**kwargs可以当作容纳多个key和value的dictionary
result:
arg: 1
another keyword arg: myarg2: two
another keyword arg: myarg3: 3
6、python2和python3的range(100)的区别
python2返回列表,python3返回迭代器,节约内存
7、一句话解释什么样的语言能够用装饰器?
函数可以作为参数传递的语言,可以使用装饰器
8、python内建数据类型有哪些
整型--int
布尔型--bool
字符串--str
列表--list
元组--tuple
字典--dict
9.简述面向对象中new和init区别
class Bike:
def __init__(self ,newWheelNum,newColor): #会自动调用,可以接受参数
self.newWheelNum = newWheelNum
self.color = newColor
def move(self):
print('车会跑')
BM =Bike(2,'green')
print('车的颜色为:%s'%BM.color)
print('车轮数量为:%d'%BM.newWheelNum)
输出结果:
车的颜色为:green
车轮数量为: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 5833720
这是 new 方法 <__main__.A object at 0x0000000001DAB0B8>
这是init方法 <__main__.A object at 0x0000000001DAB0B8>
这是类A的id 5833720
10、简述with方法打开处理文件帮我我们做了什么?
f = open("./1.txt",'wb')
try:
f.write('hello word')
except:
pass
finally:
f.close()
打开文件在进行读写的时候可能会出现一些异常状况,如果按照常规的f.open
写法,我们需要try,except,finally,做异常判断,并且文件最终不管遇到什么情况,都要执行finally f.close()关闭文件,with方法帮我们实现了finally中f.close
(当然还有其他自定义功能,有兴趣可以研究with方法源码)
11.列表[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)
res =[i for i in res if i >10]
print(res)
输出结果:
[16, 25]
12.python中生成随机整数、随机小数、0--1之间小数方法
随机整数:random.randint(a,b),生成区间内的整数
随机小数:习惯用numpy库,利用np.random.randn(5)生成5个随机小数
0-1随机小数:random.random(),括号中不传参
import random
import numpy as np
result = random.randint(10,20)
res = np.random.randn(5)
ret = random.random()
print("正整数",result)
print("五个随机小数",res)
print("0-1小数",ret)
13、python2和python3区别?列举5个
1、Python3 使用 print 必须要以小括号包裹打印内容,比如 print('hi')
Python2 既可以使用带小括号的方式,也可以使用一个空格来分隔打印内容,比如 print 'hi'
2、python2 range(1,10)返回列表,python3中返回迭代器,节约内存
3、python2中使用ascii编码,python中使用utf-8编码
4、python2中unicode表示字符串序列,str表示字节序列
python3中str表示字符串序列,byte表示字节序列
5、python2中为正常显示中文,引入coding声明,python3中不需要
6、python2中是raw_input()函数,python3中是input()函数