2017-09-05 48 views
-4

只看到以下內容:我應該叫符號「|」的管道或位操作

def update_page_info(url): 
    # fetch_page -> parse_page -> store_page 
    chain = fetch_page.s(url) | parse_page.s() | store_page_info.s(url) 
    chain() 

@app.task() 
def fetch_page(url): 
    return myhttplib.get(url) 

@app.task() 
def parse_page(page): 
    return myparser.parse_document(page) 

@app.task(ignore_result=True) 
def store_page_info(info, url): 
    PageInfo.objects.create(url=url, info=info) 
+1

*字符*是管道或垂直條,*操作*是按位或,所以我傾向於稱它爲管道,除非我具體談論操作 –

+0

@NickA您能否給我一個鏈接,可以學習更多關於操作?我只是感到困惑,因爲沒有在教程中看到它,只引入了按位運算符。 – Assassin

+0

參見@ Martijn的答案,他鏈接了一些有用的資源,我特別檢查了標記爲「二進制位運算符」的第二個鏈接 –

回答

5

你有一個管字符(更準確地稱爲vertical bar character),其在使用時表達式稱爲binary bitwise operator

|操作者產生的按位(含)OR其參數,這必須是整數。

操作是通過__or__ special method,這是SQLAlchemy的使用來構建查詢,在你的例子代碼所示(對比的boolean or operator,不能掛鉤到由於其短路行爲hookable )。

+0

注意該字符被稱爲管道,因爲它最初用於在Unix中共同管道命令 –

+0

運算符是可通過__or__特殊方法鉤住。你能詳細說明這條線的意思嗎? –

+0

那麼這個用法不是一個python定義? – Assassin