首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

提速72倍,在Python里面调用Golang函数

在之前的一篇文章:一日一技:立竿见影地把你的 Python 代码提速7倍,我们讲到了如何通过把 Python 代码编译成 C 语言代码来提高代码的运行速度。...实际上是可以的,我们只需要把 Golang 写的程序编译为.so文件就可以在 Python 里面调用了。 首先修改一下我们的 Golang 代码,把计算斐波拉契数列的函数fib的首字母改成大写。...在 Golang ,只有首字母大写的函数,才能被package外面的代码调用。...},耗时:{end - start}') 在这段代码里面,通过 Python 自带的ctypes模块,加载_fib.so文件,然后提取出里面的Fib函数。...这里涉及到 C 语言中的变量类型与 Golang 变量类型的映射关系,可以参阅:cgo[1]。本文的例子,由于整型比较特殊,直接使用int就可以了。但其他的类型可能并没有这么简单。

3.1K20

一日一技:立竿见影地把你的 Python 代码提速7倍

在我们以前的文章,曾经讲过计算斐波那契数列的几种方法,其中基于递归的方法是速度最慢的,例如计算第40项的值,需要36秒。如下图所示: ? 要提高运算速度,根本办法当然是改进算法。...你需要做的只是使用一个叫做 Cython 的库把 Python 代码编译为 C 语言代码即可。...首先我们来安装 Cython,就像安装普通的第三方库一样: python3 -m pip install cython 安装完成以后,我们单独写计算斐波那契数列的函数: def fib(n):...接下来,开始编译代码,执行如下命令: python3 setup.py build_ext --inplace 我的 PythonPython3.7,所以运行完成以后,会生成一个fast_fib.cpython...-37m-darwin.so,如果你的 Python 是3.8,这个文件名可能是fast_fib.cpython-38m-darwin.so。

82140

会玩Python!嘭!Go-Python

(item) fmt.Println(s) } } 首先调用PyImport_ImportModule导入sys包,然后取出path对象,再获取path的长度,使用循环挨个取出列表的字符串,打印出来...有了上面的代码,我们可以试一试调用自定义python模块了,先写一个斐波那契级数 # fib.py def fib(n): if n <= 2: return 1 return...("get fib error") return } out := fib.CallFunction(python.PyInt_FromLong(10)) if out == nil {...fmt.Println("call fib error") return } fmt.Printf("fib(%d)=%d\n", 10, python.PyInt_AsLong(...何时使用go-python 你需要一个功能,没有开源的go实现,但是python有,并且性能不是很重要 你需要一个脚本语言嵌入到go,让go代码获得动态能力 你想使用Cython干一些hack的事但是又不想撸

1.6K10

Python-100例(5-6) 排序&斐波那契数列

2019 年第 23 篇,总 47 篇文章 本文大于 2500 字,阅读大约需要 10 分钟 前面分享的四道题目如下: Python-100 | 练习题 01 & 列表推导式 Python-100 练习题...02 Python-100 练习题 03 完全平方数 Python-100 练习题 04 判断天数 这次是分享 Python-100 例的第五和第六题,分别是排序和斐波那契数列问题,这两道题目其实都是非常常见的问题...,特别是后者,一般会在数据结构的教程,讲述到递归这个知识点的时候作为例题进行介绍的。...(10) a2 = fib2(10) fibs = fib_array(10) print('fib1 result=', a1) print('fib2 result=', a2) print('fib...() - start2) print('fib2 result=', a2) 输出结果如下: fib1 cost time: 0.0 fib1 result= 832040 fib2 cost time

55920

一日一技:在Python 的线程运行协程

摄影:产品经理 下厨:kingname 在一篇文章理解Python异步编程的基本原理这篇文章,我们讲到,如果在异步代码里面又包含了一段非常耗时的同步代码,异步代码就会被卡住。...我们来看一下 Python 官方文档[1]的说法: 那么怎么使用呢?...请注意上图中红色箭头对应的calc_fib这是一个同步函数,请与上一篇文章的异步函数区分开。run_in_executor的第二个参数需要是一个同步函数的函数名。...在上面的例子,我们创建的是有4个线程的线程池。所以这个线程池最多允许4个阻塞式的同步函数“并行”。...参考资料 [1] Python 官方文档: https://docs.python.org/3/library/asyncio-eventloop.html#executing-code-in-thread-or-process-pools

3.5K32

优化函数递归

但是在 Python ,使用递归会消耗很大的空间,可能还会产生大量的重复的计算。所以我们应该想办法消除递归,下面我以斐波那契序列为例讲解几种消除递归的方法。...注意:有人可能会想因为 Python 递归有次数限制,最多 1000 次,所以需要消除递归。如果是因为这个消除递归那就真的是闲着无聊没事干!...因为这个次数限制是可以修改的,直接使用 sys 模块的 setrecursionlimit 函数来设置,这个函数接受一个参数,这个参数是新设置最大次数。...在 Python ,我们只要初始化一个空列表就是初始化一个空栈,列表对象的 append 方法就相当于入栈,列表对象的 pop 方法就相当于出栈。...从运行结果可以看出很明显用栈实现非递归的效率高。用栈实现非递归虽然效率高,但是代码逻辑太复杂了,不到万不得已真的不想用。

1.1K10

Python的module讲解

和一个语句(statement),第一行的print语句,我们在当前文件目录运行Python Interpreter就可以去引入这个模块,并执行模块定义的fib()函数。...2 for n in range(10, 50, 5): 3 fib(n) 然后用Python解释器运行calcute.py得到结果。.../,sys.path含有这个目录 Python有一个标准库,其中定义了一系列的module,这些module的一部分是直接集成在Interpreter的,这些built-in module主要提供了很重要的但是...Python语言又没有提供的功能,比如跟system call有关的sys module就集成在所有平台的Python Interpreter,在Interpreter中集成哪些module是可以配置的...7.Python模块的引用有两种方法: Python导入模块的方法有两种:import module 和 from module import,区别是前者所有导入的东西使用时需加上模块名的限定,而后者不要

73920

python开发_python的module

python,我们可以把一些功能模块化,就有一点类似于java,把一些功能相关或者相同的代码放到一起,这样我们需要用的时候,就可以直接调用了 这样做的好处:   1,只要写好了一个功能模块,就可以在以后调用...如果一个相同的功能,我们在一个模块写了一遍,在另外的模块又写了一遍......这样我们难免保证我们在写的过程不发生错误。     ...我们需要在:test_modules.py(和fibo.py文件在同一个目录的另一个文件)文件调用fibo.py的方法: 1 import fibo 2 3 fibo.fib(1000) 4 result...= fibo.fib2(1000) 5 print(result) 运行效果: Python 3.3.2 (v3.3.2:d047928ae3f6, May 16 2013, 00:03:43) [MSC...) 上面描述的是,我们应用了fibo.py文件fibfib2两个方法 运行效果: Python 3.3.2 (v3.3.2:d047928ae3f6, May 16 2013, 00:03:43)

59540
领券