>  기사  >  백엔드 개발  >  파이썬을 골랭으로 번역

파이썬을 골랭으로 번역

王林
王林원래의
2023-05-10 11:15:36710검색

머리말

Python은 배우기 쉽고 사용하기 쉽고, 코드가 간결하며, 개발 효율성이 높아 데이터 과학, 기계 학습 등의 분야에서 널리 사용되는 고급 프로그래밍 언어입니다. Go 언어는 더 나은 동시성 성능과 더 높은 코드 실행 효율성을 갖춘 떠오르는 별입니다. 따라서 Python 코드의 실행 효율성을 향상시키거나 컴퓨터 멀티 코어 리소스를 더 잘 활용해야 할 때 Go 언어를 사용하여 보다 효율적인 프로그램을 작성할 수 있습니다.

이 글에서는 주로 Python 코드를 Go 언어로 번역하는 방법을 소개하고, Python 기능 관점에서 Go 언어 프로그램을 설계하고 최적화하는 방법에 대해 논의합니다.

1. Python 코드를 Go 언어로 번역

Python 코드를 Go 언어로 번역하기 전에 두 언어 간의 차이점과 유사점을 이해해야 합니다. Python은 코드 가독성과 단순성을 강조하는 동적 유형 언어입니다. Go 언어는 코드 유지 관리 및 동시 처리 기능에 중점을 둔 정적으로 유형이 지정된 언어입니다.

Python 코드를 Go 언어로 변환하는 방법에는 두 가지가 있습니다. 하나는 Go 언어 코드를 수동으로 작성하고 Python 프로그램의 논리에 따라 해당 Go 언어 기능을 구현하는 것입니다. 두 번째는 py2go 및 transcrypt와 같은 기존 번역 도구를 사용하는 것입니다.

Go 언어 코드 수동 작성

다음은 두 언어 간의 관계를 더 잘 이해하기 위해 Python 코드를 Go 언어 코드로 변환하는 몇 가지 예입니다.

Python 코드:

def fib(n):
    if n <= 1:
        return n
    else:
        return (fib(n-1) + fib(n-2))

print([fib(i) for i in range(10)])

Go 언어 코드:

package main

import "fmt"

func fib(n int) int {
    if n <= 1 {
        return n
    } else {
        return (fib(n-1) + fib(n-2))
    }
}

func main() {
    for i := 0; i < 10; i++ {
        fmt.Printf("%d ", fib(i))
    }
}

여기 또 다른 예가 있습니다:

Python 코드:

def merge_sort(lst):
    if len(lst) <= 1:
        return lst
    mid = len(lst) // 2
    left = merge_sort(lst[:mid])
    right = merge_sort(lst[mid:])
    return merge(left, right)

def merge(left, right):
    result = []
    i, j = 0, 0
    while i < len(left) and j < len(right):
        if left[i] < right[j]:
            result.append(left[i])
            i += 1
        else:
            result.append(right[j])
            j += 1
    result += left[i:]
    result += right[j:]
    return result

print(merge_sort([3, 1, 4, 2, 5]))

Go 언어 코드:

package main

import "fmt"

func mergeSort(lst []int) []int {
    if len(lst) <= 1 {
        return lst
    }
    mid := len(lst) / 2
    left := mergeSort(lst[:mid])
    right := mergeSort(lst[mid:])
    return merge(left, right)
}

func merge(left []int, right []int) []int {
    result := []int{}
    i, j := 0, 0
    for i < len(left) && j < len(right) {
        if left[i] < right[j] {
            result = append(result, left[i])
            i++
        } else {
            result = append(result, right[j])
            j++
        }
    }
    result = append(result, left[i:]...)
    result = append(result, right[j:]...)
    return result
}

func main() {
    lst := []int{3, 1, 4, 2, 5}
    fmt.Println(mergeSort(lst))
}

번역 도구를 사용하여 코드 변환

번역 도구를 사용하면 작업을 줄일 수 있습니다. 필기 위 Python 코드를 Go 언어 코드로 변환하기 위해 py2go 번역 도구를 사용하는 등의 코딩 시간 및 작업량:

Python 코드:

def fib(n):
    if n <= 1:
        return n
    else:
        return (fib(n-1) + fib(n-2))

print([fib(i) for i in range(10)])

Go 언어 코드:

package main

import (
    "fmt"
)

func fib(n int) int {
    if n <= 1 {
        return n
    } else {
        return (fib(n-1) + fib(n-2))
    }
}

func main() {
    var lst []int
    for i := 0; i < 10; i++ {
        lst = append(lst, fib(i))
    }
    fmt.Println(lst)
}

2. Go 언어 프로그램을 설계하고 최적화하는 방법은 다음과 같습니다. Python 함수

Python 함수의 관점에서 Go 언어 프로그램을 다음과 같은 방식으로 최적화할 수 있습니다.

  1. 초기 매개변수의 유형 선언

Go 언어는 정적으로 유형이 지정된 언어이므로 함수 정의 시 매개변수 유형을 선언해야 합니다. 동시에 Go 언어의 매개변수 전달 방법은 값 전달이고, Python의 매개변수 전달 방법은 참조 전달입니다.

Python 코드:

def add(x, y):
    x.append(y)
    return x

lst = [1, 2, 3]
print(add(lst, 4))    # [1, 2, 3, 4]
print(lst)            # [1, 2, 3, 4]

Go 언어 코드:

func add(x []int, y int) []int {
    x = append(x, y)
    return x
}

func main() {
    lst := []int{1, 2, 3}
    fmt.Println(add(lst, 4))    // [1 2 3 4]
    fmt.Println(lst)            // [1 2 3]
}

Go 언어에서는 매개변수를 함수에서 수정할 수 있도록 슬라이스 유형으로 선언해야 합니다.

  1. 빈 식별자 사용

Go 언어에서 빈 식별자 _를 사용하면 익명 변수를 나타낼 수 있습니다. 예를 들어 Python에서는 일반적으로 밑줄 _을 사용하여 이 변수가 참조되지 않음을 나타냅니다. 후속 사용에서.

Python 코드:

x, _, y = (1, 2, 3)
print(x, y)    # 1 3

Go 언어 코드:

x, _, y := []int{1, 2, 3}
fmt.Println(x, y)    // 1 3

Go 언어에서는 밑줄 _을 사용하여 익명 변수를 나타내지만 해당 범위는 현재 명령문 블록입니다. 예를 들어 underscore_에 값을 할당하면 해당 값이 삭제됩니다.

  1. 인터페이스 지향 프로그래밍

다형성의 경우 Python에는 오리 타이핑 기능이 내장되어 있습니다. 즉, 객체의 적용 가능성은 해당 유형이 아니라 해당 객체가 보유한 메서드에 따라 결정됩니다. Go 언어에서는 인터페이스를 사용하여 다형성을 달성할 수 있습니다.

예를 들어 아래 코드에서 Cat과 Dog는 모두 Animal 인터페이스에서 Say 메소드를 구현하므로 Test 함수에서 객체의 실제 유형에 신경 쓸 필요가 없고 여부만 주의하면 됩니다. Animal 인터페이스를 구현합니다.

Python 코드:

class Animal:
    def say(self):
        pass

class Cat(Animal):
    def say(self):
        return 'meow'

class Dog(Animal):
    def say(self):
        return 'bark'

def test(animal):
    print(animal.say())

test(Cat())    # meow
test(Dog())    # bark

Go 언어 코드:

type Animal interface {
    Say() string
}

type Cat struct {
}

func (c *Cat) Say() string {
    return "meow"
}

type Dog struct {
}

func (d *Dog) Say() string {
    return "bark"
}

func Test(animal Animal) {
    fmt.Println(animal.Say())
}

func main() {
    Test(&Cat{})    // meow
    Test(&Dog{})    // bark
}
  1. 선택적 매개변수 및 기본 매개변수 지원

Python에서는 선택적 매개변수 및 기본 매개변수를 지원하는 작성 방법이 매우 유연하며 기본값은 다음에서 지정할 수 있습니다. 함수 정의를 참조하거나 args 및 *kwargs를 사용하여 선택적 매개변수를 전달하세요.

Python 코드:

def func(a, b=10, *args, **kwargs):
    print(a, b)
    for arg in args:
        print(arg)
    for key, value in kwargs.items():
        print(key, value)

func(1)    # 1 10
func(2, 3)    # 2 3
func(4, 5, 6, 7, eight=8, nine=9)    # 4 5 6 7 eight 8 nine 9

Go 언어에서는 함수 오버로딩 지원으로 인해 함수의 매개변수 목록이 필요에 따라 다양한 유형의 매개변수를 정의할 수 있습니다. 예를 들어 다음 코드에서는 오버로드를 사용하여 선택적 매개변수와 기본값을 구현합니다.

Go 언어 코드:

func Func(a int, b int) {
    fmt.Println(a, b)
}

func Func2(a int, b int, args ...int) {
    fmt.Println(a, b)
    for _, arg := range args {
        fmt.Println(arg)
    }
}

func Func3(a int, kwargs map[string]int) {
    fmt.Println(a)
    for key, value := range kwargs {
        fmt.Println(key, value)
    }
}

func main() {
    Func(1, 10)    // 1 10
    Func(2, 3)    // 2 3
    Func2(4, 5, 6, 7)    // 4 5 6 7
    kwargs := map[string]int{"eight": 8, "nine": 9}
    Func3(4, kwargs)    // 4 eight 8 nine 9
}

요약

이 글에서는 Python 코드를 Go 언어 코드로 변환하는 방법을 소개하고 Python 함수의 관점에서 매개변수 유형 선언, 공백 식별자 사용, 인터페이스 지향 프로그래밍 및 오버로딩 방법을 논의합니다. Go 언어 프로그램을 최적화하기 위해 선택적 매개 변수 및 기본값과 같은 방법을 구현합니다. Python과 Go 언어 모두 고유한 특성과 장점과 단점이 있으며, 특정 상황에 따라 어떤 언어를 고려해야 하는지 구체적인 선택이 필요합니다. 마지막으로 읽어주셔서 감사합니다!

위 내용은 파이썬을 골랭으로 번역의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.