第 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 可改
}