Python 基礎面試題寶庫

本文整理了100道Python面试题目,涵盖基础、数据结构、标准库、语法特性等多个方面,帮助考生全面了解Python知识,提升面试竞争力。内容包括Python的GIL、面向对象特性、数据类型、字符串处理、正则表达式、数据库操作、优化方法等。
摘要由CSDN通过智能技术生成

100道常見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()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值