python面试题01

基础题

写一个带参数的闭包

from functools import wraps
def outer(n):
    @wraps(n)
    def wrapper(func):
        def inner(*args, **kwargs):
            print("inner")
            print(n)
            return func(*args, **kwargs)

        return inner

    return wrapper
@outer("123")
def func():
    print("func")
func()

写出结果

def func():
    return [lambda x: x * i for i in range(4)]


res = [j(2) for j in func()]
print(res)

def func(a,b=[])这种写法有什么问题吗

def func():
    return [lambda x: x * i for i in range(4)]


res = [j(2) for j in func()]
print(res)

写出结果

def func(a, b=[]):
    b.append(a)
    return b
v1 = func(1)  # [1]
v2 = func(2, [10, 20])  # [10, 20, 2]
v3 = func(3)  # [1, 3]
print(v1, v2, v3)

补零

ip = "192.168.10.1"
for s in ip.split("."):
    print(s.zfill(8))

取整

import math
i = 5.5
print(math.floor(i))  # 地板取整
print(math.ceil(i))  # 天花板取整

用两个队列实现一个栈

# 用两个队列实现一个栈
from queue import Queue


class Q:
    def __init__(self):
        self.master_queue = Queue()
        self.sub_queue = Queue()

    def push(self, val):
        self.master_queue.put(val)
        return self.master_queue

    def pop(self):
        if self.master_queue.qsize() == 0:
            return None
        while True:
            if self.master_queue.qsize() == 1:
                value = self.master_queue.get()
                break
            self.sub_queue.put(self.master_queue.get())
        self.master_queue, self.sub_queue = self.sub_queue, self.master_queue
        return value


if __name__ == '__main__':
    q = Q()
    q.push(1)
    q.push(2)
    q.push(3)
    print(q.pop())
    print(q.pop())
    print(q.pop())
    print(q.pop())

实现一个链表

# 单链表
class Node:
    def __init__(self, value, next_node):
        self.value = value
        self.next_node = next_node


node = Node("head", None)
next_node = node

for i in range(3):
    new_node = Node("%s" % i, None)
    next_node.next_node = new_node
    next_node = new_node

print(node.value)
print(node.next_node.value)
print(node.next_node.next_node.value)
print(node.next_node.next_node.next_node.value)

单链表(实现逆转)

# 单链表(实现逆转)
class Node:
    def __init__(self, value, next_node, prev_node):
        self.value = value
        self.next_node = next_node
        self.prev_node = prev_node


node = Node("head", None, None)
next_node = node

for i in range(3):
    new_node = Node("%s" % i, None, next_node)
    next_node.next_node = new_node
    next_node = new_node

print(node.value)
print(node.next_node.value)
print(node.next_node.next_node.value)
print(node.next_node.next_node.next_node.value)
print(node.next_node.next_node.next_node.prev_node.value)
print(node.next_node.next_node.next_node.prev_node.prev_node.value)
print(node.next_node.next_node.next_node.prev_node.prev_node.prev_node.value)

双向循环链表

# 双向循环链表
class Node:
    def __init__(self, value, next_node, prev_node):
        self.value = value
        self.next_node = next_node
        self.prev_node = prev_node


node = Node("head", None, None)
next_node = node

for i in range(3):
    new_node = Node("%s" % i, None, next_node)
    next_node.next_node = new_node
    next_node = new_node
next_node.next_node = node
node.prev_node = next_node

print(node.value)
print(node.next_node.value)
print(node.next_node.next_node.value)
print(node.next_node.next_node.next_node.value)
print(node.next_node.next_node.next_node.next_node.value)
print(node.next_node.next_node.next_node.next_node.next_node.value)
print(node.next_node.next_node.next_node.next_node.next_node.next_node.value)
print(node.next_node.next_node.next_node.next_node.next_node.next_node.next_node.value)
posted @   hai_sir  阅读(10)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示