Python 基础语法速通

第 5 章:函数

def、默认参数、*args/**kwargs、lambda。

01定义与返回

Python
def add(a: int, b: int = 0) -> int:
    return a + b

print(add(1), add(1, 2))
Kotlin
fun add(a: Int, b: Int = 0): Int = a + b
println(add(1))
println(add(1, 2))
ArkTS
function add(a: number, b: number = 0): number {
  return a + b;
}
console.info(add(1), add(1, 2));
默认参数求值只发生一次:别把可变对象(list/dict)当默认值,用 None 再在函数里创建。

02*args / **kwargs

Python
def demo(a, *args, **kwargs):
    print(a, args, kwargs)

demo(1, 2, 3, x=4)
# 1 (2, 3) {'x': 4}
Kotlin
fun demo(a: Int, vararg args: Int, x: Int = 0) {
    println("$a ${args.toList()} $x")
}
ArkTS
function demo(a: number, ...args: number[]): void {
  console.info(a, args);
}

03lambda ≈ 单行函数

Python
square = lambda n: n * n
print(square(3))
print(sorted([-2, 1], key=lambda x: abs(x)))
Kotlin
val square = { n: Int -> n * n }
println(square(3))
println(listOf(-2, 1).sortedBy { abs(it) })
ArkTS
const square = (n: number): number => n * n;
console.info(square(3));
console.info([-2, 1].sort((a, b) => Math.abs(a) - Math.abs(b)));
复杂逻辑用 def;lambda 只适合真正短的表达式。

04作用域与 global / nonlocal

Python
x = 1
def bump():
    global x
    x = 2

def outer():
    y = 1
    def inner():
        nonlocal y
        y = 2
    inner()
    return y
Kotlin
// 顶层属性 / 闭包捕获
var x = 1
fun bump() { x = 2 }
ArkTS
let x = 1;
function bump(): void {
  x = 2; // 模块级 let 可改
}

Python 基础语法速通 · 对照 Kotlin / ArkTS · 本地预览稿