python常见问题

Python

  • python 没有多态,而是鸭子类型
  • 多继承,没有接口,可通过语法糖实现接口的作用
  • lambda中只能有一句
  • "/"表示之前的参数是必须是位置参数,”**“表示是后面的必须是关键字参数

Python 多线程是伪多线程

  • 多线程子线程会随着主线程结束而中断,因此一般在主线程中调用thread.join()

  • 线程方法

    • import threading
      t = thread.Thread()
      t.start();
      # 没有返回值,若需要返回值可继承该类,在类中保存计算结果,用以获取
      # 或者传入全局结果参数,
    • import thread # threading 封装了thread
    • import threadpool # 三方库

GIL锁:全局解释器锁,Cython

  • cpu计算时线程需要获取GIL锁,只有一个,因此多核cpu也只有一个线程可以执行,保证线程安全
  • 执行IO操作时会释放锁,因此对于IO密集型任务,可以用多线程,计算密集型,不能发挥多核,多线程作用。
  • 引用计数法+循环检测:GC

面向对象

  • 类中的变量是静态变量,方法通过@staticmethod修饰,是静态,self.xxx=yy 实例变量

WWW

import urllib.request
if __name__ == '__main__':
    data = urllib.parse.urlencode({'wd':'python'}).encode("utf8")
    request = urllib.request.urlopen("http://baidu.com",data=data)
    with request:
        msg,hd = request.read(),request.info()
        print(msg)
        print(hd)

SMTP

# smtplib email 配合使用
# 或是unix系统中的sendmail命令

SOCKET

  • # 旧版本异步通信
    import asyncore
    class HTTPClient(asyncore.dispatcher):
        def __init__(self,host):
            #  初始化父类
            asyncore.dispatcher.__init__(self)
            # 创建一个socket对象
            self.create_socket()
            # 连接服务器端
            self.connect((host,80))
        #发送优化
            self.buffer = b'GET /HTTP/1.1\r\nHost: www.baidu.com\r\n\r\n'
        def handle_connect(self):
            print('服务器连接成功')
        def handle_close(self):
            print('服务器连接断开')
            self.close()
        def readable(self):
            return True
        def handle_read(self):
            # 指定一次读取1024个字节,如果一次没有读完的话,那么事件循环会分多次把内容读完为止
            print(self.recv(1024).decode())
        def writable(self):
            return (len(self.buffer)>0)
        def handle_write(self):
            sent = self.send(self.buffer)
            self.buffer = self.buffer[sent:]
    if __name__ == '__main__':
        HTTPClient('www.baidu.com')
        asyncore.loop()
     import asyncore
    import socket
    
    class EchoHandler(asyncore.dispatcher_with_send):
        def handle_read(self):
            data = self.recv(8192)
            if data:
                self.send("hello".encode('utf8')+data)
    class EchoServer(asyncore.dispatcher):
        def __init__(self, host, port):
            asyncore.dispatcher.__init__(self)
            self.create_socket(socket.AF_INET, socket.SOCK_STREAM)
            self.set_reuse_addr()
            self.bind((host, port))
            self.listen(5)
        def handle_accept(self):
            pair = self.accept()
            if pair is not None:
                sock, addr = pair
                print('Incoming connection from %s' % repr(addr))
                handler = EchoHandler(sock)
    if __name__ == '__main__':
        server = EchoServer('10.101.33.82', 8080)
        asyncore.loop()
  • import asyncio
    async def handle_echo(reader, writer):
        while True:
            data = await reader.read(100)
            message = data.decode("gbk")
            addr = writer.get_extra_info('peername')
            print(f"Received {message!r} from {addr!r}")
            if message == '-1':
                writer.write("将会结束!".encode("gbk"))
            else:
                writer.write(message.encode("gbk"))
            await writer.drain()
    
            if message == '-1':
                writer.close()
                break
    async def main():
        server = await asyncio.start_server(
            handle_echo, '10.101.33.82', 8080)
    
        addr = server.sockets[0].getsockname()
        print(f'Serving on {addr}')
    
        async with server:
            await server.serve_forever()
    
    asyncio.run(main())

编码

# 编码,utf8
#3字节 1110xxxx 10xxxxxx 10xxxxxx   中文:"中"
# utf8--> 4e2d -》0100 1110 0010 1101
b'\xe4\xb8\xad'.decode('utf8') # “中“
# 与上边组 1110 0100 10111000 10101101 -》就是 e4b8ad

b'xxxxx' xxxx 应该是字节数,例如ascii中的,或者是用16进制表示的汉字

b'a' == b'\x61'

b'\e4\xb8\xad' 按照utf8解码后就是‘中’

图形界面

Python3 Tkinter Qt

wxwidgets,Kivy,Fltk

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值