不要從一個語言跳到另一個

今天我想談談在學習編程時可能遇到的一個問題。 我收到很多提到這個問題的電子郵件。 以下是一個例子。 你開始學習Python編程。過了一段時間後感到沮喪,失去動力,等等。然後你切換到JavaScript。 你開始學習JavaScript,直到遇到了一個阻礙點,事情變得比預期的困難,或者你不知道接下來應該學習什麼。 對於這個編程事情你感到疲倦,所以你放棄了。 或者你再次切換到另一種語言,希望這次能成功。 我稱之為「從一個語言跳到另一個」。 在網站開發中,從一個框架跳到另一個框架也很常見。你從Vue開始,然後切換到React,然後再切換到Svelte,然後又出現了一個新的框架。 草地並不比對岸更綠。 選擇一個事物。 堅持下去。 深入學習它。 將它了解透徹。 有一天你會意識到你真的想學習另一種語言,那很好。 但是在開始和成為一名開發者時,選擇一個語言。 每次切換語言,你都需要忘記一些東西,並學習新語言如何處理事物。 這也會讓你感到困惑。 你會開始混淆事情。 在一開始的時候,選擇哪種語言並不重要。 如果我必須建議一個,Python和JavaScript是非常好的選擇,因為它們的流行性和靈活性。

使用Python將GoPro用作遠程網絡攝像頭

我有一個GoPro Hero 7 White,最近我發現可以使用一個名為GoPro API for Python的Python包將其用作遠程網絡攝像頭,該包位於https://github.com/konradit/gopro-py-api。 首先使用pip3 install goprocam安裝該包,然後在GoPro上啟用WiFi連接。 這將使GoPro開始一個WiFi網絡。從計算機連接到該網絡。 現在您可以準備編寫Python程序,對攝像頭進行任何想做的事情。 從goprocam中導入GoProCamera和constants: from goprocam import GoProCamera, constants 然後調用GoProCamera.GoPro()方法獲取一個相機對象: gopro = GoProCamera.GoPro(constants.gpcontrol) 使用以下代碼獲取攝像頭狀態的概述: gopro.overview() 在我的情況下,我得到了以下結果: 相機概述 當前模式:照片 當前子模式:連拍 當前視頻分辨率:超出範圍 當前視頻幀速率:240 已拍攝的照片數量:0 已拍攝的視頻數量:0 剩餘的視頻時間:02:10:44 剩餘的照片數量:11257 電池剩餘容量:一半 SD卡剩餘空間:58.04GB 相機SSID:HERO7 White 是否在錄製:未錄製 - 待機 連接的客戶端數量:2 相機型號:HERO7 White 固件版本:H18.02.02.10.00 序列號:C3343323864041 現在您可以使用多種方法讓GoPro採取動作。 您可以立即拍攝照片: gopro.take_photo() 您可以在2秒後拍攝照片: gopro.take_photo(2) 您可以拍攝10秒的視頻: gopro.shoot_video(10) 或者,您可以直接開始錄製,而沒有預設的結束時間,使用以下代碼: gopro.shoot_video() 您可以使用以下代碼下載最後拍攝的照片或視頻: gopro.downloadLastMedia() 您還可以為文件設置一個名稱: gopro.downloadLastMedia("pic.JPG") 提示:我遇到了一個問題,當我調用downloadLastMedia()下載圖片時,我遇到了錯誤,顯示“Not supported while recording or processing media”。為了解決這個問題,我必須在調用downloadLastMedia()之前調用gopro.getStatusRaw()。 還有很多有用的方法,例如: KeepAlive():防止GoPro關閉 setZoom():設置縮放倍率 downloadAll():下載攝像頭中的所有媒體 delete("last"):刪除最後一個媒體文件 delete("all"):刪除所有媒體文件 power_off():關閉相機 power_on():開啟相機 stream():開始流式傳輸(尚未完全理解) 您可以在這裡找到許多示例,並在這裡找到更多文檔。...

在Python中使用正則表達式

正則表達式讓我們可以在字符串中查找符合特定格式的內容。 通過使用特殊的語法來構建正則表達式,您可以: 在字符串中進行搜索 在字符串中替換子字符串 從字符串中提取信息 re模塊是Python標準庫中的一個工具集,用於處理正則表達式。 特別是它提供了以下函數: re.match():檢查字符串開頭的匹配 re.search():在字符串中查找匹配項 這兩個函數都接受三個參數:模式、要搜索的字符串和標誌。 在介紹如何使用它們之前,讓我們先介紹一下正則表達式模式的基礎知識。 模式是一個以r''定界符包裝的字符串。在其中,我們可以使用一些特殊的字符組合來捕獲我們想要的值。 例如: . 匹配一個字符(除了換行符) \w 匹配任何字母數字字符([a-zA-Z0-9_]) \W 匹配任何非字母數字字符 \d 匹配任何數字 \D 匹配任何非數字字符 \s 匹配空白字符 \S 匹配任何非空白字符 方括號中可以包含多個字符匹配:[\d\sa] 匹配數字、空白字符和字符a。[a-z] 匹配從a到z的字符。 \ 可用於轉義,例如要匹配點.,在模式中應使用\.。 | 表示“或”。 然後我們有錨點: ^ 匹配一行的開頭 $ 匹配一行的結尾 然後我們有數量修改符: ? 表示“零個或一個”出現 * 表示“零個或多個”出現 + 表示“一個或多個”出現 {n} 表示“正好出現n次” {n,} 表示“至少出現n次” {n, m} 表示“至少出現n次,最多出現m次” 括號 (<expression>) 創建一個分組。分組很有趣,因為我們可以捕獲分組的內容。 以下這兩個示例匹配整個字符串: re.match('^.*Roger', 'My dog name is Roger') re.match('.*', 'My dog name is Roger') 打印這些語句將得到像這樣的字符串:...

在任意文件夾運行 Web 伺服器

您常常需要在系統中的特定文件夾中運行一個 Web 伺服器。 您沒有足夠時間來配置像 Apache 或 Nginx 這樣的正確的 Web 伺服器,因為這只是為了幾分鐘或測試您的應用。 那麼,該怎麼辦呢? 根據您喜歡的語言,您可能已經擁有所需的一切。 如果您使用 Node.js,並已經安裝了 npm,請運行以下命令: npm install -g http-server 然後在您想要透過伺服器公開的文件夾中運行 http-server。 默認情況下,它將在端口 8080 上啟動伺服器,但您可以使用 -p 標誌進行更改(運行 http-server --help 可查看更多選項)。 如果您使用 Python 並已安裝,只需運行以下命令: python -m SimpleHTTPServer 8080 (Python 2) 或者 python -m http.server 8080 (Python 3) 即可在本地端口 8080 上啟動一個本地伺服器。 如果您使用 PHP 並且運行一個現代版本,請運行以下命令: php -S localhost:8080

如何使用Python刪除所有舊推文

我不喜歡保留太多「歷史性」的推文,尤其是那些我發表的愚蠢言論。因此,我決定刪除它們。 為此,我從 Twitter 設定中請求了所有推文的存檔。取得存檔可能需要花上數天的時間。我的存檔日期可以追溯到 2015 年,盡管我從 2007 年起就使用 Twitter。也許我已在 2015 年刪除了先前的推文,但是我不記得了。 我得到了存檔,下載並解壓縮了該文件夾,然後執行以下命令: python -m venv .venv source .venv/bin/activate.fish python -m pip install delete-tweets 接著,我按照 https://github.com/koenrh/delete-tweets 上的說明來設置環境變數,以設置 Twitter 應用程式的金鑰,這是運行整個過程所必需的: export TWITTER_CONSUMER_KEY="your_consumer_key" export TWITTER_CONSUMER_SECRET="your_consumer_secret" export TWITTER_ACCESS_TOKEN="your_access_token" export TWITTER_ACCESS_TOKEN_SECRET="your_access_token_secret" 我使用了一個我已經擁有的 Twitter 應用程式的消費者和存取金鑰(現在 Twitter 有一個創建新應用程式的過程,所以如果你沒有現有的應用程式,你必須經過審核和批准後才能創建)。 提示:當以這種方式定義環境變數時,它們會被默認記錄在 shell 歷史中。為了避免這種情況,使用 Fish shell 時,可以運行 fish --private 以私密模式啟動 shell。 然後我運行了以下命令: delete-tweets --until 2021-01-01 tweet.js 這樣就可以刪除我在 2021 年之前發表的所有推文。這需要一段時間,但它確實起作用了。 從 Twitter 獲取存檔所花的時間比刪除推文更長,但最終我還是得到了一張空白的畫布。

如何使用Python的`filter()`函數

Python提供了三個有用的全局函數用於處理集合:map()、filter()和reduce()。 提示:有時候,使用列表推導更能表達意思,並且通常被認為更符合Python風格。 filter()接受一個可迭代對象,並返回一個過濾對象,即另一個可迭代對象,但不包含原始對象中的某些元素。 你可以通過在過濾函數中返回True或False來實現過濾功能: numbers = [1, 2, 3] def isEven(n): return n % 2 == 0 result = filter(isEven, numbers) print(list(result)) # [2] 你也可以使用lambda函數使代碼更簡潔: numbers = [1, 2, 3] result = filter(lambda n: n % 2 == 0, numbers) print(list(result)) # [2]

如何使用Python的reduce()函数

Python提供了三个有用的全局函数,我们可以使用它们来处理集合:map()、filter()和reduce()。 提示:有时候,列表推导式更加合适,而且通常被认为更加“Pythonic”。 reduce()函数用于根据序列(如列表)计算一个值。 例如,假设你有一个存储为元组的费用列表,你想计算每个元组中某个属性的总和,比如每项费用的金额: expenses = [ ('Dinner', 80), ('Car repair', 120) ] 你可以使用循环来遍历它们: total = 0 for expense in expenses: total += expense[1] print(total) # 200 或者,你可以使用reduce()函数将列表减少为一个单一的值: from functools import reduce print(reduce(lambda a, b: a[1] + b[1], expenses)) # 200 reduce()函数不像map()和filter()一样默认可用。你需要从标准库模块functools中导入它。

如何在 macOS 上安裝 Pygame Zero

幾個月前我買了一本來自 Raspberry Pi Press 的書,名為 Code the Classics。這是一本非常棒的書,裡面介紹了一些經典遊戲,包括 Sensible Soccer 和 Centipede,然後以 Python 構建了這些遊戲的克隆版本。總共有 5 個遊戲。 這本書很不錯,你可以在上面提供的連結上免費下載,並且你可以在 GitHub 上找到書內建的遊戲代碼,連結在這裡:https://github.com/Wireframe-Magazine/Code-the-Classics。 不幸的是,這本書並沒有解釋如何建構這些遊戲,它只列出了源代碼。無論如何,這是開始你的 Python 遊戲開發之旅的絕佳方式。 終於,我找到了一些時間來深入研究,第一步是安裝 Pygame Zero,這是一個在 Pygame 基礎上創建遊戲的庫。 理論上說,這不難。只需使用 pip 進行分發安裝: pip install pgzero 但我在我的 Mac 上遇到了一些問題。安裝過程中出現了錯誤: fatal error: 'SDL.h' file not found #include "SDL.h" ^~~~~~~ 1 error generated. 我檢查了可能的問題,並找到了一個可能的版本要求不匹配的原因,也許是由於庫的新版本發布而導致的最近問題。但我必須直接從 GitHub 安裝最新版本: pip install git+https://github.com/lordmauve/[[email protected]](/cdn-cgi/l/email-protection) 然後它正常運行了!

如何在Python中檢查變數是否是字串

您可以使用type()函數來檢查變數是否是字串,將變數作為參數傳遞,然後將結果與str類進行比較: name = "Roger" type(name) == str #True 或者使用isinstance()函數,傳入兩個參數:變數和str類: name = "Roger" isinstance(name, str) #True

如何在Python中檢查變量是否為數字

你可以使用type()函數來檢查變量是否為整數,將變量作為參數傳遞給該函數,然後將結果與int類進行比較: age = 1 type(age) == int #True 或者使用isinstance()函數,傳遞兩個參數:變量和int類: age = 1 isinstance(age, int) #True 你可以通過將變量與float進行比較,來檢查數字是否為浮點數: fraction = 0.1 type(fraction) == float #True