[SQL] 註解 取得連結 Facebook X Pinterest 以電子郵件傳送 其他應用程式 12月 11, 2016 雖然 python 好像用不到 SQL 的註解,不過還是把它放上來吧: -- this is a single-line comment SQL 的單行註解是以--(兩個減號)開頭的,從它開始到那行結束都會被忽略。 /* this is a block (or multi-line) comment*/ 這是區塊註解,可以是跨行或是在行內使用。 取得連結 Facebook X Pinterest 以電子郵件傳送 其他應用程式 留言
[Python] *args 和 **kwargs 是什麼?一次搞懂它們! 4月 30, 2018 在翻閱 Python 的函式庫時常常會看到定義參數的地方放了 *args 和 **kwargs 這樣的東西,這究竟是什麼呢?讓我們先談談函式參數的定義。 預設參數 一般的定義方法就不多說了,直接來看有預設值的參數: def plus(a, b, c=None): res = a + b + (c if c else 0) return res 預設參數的用處通常是實作函式重載用的,可以使一個函式在接受引數時更有彈性,而要注意的語法問題是:預設參數在函式定義時一定要放在非預設參數的後面。 但如果我們想實作無限版的 plus() 函式呢?總不可能一直增加預設參數吧! 這時候我們可以用「*」來將引數收集到一個 tuple 中。 * -收集至 Tuple 先來看看範例: def plus(*nums): res = 0 for i in nums: res += i return res 透過 * 收集的引數會被放到一個 tuple 中,所以我們可以使用 for 來對它進行迭代。 這樣就可以理解為什麼要使用 *args 這個參數了,但是 **kwargs 又是什麼呢?我們要先從關鍵字引數來說起: 關鍵字引數 Keyword Argument 在呼叫 print() 時,我們有時會指定 sep 參數做為分隔輸出的字元,或是使用 end 參數來更改最後的換行字元。像這樣不用理會參數的真正順序,而只要給定名字然後指定值的情況,就是在使用關鍵字引數。 如果我們要指定的參數太多而造成版面不簡潔的話,可以考慮使用「**」來拆解一個裝有參數名與值的 dict。 ** 第一招-拆解 Dict 原諒我使用這麼中二的小標題XDD 直接看實例應該就能懂了: dt = {'sep': ' # ', 'end': '\n\n'} print('hello', 'world', **dt) # 等同於 print('hello', 'world', sep=' # ', end=... 繼續閱讀
[C] 每天來點字串用法 (2) - strcpy()、strncpy() 2月 11, 2018 結果隔了四天(不要相信 blogger 自帶的時間(?))才更新qwq,前幾天根本忘得一乾二淨XD 進入正文吧,今天要介紹的是: strcpy()、strncpy():字串複製 所屬標頭檔: <string.h> 函式宣告: char *strcpy( char *dest, const char *src ); char *strncpy( char *dest, const char *src, size_t count ); 先說 strcpy(),將來源字串 (src) 複製到 目的地 (dest),並回傳 dest 指向的字串,要注意的有以下兩點: 1) 第一個參數是目的地 (dest),第二個是來源 (src) 2) 會有 緩衝區溢位 (buffer overflow) 的問題 來看看何謂 緩衝區溢位:假設有一程式進行了如下宣告: int i = 5; char s[8] = "Hi 1234"; 那麼這些變數的記憶體配置可能如下: 如果今天我們進行了如下操作: strcpy(s, "hello sky"); 那麼記憶體裡的內容就會變成如下: 於是這時 i 的值就會變成 121,我們可以用以下程式來驗證: #include <stdio.h> #include <string.h> int main(void){ int i = 5; char s[8] = "Hi 1234"; printf("address of i: %p\naddress of s: %p\n", &i, s); // i: 0028ff1c, s: 0028ff14 strcpy(s, "hello sky"); printf("value of s: %s\nvalue of i: %d\n", s, i); // s: hello sky, : 121 retur... 繼續閱讀
[Python] [網路爬蟲] 用 selenium 不用登入就能爬過 Facebook 9月 07, 2018 因為某些原因決定來寫個爬蟲,可以計算 FB 某則貼文中某個關鍵字的數量,然後是可以在不登入的情況下使用的。這篇文章記錄了一些要處理、注意的東西,那麼我們就開始吧! 4/2 補 :因為 FB 網頁的原始碼有改動,所以程式碼有作更新,但內文還是舊的,因為重要的步驟都沒變,所以只更新文章底部放的程式碼。 使用 Selenium (搭配 Firefox driver ) 首先來個 10 秒入門 Selenium: from selenium import webdriver driver = webdriver.Firefox(executable_path=r'<存放 Firefox driver 的路徑>') # 建立 driver 物件 driver.get(r'<你想爬的網頁>') # 連線至指定的網頁 driver.quit() # 關閉網頁並退出 driver 好的,這個範例應該挺淺顯易懂的,那我們要繼續下去了。 開始爬取 FB 貼文 當你在沒有登入的情況下開啟了一個 FB 貼文,過一小段時間會跳出這樣的畫面: 它擋住了我們要爬的文章!一定要想個辦法除掉 它。 ( 1/21 補 :現在的 FB 好像不會跳出這個大框框了,如果確定沒有的話,就可以跳過下一步) 尋找與等待:By、WebDriverWait 雖然我們迫不及待地想要按下那個「稍後再說」的按鈕,但這個大方塊並不是一開始就存在的,而是過了一段時間才會跳出來,那麼到底是多久呢? 不知道。 那我們要怎麼知道它已經出現了?幸好 selenium 有提供 WebDriverWait 物件,可以使用他來檢查某個條件是否已經達成,我們先看看程式碼: from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_condi... 繼續閱讀
留言
張貼留言