Python命令相關
使用python執行腳本
如何在命令行執行一個.py文件?
在命令行運行 python 文件路徑/文件名,如
如果文件就在當前路徑下,就可以直接python hello.py
注:MacOS的同學由於系統中默認為python2,終端中請使用python3 路徑/腳本名
注:命令行使用python命令實際上是從環境變量PATH所配置的目錄中逐個選擇python.exe(MacOS/Linux為python)來解釋執行路徑指定的腳本,在某些情況如使用Jenkins/crontab執行時有可能沒有權限讀取環境變量PATH的值,導致找不到python,可以使用python.exe的絕對路徑執行,如
C:\Users\Secoo\AppData\Local\Programs\Python\Python37-32\python.exe D:\hello.py
使用python -m
如何使用Python調用一個模塊?
很多python的三方模塊在安裝時會在python安裝路徑的Scripts目錄下生產可執行文件,如pytest、pip、HttpRunner的hrun等。一般來說,Scripts目錄也需要配置到環境變量PATH中去,這樣就可以直接在命令行中使用pytest、pip等命令。
當命令行提升pytest、pip等不是可執行命令時(即Scripts沒有配置環境變量),我們也可以使用python -m 調用指定模塊,如
python -m pytest 用例路徑
python -m pip install 要安裝的三方包
注:同樣實用與MacOS,只是路徑不是Scripts,pip顯示不是可執行命令時,可以臨時使用
python3 -m pip
來安裝包
使用python -c
如何在命令行執行一小段Python代碼?
使用python -c 代碼
,可以不進入Python交互環境執行一小段代碼,如下圖:
區分命令行和Python交互環境
如何區分命令行(cmd)環境和Python交互環境,執行.py文件和安裝包在哪個環境?在Python交互環境如何驗證一個包是否已安裝?
命令行和Python交互環境的提示符不同,如下圖
- 命令行環境,使用python執行python腳本、pip安裝包、pytest執行用例,或執行其他系統命令。
- Python交互環境,用來調試運行Python代碼,如import導入,聲明變量,if判斷,定義函數等等。
系統命令行
Python交互環境
在交互環境中可以通過import 三方包名,看是否報錯來驗證這個包是否已安裝,如:
>>> import selenium
不報錯則說明selenium已安裝
包安裝相關
安裝三方包
如何安裝Python三方包?在命令行如何檢查一個包是否已安裝?
使用pip install 包名
在線安裝一個包,也可以從https://pypi.org上搜索下載包的.whl離線包,使用pip install 離線包路徑
,來安裝,(所依賴包仍需要在線安裝)。
在命令行使用pip install 包名,如果顯示Requirement already satisfied,則說明已安裝,如下圖:
也可以用pip list
命令查看已安裝的包,如下圖
注:Windows的字符串搜索使用
findstr
,MacOS/Linux需要改為grep
環境變量PATH的作用
環境變量PATH的作用是什么?命令行報錯pip不是可執行命令的原因是什么?如何處理?
環境變量PATH的作用是,在命令行任意一個路徑下可以直接使用某個命令或工具,如python
、pip
、pytest
、java
、adb
等。在命令行輸入python
命令時會從環境變量PATH所配置的路徑中逐個去找python.exe或python.cmd等可執行文件。
命令行報錯pip不是可執行命令,是因為在當前PATH的所有路徑中找不到pip.exe即,pip.exe所在的目錄沒有配置到環境變量中去。
可以使用python -m pip
來臨時使用pip,或者包pip.exe所在目錄python安裝目錄中是Scripts目錄配置到環境變量PATH中去。
注:更新環境變量后需要重新打開cmd才能生效,PyCharm的命令行則需要重啟才能生效(讀取到最新的環境變量)。
安裝包時報錯處理
pip安裝時如何使用豆瓣源安裝,遇到以下報錯,如何處理?
報錯分為兩個顏色,紅色是出錯,遇到出錯時,我們先看最下一行
..ReadTimeoutError: HTTPSconnectionPool(….)
冒號前是異常類型,冒號后是具體說明,稍微翻譯一下可以知道,這個是一個“讀取超時錯誤”,原因是HTTP連接池連接服務器files.pythonhosted.org,讀取超時。
由於在線安裝時,三方包是從國外網站上下載的,當三方包較大及網絡不好時很容易發生這種情況。
解決方法是,重試或者使用國內源來安裝(源就是一個鏡像網站,里面也有各種包)。
pip安裝時使用-i指定使用的源,如使用豆瓣源安裝就會快很多。
pip install selenium -i https://pypi.douban.com/simple/
黃色的為警告,提示當前pip不是最新版本,可以忽略,也可以使用提示的python -m pip install –upgrade pip
命令進行升級。
PyCharm相關
PyCharm查看所使用環境和安裝的包
PyCharm中如何確定使用的是虛擬環境還是本機環境?如何切換解釋器?如何查看環境中安裝了哪些包?
PyCharm默認新建項目時會新建虛擬環境(沒有任何三方包的新環境),如下圖:
你在命令行安裝的包(安裝到了本地環境),虛擬環境中是沒有的,這時候你代碼中去導入一個包會發現報錯,如下圖:
我可以打開終端,來查看是否使用了虛擬環境,如下圖
前面有(venv)的就是虛擬環境(即沒有任何包,需要重新安裝)。
我們可以再PyCharm的終端使用pip list
。
或在設置中查看當前環境的包,點擊Files->Settings
如下圖:
找到並點擊 Project: 你的項目名下的Python Interpreter,如下圖:
我們可以查看到當前環境中的包,可以通過上面的下拉框來切換解釋器(即環境),也可以通過下面的加號安裝所需要的包。
注:前期在新建項目時,可以點開Python解釋器的折疊,直接選擇本地環境來避免此問題。
PyCharm查看函數使用方法
PyCharm中如何查看所使用函數的方法定義,需要哪些參數,分別什么格式?
我們在調用一個函數(特別是別人寫的)時,往往需要知道怎么使用,即需要幾個、什么類型的參數,返回什么類型的結果。在PyCharm中一般我們可以鼠標移動到調用函數上可以看到函數的定義,如下圖:
這個表示,calc模塊的add函數,有兩個參數,都需要int整數格式,返回值為int整數格式。
我們也可以按住Ctrl鍵,鼠標移動到函數名上,查看提示。
當需要查看函數的具體定義和處理過程時,我們可以按住Ctrl鍵,鼠標點擊函數名,調整到該函數,來查看函數的源碼,如下圖:
PyCharm中錯誤提醒
PyCharm中有淺紅色高亮和淺黃色高亮,分別是什么原因,如何查看異常的詳細信息?
淺紅色高亮及紅色波浪線表示報錯,常見的是標點、括號格式或語法錯誤。
淺黃色高亮一般是函數參數異常或對象無此屬性或方法,如下圖:
運行報錯處理
代碼報錯,如何查看是什么異常?異常的原因說明以及報錯的是哪一行?
代碼報錯別緊張,一般先看報錯最下面一行,冒號前是異常類型,冒號后是具體原因說明,如下圖:
報錯的行可以從上面看到,是main.py這個文件的第3行driver = webdriver.Chrome()報的錯。
稍微翻譯一下這是一個selenium常規異常中的“會話不能創建異常”,會話即和瀏覽器的連接交互。翻譯一下具體願意為,
信息:會話不能創建:這個版本的ChromeDriver只支持86版本的Chrome,當前的瀏覽器版本為89.0.4389.82,使用的瀏覽器地址為…
從翻譯的報錯原因我們可以分析出是我們用的chromedriver版本太老,不支持當前的瀏覽器,解決方法就是重新下載對應版本的chromedriver即可。
Python數據類型相關
可變和不可變類型
Python中有哪些數據類型?哪些是可變的,哪些是不可變的?
Python中常見的數據類型有:字符串、數字(整型、浮點、布爾型)、列表、元祖、字典、集合。
- 可變類型:列表、字典、普通集合是可變的
- 不可變類型:字符串、數字、元祖、frozen set(不可變集合)
可變類型一般為混合容器型,如列表,字典,可以隨意增加刪除,可以容納任何類型的元素。
注:不可變類型,如字符串,在修改時會創建新的變量。
為什么要區分可變和不可變呢,因為有一種東西叫Hash(即散列表),它是通過變量來計算得出存儲地址的,這就要求變量不能修改,不然就找不到它的存儲地址了。
因此不可變類型,字符串,數字,元祖等被稱為可Hash的。Python中的字典和集合就是基於Hash類型的,字典的key只能是不可變類型。
哈希類型(字典、集合)因為是計算一下就知道存儲地址,因此無論有多少數據,查詢一個數據只需要一下操作,查詢效率很高。
字符串是否數字判斷
如何判斷一個字符串是不是數字?
使用字符串的is_number()或is_digit()方法來判斷字符串是否數字,如
‘123’.is_number()
返回為True則表示是數字
字符串格式化
將name = ‘LiLy‘ age=18 gender=’女’,將name、age、gender變量實際值填入字符“我是Kevin,年齡21,性別male”
這是一個字符串格式化操作,我們通常需要將一批變量的值填入一個字符串中,拼接是最low的方式,一般我們先在字符串中放入占位符,然后將變量依次填入,4中方法如下圖:
字符串列表相互轉換
將一個字符串“I am the whole world”按空格分隔,列表反轉,重新按空格拼接成“world whole the am I”
字符串分隔成列表(split),列表按分隔符組裝層字符串(join)是最常用的兩種方式,答案如下圖:
也可以一行代碼實現,如下圖:
注:這里使用了reversed(),這個全局函數返回一個反轉后的新列表,而列表的reverse()方法,是對原列表進行反轉,返回是None,我們使用join要求參數時一個列表,所以需要使用reversed()。
字典/列表遍歷及組裝
將一個字典{‘Kevin’: 21, ‘Lily’: 19, ‘John’: 20}改為列表[{‘name’: ‘Kevin’, ‘age’: 21}, {‘name’: ‘Lily, ‘age’: 19}, {‘name’: ‘John, ‘age’: 20}]形式
列表、字典的遍歷及重新組裝是非常常用的操作,代碼如下圖
也可以使用推導式快速得出結果,如下圖:
注:遍歷字典的key, value時,需要遍歷字典的.items()方法而不是字典本身。
列表與集合
列表和集合的區別是什么?在大數據量查詢時哪個更高效?
列表有點像數組,在內存中連續存儲,使用索引查找非常方便,通過值查找則要從頭開始逐個對比,因此列表約長,這個對比查找過程越慢。
集合基於Hash類型,元素存儲的地址是計算出來的,無論數據量多大,查找一個元素始終只需要一步操作。因此在大數據量查找時集合效率更高。