python面试基础问题

Python中常见的数据结构包括:

列表 (list): 有序、可变的集合,例如 my_list = [1, 2, 3]。

元组 (tuple): 有序、不可变的集合,例如 my_tuple = (1, 2, 3)。

字典 (dict): 无序的键值对集合,例如 my_dict = {'a': 1, 'b': 2}。

集合 (set): 无序、不重复的元素集合,例如 my_set = {1, 2, 3}。

闭包

1. 闭包的定义

闭包是由函数及其相关的引用环境组合而成的一个封装体。它不仅包括函数本身,还包括该函数在创建时所捕获的周围状态(即自由变量)。简而言之,闭包让这些自由变量在函数外部被执行时仍然可用。

2. 如何形成闭包

闭包的形成依赖于两个关键性质:

函数作为一等公民:在Python中,函数可以被赋值给变量、作为参数传递给其他函数,以及作为其他函数的返回值。

函数嵌套:Python支持在一个函数内部定义另一个函数。

当满足以上条件,并且内部函数引用了外部函数的变量时,就形成了一个闭包。

3. 闭包的工作原理

闭包的工作原理基于作用域和命名空间的概念。当内部函数被调用时,尽管外部函数的执行已经结束,但内部函数依然能够访问外部函数的变量。这是因为闭包使得这些变量的状态得以保留,即便是在外部函数执行完成后。

4. 使用场景

闭包在很多场景中非常有用,例如:

数据隐藏和封装:通过闭包,可以创建只有通过函数访问的私有变量。

延迟计算:闭包可以延迟执行某些计算,直到需要结果的时候。

回调函数和装饰器:闭包广泛应用于装饰器和回调函数中,增加功能而不改变原有函数的代码。

代码:

def outer_function(msg):

    message = msg

    def inner_function():

        print(message)

    return inner_function

my_closure = outer_function('Hello, world!')

my_closure()

并发

1.程序提速的方法

单线程串行:未利用任何并发技巧的编程方式,CPU需要等待IO,效率较低。(不加改造的naive的程序)

多线程并发:在某个线程进行IO时,CPU可以调度另一个线程进行计算,提高了CPU利用率。实际上仍然是一个CPU核心进行分时调度。(threading)

多CPU并行:需要多核CPU,可以并行地处理多个线程,充分利用现代CPU的多核性能。(multiprocessing)

多机器并行:分布式计算,多机器并行。(hadoop/hive/spark)

2.Python 对并发编程的支持

多线程:threading,使得某个线程的IO操作和另一个线程的CPU计算可以同时进行,避免CPU等待IO,提高CPU利用率。

多进程:multiprocessing,利用现代CPU多核的特点,真正地并行执行任务。

异步IO:asyncio,在单线程利用CPU和IO同时执行的原理,实现函数的异步执行。

使用Lock对临界区资源进行加锁,避免数据竞争。

使用Queue实现不同线程/进程之间的数据通信,实现生产者/消费者模式。

使用线程池Pool/进程池Pool,简化线程/进程的任务提交、等待结束、获取结果。

使用subprocess启动外部程序的进程,并进行输入输出的交互。

冒泡排序

插入排序

选择排序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值