如何在使用swift的同时运行/调用python脚本?

时间:2019-07-03 16:59:04

标签: python ios swift xcode

我正在尝试制作一个iOS应用程序,该应用程序将根据用户的需求将pi计算为小数点后一组。我目前有一个python脚本,它将从用户那里获取一个整数值,然后将其用于Pi的计算中。我也有一个swift / Xcode项目,该项目仅允许用户输入一个整数值。所以我想知道是否有一种方法可以传递用户从我的swift项目中的文本框中输入的值,然后将该值提供给python代码,运行它,然后输出结果?在我的python代码中,我正在使用“计时器”来计算将pi计算为所请求的设置数字所花费的时间。因此,我只需要能够显示此结果。

我曾考虑过迅速重写python脚本,但是我不确定如何做到这一点。这是我在python脚本中用于计算pi的定义:

fn gen(sequence: &mut Vec<usize>, a: &mut [usize], t: usize, p: usize, k: usize, n: usize) {
    if t > n {
        if n % p == 0 {
            for x in 1..(p + 1) {
                sequence.push(a[x])
            }
        }
    } else {
        a[t] = a[t - p];
        gen(sequence, a, t + 1, p, k, n);
        for x in (a[t - p] + 1)..k {
            a[t] = x;
            gen(sequence, a, t + 1, t, k, n);
        }
    }
}

fn de_bruijn<T: Clone>(alphabet: &[T], n: usize) -> Vec<T> {
    let k = alphabet.len();
    let mut a = vec![0; n + 1];
    let vecsize = k.checked_pow(n as u32).unwrap();
    let mut sequence = Vec::with_capacity(vecsize);
    gen(&mut sequence, &mut a, 1, 1, k, n);
    sequence.into_iter().map(|x| alphabet[x].clone()).collect()
}

但是我不确定如何将其重写为swift语言,因此我想让swift将precision值传递给python会更容易。

1 个答案:

答案 0 :(得分:0)

您肯定可以在Swift中运行Python代码,因为Python被设计为嵌入式且具有C接口API。检查Swift for TensorFlow如何使用Python互操作性(尽管我找不到仅使用该模块而不是整个TensorFlow的快速方法)。您也可以检出PythonKit

但是,我认为重写该脚本不会太困难,最好避免在项目中使用更多的库和依赖项。

编辑:正如Joakim Danielson指出的那样,您将需要Python运行时,并且它似乎在iOS中不可用,因此您似乎仅限于macOS。