python笔记(bug,模块,闭包 ,多线程, Socket工具)

目录

前言

捕获异常(处理bug)

集成代码

异常的传递

 模块

概念

基本写法

闭包

优缺点 

小结

 进程和线程

 概念

注意点:

小结

基本语法

测试代码

 Socket工具 (客户端和服务端)

 socket概念 

 客户端和服务端

服务端代码实现基本步骤

 测试代码

 客户端代码实现基本步骤

测试代码

结语:


前言

本文依据黑马程序员python教程编写,适合快速了解用法和功能。

捕获异常(处理bug)


当我们的程序遇到了BUG,有两种情况:
①整个程序因为一个BUG停止运行
②对BUG进行提醒,整个程序继续运行


捕获异常的作用在于:提前假设某处会出现异常,做好提前准备,当真的出现异常的时候,可以有后续手段。
 

集成代码

以下代码包含多指定,多个,所有异常的捕获写法 和 else ,finally的用法


try:
    a = 10 / 0
    print(name)

except ZeroDivisionError:#捕获指定的异常
    print("Error: division by zero")
except (NameError,ZeroDivisionError ) as e: #捕获多个异常
    print("Error:", e)
    print("Error: name not defined or division by zero")
except Exception as e:   #捕获所有异常
    print("Error:", e)
    print("Error type:", type(e))

else: #如果没有异常发生,则执行else块中的代码
    print("No error occurred")

finally:  #无论是否有异常,都会执行finally块中的代码
    print("Finally block executed")

异常的传递

下图所展示的就是我们日常报错会提示多行代码有问题的原因。

 当程序出现这种长窜的报错时,我们需要从最底部报错提示开始检查代码问题(个人理解:因为程序安装代码顺序执行的,所以会一直从报错点开始打印一直打印到根源处问题。)

 模块

概念

什么是模块
Python模块(Module),是一个Python文件,以.py结尾.模块能定义函数,类和变量,模块里也能包含可执行的代码.


模块的作用:python中有很多各种不同的模块,每一个模块都可以帮助我
们快速的实现一些功能,

比如:实现和时间相关的功能就可以使用time模块
我们可以认为一个模块就是一个工具包,每一个工具包中都有各种不同的
工具供我们使用进而实现各种不同的功能


大白话:模块就是一个Python文件,里面有类、函数、变量等,我们可以
拿过来用(导入模块去使用)

基本写法

闭包

以下图片的解释。

 inner函数作为参数传递(python的一种写法)

变量fn1,fn2的类型为函数,每次出现都相当于调用 一次内部函数

优缺点 

优点,使用闭包可以让我们得到:
 ·无需定义全局变量即可实现通过函数,持续的访问、修改某个值
 ·闭包使用的变量的所用于在函数内,难以被错误的调用修改


缺点:
·由于内部函数持续引用外部函数的值,所以会导致这一部分内存空间不被释放,一直占用内存
 

小结

 进程和线程

 概念

进程、线程
现代操作系统比如Mac OS X,UNIX,Linux,Windows等,都是支持"多任务”的操作系统。


进程:就是一个程序,运行在系统之上,那么便称之这个程序为一个运行进程,并分配进程D方便系统管理。


线程:线程是归属于进程的,一个进程可以开启多个线程,执行不同的工作,是进程的实际工作最小单位。


进程就好比一家公司,是操作系统对程序进行运行管理的单位
线程就好比公司的员工,进程可以有多个线程(员工),是进程实际的工作者


操作系统中可以运行多个进程,即多任务运行
一个进程内可以运行多个线程,即多线程运行

注意点:


进程之间是内存隔离的,即不同的进程拥有各自的内存空间。这就类似于不同的公司拥有不同的办公场所。
线程之间是内存共享的,线程是属于进程的,一个进程内的多个线程之间是共享这个进程所拥有的内存空间的。
这就好比,公司员工之间是共享公司的办公场所。

小结

1.什么是进程
程序在操作系统内运行,即成为一个运行进程


2.什么是线程
进程内部可以有多个线程,程序的运行本质上就是由进程内部的线程在实际工作的


3.什么是并行执行
多个进程同时在运行,即不同的程序同时运行,称之为:多任务并行执行
一个进程内的多个线程同时在运行,称之为:多线程并行执行
 

基本语法

测试代码

import threading

def sing(msg):
    while True:
        print(msg)
        

def dance(msg):
    while True:
        print(msg)
        
if __name__ == '__main__':
    #创建线程
    # sing_thread = threading.Thread(target=sing)
    # dance_thread = threading.Thread(target=dance) 
    # #创建线程,设置参数
    sing_thread = threading.Thread(target=sing, args=('啦啦啦',))  # 注意这里的args参数,是元组形式,最后的逗号不可省略
    dance_thread = threading.Thread(target=dance, args=('舞蹈',))
    #开始线程
    sing_thread.start()
    dance_thread.start()

 Socket工具 (客户端和服务端)

 socket概念 

 客户端和服务端

服务端代码实现基本步骤

 测试代码

import socket
#创建socket对象
socket_sever = socket.socket()
#绑定socket_sever到指定的ip和端口
#这里绑定的是本地的127.0.0.1和8080端口
#如果要让外网连接到这个端口,需要将ip改成公网ip地址
#注意端口号可能被某些程序占用,可以尝试其他端口
socket_sever.bind(('127.0.0.1', 8080))
#监听连接
#这里的3表示可以同时连接的客户端数量
socket_sever.listen(3)
#等待客户端连接
while True:
    #接受客户端连接
    client_socket, client_addr = socket_sever.accept()
    print(f"客户端{client_addr}已连接")
    #接收客户端发送的数据
    #这里的1024表示一次接收的最大字节数,decode('utf-8')表示将字节码解码成字符串
    #这里的recv方法是阻塞的,如果没有客户端连接,会一直等待
    data = client_socket.recv(1024).decode('utf-8')
    #打印接收到的数据
    print(f"接收到的数据:{data}")
    if data == 'exit':
        break
    #发送数据给客户端
    # 这里的b'Hello, client!'表示要发送的字节码
    # client_socket.send(b'Hello, client!')
    msg =input("请输入要发送的数据:").encode('utf-8')
    client_socket.send(msg)
#关闭客户端连接
client_socket.close()
#关闭服务器连接
socket_sever.close()

 客户端代码实现基本步骤

测试代码

import socket
#创建socket对象
sockert_client = socket.socket()
#连接服务器
sockert_client.connect(('127.0.0.1', 8080))   # 连接到服务器的IP和端口
while True:
    #输入数据
    data = input('请输入要发送的数据:')
    #发送数据
    if data == 'exit':
        break

    sockert_client.send(data.encode('utf-8'))
    #接收数据
    data = sockert_client.recv(1024)   # 接收1024字节的数据
    print('接收到的数据:', data.decode('utf-8'))

#关闭连接
sockert_client.close()

结语:

笔记!笔记!笔记!

基础不扎实所以花了两天时间速通了一遍黑马  ,感觉很不错。

  • 21
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值