Python中API
Ⅰ python如何提供api
python有個etcd的庫,可以網上搜下看下這個庫的使用以及它開發的api介面,
不過之前go使用etcd的時候,是調用etcd本身的rest api,沒有使用第三方的etcd的庫
etcd的api文檔github上有的,搜下這個coreos/etcd
你可以選擇自己喜歡的方式
Ⅱ ffmpeg-python中文文檔(三)——API參考
表示上游節點的傳出邊緣;可以用來創建更多的下游節點。
輸入文件 URL (ffmpeg -i option)
在一個 ffmpeg 命令行中包含所有給定的輸出
輸出文件地址
不詢問就覆蓋輸出文件(ffmpeg -y 選項)
在指定文件上運行 ffprobe 並返回輸出的 JSON 表示。
構建用於調用 ffmpeg 的命令行。
構建要傳遞給 ffmpeg 的命令行參數。
為提供的節點圖調用 ffmpeg 。
參數
為提供的節點圖非同步調用 ffmpeg。
參數
例子
運行和流式輸入:
運行並捕獲輸出:
使用 numpy 逐幀處理視頻:
通過重新混合顏色通道來調整視頻輸入幀。
連接音頻和視頻流,將它們一個接一個地連接在一起。
篩選器適用於同步視頻和音頻流的片段。所有段必須具有每種類型的相同數量的流,這也是輸出時的流數。
參數
裁剪輸入視頻。
參數
在輸入圖像上繪制一個彩色框。
參數
使用 libfreetype 庫從視頻頂部的指定文件中繪制文本字元串或文本。
要啟用此過濾器的編譯,您需要使用 --enable-libfreetype . 要啟用默認字體回退和字體選項,您需要使用 --enable-libfontconfig . 要啟用 text_shaping 選項,您需要使用 --enable-libfribidi
參數
· box - 用於使用背景顏色在文本周圍繪制一個框。該值必須是 1(啟用)或 0(禁用)。框的默認值為 0。
· boxborderw – 使用 boxcolor 設置要在框周圍繪制的邊框寬度。boxborderw 的默認值為 0。
· boxcolor - 用於在文本周圍繪制框的顏色。有關此選項的語法,請查看 ffmpeg-utils 手冊中的「顏色」部分。 boxcolor 的默認值為「white」。
· line_spacing – 使用 box 設置要在框周圍繪制的邊框的行間距(以像素為單位)。line_spacing 的默認值為 0。
· borderw – 使用邊框顏色設置要在文本周圍繪制的邊框寬度。邊框的默認值為 0。
· bordercolor – 設置用於在文本周圍繪制邊框的顏色。有關此選項的語法,請查看 ffmpeg-utils 手冊中的「顏色」部分。邊框顏色的默認值為「黑色」。
· 擴展- 選擇文本的擴展方式。可以是 none、strftime(已棄用)或 normal(默認)。有關詳細信息,請參閱下面的文本擴展部分。
· basetime – 設置計數的開始時間。值以微秒為單位。僅適用於已棄用的 strftime 擴展模式。要在正常擴展模式下進行模擬,請使用 pts 函數,提供開始時間(以秒為單位)作為第二個參數。
· fix_bounds - 如果為 true,檢查並修復文本坐標以避免剪切。
· fontcolor - 用於繪制字體的顏色。有關此選項的語法,請查看 ffmpeg-utils 手冊中的「顏色」部分。fontcolor 的默認值為「黑色」。
· fontcolor_expr – 與文本相同的擴展字元串以獲得動態字體顏色值。默認情況下,此選項具有空值並且不被處理。設置此選項時,它會覆蓋 fontcolor 選項。
· font - 用於繪制文本的字體系列。默認情況下無。
· fontfile – 用於繪制文本的字體文件。必須包含路徑。如果禁用了 fontconfig 支持,則此參數是必需的。
· alpha – 繪制應用 alpha 混合的文本。該值可以是介於 0.0 和 1.0 之間的數字。該表達式也接受相同的變數 x、y。默認值為 1。請參閱 fontcolor_expr。
· fontsize – 用於繪制文本的字體大小。字體大小的默認值為 16。
· text_shaping – 如果設置為 1,則在繪制文本之前嘗試對文本進行整形(例如,反轉從右到左文本的順序並加入阿拉伯字元)。否則,只需按照給定的方式繪制文本。默認為 1(如果支持)。
· ft_load_flags –用於載入字體的標志。這些標志映射了 libfreetype 支持的相應標志,並且是以下值的組合:
默認值為「默認」。有關更多信息,請參閱 FT_LOAD_* libfreetype 標志的文檔。
· shadowcolor – 用於在已繪制文本後面繪制陰影的顏色。有關此選項的語法,請查看 ffmpeg-utils 手冊中的「顏色」部分。shadowcolor 的默認值為「黑色」。
· shadowx – 文本陰影位置相對於文本位置的 x 偏移量。它可以是正值或負值。默認值為「0」。
· shadowy – 文本陰影位置相對於文本位置的 y 偏移量。它可以是正值或負值。默認值為「0」。
· start_number – n/frame_num 變數的起始幀號。默認值為「0」。
· tabsize - 用於呈現選項卡的空格數大小。默認值為 4。
· timecode – 以「hh:mm:ss[:;.]ff」格式設置初始時間碼表示。它可以帶或不帶文本參數使用。必須指定 timecode_rate 選項。
· rate – 設置時間碼幀率(僅限時間碼)。
· timecode_rate – 的別名rate。
· r – 的別名rate。
· tc24hmax – 如果設置為 1,時間碼選項的輸出將在 24 小時左右回繞。默認值為 0(禁用)。
· text -- 要繪制的文本字元串。文本必須是 UTF-8 編碼字元序列。如果沒有使用參數 textfile 指定文件,則此參數是必需的。
· textfile – 包含要繪制的文本的文本文件。文本必須是 UTF-8 編碼字元序列。如果沒有使用參數 text 指定文本字元串,則此參數是必需的。如果同時指定了 text 和 textfile,則會引發錯誤。
· reload – 如果設置為 1,文本文件將在每一幀之前重新載入。一定要自動更新它,否則它可能會被部分讀取,甚至失敗。
· x – 指定將在視頻幀內繪制文本的偏移量的表達式。它相對於輸出圖像的左邊框。默認值為「0」。
· y - 指定將在視頻幀內繪制文本的偏移量的表達式。它相對於輸出圖像的上邊框。默認值為「0」。有關接受的常量和函數的列表,請參見下文。
表達式常量:
x 和 y 的參數是包含以下常量和函數的表達式:
· dar:輸入顯示縱橫比,同 (w / h) * sar
· hsub:水平色度子樣本值。例如,對於像素格式「yuv422p」,hsub 為 2,vsub 為 1。
· vsub:垂直色度子樣本值。例如,對於像素格式「yuv422p」,hsub 為 2,vsub 為 1。
· line_h:每個文本行的高度
· lh:別名為line_h.
· main_h:輸入高度
· h: 的別名main_h。
· H: 的別名main_h。
· main_w:輸入寬度
· w: 的別名main_w。
· W: 的別名main_w。
· ascent:對於所有渲染的字形,從基線到用於放置字形輪廓點的最高/上網格坐標的最大距離。這是一個正值,因為網格的 Y 軸向上。
· max_glyph_a: 的別名ascent。
· 下降:對於所有渲染的字形,從基線到用於放置字形輪廓點的最低網格坐標的最大距離。由於網格的方向,這是一個負值,Y 軸向上。
· max_glyph_d: 的別名descent。
· max_glyph_h:最大字形高度,即渲染文本中包含的所有字形的最大高度,相當於上升-下降。
· max_glyph_w:最大字形寬度,即渲染文本中包含的所有字形的最大寬度。
· n:輸入幀數,從0開始
· rand(min, max):返回一個包含在 min 和 max 之間的隨機數
· sar:輸入樣本縱橫比。
· t:時間戳,以秒為單位,如果輸入時間戳未知,則為 NAN
· text_h:渲染文本的高度
· th: 的別名text_h。
· text_w:渲染文本的寬度
· tw: 的別名text_w。
· x:繪制文本的 x 偏移坐標。
· y:繪制文本的 y 偏移坐標。
這些參數允許 x 和 y 表達式相互引用,因此您可以例如指定 y=x/dar.
應用自定義過濾器。
filter通常由更高級別的過濾器函數使用,例如 hflip ,但如果缺少過濾器實現 ffmpeg-python ,您可以 filter 直接調用以 ffmpeg-python 將過濾器名稱和參數逐字傳遞給 ffmpeg 。
參數
函數名稱後綴_是為了避免與標准 pythonfilter 函數混淆。
例子
替代名稱 filter ,以免與內置的 pythonfilter 運算符沖突。
應用具有一個或多個輸出的自定義過濾器。
這 filter 與過濾器可以產生多個輸出相同。
要引用輸出流,請使用 .stream 運算符或括弧簡寫:
例子
水平翻轉輸入視頻。
修改輸入的色調和/或飽和度。
參數
將一個視頻疊加在另一個視頻之上。
參數
更改輸入幀的 PTS(表示時間戳)。
FFmpeg里有兩種時間戳:DTS(Decoding Time Stamp)和PTS(Presentation Time Stamp)。 顧名思義,前者是解碼的時間,後者是顯示的時間。
參數
修剪輸入,使輸出包含輸入的一個連續子部分。
參數
垂直翻轉輸入視頻。
應用縮放和平移效果。
參數
Ⅲ 如何使用python 開發一個api
使用 Python 和 Flask 設計 RESTful API
近些年來 REST (REpresentational State Transfer) 已經變成了 web services 和 web APIs 的標配。
在本文中我將向你展示如何簡單地使用 Python 和 Flask 框架來創建一個 RESTful 的 web service。
什麼是 REST?
六條設計規范定義了一個 REST 系統的特點:
客戶端-伺服器: 客戶端和伺服器之間隔離,伺服器提供服務,客戶端進行消費。
無狀態: 從客戶端到伺服器的每個請求都必須包含理解請求所必需的信息。換句話說, 伺服器不會存儲客戶端上一次請求的信息用來給下一次使用。
可緩存: 伺服器必須明示客戶端請求能否緩存。
分層系統: 客戶端和伺服器之間的通信應該以一種標準的方式,就是中間層代替伺服器做出響應的時候,客戶端不需要做任何變動。
統一的介面: 伺服器和客戶端的通信方法必須是統一的。
按需編碼: 伺服器可以提供可執行代碼或腳本,為客戶端在它們的環境中執行。這個約束是唯一一個是可選的。
- ========== ===================== ==================================
- HTTP 方法 行為 示例
- ========== ===================== ==================================
- GET 獲取資源的信息 http://example.com/api/orders
- GET 獲取某個特定資源的信息 http://example.com/api/orders/123
- POST 創建新資源 http://example.com/api/orders
- PUT 更新資源 http://example.com/api/orders/123
- DELETE 刪除資源 http://example.com/api/orders/123
- ========== ====================== ==================================
- ========== =============================================== =============================
- 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: 任務完成的狀態。布爾值。
- $ 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/bin/pythonfrom flask import Flaskapp = Flask(__name__)@app.route('/')def index():
- return "Hello, World!"if __name__ == '__main__':
- app.run(debug=True)
- $ chmod a+x app.py
- $ ./app.py
- * Running on http://127.0.0.1:5000/
- * Restarting with reloader
- #!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
- },
- {
- 'id': 2,
- 'title': u'Learn Python',
- 'description': u'Need to find a good Python tutorial on the web',
- 'done': False
- }]@app.route('/todo/api/v1.0/tasks', methods=['GET'])def get_tasks():
- return jsonify({'tasks': tasks})if __name__ == '__main__':
- app.run(debug=True)
- $ curl -i http://localhost:5000/todo/api/v1.0/tasks
- HTTP/1.0 200 OK
- Content-Type: application/json
- Content-Length: 294
- Server: Werkzeug/0.8.3 Python/2.7.3
- Date: Mon, 20 May 2013 04:53:53 GMT
- {
- "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",
- "done": false,
- "id": 2,
- "title": "Learn Python"
- }
- ]
- }
- from flask import [email protected]('/todo/api/v1.0/tasks/<int:task_id>', methods=['GET'])def get_task(task_id):
- task = filter(lambda t: t['id'] == task_id, tasks)
- if len(task) == 0:
- abort(404)
- return jsonify({'task': task[0]})
- $ curl -i http://localhost:5000/todo/api/v1.0/tasks/2
- HTTP/1.0 200 OK
- Content-Type: application/json
- Content-Length: 151
- Server: Werkzeug/0.8.3 Python/2.7.3
- Date: Mon, 20 May 2013 05:21:50 GMT
- {
- "task": {
- "description": "Need to find a good Python tutorial on the web",
- "done": false,
- "id": 2,
- "title": "Learn Python"
- }
- }
- $ curl -i http://localhost:5000/todo/api/v1.0/tasks/3
- HTTP/1.0 404 NOT FOUND
- Content-Type: text/html
- Content-Length: 238
- Server: Werkzeug/0.8.3 Python/2.7.3
- Date: Mon, 20 May 2013 05:21:52 GMT
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
- <title>404 Not Found</title>
- <h1>Not Found</h1>
- <p>The requested URL was not found on the server.</p><p>If you entered the URL manually please check your spelling and try again.</p>
- from flask import [email protected](404)def not_found(error):
- return make_response(jsonify({'error': 'Not found'}), 404)
- $ curl -i http://localhost:5000/todo/api/v1.0/tasks/3
- HTTP/1.0 404 NOT FOUND
- Content-Type: application/json
- Content-Length: 26
- Server: Werkzeug/0.8.3 Python/2.7.3
- Date: Mon, 20 May 2013 05:36:54 GMT
- {
- "error": "Not found"
- }
- from flask import [email protected]('/todo/api/v1.0/tasks', methods=['POST'])def create_task():
- if not request.json or not 'title' in request.json:
- abort(400)
- task = {
- 'id': tasks[-1]['id'] + 1,
- 'title': request.json['title'],
- 'description': request.json.get('description', ""),
- 'done': False
- }
- tasks.append(task)
- return jsonify({'task': task}), 201
- $ curl -i -H "Content-Type: application/json" -X POST -d '{"title":"Read a book"}' http://localhost:5000/todo/api/v1.0/tasks
- HTTP/1.0 201 Created
- Content-Type: application/json
- Content-Length: 104
- Server: Werkzeug/0.8.3 Python/2.7.3
- Date: Mon, 20 May 2013 05:56:21 GMT
- {
- "task": {
- "description": "",
- "done": false,
- "id": 3,
- "title": "Read a book"
- }
- }
- curl -i -H "Content-Type: application/json" -X POST -d "{"""title""":"""Read a book"""}" http://localhost:5000/todo/api/v1.0/tasks
- $ curl -i http://localhost:5000/todo/api/v1.0/tasks
- HTTP/1.0 200 OK
- Content-Type: application/json
- Content-Length: 423
- Server: Werkzeug/0.8.3 Python/2.7.3
- Date: Mon, 20 May 2013 05:57:44 GMT
- {
- "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",
- "done": false,
- "id": 2,
- "title": "Learn Python"
- },
- {
- "description": "",
- "done": false,
- "id": 3,
- "title": "Read a book"
- }
- ]
- }
- @app.route('/todo/api/v1.0/tasks/<int:task_id>', methods=['PUT'])def update_task(task_id):
- task = filter(lambda t: t['id'] == task_id, tasks)
- if len(task) == 0:
- abort(404)
- if not request.json:
- abort(400)
- if 'title' in request.json and type(request.json['title']) != unicode:
- abort(400)
- if 'description' in request.json and type(request.json['description']) is not unicode:
- abort(400)
什麼是一個 RESTful 的 web service?
REST 架構的最初目的是適應萬維網的 HTTP 協議。
RESTful web services 概念的核心就是「資源」。 資源可以用URI來表示。客戶端使用 HTTP 協議定義的方法來發送請求到這些 URIs,當然可能會導致這些被訪問的」資源「狀態的改變。
HTTP 標準的方法有如下:
REST 設計不需要特定的數據格式。在請求中數據可以以JSON形式, 或者有時候作為 url 中查詢參數項。
設計一個簡單的 web service
堅持 REST 的准則設計一個 web service 或者 API 的任務就變成一個標識資源被展示出來以及它們是怎樣受不同的請求方法影響的練習。
比如說,我們要編寫一個待辦事項應用程序而且我們想要為它設計一個 web service。要做的第一件事情就是決定用什麼樣的根 URL 來訪問該服務。例如,我們可以通過這個來訪問:
http://[hostname]/todo/api/v1.0/
在這里我已經決定在 URL 中包含應用的名稱以及 API 的版本號。在 URL 中包含應用名稱有助於提供一個命名空間以便區分同一系統上的其它服務。在 URL 中包含版本號能夠幫助以後的更新,如果新版本中存在新的和潛在不兼容的功能,可以不影響依賴於較舊的功能的應用程序。
下一步驟就是選擇將由該服務暴露(展示)的資源。這是一個十分簡單地應用,我們只有任務,因此在我們待辦事項中唯一的資源就是任務。
我們的任務資源將要使用 HTTP 方法如下:
我們定義的任務有如下一些屬性:
目前為止關於我們的 web service 的設計基本完成。剩下的事情就是實現它!
Flask 框架的簡介
如果你讀過Flask Mega-Tutorial 系列,就會知道 Flask 是一個簡單卻十分強大的 Python web 框架。
在我們深入研究 web services 的細節之前,讓我們回顧一下一個普通的 Flask Web 應用程序的結構。
我會首先假設你知道 Python 在你的平台上工作的基本知識。 我將講解的例子是工作在一個類 Unix 操作系統。簡而言之,這意味著它們能工作在 Linux,Mac OS X 和 Windows(如果你使用Cygwin)。 如果你使用 Windows 上原生的 Python 版本的話,命令會有所不同。
讓我們開始在一個虛擬環境上安裝 Flask。如果你的系統上沒有 virtualenv,你可以從https://pypi.python.org/pypi/virtualenv上下載:
既然已經安裝了 Flask,現在開始創建一個簡單地網頁應用,我們把它放在一個叫 app.py 的文件中:
為了運行這個程序我們必須執行 app.py:
現在你可以啟動你的網頁瀏覽器,輸入http://localhost:5000看看這個小應用程序的效果。
簡單吧?現在我們將這個應用程序轉換成我們的 RESTful service!
使用 Python 和 Flask 實現 RESTful services
使用 Flask 構建 web services 是十分簡單地,比我在Mega-Tutorial中構建的完整的服務端的應用程序要簡單地多。
在 Flask 中有許多擴展來幫助我們構建 RESTful services,但是在我看來這個任務十分簡單,沒有必要使用 Flask 擴展。
我們 web service 的客戶端需要添加、刪除以及修改任務的服務,因此顯然我們需要一種方式來存儲任務。最直接的方式就是建立一個小型的資料庫,但是資料庫並不是本文的主體。學習在 Flask 中使用合適的資料庫,我強烈建議閱讀Mega-Tutorial。
這里我們直接把任務列表存儲在內存中,因此這些任務列表只會在 web 伺服器運行中工作,在結束的時候就失效。 這種方式只是適用我們自己開發的 web 伺服器,不適用於生產環境的 web 伺服器, 這種情況一個合適的資料庫的搭建是必須的。
我們現在來實現 web service 的第一個入口:
正如你所見,沒有多大的變化。我們創建一個任務的內存資料庫,這里無非就是一個字典和數組。數組中的每一個元素都具有上述定義的任務的屬性。
取代了首頁,我們現在擁有一個 get_tasks 的函數,訪問的 URI 為 /todo/api/v1.0/tasks,並且只允許 GET 的 HTTP 方法。
這個函數的響應不是文本,我們使用 JSON 數據格式來響應,Flask 的 jsonify 函數從我們的數據結構中生成。
使用網頁瀏覽器來測試我們的 web service 不是一個最好的注意,因為網頁瀏覽器上不能輕易地模擬所有的 HTTP 請求的方法。相反,我們會使用 curl。如果你還沒有安裝 curl 的話,請立即安裝它。
通過執行 app.py,啟動 web service。接著打開一個新的控制台窗口,運行以下命令:
我們已經成功地調用我們的 RESTful service 的一個函數!
現在我們開始編寫 GET 方法請求我們的任務資源的第二個版本。這是一個用來返回單獨一個任務的函數:
第二個函數有些意思。這里我們得到了 URL 中任務的 id,接著 Flask 把它轉換成 函數中的 task_id 的參數。
我們用這個參數來搜索我們的任務數組。如果我們的資料庫中不存在搜索的 id,我們將會返回一個類似 404 的錯誤,根據 HTTP 規范的意思是 「資源未找到」。
如果我們找到相應的任務,那麼我們只需將它用 jsonify 打包成 JSON 格式並將其發送作為響應,就像我們以前那樣處理整個任務集合。
調用 curl 請求的結果如下:
當我們請求 id #2 的資源時候,我們獲取到了,但是當我們請求 #3 的時候返回了 404 錯誤。有關錯誤奇怪的是返回的是 HTML 信息而不是 JSON,這是因為 Flask 按照默認方式生成 404 響應。由於這是一個 Web service 客戶端希望我們總是以 JSON 格式回應,所以我們需要改善我們的 404 錯誤處理程序:
我們會得到一個友好的錯誤提示:
接下來就是 POST 方法,我們用來在我們的任務資料庫中插入一個新的任務:
添加一個新的任務也是相當容易地。只有當請求以 JSON 格式形式,request.json 才會有請求的數據。如果沒有數據,或者存在數據但是缺少 title 項,我們將會返回 400,這是表示請求無效。
接著我們會創建一個新的任務字典,使用最後一個任務的 id + 1 作為該任務的 id。我們允許 description 欄位缺失,並且假設 done 欄位設置成 False。
我們把新的任務添加到我們的任務數組中,並且把新添加的任務和狀態 201 響應給客戶端。
使用如下的 curl 命令來測試這個新的函數:
注意:如果你在 Windows 上並且運行 Cygwin 版本的 curl,上面的命令不會有任何問題。然而,如果你使用原生的 curl,命令會有些不同:
當然在完成這個請求後,我們可以得到任務的更新列表:
剩下的兩個函數如下所示:
Ⅳ Python中的API如何更好的理解
比如你自己實現了一個好用的功能,你把它寫成類,定義一些類的屬性和方法。然後給別人用的時候,別人只需要知道你這個類有哪些關鍵的屬性和方法,然後每個屬性是什麼意思以及調用這個方法能做什麼事。別人直接拿來就用,不需要看你是怎麼實現這個功能的,而你給他的每個方法的文檔說明就是API文檔了,這就是面向對象的思想吧。當然這只是類的API介面,還有通信類的網路介面等到。
Ⅳ Python API快餐教程(1) - 字元串查找API
字元串是7種序列類型中的一種。
除了序列的操作函數,比如len()來求字元串長度之外,Python還為字元串提供豐富到可以寫個編輯器的API.
首先,下面的查找API都是為了查找位置,或者查一共有幾次這樣的操作。
如果只是想判斷一個字元串是不是另一個字元串的子串的話,使用序列的in運算符就可以了。
例:
原型:str.count(sub[, start[, end]])
字元串的count函數可以數出來有多少次匹配,我們看個例子,有5個ha和3個hei
輸出為5和2.
haha只能匹配兩次。
再加上擴展參數:
find函數的行為是,如果能找到,則返回在序列中的坐標,如果找不到,則返回-1. rfind是從右向左查找。我們來看例子:
輸出值為0和6.
找不到的例子:
輸出值都是-1.
完整形式:
index和rindex的功能與find和rfind基本上一致,除了在找不到時會拋出ValueError異常而不是返回-1.
例:
所以我們需要加try...except語句來處理之:
有時候,我們希望做從頭匹配或者匹配尾部。這時候就要用到startswith函數和endswith函數。例:
這兩個返回值均為True.
如果需要更復雜的匹配,還是需要正則表達式。與Java等語言不同,Python中的正則表達式有專門的模塊,字元串的API不負責這個事情。
Ⅵ python怎麼調用api介面
調用windows API的方式其實有兩種,第一種是通過第三方模塊pywin32。
如果小夥伴安裝了pip,可以通過pip安裝pywin32
在命令行中運行pip pst查看是否安裝了pywin32
如圖
我們這里調用一個windows最基本的API,MessageBox,該介面可以顯示一個對話框。
這里小編就不過多介紹了,只簡單的描述MessageBox介面,MessageBox是windows的一個API介面,作用是顯示一個對話框。
原型為:
int WINAPI MessageBox(HWND hWnd,LPCTSTR lpText,LPCTSTR lpCaption,UINT uType);
第一個參數hWnd,指明了該對話框屬於哪個窗口,lpText為窗口提示信息,lpCaption則為窗口標題,uType則是定義對話框的按鈕和圖標。
這里我們需要導入win32api這個模塊(隸屬於pywin32),如果需要宏定義的,API的宏被定義在win32con(同隸屬於pywin32)模塊內。
這里我們只導入一個win32api模塊,然後簡單的調用MessageBox顯示一個對話框即可。
如果我們不會安裝pywin32模塊,或者說不想安裝這個三方模塊。這時我們還有一個辦法。
調用python內置模塊ctypes,如果小夥伴有windows編程基礎的話,或者看過一點MSDN的話,都該知道,Windows的API其實是以dll文件(動態鏈接庫)方式存在的。
+和|效果是相同的
更多Python相關技術文章,請訪問Python教程欄目進行學習!以上就是小編分享的關於python怎麼調用api介面的詳細內容希望對大家有所幫助,更多有關python教程請關注環球青藤其它相關文章!
