python面试题(基础)(六)

本文讨论了Python中的iterables与iterators的区别,猴子补丁的概念,以及一个简单的socket编程示例。还涉及了__name__的作用、线程与进程启动、模块导入控制和面向对象的只读属性。最后提到了静态代码分析工具如pychecker和pylint。
摘要由CSDN通过智能技术生成

面试题

  1. iterables 和iterators之间的区别
  • iterable可迭代是一个对象,可以对其进行迭代。在可迭代的情况下,整个数据一次存储在内存当中
  • iterators迭代器是用来在对象上迭代的对象。他旨在被调用时初始化或存储在内存中。迭代器使用next从对象中抽取出来
  1. 什么是猴子补丁
  • 是指在运行时动态的修改类或者模块
  1. 写一个简单的python socket编程
# 服务端
import socket

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind(("localhost", 8020))

sock.listen(5)

while True:
    conn, addr = sock.accept()
    try:
        conn.settimeout(5)
        buff = conn.recv(1024)
        if buff.decode("utf-8") == "1":
            conn.send("hello, client...".encode("utf-8"))
        else: 
            conn.send("please ggo out".encode("utf-8"))
    except sock.timeout:
        print("error")
    finally:
        conn.close()

# 客户端
import socket
import time 

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(("localhost", 8020))
time.sleep(1)
sock.send('1'.encode("utf-8"))
print(sock.recv(1024).decode("utf-8"))
sock.close()
  1. 一个包里有三个模块,mod1.py, mod2.py mod3.py 但使用了from demopack import * 导入模块,如何保证只有mod1,mod3被导入了
# 在__init__.py文件中添加
all = ['mod1','mod2']
  1. 在python中__name__的作用是什么
    __name__是一个唯一的变量。由于python没有公开main()函数,所以,当他的解释器要运行脚本的时候,他首先执行缩进到第0行的代码,为了查看main()是否被调用,我们可以在if子句中使用__name__变量与main值进行比较
  2. 在python中启动一个线程,启动一个进程
# 启动一个线程
import threading

def start_thread(name):
    print(f"{name} start thread ...")

if __name__ == "__main__":
    t = threading.Thread(target=start_thread, args=("Guo",))
    t.start()
    t.join()
    print('thread end ...')
# 启动一个进程
from multiprocessing import Process

def start_process(name):
    print(f"{name} start process...")

if __name__ == "__main__":
    p = Process(target=start_process, args=("guo", ))
    p.start()
    p.join()
    print("process end...")
  1. python文件中if name==“main”: 为什么要有这么一行
    在python中 if __name__ == "__main__"这行代码检查是否当前运行的脚本作为主程序运行,而不是作为模块被另外一个脚本名导入,当python脚本直接运行是,python解释器会把特殊变量__name__设置为__main__,如果这个文件被其他文件作为模块导入,__name__的值将会变成该文件的名字。因此,通过这个条件判断,你可以控制某些代码只在该脚本作为主要程序运行时执行,而在被导入时不执行,这种用法通常用于脚本和程序的主入口,允许代码技能作为可执行程序运行,也能作为模块被其他程序导入和服用,增加的代码的灵活性和可能性
  2. 如果mysql中的字段为long,python3中用什么类型映射
    python3中没有long,只有无限精度的int
  3. 面向对象中怎么实现只读属性?
  • 在python中 以双下划线开头的属性或者方法都被视为私有成员,这意味着他们被意图限制在类的内部使用,不能直接从类的外部访问,不过,python并没有强制实施这种限制访问,而是通过一个名称改写的机制来实现这一点
class MyCls:
    __age = 10

    @property
    def age(self):
        return self.__age
    

a = MyCls()
print(a.age)
  1. 有没有一个工具可以帮助查找python的bug和静态的代码分析
  • pychecker
  • pylink
  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值