FastAPI学习笔记 和 问题记录

1.  conn, addr分别是什么意思?socket.AF_INET, socket.SOCK_STREAM这两个参数又是什么意思?

import socket

# 创建套接字对象
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
"""
socket.AF_INET:

这是地址族的标识符,指定了套接字使用的地址类型。在这里,AF_INET 表示使用 IPv4 地址。IPv4 是 Internet Protocol 的第四个版本,它使用 32 位地址。所以,socket.AF_INET 表示套接字将使用 IPv4 地址。
socket.SOCK_STREAM:

这是套接字的类型标识符,指定了套接字的通信方式。在这里,SOCK_STREAM 表示套接字将使用面向连接的流式(stream-oriented)通信。这通常与 TCP 协议一起使用,确保数据的可靠、有序传输。相对应的,还有 SOCK_DGRAM,表示使用无连接的数据报通信,通常与 UDP 协议一起使用。
"""

# 绑定地址和端口
server_addr = ('127.0.0.1', 8080)
server_socket.bind(server_addr)

# 开始监听
server_socket.listen(1)

print("等待连接...")
conn, addr = server_socket.accept()
"""
  1. conn (connection):"conn" 通常代表一个网络连接,用于建立和维护与其他计算机或网络服务的通信。这可以是一个套接字(socket)连接,也可以是其他形式的网络连接。"conn" 可能是一个表示客户端和服务器之间通信的对象,也可以是其他网络协议中的连接实例。

  2. addr (address):"addr" 通常代表网络地址,用于标识网络上的主机或服务的位置。这可以是 IP 地址、端口号或其他网络标识符的组合。在网络通信中,"addr" 可能包含了目标服务器的 IP 地址和端口号,或者是其他用于标识网络上某个节点的信息。具体的使用方式可能取决于编写的代码和上下文。通常,"conn" 用于表示建立的连接,而 "addr" 用于指定连接的目标地址。例如,在使用套接字编程时,"conn" 可能是套接字对象,而 "addr" 可能是一个元组,包含目标服务器的 IP 地址和端口号。

"""
print("连接来自:", addr)

 

2. 装饰器@classmethod的理解

@classmethod 是 Python 中用于定义类方法的装饰器类方法是绑定到类而不是实例的方法可以通过类名或类的实例调用。与实例方法不同,类方法的第一个参数是类本身,通常被命名为 cls

在您的代码中,@classmethod 装饰器用于定义 name_must_alpha 类方法。这个类方法是一个验证器,用于对 User 类的 name 字段进行验证。由于它是类方法,它接受的第一个参数是类本身,通常被命名为 cls

下面是一个使用 @classmethod 的简单示例:

class MyClass:
    class_variable = "I am a class variable"

    def __init__(self, instance_variable):
        self.instance_variable = instance_variable

    @classmethod
    def class_method(cls):
        print(f"Class method called. Class variable: {cls.class_variable}")

# 调用类方法
MyClass.class_method()
# 输出: Class method called. Class variable: I am a class variable

# 创建类的实例
obj = MyClass("I am an instance variable")

# 调用类方法,也可以通过实例调用
obj.class_method()
# 输出: Class method called. Class variable: I am a class variable

 

3.句柄的概念、作用、通俗解释和举例说明。

在计算机科学中,"句柄"(Handle)是一种用于引用对象的抽象概念,它通常是一个指向对象或资源的标识符。句柄的引入解决了在处理大量对象或资源时的一些问题。

  1. 资源管理: 在计算机系统中,有许多类型的资源,比如文件、内存、网络连接等。这些资源需要被有效地管理和访问。句柄提供了一种统一的方式来引用这些资源,使得程序可以通过句柄来操作资源,而不必直接关心资源的实际物理或逻辑位置。

  2. 抽象和封装: 句柄提供了一层抽象,隐藏了底层资源的具体细节。这种抽象允许程序员在操作资源时不必了解资源的内部结构和实现细节。这种封装提高了代码的模块化和可维护性。

  3. 安全性和权限控制: 句柄可以用作访问控制的机制。通过对句柄进行权限验证,系统可以确保只有被授权的程序或进程能够访问或操作特定的资源。这有助于提高系统的安全性。

  4. 资源共享和重用: 句柄使得多个程序或进程可以共享同一个资源,而不会相互干扰。通过使用句柄,系统可以更灵活地管理和重用资源,避免资源的浪费。

在操作系统中,文件句柄是一个常见的应用。当打开一个文件时,操作系统会分配一个唯一的文件句柄给该文件。程序员可以通过操作这个文件句柄来读取、写入或关闭文件,而不必关心文件在磁盘上的具体位置。

例如:

# 打开文件并获取文件句柄
file_handle = open("example.txt", "r")

# 通过文件句柄读取文件内容
content = file_handle.read()
print(content)

# 关闭文件
file_handle.close()

句柄(Handle)的通俗解释可以比喻为一个“引用”或“标签”,用来标识和操作系统资源(如文件、内存、网络连接等)的一种抽象标识符。通过这个标识符,程序可以访问和操作相应的资源,而无需关心资源的具体细节。

想象一下,你去图书馆借一本书。你并不需要知道书的具体位置、书架号码等细节,图书馆会给你一张借书卡(类似于一个句柄),这张卡上有一个唯一的标识符。当你需要这本书时,你只需出示这张卡,图书馆就能根据标识符找到对应的书并借给你。这张借书卡就像是你与图书馆资源之间的一个句柄。

在计算机系统中,资源管理也是类似的道理。操作系统为每个打开的文件、分配的内存块、建立的网络连接等分配一个唯一的句柄。程序可以通过这个句柄来操作相应的资源,而无需了解底层资源的具体位置或细节。句柄提供了一种方便的方式来引用和操作系统资源进行交互。

 

posted @ 2025-08-06 13:44  AlphaGeek  阅读(11)  评论(0)    收藏  举报