自定义函数,常用函数

2019-11-20 22:31栏目:专项工作
TAG:

要调用RPC接口,python提供了一个框架grpc,这是google开源的

1、判断字符串,内容是否为数字

1、map() 此函数可以,将列表每一个函数作用在函数上,并返回list

rpc相关文档:

我们用python;xlrd读Excel内容时,本来只是输入的整数字,经常读出来的是float类型

原型 map(function,[list])

def fc(x):
    return x * 2

print(map(fc,[1,2,3,4,5]))

https://grpc.io/docs/tutorials/basic/python.html

我们需要自动转成整型,意思就是说,读出来的和我们输入的一样,但是,我们不能直接用int转换,原因呢,我们无法确定读的每个单元格的值都是数字

输出:

 

那么我们自己,定认一个函数如下:

[2,4,6,8,10]

需要安装的python包如下:

def isNumeric(value):
    try:
        tv = float(value)
        return int(tv)
    except ValueError:
        return value

 

1.grpc安装

 

是不是很方便,当然有人说,可以写成for循环,是的这样也可以实现,但是我们有更简便的方法,有必要写这么一个for循环吗。

pip install grpcio

2、获取当前系统时间

list = []
for i in [1,2,3,4,5]:
    list.append(i*2)

print(list)

 

import time

    #获取当前系统时间
    def getCurTime(self):
        curTimeStr = time.strftime('%Y-%m-%d_%H-%M-%S',time.localtime()).decode('utf-8')
        return curTimeStr

输出:

2.grpc的python protobuf相关的编译工具

 

[2,4,6,8,10]

pip install grpcio-tools

3、

 

 

 

当然map()函数还有更多,更复杂的用法

3.protobuf相关python依赖库

print(map(str,[1,2,3,4,5]))

pip install protobuf

结果:列表内元素都转换成了字符串

 

['1', '2', '3', '4', '5']

4.一些常见原型的生成python类的集合:

 

pip install googleapis-common-protos

首字母大写;用到str.title属性

 

print(map(str.title,['abc','def','ghj']))

 

输出:

编译protobuf文件:使用以下命令生成Python代码:

['Abc', 'Def', 'Ghj']

python3 -m grpc_tools.protoc -I<目标路径目录> --python_out=. --grpc_python_out=<目标文件所在目录路径> <目标文件data.proto>

 

python3 -m grpc_tools.protoc -I. --python_out=. --grpc_python_out=. data.proto

2、eval()此函数,将字符串,转换成其类型对象

 

为什么说eval()是转换成,其类型对象呢,这是因为,具体是什么类型的数据取决于,字符串内容

 

如:eval("1234")这个会转成int型

注意:protobuf文件,为定义服务接口代码文件,这里是data.proto

eval("{'user':'name'}") 这样会转成字典等

会生成:data_pb2.py 与 data_pb2_grpc.py

例子:将字符串,转换成字典

data_pb2.py是服务接口映射

strdic = '''{'username':'pyhleng','password':'q123456'}
'''
print eval(strdic)
print(eval(strdic)['password'])

data_pb2_grpc.py方法映射

输出:

 

{'username': 'pyhleng', 'password': 'q123456'}
q123456

protobuf内容示例:

 

syntax = "proto3";
package grpcDemo;

message HelloRequest {
   string name = 1;
}

message HelloReply {
   string message = 1;
}


service gRPC {
  rpc SayHello (HelloRequest) returns (HelloReply) {}
}

 有没有上边的代码是多此一举,直接定义一个字典对象不就行了,为什么要有三引号,引上。是啊为什么要这样做?????

接口调用内容示例:

上边代码只是写一个例子,模拟将数据{'username':'pyhleng','password':'q123456'} 存储在数据表,然后在读出来的样子。

# -*- coding: utf-8 -*-
import grpc
import data_pb2,data_pb2_grpc

_HOST = 'localhost'
_PORT = '8080'

def run():
    conn = grpc.insecure_channel(_HOST + ':' + _PORT)
    client = data_pb2_grpc.gRPCStub(channel=conn)
    response = client.SayHello(data_pb2.HelloRequest(name='hello,world!'))
    print("received: " + response.text)

if __name__ == '__main__':
    run()

如果将{'username':'pyhleng','password':'q123456'}存在数据表中,在读出来的时候就是字符串。如果要当字典用那么

 

eval()函数是少不了的。

 

 

版权声明:本文由ag真人发布于专项工作,转载请注明出处:自定义函数,常用函数