python中query函数-M与Python交互

本文介绍了如何利用Python的无限精度计算能力通过bottle微框架处理大位数阶乘,展示如何将Python运算结果返回PowerQuery,实现两种技术的跨语言协作。通过实例演示了如何搭建轻量级Web接口,并将其集成到PowerQuery的自定义函数中。
摘要由CSDN通过智能技术生成

在某些方面强大的同时,在其他方面必然存在一些不足,任何语言都不例外。

比如进行大位数运算,在Excel和Power Query中的数字都有位数限制,100的阶乘,是一个很大的数字了,直接算的话就会变成科学记数法,得不到精确的结果。

py.jpg

而在Python中是没有这个限制的,所以Power Query做不到的,我们可以交给Python去做。

但我们最终希望把Python的运算结果返回到PQ中,那么就差一个接口。

之前在《Power Query网抓详解》中提过,Python是可以搭建Web框架的语言,常见的有Django等框架,今天我们来介绍一个轻量级的微型框架bottle。

需要先安装bottle,可以用pip等方式安装,pip install bottle。

以上面的阶乘为例,所以还需要用到numpy包,直接上Python代码:

from bottle import *

import numpy

@route('/fact/:num')

def fact(num):

return str(numpy.math.factorial(int(num)))

run(host='localhost', port=8080)

运行后,打开浏览器,输入http://localhost:8080/fact/100,看下发生了什么:

py3.jpg

代码中第三行"fact/:"后面的num表示前台输入的参数,带入到自定义函数中,经过Python运算后返回结果。我们刚才输入的是100,改成其他数便会返回对应的结果。

那么下面就很简单了,再使用Power Query中的Web.Contents来模拟浏览器请求,结果便会返回到PQ中。

py4.jpg

最后再把100改为变量,封装为自定义函数即可。

我们在PQ中使用自定义函数fact,输入任何数都能返回正确的结果,试下999:

let

fact = (x)=>Text.FromBinary(Web.Contents("http://localhost:8080/fact/"&Text.From(x))),

result = fact(999)

in

result

py5.jpg

输入的999首先通过PQ中的自定义函数传递到URL中,发送请求,Web框架收到请求后,把参数传入到Python中,然后再传入Python的自定义函数中,运算得到结果,返回响应给PQ。

讲这个案例的目的当然不仅仅只是介绍如何算阶乘,而是提供一种新思路,让PQ中的参数能够传递到Python中,形成两个语言的交互。根据这个思路,我们只需要修改Python代码中自定义函数也就是def后面的部分,便能轻松实现大量原本PQ无法实现的功能。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值