# PythonLearning3hour **Repository Path**: rainfly123/python-learning3hour ## Basic Information - **Project Name**: PythonLearning3hour - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-08-04 - **Last Updated**: 2026-08-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 网络基础与 Python 学习笔记 --- ## 1. 域名 | 示例 | |------| | baidu.com | | sina.com | | 12306.cn | --- ## 2. IP 地址 ### 一、五大 A/B/C/D/E 地址分类(传统分类) #### 1. A 类地址 | 项目 | 值 | |------|------| | 网段 | `0.0.0.0 ~ 127.255.255.255` | | 默认子网掩码 | `255.0.0.0`(`/8`) | | 可用网段 | `1.0.0.0 ~ 126.255.255.255` | > - `127.x.x.x` 保留:本地回环地址 > - `127.0.0.1` 本机地址 #### 2. B 类地址 | 项目 | 值 | |------|------| | 网段 | `128.0.0.0 ~ 191.255.255.255` | | 默认掩码 | `255.255.0.0`(`/16`) | #### 3. C 类地址 | 项目 | 值 | |------|------| | 网段 | `192.0.0.0 ~ 223.255.255.255` | | 默认掩码 | `255.255.255.0`(`/24`) | #### 4. D 类地址(组播 / 多播) | 项目 | 值 | |------|------| | 网段 | `224.0.0.0 ~ 239.255.255.255` | > 不分配主机,用于视频广播、设备发现 #### 5. E 类地址(保留实验) | 项目 | 值 | |------|------| | 网段 | `240.0.0.0 ~ 255.255.255.255` | > 保留研究使用 --- ### 二、重点:私有 IP(内网地址,不能公网路由) > 路由器、家庭局域网、公司内网使用,**公网无法访问** | 类型 | 范围 | 掩码 | 说明 | |------|------|------|------| | **A 类私有段** | `10.0.0.0 ~ 10.255.255.255` | `/8` | 大型企业内网常用 | | **B 类私有段** | `172.16.0.0 ~ 172.31.255.255` | `/12` | 中型企业 | | **C 类私有段** | `192.168.0.0 ~ 192.168.255.255` | `/16` | 家里最常见,家用路由器默认 `192.168.1.x` | --- ## 3. HTML 超文本标记语言 > 见 `demo.html` --- ## 4. HTTP 超文本传输协议 ### URL(Uniform Resource Locator)统一资源定位符 **作用**:用来定位互联网上任意资源(网页、图片、接口、文件)。域名、IP 都属于 URL 的其中一部分。 #### URL 结构 | 部分 | 示例 | 说明 | |------|------|------| | **协议** | `https://` | 常见:`http`、`https`、`ftp`、`file` | | **域名 / IP** | `www.baidu.com` | 核心,找到服务器 | | **端口** | `:443` | `https` 默认 `443`,`http` 默认 `80`;默认端口可省略 | | **路径** | `/s` | 服务器上资源位置 | | **查询参数** | `?wd=python` | 向服务器传递数据,多个参数 `?a=1&b=2` | | **锚点** | `#top` | 浏览器本地使用,**不会发给服务器**,页面内跳转 | --- ### HTTP 请求示例 ```http GET /api/data HTTP/1.1 Host: 127.0.0.1:8080 User-Agent: Mozilla/5.0 Accept: application/json Cookie: token=abc123 Authorization: Bearer xxxxx Connection: keep-alive Referer: https://baidu.com Range: bytes=0-4096 ``` ### HTTP 响应示例 ```http HTTP/1.1 200 OK Content-Type: application/json Content-Encoding: gzip Set-Cookie: token=abcd1234 Cache-Control: max-age=300 Server: nginx Access-Control-Allow-Origin: * ``` ### 响应头字段说明 | 字段 | 示例值 | |------|--------| | `content-type` | `"image/jpeg"` | | `date` | `"Tue, 04 Aug 2026 03:59:47 GMT"` | | `etag` | `"4b7f38aaa69c88cd43371f6c4991adda"` | | `expires` | `"Wed, 05 Aug 2026 16:59:39 GMT"` | | `last-modified` | `"Wed, 13 Mar 2024 15:10:21 GMT"` | ### 快速启动 HTTP 服务器 ```bash python -m http.server 8080 http://localhost:8080/demo.html ``` --- ## 5. Python 基础 ### 程序 = 数据 + 算法 **数据类型**:整数、字符串、浮点、布尔、列表、字典、元组、类(参照class.py) ### 函数定义+ lambda def method(abc): return abc lambda x,y: x + y ### 逻辑控制 ```python # if-elif-else age = 18 if age > 18: print("成年") elif age == 18: print("刚好成年") else: print("未成年") # 三元表达式 res = "成年" if age >= 18 else "未成年" # for 循环 for i in range(5): print(i) # break / continue # while 循环 i = 0 while i < 5: print(i) i += 1 ``` ### 逻辑运算符 | 运算符 | 含义 | |--------|------| | `and` | 并且 | | `or` | 或者 | | `not` | 取反 | ```python print(1 > 0 and 5 < 10) # True print(1 > 10 or 2 < 5) # True print(not False) # True ``` ### 成员 & 身份运算符 | 运算符 | 说明 | |--------|------| | `in` | 判断是否包含 | | `not in` | 判断是否不包含 | ```python print(3 in [1, 2, 3]) # True ``` --- ## 6. 异常处理 ### 1. 基础结构:`try-except` ```python try: # 可能出错的代码 num = int("abc") except ValueError: # 捕获指定异常后的处理逻辑 print("类型转换失败") ``` ### 2. 完整语法:`try / except / else / finally` ```python try: a = 1 / 0 except ZeroDivisionError as e: print("捕获异常:", e) else: # 无异常才执行 print("代码正常运行,没有报错") finally: # 无论是否异常,一定会执行(常用于关闭文件、释放资源) print("finally 执行") ``` ### 3. 捕获多种异常 ```python try: f = open("test.txt") except (FileNotFoundError, PermissionError) as err: print("文件异常:", err) ``` > ❌ **不推荐**:直接裸 `except:`(捕获所有异常,难以排查 bug) ```python # 不推荐写法 try: pass except: pass ``` ### 4. 主动抛出异常 `raise` 手动制造异常,校验参数常用: ```python age = -5 if age < 0: raise ValueError("年龄不能是负数") ``` 也可以捕获后重新抛出: ```python try: 1 / 0 except ZeroDivisionError: print("发生除零错误") raise # 原样向上抛出 ``` ### 5. 常用内置异常 | 异常 | 说明 | |------|------| | `ValueError` | 值错误,类型转换失败 | | `TypeError` | 类型不匹配 | | `ZeroDivisionError` | 除零错误 | | `FileNotFoundError` | 文件不存在 | | `IndexError` | 列表下标越界 | | `KeyError` | 字典 key 不存在 | | `Exception` | 大部分常规异常的父类 | ### 6. 自定义异常(进阶) 继承 `Exception` 创建自己的异常类型: ```python class LoginError(Exception): pass raise LoginError("账号密码错误") ``` --- ## 6.1 奇淫技巧 迭代器, 生成器, 推导式 , 参照iter.py gen.py map, filter , sorted map /filter/sorted 快速介绍 三者都是 Python 内置函数,都接收函数 + 可迭代对象。 1. map(func, iterable) 对每个元素做变换处理,返回迭代器 作用:把可迭代里每一个元素丢进函数处理,返回处理后的值 `python 运行 nums = [1,2,3] res = map(lambda x:x*2, nums) print(list(res)) # [2,4,6]` 2. filter(func, iterable) 过滤,保留条件为 True 的元素,返回迭代器 func 返回 True/False;True 留下,False 丢掉 `python 运行 nums = [1,2,3,4] res = filter(lambda x:x%2==0, nums) print(list(res)) # [2,4]` map 做转换,filter 做筛选。两者 Python3 返回迭代器,要用 list () 看结果。 3. sorted(iterable, key=, reverse=) 排序,返回新列表,不改动原数据 key:指定用什么规则排序 reverse=True降序;默认 False 升序 `python 运行 nums = [3,1,4,2] print(sorted(nums)) # [1,2,3,4] 按绝对值排序 data = [-3,1,-2] print(sorted(data, key=lambda x:abs(x))) # [1,-2,-3] 降序 print(sorted(nums, reverse=True)) # [4,3,2,1] 链式小示例 python 运行 nums = [1,-2,3,-4,5] 过滤正数 → 每个乘10 → 排序 result = sorted(map(lambda x:x*10, filter(lambda x:x>0, nums))) print(result) # [10,30,50]` ## 7. 模块开发 参照 my 文件夹 ## 8. 模块导入 `import` ### `os` 模块 | 方法 | 说明 | |------|------| | `os.getcwd()` | 当前工作目录 | | `os.mkdir("test")` | 创建文件夹 | | `os.path.exists("a.txt")` | 判断文件是否存在 | | `os.environ.get("PATH")` | 读取环境变量 | ### `sys` 模块 #### 1. `sys.argv` — 命令行参数列表 - `sys.argv[0]`:脚本名 - `sys.argv[1:]`:传入参数 ```python # python test.py hello 123 print(sys.argv) # ['test.py', 'hello', '123'] ``` #### 2. `sys.path` — 模块搜索路径列表 `import` 按照此列表寻找包: ```python sys.path.append("./libs") # 临时新增路径 ``` #### 3. `sys.exit([code])` — 终止程序 - `sys.exit(0)` — 正常退出 - `sys.exit(1)` — 异常退出 - 本质抛出 `SystemExit`,可 `try` 捕获 #### 4. `sys.stdin / sys.stdout / sys.stderr` — 标准输入 / 输出 / 错误 ```python line = sys.stdin.readline() # 读取一行 sys.stdout.write("test\n") ``` #### 5. `sys.platform` — 判断操作系统 | 值 | 系统 | |----|------| | `win32` | Windows | | `linux` | Linux | | `darwin` | macOS | ```python if sys.platform == "win32": print("Windows") ``` #### 6. `sys.version` — 获取 Python 版本字符串 ```python print(sys.version) ``` --- ## 8. requests 库 ### 1. GET 请求(最常用) ```python url = "https://httpbin.org/get" # params 自动拼接 URL 参数 resp = requests.get(url, params={"name": "test", "age": 20}) print(resp.status_code) # 状态码 200、404、500 print(resp.text) # 原始文本(html/字符串) print(resp.json()) # 自动解析 json(接口返回 json 用) print(resp.headers) # 响应头 print(resp.url) # 最终请求地址 ``` ### 2. POST 请求 #### ① 表单格式 `application/x-www-form-urlencoded` ```python data = {"user": "admin", "pwd": "123456"} resp = requests.post(url, data=data) ``` #### ② JSON 格式 `application/json`(前后端接口主流) ```python json_data = {"user": "admin", "pwd": "123456"} resp = requests.post(url, json=json_data) ``` ### 3. 请求头 `headers` 模拟浏览器,防止被拦截: ```python headers = { "User-Agent": "Mozilla/5.0 Chrome/120", "Authorization": "Bearer xxxxxx" } resp = requests.get(url, headers=headers) ```