① python 路徑被轉義問題
python os 路徑被轉義的問題,以前常碰到字元串前面加r的情況,不加r有時候有問題有時候沒有,也就沒深究,這次就碰到一個問題搞了半天發現就是這里路徑被轉義了。
文件路徑中的單雙正反斜杠/ \ // \的意義
在python中反斜杠 \ 的功能是轉義,例如:\n表示換行,\t 表示水平製表符,也就是tab鍵。在windows中 反斜杠 \ 也用來表示路徑分隔符。
例:
這里\n表示換行,所以輸出到K:\imageData就換行了,\4表示輸出兩個空格,\0 表示八進制編碼的ASCII,\0後面的兩位數就是8進制數表示的ASCII值,\0後面的8進制數44表示為十進制是4*8+4=36,在ASCII表中正好對應$符號。
如果是在os.path.join()中生成的路徑,沒法顯示的用手改,可以配合split() 和 str.join()方法解決
split("\")把所有有 \ 的地方斷開,返回一個列表
rsplit("\",1)把最後出現"\"的地方斷開返回一個列表
rsplit()取負數時退化為split()方法
② Python反斜杠小問題
原因很簡單。runoob只輸出runoob的原因是run[o]ob中的o並不是一個語法類型。
其次,ru oob中ru[ ]oob的 有一個換行的意思,所以結果是:
1-[ru
2-oob]
如果不想讓他換行,可以使用/。
類似於 (換行)的還有 (字元串制中)和 (這個還沒了解可以試驗一下)
都可以試試看看效果。
③ Python反斜杠\\
就是一個反斜杠的意思,比如\n是換行,但是如果我就是需要\n這兩個字元怎麼辦,就是\\n
④ Python3中反斜杠\n
由r開頭引起的字元串就是聲明了後面引號里的東西是原始字元串,在裡面放任何字元都表示該字元的原始含義。
這種方法在做網站設置和網站目錄結構的時候非常有用,使用了原始字元串就不需要轉義了。
如果把單引號前邊的r去掉的話就可以換行了
⑤ Python函數的參數類型
Python函數的參數類型主要包括必選參數、可選參數、可變參數、位置參數和關鍵字參數,本文介紹一下他們的定義以及可變數據類型參數傳遞需要注意的地方。
必選參數(Required arguments)是必須輸入的參數,比如下面的代碼,必須輸入2個參數,否則就會報錯:
其實上面例子中的參數 num1和num2也屬於關鍵字參數,比如可以通過如下方式調用:
執行結果:
可選參數(Optional arguments)可以不用傳入函數,有一個默認值,如果沒有傳入會使用默認值,不會報錯。
位置參數(positional arguments)根據其在函數定義中的位置調用,下面是pow()函數的幫助信息:
x,y,z三個參數的的順序是固定的,並且不能使用關鍵字:
輸出:
在上面的pow()函數幫助信息中可以看到位置參數後面加了一個反斜杠 / ,這是python內置函數的語法定義,Python開發人員不能在python3.8版本之前的代碼中使用此語法。但python3.0到3.7版本可以使用如下方式定義位置參數:
星號前面的參數為位置參數或者關鍵字參數,星號後面是強制關鍵字參數,具體介紹見強制關鍵字參數。
python3.8版本引入了強制位置參數(Positional-Only Parameters),也就是我們可以使用反斜杠 / 語法來定義位置參數了,可以寫成如下形式:
來看下面的例子:
python3.8運行:
不能使用關鍵字參數形式賦值了。
可變參數 (varargs argument) 就是傳入的參數個數是可變的,可以是0-n個,使用星號( * )將輸入參數自動組裝為一個元組(tuple):
執行結果:
關鍵字參數(keyword argument)允許將任意個含參數名的參數導入到python函數中,使用雙星號( ** ),在函數內部自動組裝為一個字典。
執行結果:
上面介紹的參數可以混合使用:
結果:
注意:由於傳入的參數個數不定,所以當與普通參數一同使用時,必須把帶星號的參數放在最後。
強制關鍵字參數(Keyword-Only Arguments)是python3引入的特性,可參考:https://www.python.org/dev/peps/pep-3102/。 使用一個星號隔開:
在位置參數一節介紹過星號前面的參數可以是位置參數和關鍵字參數。星號後面的參數都是強制關鍵字參數,必須以指定參數名的方式傳參,如果強制關鍵字參數沒有設置默認參數,調用函數時必須傳參。
執行結果:
也可以在可變參數後面命名關鍵字參數,這樣就不需要星號分隔符了:
執行結果:
在Python對象及內存管理機制中介紹了python中的參數傳遞屬於對象的 引用傳遞 (pass by object reference),在編寫函數的時候需要特別注意。
先來看個例子:
執行結果:
l1 和 l2指向相同的地址,由於列表可變,l1改變時,l2也跟著變了。
接著看下面的例子:
結果:
l1沒有變化!為什麼不是[1, 2, 3, 4]呢?
l = l + [4]表示創建一個「末尾加入元素 4「的新列表,並讓 l 指向這個新的對象,l1沒有進行任何操作,因此 l1 的值不變。如果要改變l1的值,需要加一個返回值:
結果:
下面的代碼執行結果又是什麼呢?
執行結果:
和第一個例子一樣,l1 和 l2指向相同的地址,所以會一起改變。這個問題怎麼解決呢?
可以使用下面的方式:
也可以使用淺拷貝或者深度拷貝,具體使用方法可參考Python對象及內存管理機制。這個問題在Python編程時需要特別注意。
本文主要介紹了python函數的幾種參數類型:必選參數、可選參數、可變參數、位置參數、強制位置參數、關鍵字參數、強制關鍵字參數,注意他們不是完全獨立的,比如必選參數、可選參數也可以是關鍵字參數,位置參數可以是必選參數或者可選參數。
另外,python中的參數傳遞屬於對象的 引用傳遞 ,在對可變數據類型進行參數傳遞時需要特別注意,如有必要,使用python的拷貝方法。
參考文檔:
--THE END--
⑥ python基礎問題,關於反斜杠\
如果列印:
print("\ \ \ \ ")
結果也是 \ \ \ \
因為在 \ 後緊跟一個空格導致不會觸發 反斜杠的轉義作用,也沒有必要被轉義, 所以"\\(空格)" 和"\(空格)"列印結果是一樣的。
如果 print("\") 在 \ 後面沒有跟空格, 第二個雙引號 」 就被強制轉義了,導致列印錯誤。
1,只要在 \ 後面加空格,避免被當成轉義符; 2,或者前面加個 \ 將其轉義。
print("\\")
print("\ ") 都是列印出 \
現在回過頭看
print("\\ \\ \\ \\")
print("\ \\ \\ \\") 的區別就在第一個反斜杠是否被轉義,
其實 第一個 反斜杠後只要有加空格,是否要將其轉義都是可以的。
⑦ python中將反斜杠'\'變為正斜杠'/'
Windows文件的路徑是按反斜杠 " \ " 分開的
例如:D:\protect\nodejs\test\testmkdir\assets\res\monster
linux文件路徑是使用正斜杠 " / " 分開。
例如:/protect/nodejs/test/testmkdir/assets/res/monster/
反斜杠 " \ " 的路徑,linux中無法識別
需要把反斜杠 " \ " ,轉為正斜杠" / "
python 中字元串的replace方法進行替換,如下所示:
#遍歷目錄文件
for filepath,dirs,filelistin os.walk(upload_path):
for filenamein filelist:
curFile = os.path.join(filepath,filename)#路徑的拼接
curFile = curFile.replace('\\','/')#將路徑中的反斜杠變為" / "