首先,下面的查找API都是为了查找位置,或者查一共有几次这样的操作.
如果只是想判断一个字符串是不是另一个字符串的子串的话,使用序列的in运算符就可以了.
例:
原型:str.count(sub[, start[, end]])
haha只能匹配两次.
再加上扩展参数:
find函数的行为是,如果能找到,则返回在序列中的坐标,如果找不到,则返回-1. rfind是从右向左查找.我们来看例子:
找不到的例子:
输出值都是-1.
完整形式:
index和rindex的功能与find和rfind基本上一致,除了在找不到时会抛出ValueError异常而不是返回-1.
所以我们需要加try...except语句来处理之:
有时候,我们希望做从头匹配或者匹配尾部.这时候就要用到startswith函数和endswith函数.例:
这两个返回值均为True.
如果需要更复杂的匹配,还是需要正则表达式.与Java等语言不同,Python中的正则表达式有专门的模块,字符串的API不负责这个事情.
①.、说明
import ctypes
要注意函数使用的参数,如果使用了带中文的字符串,就是使用api中Unicode的函数,如上例中使用的MessageBoxW,如为纯ANSI编码字符串则直接使用MessageBox即可.
调用API函数使用ctypes的windll对象下发命令可实现调用API函数的功能.API是用于构建应用程序软件的一组子程序定义,协议和工具.一般来说,这是一套明确定义的各种软件组件之间的通信方法.
用python很头疼的一件事就是很难快速找到帮助文档.
比如查找string类的所有方法.
说实话,这事我做了两次,现在又忘记了string的文档藏在哪个角落里了.
全局变量
paramstyle:该全局变量指定当 SQL 语句需要参数时,可以使用哪种风格的参数.该变量可能返回如下变量值:
format:表示在 SQL 语句中使用 Python 标准的格式化字符串代表参数.例如,在程序中需要参数的地方使用 %s,此时此刻呢程序即可为这些参数指定参数值.
pyformat:表示在 SQL 语句中使用扩展的格式代码代表参数.比如使用 %(name),这样即可使用包含 key 为 name 的字典为该参数指定参数值.
qmark:表示在 SQL 语句中使用问号(?)代表参数.在 SQL 语句中有几个参数,全部用问号代替.
named:表示在 SQL 语句中使用命名占位符(:name)代表参数.例如 :name 代表一个参数,:age 也表示一个参数.
通过查阅这些全局变量,即可大致了解该数据库 API 模块的对外的编程风格,至于该模块内部的实现细节,完全由该模块实现者负责提供,通常不需要开发者关心.
数据库 API 的核心类
数据库连接对象通常会具有如下方法和属性:
cursor(factory=Cursor):打开游标.
commit():提交事务.
rollback():回滚事务.
close():关闭数据库连接.
isolation_level:返回或设置数据库连接中事务的隔离级别.
in_transaction:判断当前是否处于事务中.
上面第一个方法可以返回一个游标对象,游标对象是 Python DB API 的核心对象,该对象主要用于执行各种 SQL 语句,包括 DDL、DML、select 查询语句等.使用游标执行不同的 SQL 语句返回不同的数据.
游标对象通常会具有如下方法和属性:
execute(sql[, parameters]):执行 SQL 语句.parameters 参数用于为 SQL 语句中的参数指定值.
executemany(sql, seq_of_parameters):重复执行 SQL 语句.可以通过 seq_of_parameters 序列为 SQL 语句中的参数指定值,该序列有多少个元素,SQL 语句被执行多少次.
fetchone():获取查询结果集的下一行.如果没有下一行,则返回 None.
fetchmany(size=cursor.arraysize):返回查询结果集的下 N 行组成的列表.如果没有更多的数据行,则返回空列表.
fetchall():返回查询结果集的全部行组成的列表.
close():关闭游标.
rowcount:该只读属性返回受 SQL 语句影响的行数.对于 executemany() 方法,该方法所修改的记录条数也可通过该属性获取.
lastrowid:该只读属性可获取最后修改行的 rowid.
arraysize:用于设置或获取 fetchmany() 默认获取的记录条数,该属性默认为 1.有些数据库模块没有该属性.
description:该只读属性可获取最后一次查询返回的所有列的信息.
connection:该只读属性返回创建游标的数据库连接对象.有些数据库模块没有该属性.
数据库连接:用于获取游标、控制事务.
游标:执行各种 SQL 语句.
操作数据库的基本流程
调用 connect() 方法打开数据库连接,该方法返回数据库连接对象.
通过数据库连接对象打开游标.
使用游标执行 SQL 语句(包括 DDL、DML、select 查询语句等).如果执行的是查询语句,则处理查询数据.
关闭游标.
关闭数据库连接.
使用 Python 和 Flask 设计 RESTful API
近些年来 REST (REpresentational State Transfer) 已经变成了 web services 和 web APIs 的标配.
在本文中我将向你展示如何简单地使用 Python 和 Flask 框架来创建一个 RESTful 的 web service.
什么是 REST?
六条设计规范定义了一个 REST 系统的特点:
什么是一个 RESTful 的 web service?
REST 架构的最初目的是适应万维网的 HTTP 协议.
HTTP 标准的方法有如下:
========== ?===================== ?==================================
HTTP 方法 ? 行为 ? ? ? ? ? ? ? ? ? 示例
GET ? ? ? ? 获取资源的信息 ? ? ? ?
GET ? ? ? ? 获取某个特定资源的信息
POST ? ? ? ?创建新资源 ? ? ? ? ? ?
PUT ? ? ? ? 更新资源 ? ? ? ? ? ? ?
DELETE ? ? ?删除资源 ? ? ? ? ? ? ?
========== ?====================== ==================================
REST 设计不需要特定的数据格式.在请求中数据可以以?JSON?形式, 或者有时候作为 url 中查询参数项.
设计一个简单的 web service
坚持 REST 的准则设计一个 web service 或者 API 的任务就变成一个标识资源被展示出来以及它们是怎样受不同的请求方法影响的练习.
比如说,我们要编写一个待办事项应用程序而且我们想要为它设计一个 web service.要做的第一件事情就是决定用什么样的根 URL 来访问该服务.例如,我们可以通过这个来访问:
http://[hostname]/todo/api/v1.0/
今天这一节我已经决定在 URL 中包含应用的名称以及 API 的版本号.在 URL 中包含应用名称有助于提供一个命名空间以便区分同一系统上的其它服务.在 URL 中包含版本号能够帮助以后的更新,如果新版本中存在新的和潜在不兼容的功能,可以不影响依赖于较旧的功能的应用程序.
下一步骤就是选择将由该服务暴露(展示)的资源.这是一个十分简单地应用,我们只有任务,所以呢在我们待办事项中唯一的资源就是任务.
我们的任务资源将要使用 HTTP 方法如下:
========== ?=============================================== ?=============================
HTTP 方法 ? URL ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?动作
========== ?=============================================== ?==============================
GET ? ? ? ? http://[hostname]/todo/api/v1.0/tasks ? ? ? ? ? ?检索任务列表
GET ? ? ? ? http://[hostname]/todo/api/v1.0/tasks/[task_id] ?检索某个任务
POST ? ? ? ?http://[hostname]/todo/api/v1.0/tasks ? ? ? ? ? ?创建新任务
PUT ? ? ? ? http://[hostname]/todo/api/v1.0/tasks/[task_id] ?更新任务
DELETE ? ? ?http://[hostname]/todo/api/v1.0/tasks/[task_id] ?删除任务
========== ?================================================ =============================
我们定义的任务有如下一些属性:
id: 任务的唯一标识符.数字类型.
title: 简短的任务描述.字符串类型.
description: 具体的任务描述.文本类型.
done: 任务完成的状态.布尔值.
目前为止关于我们的 web service 的设计基本完成.剩下的事情就是实现它!
Flask 框架的简介
如果你读过?Flask Mega-Tutorial 系列,就会知道 Flask 是一个简单却十分强大的 Python web 框架.
在我们深入研究 web services 的细节之前,让我们回顾一下一个普通的 Flask Web 应用程序的结构.
我会首先假设你知道 Python 在你的平台上工作的基本知识. 我将讲解的例子是工作在一个类 Unix 操作系统.简而言之,这意味着它们能工作在 Linux,Mac OS X 和 Windows(如果你使用Cygwin). 如果你使用 Windows 上原生的 Python 版本的话,命令会有所不同.
$ mkdir todo-api
$ cd todo-api
$ virtualenv flask
New python executable in flask/bin/python
Installing setuptools............................done.
Installing pip...................done.
$ flask/bin/pip install flask
既然已经安装了 Flask,现在开始创建一个简单地网页应用,我们把它放在一个叫 app.py 的文件中:
#!flask/bin/pythonfrom flask import Flaskapp = Flask(__name__)@app.route('/')def index():
return "Hello, World!"if __name__ == '__main__':
app.run(debug=True)
为了运行这个程序我们必须执行 app.py:
$ chmod a+x app.py
$ ./app.py
* Running on
* Restarting with reloader
现在你可以启动你的网页浏览器,输入?看看这个小应用程序的效果.
简单吧?现在我们将这个应用程序转换成我们的 RESTful service!
使用 Python 和 Flask 实现 RESTful services
使用 Flask 构建 web services 是十分简单地,比我在?Mega-Tutorial?中构建的完整的服务端的应用程序要简单地多.
在 Flask 中有许多扩展来帮助我们构建 RESTful services,但是在我看来这个任务十分简单,没有必要使用 Flask 扩展.
这里我们直接把任务列表存储在内存中,所以呢这些任务列表只会在 web 服务器运行中工作,在结束的时候就失效. 这种方式只是适用我们自己开发的 web 服务器,不适用于生产环境的 web 服务器, 这种情况一个合适的数据库的搭建是必须的.
我们现在来实现 web service 的第一个入口:
#!flask/bin/pythonfrom flask import Flask, jsonifyapp = Flask(__name__)tasks = [
{
? ?'id': 1,
? ?'title': u'Buy groceries',
? ?'description': u'Milk, Cheese, Pizza, Fruit, Tylenol',
? ?'done': False
},
? ?'title': u'Learn Python',
? ?'description': u'Need to find a good Python tutorial on the web',
}]@app.route('/todo/api/v1.0/tasks', methods=['GET'])def get_tasks():
return jsonify({'tasks': tasks})if __name__ == '__main__':
正如你所见,没有多大的变化.我们创建一个任务的内存数据库,这里无非就是一个字典和数组.数组中的每一个元素都具有上述定义的任务的属性.
取代了首页,我们现在拥有一个 get_tasks 的函数,访问的 URI 为 /todo/api/v1.0/tasks,并且只允许 GET 的 HTTP 方法.
这个函数的响应不是文本,我们使用 JSON 数据格式来响应,Flask 的 jsonify 函数从我们的数据结构中生成.
使用网页浏览器来测试我们的 web service 不是一个最好的注意,因为网页浏览器上不能轻易地模拟所有的 HTTP 请求的方法.相反,我们会使用 curl.如果你还没有安装 curl 的话,请立即安装它.
通过执行 app.py,启动 web service.接着打开一个新的控制台窗口,运行以下命令:
$ curl -i
Content-Type: application/json
"tasks": [
?"description": "Milk, Cheese, Pizza, Fruit, Tylenol",
?"done": false,
?"id": 1,
?"title": "Buy groceries"
?"description": "Need to find a good Python tutorial on the web",
?"title": "Learn Python"
}
]
我们已经成功地调用我们的 RESTful service 的一个函数!
现在我们开始编写 GET 方法请求我们的任务资源的第二个版本.这是一个用来返回单独一个任务的函数:
task = filter(lambda t: t['id'] == task_id, tasks)
if len(task) == 0:
return jsonify({'task': task[0]})
第二个函数有些意思.这里我们得到了 URL 中任务的 id,接着 Flask 把它转换成 函数中的 task_id 的参数.
如果我们找到相应的任务,那么我们只需将它用 jsonify 打包成 JSON 格式并将其发送作为响应,就像我们以前那样处理整个任务集合.
调用 curl 请求的结果如下:
"task": {
"description": "Need to find a good Python tutorial on the web",
"done": false,
"title": "Learn Python"
Content-Type: text/html
h1Not Found/h1
pThe requested URL was not found on the server./ppIf you ? ? entered the URL manually please check your spelling and try again./p
我们会得到一个友好的错误提示:
"error": "Not found"
此时此刻呢就是 POST 方法,我们用来在我们的任务数据库中插入一个新的任务:
if not request.json or not 'title' in request.json:
task = {
? ?'id': tasks[-1]['id'] + 1,
? ?'title': request.json['title'],
? ?'description': request.json.get('description', ""),
tasks.append(task)
接着我们会创建一个新的任务字典,使用最后一个任务的 id + 1 作为该任务的 id.我们允许 description 字段缺失,并且假设 done 字段设置成 False.
使用如下的 curl 命令来测试这个新的函数:
$ curl -i -H "Content-Type: application/json" -X POST -d '{"title":"Read a book"}'
"description": "",
"title": "Read a book"
注意:如果你在 Windows 上并且运行 Cygwin 版本的 curl,上面的命令不会有任何问题.然而,如果你使用原生的 curl,命令会有些不同:
curl -i -H "Content-Type: application/json" -X POST -d "{"""title""":"""Read a book"""}"
当然在完成这个请求后,我们可以得到任务的更新列表:
?"description": "",
?"title": "Read a book"
剩下的两个函数如下所示:
@app.route('/todo/api/v1.0/tasks/int:task_id', methods=['PUT'])def update_task(task_id):
if not request.json:
if 'title' in request.json and type(request.json['title']) != unicode:
if 'description' in request.json and type(request.json['description']) is not unicode:
以上就是土嘎嘎小编为大家整理的Python中API函数相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!