精华内容
下载资源
问答
  • #来看下源码func是什么鬼func = _FunctionGenerator()是这个实例化出来的对象class _FunctionGenerator(object):"""Generate :class:`.Function` objects based on getattr calls."...

    #来看下源码func是什么鬼

    func = _FunctionGenerator()是这个实例化出来的对象

    class _FunctionGenerator(object):

    """Generate :class:`.Function` objects based on getattr calls."""

    def __init__(self, **opts):

    self.__names = []

    self.opts = opts

    构造没有func.min这些属性,怎搞出来的,如果对象.__dict__没有这个属性就会执行__getattr__这个方法,所以func.min =_FunctionGenerator(**self.opts)

    def __getattr__(self, name):

    # passthru __ attributes; fixes pydoc

    if name.startswith('__'):

    try:

    return self.__dict__[name]

    except KeyError:

    raise AttributeError(name)

    elif name.endswith('_'):

    name = name[0:-1]

    f = _FunctionGenerator(**self.opts)

    f.__names = list(self.__names) + [name]

    return f

    print(func.sum)

    1238299-20180922235520341-975462134.png

    #func.sum()就是调用 __call__方法

    def __call__(self, *c, **kwargs):

    o = self.opts.copy()

    o.update(kwargs)

    tokens = len(self.__names)

    if tokens == 2:

    package, fname = self.__names

    elif tokens == 1:

    package, fname = "_default", self.__names[0]

    else:

    package = None

    if package is not None:

    func = _registry[package].get(fname)

    if func is not None:

    return func(*c, **o)

    return Function(self.__names[-1],

    packagenames=self.__names[0:-1], *c, **o) #func.sum(Article.price) 相当于 select sum(price) from article

    1238299-20180922235957246-1621903411.png

    1238299-20180923000114527-1752138723.png

    展开全文
  • 原创作品:首发u3v3, 转载请保留作者ID:Yi_Zhi_Yu首发日期:2017.4.13Python学习群:278529278 (欢迎交流)前言在PHP中, 我们使用curl 扩展发送post请求时, 可以通过http_build_query 来构造多维的 post 参数, 用法...

    原创作品:首发u3v3, 转载请保留

    作者ID:Yi_Zhi_Yu

    首发日期:2017.4.13

    Python学习群:278529278 (欢迎交流)

    前言

    在PHP中, 我们使用curl 扩展发送post请求时, 可以通过http_build_query 来构造多维的 post 参数, 用法如下

    $request_params = [

    'name' => 'Yi_Zhi_Yu',

    'scores' => [

    ['name' => 'English', 'score'=>100],

    ['name' => 'Math', 'score'=>100]

    ]];

    echo http_build_query($request_params);

    输出如下

    user=Yi_Zhi_Yu&info%5B0%5D%5Bage%5D=27&info%5B0%5D%5Bsex%5D=man

    通过url decode, 即

    user=Yi_Zhi_Yu&info[0][age]=27&info[0][sex]=man

    这就是post时, 我们需要发送的post body 的内容

    PHP 里有http_build_query, 那python中呢,

    当然没了, 要不然我就不用自己实现了

    问题

    python 里, 我们发送post的时候, 如果需要将post body 做url encode, 有一个urllib2模块可以用

    if __name__ == '__main__':

    request_params = {'name': 'Yi_Zhi_Yu', 'score': 100}

    print(urllib.parse.urlencode(request_params))

    # name=Yi_Zhi_Yu&score=100

    那如果 post 的结构是多维的呢? 看下

    if __name__ == '__main__':

    request_params = {

    'name': 'Yi_Zhi_Yu',

    'scores':[

    {'name': 'English', 'score': 100},

    {'name': 'Math', 'score': 100}

    ]

    }

    print(urllib.parse.urlencode(request_params))

    输出如下

    name=Yi_Zhi_Yu&scores=%5B%7B%27name%27%3A+%27English%27%2C+%27score%27%3A+100%7D%2C+%7B%27name%27%3A+%27Math%27%2C+%27score%27%3A+100%7D%5D

    decode 可视化后:

    name=Yi_Zhi_Yu&scores=[{'name': 'English', 'score': 100}, {'name': 'Math', 'score': 100}]

    name 还算正常, scores直接是个json格式了

    post 请求发送出去后, 需要服务端 decode 才能用

    我们期望的格式应该是类似于PHP http_build_query的结果

    name=Yi_Zhi_Yu&scores[0][name]=English&scores[0][score]=100&scores[1][name]=Math&scores[1][score]=100

    服务端通过POST获取后, 直接就可以作为数组使用

    为此, 我实现了一个简单的版本

    解决

    直接看代码

    import urllib.parse

    def url_encoder(params):

    g_encode_params = {}

    def _encode_params(params, p_key=None):

    encode_params = {}

    if isinstance(params, dict):

    for key in params:

    encode_key = '{}[{}]'.format(p_key,key)

    encode_params[encode_key] = params[key]

    elif isinstance(params, (list, tuple)):

    for offset,value in enumerate(params):

    encode_key = '{}[{}]'.format(p_key, offset)

    encode_params[encode_key] = value

    else:

    g_encode_params[p_key] = params

    for key in encode_params:

    value = encode_params[key]

    _encode_params(value, key)

    if isinstance(params, dict):

    for key in params:

    _encode_params(params[key], key)

    return urllib.parse.urlencode(g_encode_params)

    看测试代码

    if __name__ == '__main__':

    request_params = {'name': 'Yi_Zhi_Yu',

    'scores':[

    {'name': 'English', 'score': 100},

    {'name': 'Math', 'score': 100}

    ]

    }

    #print(urllib.parse.urlencode(request_params))

    print(url_encoder(request_params))

    输出结果经过decode后如下

    scores[1][score]=100&scores[0][score]=100&scores[1][name]=Math&scores[0][name]=English&name=Yi_Zhi_Yu

    服务端在接受到这个POST bod以后, 也可以直接作为数组使用, 请求格式与PHP的 http_build_query基本类似

    不过这里有个问题是, url encode后的参数顺序与原始的request params 不一样了

    这个是因为python的dict本身是无序的, 如果要求有序, 大家可以把默认的dict 替换为OrderDict

    这个作为一个小作业吧, 后续有时间, 我会贴出来结果的

    :)

    误区

    这里还有一个关于PHP的常见误区, 当客户端发起的post请求中, header 的content-type 被设置成了 application/json时, 很多人认为, 在PHP的Server端, 用$_POST就能获取json的请求格式数据了

    然而并非如此, 这种时候, PHP只能通过

    $json = file_get_contents('php://input');

    $obj = json_decode($json);

    获取 json 的数据

    展开全文
  • Python2 中urllib模块提供了一些函数操作URL本身。一、quote(string[, safe])它返回一个字符串,其中所有的特殊字符都已被对URL友好的字符所代替(就像用%7E代替了~)举例:假设接口测试中,要向一个url发送一串json...

    Python2 中urllib模块提供了一些函数操作URL本身。

    一、quote(string[, safe])

    它返回一个字符串,其中所有的特殊字符都已被对URL友好的字符所代替(就像用%7E代替了~)

    举例:假设接口测试中,要向一个url发送一串json格式的报文,服务器要接收时会对json数据进行解析,如果报文中有%@*?等特殊字符,很有可能服务器接收并解析后就不合法 出现空格等,我们可以使用这个函数将json数据编码。

    它对应的解码是unquote(string)。(结果跟网页版的urlencode是一样的)。

    二、quote_plus(string[,safe])。

    功能和quote差不多,但用+代替空格。对应的解码函数是unquote_plus(string)

    三、urlencode(query[,doseq])

    把映射(比如字典)或者包含两个元素的元组的序列——(key,value)这种形式——转换成URL格式编码的字符串,这样的字符串可以在CGI查询中使用。

    举例:当url地址含有中文,或者参数有中文的时候,url作为参数传递,需要处理一下。

    >> data ={'No': '01', 'Name': '燕子'}

    >> print(urlencode(data))

    结果:

    >>Name=%E7%87%95%E5%AD%90&No=01

    注意 它对应的解码 是没有decode函数的,对应的还是unquote(string)

    >>unquote("%E7%87%95%E5%AD%90")

    结果 >>燕子

    (python3中,以上介绍的函数在urllib.parse模块中)

    展开全文
  • 在某些方面强大的同时,在其他方面必然存在一些不足,任何...而在Python中是没有这个限制的,所以Power Query做不到的,我们可以交给Python去做。但我们最终希望把Python的运算结果返回到PQ中,那么就差一个接口。...

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

    比如进行大位数运算,在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无法实现的功能。

    展开全文
  • Python Data Analysis Library 或 pandas 是基于...pandas提供了大量能使我们快速便捷地处理数据的函数和方法。你很快就会发现,它是使Python成为强大而高效的数据分析环境的重要因素之一。相较于 Python 的内置函...
  • python.query()函数

    万次阅读 2020-04-14 13:40:29
    #使用python.query()函数对数据框进行(挑选行)的操作 import pandas as pd d={ 'name':['a','n','c','d','e','f'], 'Gender':['male','female','male','male','female','female'], 'age':[23,24,24,22,21,20],...
  • #if-else 方法实现不同的选择进入不同的函数,如下: def add_product(): print('a增加商品功能') def del_product(): print('删除商品功能') def query_product(): print('查询商品功能') def exit_user(): ...
  • 来源:Python数据之道 (ID:PyDataLab)作者:阳哥Pandas 可以说是 在Python数据科学领域应用最为广泛的工具之一。Pandas是一种高效的数据处理库,它以 dat...
  • oc与iloc函数loc函数import pandas as pdimport numpy# 导入数据df = pd.read_csv(filepath_or_buffer="D://movie.csv")df_new = df.set_index(["country"])df_new.loc[list(["Canada"])] # 1df_new.loc[df_new[...
  • 最近我在使用elasticsearch 5.1版本,用python调用delete_by_query根据已知条件过滤数据并删除的时候,出现如下问题 调用代码: from elasticsearch import Elasticsearch ES = Elasticsearch(ES_SEARCH_...
  • sqlalchemy query函数可用参数有哪些?

    千次阅读 2018-08-11 17:22:57
    sqlalchemy query函数可用参数有哪些? 一、模型名 二、模型对象属性 三、聚合函数 名称 作用 func.sum 求和 func.max 求最大值 func.min 求最小值 func.count 求行数 func.avg 求...
  • Pandas之query函数

    千次阅读 2020-08-15 00:02:40
    过滤数据帧的一个简单方法是query函数。 import pandas as pd import numpy as np values_1 = np.random.randint(10, size=10) values_2 = np.random.randint(10, size=10) years = np.arange(2010, 2020) groups...
  •   在使用 Python 的 Pandas 库处理数据时,我们时常需要添加一些新列,时不时添加一列也就算了,同时添加多列(毫无规律的,不使用循环)时是真的气人,还有就是快速选择符合条件的数据框有时也会成为令人难受。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 51,316
精华内容 20,526
关键字:

pythonquery函数

python 订阅