基础知识
解释型语言VS编译型语言
解释型语言:
编译型语言: 执行程序都需要一边转换一边执行,用到哪些源代码就将哪些源代码转换成机器码,因为每次执行程序都需要重新转换源代码,所以解释型语言的执行效率天生就低于编译型语言。
跨平台:
GIL(Global Interpreter Lock) 是python的全局解释器锁,同一进程中假如有多个线程运行,一个线程在运行python程序的时候会霸占python解释器(加了一把锁即GIL),使该进程内的其他线程无法运行,等该线程运行完后其他线程才能运行。如果线程运行过程中遇到耗时操作,则解释器锁解开,使其他线程运行。所以在多线程中,线程的运行仍是有先后顺序的,并不是同时进行。
多进程中因为每个进程都能被系统分配资源,相当于每个进程有了一个python解释器,所以多进程可以实现多个进程的同时运行,缺点是进程系统资源开销大。
last_dict.update(new_dict)
- Python如何实现列表去重?
实现方式:先转为集合,再转为列表,代码如下:
>>> list_a=["aaa","bbb","aaa",11,22,33,33]
>>> set_a=set(list_a)
>>> print(set_a)
{33, 11, 22, 'aaa', 'bbb'}
>>> list_b=list(set_a)
>>> print(list_b)
[33, 11, 22, 'aaa', 'bbb']
-
Python的内置数据类型有哪些? 答案:整形(int)、字符型(string)、布尔型(Boolean)、列表(list)、元组(tuple)、字典(dictionary); -
简述Python面向对象中__new__和__init__区别? -
简述Python中with方法打开处理文件帮我们做了什么? 答案:打开文件在进行读写操作时可能会出现一些异常状况,如果按照常规的f.open写法,需要try…except…finally,做异常判断,并且最终都要执行finally f.close()关闭文件,with方法内部实现了finally中f.close方法; -
python中断言方法运行结果说明? 答案:逻辑中断言成功则执行后面逻辑,否则程序报错; -
列出python中可变数据类型和不可变数据类型,并简述原理?
答案: 不可变数据类型:数值型、字符串型string和元组tuple; 不允许变量的值发生变化,如果改变了变量的值,则相当于是新建了一个对象,而对于相同的值的对象,在内存中则只有一个对象(一个地址),如下图用id()方法可以打印对象的id,判断是否为同一个对象;
可变数据类型:列表list和字典dict;
允许变量的值发生变化,即如果对变量进行append、+=等这种操作后,只是改变了变量的值,而不会新建一个对象,变量引用的对象的地址也不会变化,不过对于相同的值的不同对象,在内存中则会存在不同的对象,即每个对象都有自己的地址,相当于内存中对于同值的对象保存了多份,这里不存在引用计数,是实实在在的对象。
- python实现 str_a = “ajldjlajfdljfddd”,去重并从小到大排序输出"adfjl"?
实现代码如下:
>>> str_a = "ajldjlajfdljfddd"
>>> list_a=list(set(str_a))
>>> list_a.sort()
>>> str_b="".join(list_a)
>>> str_b
说明:list.sort() 函数没有返回值,所以不能直接将其赋值给另外一个变量;
- Python的 里 用lambda函数实现两个数相乘?
>>>
>>> fun_a=lambda a,b:a*b
>>> print(fun_a(4,5))
20
- 字典 dict_a={“name”:“zs”,“age”:18,“city”:“深圳”,“tel”:“1362626627”} 根据键从小到大排序?
方式A:取出键值,排序后赋值给新的字典;
>>>
>>> dict_a={"name":"zs","age":18,"city":"深圳","tel":"1362626627"}
>>> dict_new={}
>>> list_a=list(dict.keys())
>>> list_a.sort(reverse=False)
>>> for x in list_b:
... dict_new[x]=dict[x]
...
>>> dict_new
{'age': 18, 'city': '深圳', 'name': 'zs', 'tel': '1362626627'}
方式B:使用内置函数排序生成新的列表
>>> dict_a={"name":"zs","age":18,"city":"深圳","tel":"1362626627"}
>>> dict_b={}
>>> list_b=sorted(dict_a.items(),key=lambda i:i[0],reverse=False)
>>> list_b
[('age', 18), ('city', '深圳'), ('name', 'zs'), ('tel', '1362626627')]
>>>
>>> for y in list_b:
... dict_b[y[0]]=y[0]
...
>>>
>>> dict_b
{'age': 18, 'city': '深圳', 'name': 'zs', 'tel': '1362626627'}
>>>
-
字符串a = “not 404 found 张三 99 深圳”,每个词中间是空格,用正则过滤掉英文和数字,最终输出"张三 深圳"? -
列表推导式求列表所有奇数并构造新列表,list_a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]? 实现代码:
>>>
>>> list_a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> list_b= [x for x in list_a if x%2==1]
>>> list_b
[1, 3, 5, 7, 9]
>>>
- 两个列表[1,5,7,9]和[2,2,6,8]合并为[1,2,2,3,6,7,8,9]?
实现代码:
>>> list_a=[1,5,7,9]
>>> list_b=[2,2,6,8]
>>> list_a.extend(list_b)
>>> list_a
[1, 5, 7, 9, 2, 2, 6, 8]
>>> list_a.sort()
>>> list_a
[1, 2, 2, 5, 6, 7, 8, 9]
>>>
- [[1,2],[3,4],[5,6]]一行代码展开该列表,得出[1,2,3,4,5,6]?
列表推导式实现:
>>>
>>> list_1=[[1,2],[3,4],[5,6]]
>>> list_2=[j for i in list_1 for j in i]
>>> list_2
[1, 2, 3, 4, 5, 6]
>>>
-
x=“abc”,y=“def”,z=[“d”,“e”,“f”],分别求出x.join(y)和x.join(z)返回的结果? 代码实现: -
举例说明异常模块中try except else finally的相关意义 答案: try…except…else没有捕获到异常,执行else语句; try…except…finally不管是否捕获到异常,都执行finally语句; -
python中交换两个数值? 代码实现:
>>>
>>> num_1,num_2=11,22
>>> print(num_1,num_2)
11 22
>>> num_1,num_2=num_2,num_1
>>> print(num_1,num_2)
22 11
>>>
在这里插入代码片
- [1,2,3]+[4,5,6]的结果是多少?
结果解释:两个列表相加等同于 列表的 extend;
>>>
>>> list_a=[1,2,3,4]
>>> list_b=[5,6,7]
>>> list_c=list_a+list_b
>>> list_c
[1, 2, 3, 4, 5, 6, 7]
>>>
- list=[2,3,5,4,9,6],从小到大排序,不许用sort,输出[2,3,4,5,6,9]?
实现逻辑:递归将原列表最小值赋值给新列表;
list_aa=[22,11,33,55,22,77,99,88]
list_ll=[]
def sortList(var:list):
if len(var)>0:
min_n=min(var)
list_ll.append(min_n)
var.remove(min_n)
sortList(var)
return list_ll
print(sortList(list_aa))
在这里插入代码片
- python中什么元素为假?
答案:0、空字符串、空列表、空元组、空字典、空集合、None、False; 强调:此处 None 和 False 首字符必须大写;
>>>
>>> any((0,"",None,False,[],(),{},set()))
False
>>>
答案:一般使用 copy.copy()或 copy.deepcopy()
-
Python中的module和package是什么? 答案:module是构造程序的方式,每个python程序文件都是一个模块,可以导入其他模块的对象或属性; pachage是文件夹,可以包含子package或者其他module; -
Python中如何跨模块共享全局变量? 实现方式:可以定义一个包含全局变量的新的模块,在每个别的模块内导入该模块 -
解释如何在Python中删除文件? 答案:导入os模块,使用命令os.remove(filename)或os.unlink(filename); -
计算机中“位”、“比特”、“字节”、“字”的关系? 解释: 位(bit):音译为“比特”,是计算机内部存储数据的最小单位;一般用 “b”表示;
字节(byte),是计算机中数据处理的基本单位。计算机中以字节为单位存储和解释信息,规定一个字节由八个二进制位构成,所以1byte = 8bit。字节一般用大写B表示,也可以表示成1B = 8bit;通常1个字节可以存入一个ASCII码,2个字节可以存放一个汉字国标码
字(word),计算机进行数据处理时,一次存取、加工和传送的数据长度称为字。一个字通常由一个或多个(一般为字节的整数位)字节构成
字长,计算机每个字所包含的位数称为字长。字长是指它一次可处理的二进制数字的数目。所以字长是衡量计算机性能的一个重要因素。
|