返回 Skill 列表
extension
分类: 开发与工程无需 API Key

python-scala-syntax-mapping

将Python语法结构转换为Scala等效代码的参考指南。在将Python代码转换为Scala时使用,需要对基本语法元素(如变量声明、控制流、推导式、字符串格式化和常用运算符)进行映射。

person作者: jakexiaohubgithub

Python to Scala Syntax Mapping

Variable Declarations

| Python | Scala | |--------|-------| | x = 5 | val x = 5 (immutable) or var x = 5 (mutable) | | x: int = 5 | val x: Int = 5 | | x, y = 1, 2 | val (x, y) = (1, 2) |

Prefer val over var unless mutation is required.

Type Mappings

| Python | Scala | |--------|-------| | int | Int | | float | Double | | str | String | | bool | Boolean | | None | None (of type Option) or null | | list[T] | List[T] or Seq[T] | | dict[K, V] | Map[K, V] | | set[T] | Set[T] | | tuple[A, B] | (A, B) or Tuple2[A, B] | | Optional[T] | Option[T] |

Control Flow

Conditionals

# Python
if x > 0:
    result = "positive"
elif x < 0:
    result = "negative"
else:
    result = "zero"
// Scala - if is an expression
val result = if (x > 0) "positive"
             else if (x < 0) "negative"
             else "zero"

Loops

# Python for loop
for i in range(10):
    print(i)

for item in items:
    process(item)

for i, item in enumerate(items):
    print(f"{i}: {item}")
// Scala equivalents
for (i <- 0 until 10) println(i)

for (item <- items) process(item)

for ((item, i) <- items.zipWithIndex) println(s"$i: $item")

While loops

# Python
while condition:
    do_something()
// Scala
while (condition) {
  doSomething()
}

Comprehensions

# Python list comprehension
squares = [x ** 2 for x in range(10)]
evens = [x for x in numbers if x % 2 == 0]
pairs = [(x, y) for x in xs for y in ys]
// Scala for-comprehensions or map/filter
val squares = (0 until 10).map(x => x * x).toList
val evens = numbers.filter(_ % 2 == 0)
val pairs = for { x <- xs; y <- ys } yield (x, y)

Functions

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

# Lambda
square = lambda x: x ** 2

# Default arguments
def greet(name: str, greeting: str = "Hello") -> str:
    return f"{greeting}, {name}!"
// Scala
def add(a: Int, b: Int): Int = a + b

// Lambda
val square: Int => Int = x => x * x
// or shorter: val square = (x: Int) => x * x

// Default arguments
def greet(name: String, greeting: String = "Hello"): String =
  s"$greeting, $name!"

String Formatting

| Python | Scala | |--------|-------| | f"Hello, {name}!" | s"Hello, $name!" | | f"Value: {x:.2f}" | f"Value: $x%.2f" | | f"{x + y}" | s"${x + y}" |

Common Operators

| Python | Scala | |--------|-------| | ** (power) | math.pow(x, y) or use scala.math.pow | | // (floor div) | x / y (for Int) or math.floor(x / y) | | % (modulo) | % | | and, or, not | &&, ||, ! | | in | .contains() | | is | eq (reference equality) | | == | == (value equality) |

Exception Handling

# Python
try:
    result = risky_operation()
except ValueError as e:
    handle_error(e)
finally:
    cleanup()
// Scala
import scala.util.{Try, Success, Failure}

// Pattern 1: try-catch
try {
  val result = riskyOperation()
} catch {
  case e: IllegalArgumentException => handleError(e)
} finally {
  cleanup()
}

// Pattern 2: Try monad (preferred for functional style)
val result = Try(riskyOperation()) match {
  case Success(value) => value
  case Failure(e) => handleError(e)
}

None/Null Handling

# Python
if value is None:
    return default
return process(value)

# Or
result = value if value is not None else default
// Scala - use Option
val result = optionValue match {
  case Some(v) => process(v)
  case None => default
}

// Or more concisely
val result = optionValue.map(process).getOrElse(default)