PyPyBridge

函数、参数与模块系统

用默认参数和关键字参数取代重载;用元组取代包装类;每个文件都是一个模块。

12 分钟 · 右栏代码可点击「运行」


函数定义:没有重载,没有 return 类型 ceremony

Java
1// 想返回两个值?先建一个 record
2record Stats(int min, int max) {}
3
4static Stats minMax(int[] xs) {
5 return new Stats(xs[0], xs[xs.length - 1]);
6}
Python
1def min_max(xs):
2 return xs[0], xs[-1] # 返回元组
3
4low, high = min_max([3, 1, 4]) # 自动解包

参数体系:默认值 + 关键字参数 取代 重载

Java
1connect("db://x");
2connect("db://x", 5432);
3connect("db://x", 5432, true);
4// 三个重载 = 三份样板
Python
1def connect(url, port=5432, ssl=True):
2 ...
3
4connect("db://x")
5connect("db://x", port=6379)
6connect("db://x", ssl=False) # 调用点自说明
  • 关键字参数让调用点像文档:retry(req, timeout=3)retry(req, 3, false) 安全得多。
  • *args 收多余位置参数(变 Object...),**kwargs 收关键字参数(变 Map)。

模块:每个文件就是模块,import 即用

Java
1package com.demo.util;
2
3public class Strs {
4 public static String trim(String s) { ... }
5}
6
7// 使用处
8import com.demo.util.Strs;
9Strs.trim(s);
Python
1# util.py — 文件即模块,不需要 class 壳
2def trim(s):
3 return s.strip()
4
5# 使用处
6from util import trim
7trim(s)
  • Python 里函数是第一公民:工具函数直接放模块顶层,不需要 class Strs 这种静态方法容器。
  • 包 = 带 __init__.py 的目录(或 namespace package)。pip 装的第三方包和你的模块用同一套 import 语法。

程序入口:if __name__ == "__main__"

Java
1public static void main(String[] args) {
2 run(args);
3}
Python
1def main():
2 ...
3
4if __name__ == "__main__": # 本文件被直接运行时才执行
5 main()
  • 被 import 时不执行入口块,和 Java 的 main 只在主类执行的语义对齐。这是脚本与模块复用的关键。

TIP

没有 private / public_name 前缀是「内部使用」的约定,__name 会触发名称改写。公共 API 靠文档和 lint 工具守护,而不是编译器 —— 团队规范里加 ruff check 即可。

练一练

这张卡的示例代码已在游乐场中备好,改一改再运行。

在游乐场中打开