100道常見python面試題
文章目录
- 前言
- 一:一行代码实现1--100之和
- 二、如何在一个函数内部修改全局变量
- 三、列出5个python标准库
- 四、字典如何删除键和合并两个字典
- 五、谈下python的GIL
- 六、Python实现列表去重的方法:
- 七、fun(*args,**kwargs)中的*args,**kwargs什么意思?
- 八、python2和python3的range(100)的区别
- 九、一句话解释什么样的语言能够用装饰器?
- 十、Python内建数据类型有哪些
- 十一、简述面向对象中__new__和__init__区别
- 十二、简述with方法打开处理文件帮我我们做了什么?
- 十三、列表[1,2,3,4,5],请使用map()函数输出[1,4,9,16,25],并使用列表推导式提取出大于10的数,最终输出[16,25]
- 十四、python中生成随机整数、随机小数、0--1之间小数方法
- 十五、避免转义给字符串加哪个字母表示原始字符串?
- 十六、Python中断言方法举例
- 十七、div class="nam"中国div,用正则匹配出标签里面的内容(“中国”),其中class的类名是不确定的:
- 十八、数据表student有id,name,score,city字段,其中name中的名字可有重复,需要消除重复行,请写sql语句
- 十九、Linux常用命令
- 二十、列出python中可变数据类型和不可变数据类型,并简述原理
- 二十一、s = "ajldjlajfdljfddd",去重并从小到大排序输出"adfjl"
- 二十二、用lambda函数实现两个数相乘
- 二十三、字典根据键从小到大排序
- 二十四、利用collections库的Counter方法统计字符串每个单词出现的次数"kjalfj;ldsjafl;hdsllfdhg;lahfbl;hl;ahlf;h"
- 二十五、字符串a = "not 404 found 张三 99 深圳",每个词中间是空格,用正则过滤掉英文和数字,最终输出"张三 深圳"
- 二十六、filter方法求出列表所有奇数并构造新列表,a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
- 二十七、列表推导式求列表所有奇数并构造新列表,a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
- 二十八、正则re.complie作用
- 二十九、a=(1,)b=(1),c=("1") 分别是什么类型的数据?
- 三十、两个列表[1,5,7,9]和[2,2,6,8]合并为[1,2,2,3,6,7,8,9]
- 三十一、用python删除文件和用linux命令删除文件方法
- 三十二、log日志中,我们需要用时间戳记录error,warning等的发生时间,请用datetime模块打印当前时间戳 “2018-04-01 11:38:54”
- 三十三、数据库优化查询方法
- 三十四、请列出你会的任意一种统计图(条形图、折线图等)绘制的开源库,第三方也行
- 三十五、写一段自定义异常代码
- 三十六、正则表达式匹配中,(.*)和(.*?)匹配区别?
- 三十七、简述Django的orm
- 三十八、[[1,2],[3,4],[5,6]]一行代码展开该列表,得出[1,2,3,4,5,6]:
- 三十九、x="abc",y="def",z=["d","e","f"],分别求出x.join(y)和x.join(z)返回的结果
- 三十九、举例说明异常模块中try except else finally的相关意义
- 四十、Python中交换两个数值
- 四十一、举例说明zip()函数用法
- 四十二、a="张明 98分",用re.sub,将98替换为100
- 四十三、写5条常用sql语句
- 四十四、a="hello"和b="你好"编码成bytes类型
- 四十五、[1,2,3]+[4,5,6]的结果是多少?
- 四十六、提高python运行效率的方法
- 四十七、简述mysql和redis区别
- 四十八、遇到bug如何处理
- 四十九、正则匹配,匹配日期2024-01-8
- 五十、list=[2,3,5,4,9,6],从小到大排序,不许用sort,输出[2,3,4,5,6,9]
- 五十一、写一个单列模式
- 五十二、list=[2,3,5,4,9,6],从小到大排序,不许用sort,输出[2,3,4,5,6,9]
- 五十三、保留两位小数
- 五十四、保留两位小数
- 五十五、列出常见的状态码和意义
- 五十六、分别从前端、后端、数据库阐述web项目的性能优化
- 五十七、使用pop和del删除字典中的"name"字段,dic={"name":"zs","age":18}
- 五十八、(a,b,c,d,e),(1,2,3,4,5)计算代码运行结果,[("a",1),("b",2),("c",3),("d",4),("e",5)]
- 五十九、简述同源策略
- 六十、简述cookie和session的区别
- 六十一、简述多线程、多进程:
- 六十二、any() 與all():
- 六十三、Python的異常報錯:
- 六十四、
前言
例如:python基礎面試題
一:一行代码实现1–100之和
代码如下(示例):
---------------------------------------Horst--------------------------------------
FIRST:
sum(range(1,101))
Second:
sum=0
for i in range(1,101):
sum+=i
thred:
sum = sum(i for i in range(1, 101))
print(sum)
二、如何在一个函数内部修改全局变量
代码如下(示例):
---------------------------------------Horst--------------------------------------
First:
a=0
def demo():
global a
a=3
print(a)
demo()
三、列出5个python标准库
os 模塊:提供操作操作系統的功能,例如讀寫文件、創建目錄、執行命令等。
sys 模塊:提供訪問系統信息的功能,例如獲取當前工作目錄、查看環境變量等。
math 模塊:提供數學計算的功能,例如求平方根、計算圓周率等。
random 模塊:提供生成隨機數的功能,例如生成隨機整數、生成隨機字符串等。
time 模塊:提供獲取時間和日期信息的功能,例如獲取當前時間、計算兩個時間之間的差值等。
---------------------------------------Horst--------------------------------------
import os
import sys
import math
import random
import time
def main():
current_dir = os.getcwd()
system_info = sys.version_info
os_name = system_info.system
# 生成 100 個隨機整數
numbers = []
for i in range(100):
numbers.append(random.randint(1, 100))
# 計算平均值
average = sum(numbers) / len(numbers)
# 計算標準差
variance = 0
for number in numbers:
variance += (number - average) ** 2
standard_deviation = math.sqrt(variance / len(numbers))
# 獲取程序執行時間
start_time = time.time()
# 將結果寫入文件
filename = os.path.join(current_dir, "results.txt")
with open(filename, "w") as f:
f.write("平均值:" + str(average) + "\n")
f.write("標準差:" + str(standard_deviation) + "\n")
f.write("程序執行時間:" + str(time.time() - start_time) + "\n")
f.write("系統信息:\n")
f.write("操作系統:" + os_name + "\n")
if __name__ == "__main__":
main()
四、字典如何删除键和合并两个字典
代码如下(示例):
---------------------------------------Horst--------------------------------------
>>>one:使用 del方法
dict={'A':1,'B':2}
del dict['A']
刪除後的結果result:dict={'B':2}
>>>two:使用 pop() 方法刪除鍵並返回對應的值
dict = {
'a': 1, 'b': 2, 'c': 3}
value = dict.pop('a')
result:{
'b': 2, 'c': 3} pop 彈出刪除後會返回對應的value
-------更新合併字典元素--------------------------------
>>>one:使用update方法:
dict2=['C':4]
dict.update['A':3]
添加新的元素或者合併:dict={'B':2,'C':4,'A':3}
>>>two:工廠函數
dict1={
'a': 1, 'b': 2}
dict2=['C':3,'D':4]
dict = dict(dict1.items() | dict2.items())
添加新的元素或者合併:dict={'a': 1, 'b': 2,'C':3,'D':4}
>>>three:算數運算:+
dict1={
'a': 1, 'b': 2}
dict2=['C':3,'D':4]
dict=dict1+dict2
添加新的元素或者合併:dict={
'a': 1, 'b': 2,'C':3,'D':4}
五、谈下python的GIL
GIL 的作用是為了確保 Python 程序的線程安全。在沒有 GIL 的情況下,如果多個線程同時訪問共享數據,就有可能出現數據混亂的情況。而 GIL 的存在,可以確保同一時間只有一個線程在執行,從而避免了數據混亂
代码如下(示例):
---------------------------------------Horst--------------------------------------
import threading
# 全局变量
counter = 0
# 创建锁
lock = threading.Lock()
# 递增函数,执行一百万次递增操作
def increment():
global counter
for _ in range(1000000):
# 获取锁
lock.acquire()
try:
counter += 1
finally:
# 释放锁
lock.release()
def main():
# 创建两个线程
thread1 = threading.Thread(target=increment)
thread2 = threading.Thread(target=increment)
# 启动线程
thread1.start()
thread2.start()
# 等待线程结束
thread1.join()
thread2.join()
print("Counter:", counter)
if __name__ == "__main__":
main()
>>>counter:1669327(結果隨機性的)兩個線程會同時訪問
六、Python实现列表去重的方法:
将列表转换为集合,再将集合转换回列表即可去重。由于集合不能包含重复元素,因此转换后的列表就是去重后的结果。
代码如下(示例):
---------------------------------------Horst--------------------------------------
>>>one:遍歷刪除,添加新的list
a=[1,2,2,3,4,5,5]
b=[]
for i in a:
count=0
if i in a:
count+=1
if count=1
b=b.append(i)
else:
pass
>>>使用 set 函数 ,集合是沒有重複元素的
lst = [1, 2, 3, 2, 1, 4, 5, 4, 3]
lst = list(set(lst))
>>>遍歷:
lst=[1, 2, 3, 2, 1, 4, 5, 4, 3]
new_lst = []
[new_lst.append(i) for i in lst if i not in new_lst]
>>>使用字典和 fromkeys 方法
使用字典的 fromkeys 方法可以创建一个新字典,并将原始列表中的每个元素作为字典的键。
由于字典的键不能重复,因此相同的元素只会在字典中出现一次。最后,
通过字典的 keys 方法获取去重后的列表。
lst = [1, 2, 3, 2, 1, 4, 5, 4, 3]
new_lst = list(dict.fromkeys(lst).keys())
print(new_lst) # 输出 [1, 2, 3, 4, 5]
>>>numpy的unique的函數
import numpy as np
lst = [1, 2, 3, 2, 1, 4, 5, 4, 3]
lst = np.unique(lst) #此刻lst是一維數組
lst=lst.tolist() #通過tolist方法轉換成list
print(lst) # 输出 [1 2 3 4 5]
七、fun(args,**kwargs)中的args,**kwargs什么意思?
*args 用于传递不定数量的位置参数(Positional Arguments)。当你不确定需要传递多少个位置参数时,可以使用 *args。在函数内部,*args 被视为一个元组(tuple),其中包含了传递给函数的所有位置参数。
**kwargs 用于传递不定数量的关键字参数(Keyword Arguments)。类似地,当你不确定需要传递多少个关键字参数时,可以使用 **kwargs。在函数内部,**kwargs 被视为一个字典(dictionary),其中包含了传递给函数的所有关键字参数及其对应的值。
代码如下(示例):
---------------------------------------Horst--------------------------------------
def fun(*args, **kwargs):
print(args)
print(kwargs)
fun(1, 2, 3, name="Bard", age=18)
result:(1, 2, 3)
{
'name': 'Bard', 'age': 18}
八、python2和python3的range(100)的区别
python2返回列表,python3返回迭代器,节约内存:
由于 Python3 中的 range(100) 返回一个迭代器,因此在内存占用方面比 Python2 中的 range(100) 更有优势。这是因为迭代器只会在需要时才生成下一个元素,而列表会在创建时就将所有元素都生成出来。
在性能方面,Python3 中的 range(100) 也比 Python2 中的 range(100) 更有优势。这是因为迭代器的惰性加载可以避免一次性生成大量元素,从而提高性能。
九、一句话解释什么样的语言能够用装饰器?
能够在运行时动态修改函数行为的语言能够用装饰器。
装饰器是 Python 语言的一种独特的特性,它可以用来动态修改函数的行为。装饰器的实现依赖于 Python 的闭包特性。
因此,能够在运行时动态修改函数行为的语言,就可以使用装饰器。例如,Python、JavaScript、Ruby 等语言都支持装饰器。
---------------------------------------Horst--------------------------------------
import time
def count_time_args(msg=None):
def count_time(func):
def wrapper(*args, **kwargs):
t1 = time.time()
func(*args, **kwargs)
print(f"[{msg}]执行时间为:", time.time() - t1)
return wrapper
return count_time
@count_time_args(msg="baiyu")
def fun_one():
time.sleep(1)
@count_time_args(msg="zhh")
def fun_two()