ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Python 快速上手(Java 开发者版)

Python 快速上手(Java 开发者版) 笔者本人是有 Java 基础这篇文档只讲 Python 的不同之处和刷题/开发中最实用的东西。目录环境搭建语法速览一张表看懂 Java vs Python内置数据结构刷题核心列表推导式 生成器Python 大招函数常用写法面向对象速通刷题常用模块文件与系统操作pip 与虚拟环境Demo 项目命令行待办事项推荐学习资源1. 环境搭建安装 Pythonpython.org/downloads 下载安装包勾选 Add Python to PATH一路下一步。验证python --version装 PyCharmJetBrains 官网 下载PyCharm Community Edition免费版够用。安装后新建项目选好 Python 解释器路径即可。运行代码命令行交互模式直接敲python适合试验几行代码。脚本模式python xxx.py适合刷题和项目。2. 语法速览一张表看懂 Java vs Python对比项JavaPython语句结束;不需要代码块{}缩进4空格注释///* */#...类型静态int x 1;动态x 1逻辑运算\|\|!andornotnullnullNone布尔true/falseTrue/False首字母大写定义变量int x 1;x 1定义常量final int X 1;靠命名约定X 1全大写定义函数声明返回值类型def func():thisthis.xxxself.xxx构造方法类名同名方法__init__(self)equalsa.equals(b)a b值比较switchswitch/casematch/case3.10三元运算符a ? b : cb if a else cfor 循环for (int i0; in; i)for i in range(n):数组int[] a {1,2,3};a [1, 2, 3]缩进就是一切if x 0: print(正数) # 缩进必须一致混用 Tab 和空格会报错 else: print(非正数)条件判断if score 90: print(A) elif score 80: # 注意是 elif 不是 else if print(B) else: print(C)循环# for --- 遍历一切可迭代对象 for i in range(5): # 0 1 2 3 4 for i in range(2, 6): # 2 3 4 5 for i in range(0, 10, 3): # 0 3 6 9步长 for item in list: # 直接遍历元素 for i, item in enumerate(list): # 带索引遍历 ​ # while --- 和 Java 一样 while condition: ...3. 内置数据结构刷题核心list Java 的 ArrayLista [1, 2, 3] a.append(4) # 尾部追加 [1,2,3,4] a.insert(1, 99) # 指定位置插入 [1,99,2,3,4] a.pop() # 弹出尾部 → 4 a.pop(0) # 弹出索引0 → 1 a.remove(2) # 删除值为2的第一个元素 a.sort() # 原地排序 a.sort(reverseTrue) # 降序 b sorted(a) # 返回新排序列表原列表不变 ​ # 切片刷题大杀器 a [0, 1, 2, 3, 4, 5] a[0:3] # [0, 1, 2] 左闭右开 a[2:] # [2, 3, 4, 5] a[:3] # [0, 1, 2] a[-1] # 5 最后一个 a[-2:] # [4, 5] 最后两个 a[::-1] # [5, 4, 3, 2, 1, 0] 反转 a[::2] # [0, 2, 4] 步长2 ​ # 多维列表注意别写成 [[0]*n]*m那是浅拷贝 matrix [[0] * n for _ in range(m)] # m 行 n 列的 0 矩阵tuple不可变列表t (1, 2, 3) x, y, z t # 解包 # t[0] 5 ❌ 报错元组不能改dict Java 的 HashMap / Mapd {a: 1, b: 2} d[c] 3 # 添加 d.get(z, 0) # 安全取值键不存在返回 0 d.setdefault(z, 0) # 键不存在就设默认值并返回 del d[a] # 删除 ​ # 遍历 for k, v in d.items(): # 键值对 for k in d: # 键 for v in d.values(): # 值 ​ # 字典推导式 squares {x: x*x for x in range(5)} # {0:0, 1:1, 2:4, 3:9, 4:16}set Java 的 HashSets {1, 2, 3} s.add(4) s.remove(1) s set([1, 1, 2, 3]) # 去重 {1, 2, 3} ​ # 集合运算 a b # 交集 a | b # 并集 a - b # 差集deque Java 的 ArrayDeque刷题 BFS 必备from collections import deque q deque() q.append(1) # 右侧入队 q.appendleft(2) # 左侧入队 q.pop() # 右侧弹出 q.popleft() # 左侧弹出 Java 的 poll() q[0] # 查看队首Counter频率统计from collections import Counter cnt Counter([1, 1, 2, 3, 3, 3]) print(cnt) # Counter({3: 3, 1: 2, 2: 1}) cnt.most_common(2) # 出现最多的 2 个 [(3, 3), (1, 2)]defaultdict有默认值的 dictfrom collections import defaultdict d defaultdict(int) # 默认值 0 d[a] 1 # 即使 a 不存在也不会报错默认 0 d defaultdict(list) # 默认值空列表 d[k].append(1) # 省去判空再初始化的步骤heapq小顶堆刷题优先级队列import heapq h [] heapq.heappush(h, 3) heapq.heappush(h, 1) heapq.heappush(h, 2) heapq.heappop(h) # 1每次弹出最小的 ​ # 大顶堆取负数存入 heapq.heappush(h, -x) max_val -heapq.heappop(h)4. 列表推导式 生成器Python 大招列表推导式# 基本形式 squares [x*x for x in range(10)] ​ # 带条件过滤 evens [x for x in range(20) if x % 2 0] ​ # if-else 写前面注意位置和上面不一样 labels [偶数 if x % 2 0 else 奇数 for x in range(5)] ​ # 嵌套循环 pairs [(x, y) for x in range(2) for y in range(3)] # [(0,0), (0,1), (0,2), (1,0), (1,1), (1,2)] ​ # 二维数组初始化正确姿势每个子列表独立 dp [[0] * n for _ in range(m)]生成器懒加载省内存# 圆括号 生成器表达式 gen (x*x for x in range(1000000)) # 不立刻计算迭代时才逐个生成 next(gen) # 0 ​ # yield 函数 生成器函数 def fib(n): a, b 0, 1 for _ in range(n): yield a a, b b, a b5. 函数常用写法def func(a, b, c0, *args, **kwargs): a, b: 必选参数 c0: 有默认值的可选参数 *args: 可变位置参数打包成 tuple **kwargs: 可变关键字参数打包成 dict pass ​ # 多返回值本质是返回 tuple def divide(a, b): return a // b, a % b quotient, remainder divide(10, 3) # 3, 1 ​ # lambda匿名函数刷题排序回调巨好用 add lambda x, y: x y pairs.sort(keylambda p: p[1]) # 按第二个元素排序 students.sort(keylambda s: (-s[score], s[name])) # 先按分数降序再按名字升序6. 面向对象速通class Student: # 类变量 Java 的 static 变量 school 清华 ​ def __init__(self, name, age): # 实例变量 self.name name self.age age self.__secret 隐藏 # __ 开头 约定私有名称改写不是真私有 ​ # 实例方法 def introduce(self): print(f我是{self.name}{self.age}岁) ​ # str() 或 print() 时自动调用 Java 的 toString() def __str__(self): return fStudent({self.name}, {self.age}) ​ # 类方法 Java static 方法 classmethod def from_string(cls, s): name, age s.split(,) return cls(name, int(age)) ​ # 继承 class Pupil(Student): def __init__(self, name, age, grade): super().__init__(name, age) # 调用父类构造 self.grade gradePython 的面向对象没有 Java 那么重的设计模式文化很多场景直接写函数就行。7. 刷题常用模块mathimport math math.sqrt(16) # 4.0 math.gcd(12, 8) # 4最大公约数 math.isqrt(10) # 3整数平方根 math.comb(5, 2) # 10组合数 C(5,2) math.perm(5, 2) # 20排列数 math.ceil(3.14) # 4向上取整 math.floor(3.14) # 3向下取整itertools排列组合、无限迭代from itertools import permutations, combinations, accumulate ​ list(permutations([1, 2, 3], 2)) # 排列: [(1,2),(1,3),(2,1),(2,3),(3,1),(3,2)] list(combinations([1, 2, 3], 2)) # 组合: [(1,2),(1,3),(2,3)] list(accumulate([1, 2, 3, 4])) # 前缀和: [1,3,6,10]bisect二分查找/插入import bisect a [1, 3, 5, 7, 9] bisect.bisect_left(a, 5) # 2第一个 ≥5 的位置 bisect.bisect_right(a, 5) # 3第一个 5 的位置 bisect.insort(a, 4) # 插入并保持有序 → [1,3,4,5,7,9]functools缓存、自定义比较from functools import lru_cache ​ lru_cache(maxsizeNone) # 自动记忆化DFS 递归必备 def fib(n): return n if n 2 else fib(n-1) fib(n-2) ​ # cmp_to_key把 Java 风格 comparator 转成 key from functools import cmp_to_key def compare(a, b): return a - b # 负数 a 在前正数 b 在前 a.sort(keycmp_to_key(compare))randomimport random random.randint(1, 100) # [1, 100] 随机整数 random.choice([1, 2, 3]) # 随机选一个 random.shuffle(arr) # 原地洗牌字符串和 ASCII 互相转换ord(A) # 65 chr(65) # A用sorted()的 key 实现复杂排序# 先按长度再按字母序 words [apple, pie, banana, a] words.sort(keylambda w: (len(w), w)) # [a, pie, apple, banana] ​ # 自定义类的排序 class Node: def __init__(self, val): self.val val def __lt__(self, other): return self.val other.val # 实现 __lt__ 就能比较8. 文件与系统操作文件读写with open(data.txt, r, encodingutf-8) as f: content f.read() # 全读 lines f.readlines() # 读成 list每行一个元素 ​ with open(out.txt, w, encodingutf-8) as f: f.write(hello\n) ​ # 逐行读大文件 with open(big.txt, r, encodingutf-8) as f: for line in f: print(line.strip())模式r读、w覆盖写、a追加、rb/wb二进制读写。JSONimport json d {name: 小明, age: 18} json.dumps(d) # dict → JSON 字符串 json.dumps(d, ensure_asciiFalse) # 中文不转义 json.loads({a:1}) # JSON 字符串 → dictpathlib操作路径比 os.path 好用from pathlib import Path p Path(data/input.txt) p.exists() # 是否存在 p.parent # data p.stem # input不含后缀的文件名 p.suffix # .txt [p for p in Path(.).glob(*.py)] # 列当前目录下所有 .py 文件9. pip 与虚拟环境pip Java 的 Maven/Gradlepip install requests # 安装 pip install requests2.28 # 安装指定版本 pip uninstall requests # 卸载 pip list # 看已安装的包 pip freeze requirements.txt # 导出依赖清单 pip install -r requirements.txt # 按清单安装虚拟环境 给每个项目独立一套依赖# 创建虚拟环境 python -m venv venv ​ # 激活Windows venv\Scripts\activate ​ # 激活Mac/Linux source venv/bin/activate ​ # 退出 deactivate每个项目都建一个 venv避免依赖冲突。PyCharm 新建项目时勾选 Create a virtual environment 即可自动搞定。10. Demo 项目命令行待办事项一个完整的 Todo CLI 小工具支持增删改查、JSON 文件持久化、多文件模块化组织。项目结构todo-cli/ ├── models.py # 数据模型 ├── storage.py # JSON 读写 ├── commands.py # 业务逻辑 └── main.py # 入口 命令行交互models.py —— 数据类from dataclasses import dataclass from datetime import datetime ​ ​ dataclass class Task: title: str done: bool False created_at: str ​ def __post_init__(self): if not self.created_at: self.created_at datetime.now().strftime(%Y-%m-%d %H:%M) ​ def toggle(self): self.done not self.donedataclass相当于 Lombok 的Data——自动生成__init__、__repr__、__eq__省去手写样板代码。__post_init__在自动生成的__init__之后自动调用用于设置默认值。storage.py —— JSON 持久化import json from pathlib import Path from models import Task ​ DATA_FILE Path(tasks.json) ​ ​ def load_tasks() - list[Task]: 从 JSON 文件加载文件不存在则返回空列表 if not DATA_FILE.exists(): return [] with open(DATA_FILE, r, encodingutf-8) as f: raw json.load(f) return [Task(**item) for item in raw] ​ ​ def save_tasks(tasks: list[Task]) - None: 将任务列表写入 JSON 文件 data [{title: t.title, done: t.done, created_at: t.created_at} for t in tasks] with open(DATA_FILE, w, encodingutf-8) as f: json.dump(data, f, ensure_asciiFalse, indent2)Task(**item)是字典解包等效于Task(titleitem[title], doneitem[done], ...)。commands.py —— 业务逻辑from models import Task from storage import load_tasks, save_tasks ​ ​ def add_task(title: str) - None: tasks load_tasks() tasks.append(Task(titletitle)) save_tasks(tasks) print(f[OK] 已添加: {title}) ​ ​ def list_tasks() - None: tasks load_tasks() if not tasks: print(暂无待办事项) return for i, task in enumerate(tasks, start1): status [DONE] if task.done else [TODO] print(f {i}. [{status}] {task.title} ({task.created_at})) ​ ​ def done_task(index: int) - None: tasks load_tasks() if 0 index len(tasks): tasks[index].toggle() save_tasks(tasks) print(f[OK] 已切换状态: {tasks[index].title}) else: print(f[ERROR] 序号无效: {index 1}) ​ ​ def delete_task(index: int) - None: tasks load_tasks() if 0 index len(tasks): removed tasks.pop(index) save_tasks(tasks) print(f[OK] 已删除: {removed.title}) else: print(f[ERROR] 序号无效: {index 1})main.py —— 入口from commands import add_task, list_tasks, done_task, delete_task ​ ​ def main(): print( 待办事项管理器 (输入 help 查看命令) \n) ​ while True: try: cmd input( ).strip() if not cmd: continue ​ if cmd help: print( add 内容 - 添加待办) print( list - 查看所有待办) print( done 序号 - 切换完成状态) print( del 序号 - 删除待办) print( quit - 退出) ​ elif cmd.startswith(add ): title cmd[4:] add_task(title) ​ elif cmd list: list_tasks() ​ elif cmd.startswith(done ): idx int(cmd.split()[1]) - 1 done_task(idx) ​ elif cmd.startswith(del ): idx int(cmd.split()[1]) - 1 delete_task(idx) ​ elif cmd quit: print(再见) break ​ else: print(f未知命令: {cmd}输入 help 查看帮助) ​ except (ValueError, IndexError): print([ERROR] 输入格式有误请检查序号是否正确) except KeyboardInterrupt: print(\n再见) break ​ ​ if __name__ __main__: main()if __name__ __main__等价于 Javamain()方法——文件被直接执行时运行被 import 时不运行。运行效果 待办事项管理器 (输入 help 查看命令) ​ add 复习Python语法 [OK] 已添加: 复习Python语法 add 刷两道LeetCode [OK] 已添加: 刷两道LeetCode list 1. [TODO] 复习Python语法 (2026-06-19 14:30) 2. [TODO] 刷两道LeetCode (2026-06-19 14:31) done 1 [OK] 已切换状态: 复习Python语法 list 1. [DONE] 复习Python语法 (2026-06-19 14:30) 2. [TODO] 刷两道LeetCode (2026-06-19 14:31) quit 再见知识点索引Demo 中用到的对应章节dataclass第6节 面向对象list[Task]类型注解—Python 3.9 内置泛型[Task(**item) for ...]列表推导式第4节**字典解包第3节 dictjson.dump/load第8节 JSONpathlib.Path第8节 pathlibtry/except异常处理enumerate(tasks, start1)第2节 循环f-string第2节多文件模块化第5节 函数11. 推荐学习资源刷题LeetCode— 直接用 Python 刷不会的语法对着这篇文档查代码随想录— 算法讲解 Python 代码适合跟着刷进阶资源说明Python 官方教程免费、有中文、最权威一周可翻完《流畅的Python》Java 开发转 Python 必读讲的都是Pythonic写法Real Python高质量英文教程每个主题讲得深入浅出搜资料技巧搜的时候加site:docs.python.org看官方文档或者直接csdn 关键字。报错信息直接贴到搜索引擎 / AI 工具里问。附刷题代码模板# LeetCode 模板 from typing import List, Optional from collections import deque, Counter, defaultdict import heapq from functools import lru_cache, cmp_to_key import math import bisect ​ ​ class Solution: def solve(self, nums: List[int], target: int) - int: # 你的代码 pass刷题时把这段粘到开头所需模块一次性全部导入省得逐个 import。
返回列表