python 個人使用易錯點記錄

2021-10-13 17:32:15 字數 4176 閱讀 3386

copyfile(src, dst) #src, dst 都需是檔名, 如果dst 存在或無許可權,會丟擲異常

copy(src, dst) #dst 可以是目錄名。

shutil.copyfile( src, dst) 從源src複製到dst中去,當然前提是目標位址是具備可寫許可權,丟擲的異常資訊為ioexception.。

如果當前的dst已存在的話就會被覆蓋掉shutil.move( src, dst) 移動檔案或重新命名,shutil.copymode( src, dst) 只是會複製其許可權其他的東西是不會被複製的,shutil.copystat( src, dst) 複製許可權、最後訪問時間、最後修改時間,shutil.copy( src, dst) 複製乙個檔案到乙個檔案或乙個目錄,shutil.copy2( src, dst) 在copy上的基礎上再複製檔案最後訪問時間與修改時間也複製過來了,類似於cp –p的東西

shutil.copy2( src, dst) 如果兩個位置的檔案系統是一樣的話相當於是rename操作,只是改名;如果是不在相同的檔案系統的話就是做move操作,shutil.copytree( olddir, newdir, true/flase),把olddir拷貝乙份newdir,如果第3個引數是true,則複製目錄時將保持資料夾下的符號連線,如果第3個引數是false,則將在複製的目錄下生成物理副本來替代符號連線,shutil.rmtree( src ) 遞迴刪除乙個目錄以及目錄內的所有內容

np_utils.to_categorical

np_utils.to_categorical用於將標籤轉化為形如(nb_samples, nb_classes)的二值序列。

假設num_classes = 10。

如將[1,2,3,……4]轉化成:

[[0,1,0,0,0,0,0,0]

[0,0,1,0,0,0,0,0]

[0,0,0,1,0,0,0,0]

……[0,0,0,0,1,0,0,0]]

這樣的形態。

如將y_train轉化為二值序列,可以用如下方式

生成器是python語法中特別重要的語法,python之所以天生適合處理大資料類的問題,就是因為有生成器等這些語法存在。

對於乙個很大的列表,如果我們直接用列表生成式的話,會占用很大的記憶體空間。

s =

[i**

2for i in

range

(100000000000000000

)]

這樣的語法,往往利用率很低,所以我們需要用到生成器generator用法,

s =

(i**

2for i in

range

(100000000000000000

))

這樣我們每次next(s)是就分配乙個記憶體空間,而不是一次性分配所有的記憶體空間。

上面就是生成器最簡單的使用方法之一

使用生成器的第二種方法:將函式定義成生成器,如果乙個函式定義中包含yield關鍵字,那麼這個函式就不是乙個普通函式,而是乙個生成器。

生成器和函式的執行流程不一樣,函式是順序執行,遇到return語句或者最後一行函式語句就返回,而變成生成器的函式,再每次呼叫next()的時候執行,遇到yield語句返回,再次執行時從上次返回的yield語句處繼續執行。

def

odd():

print

('step 1'

)yield

1print

('step 2'

)yield(3

)print

('step 3'

)yield(5

)

>>

> o = odd(

)>>

>

next

(o)step 1

1>>

>

next

(o)step 2

3>>

>

next

(o)step 3

5>>

>

next

(o)traceback (most recent call last)

: file ""

, line 1,in

stopiteration

可以看到, odd不是普通函式,而是生成器,在執行過程中,遇到yield就中斷,下次又繼續執行。執行3次yield後,已經沒有yield可以執行了,所以,第4次呼叫**next(o)**就報錯。

def

fib(

max)

: n, a, b =0,

0,1while n <

max:

yield b

a, b = b, a + b

n = n +

1return

'done'

>>

>

for n in fib(6)

:...

print

(n)...

1123

58

但是用for迴圈呼叫generator時,發現拿不到generator的return語句的返回值。如果想要拿到返回值,必須捕獲stopiteration錯誤,返回值包含在stopiteration的值中:

>>

> g = fib(6)

>>

>

while

true:.

..try:..

. x =

next

(g)...

print

('g:'

, x)..

.except stopiteration as e:..

.print

('generator return value:'

, e.value)..

.break..

.g:1g:

1g:2g:

3g:5g:

8generator return value: done

參考:

習題:

def

myeven

(max):

n =0while n<=

max:

if n %2==

0:yield n

n = n+

1

n=eval

(input()

)s =

[str

(i)for i in myeven(n)

]ans =

','.join(s)

print

(ans)

def

evengenerator

(n):

i =0while i <= n:

if i %2==

0:yield i

i +=

1n =

int(

raw_input()

)values =

for i in evengenerator(n)

:str

(i))

print

",".join(values)

小駝峰法

變數一般用小駝峰法標識。駝峰法的意思是:除第乙個單詞之外,其他單詞首字母大寫。譬如

int mystudentcount;

變數mystudentcount第乙個單詞是全部小寫,後面的單詞首字母大寫。

大駝峰法

相比小駝峰法,大駝峰法(即帕斯卡命名法)把第乙個單詞的首字母也大寫了。常用於 類名,命名空間等。譬如

public class databaseuser;

python函式使用易錯點 Python易錯例題

為了更好檢測效果,請在作答時最好不要複製 去執行 第一題 實踐 請使用zip函式將已給dict的key和value倒置 原dict 要求結果 第二題 高頻易錯 def add a if a 1 return 1 else return a add a 1 def print to add a pri...

Python易錯點總結

三個單引號 或者雙引號 既可以注釋也可以當作字串。python 中的淺拷貝只拷貝父物件不拷貝子物件,深拷貝父物件子物件全部拷貝。import copy a 1,2,3,4,a b b a c copy.copy a d copy.deepcopy a 5 a 4 c python中的命名方式 參考 ...

Python易錯點總結

1.定義只有乙個元素的元組必須要加逗號,否則只是乙個數.tuple 1,print tuple 2.對於列表和元組,下標值為 1都代表是最後乙個元素的下標,2代表倒數第二個元素的下標,依次類推.print list 1 print tuple 1 3.元組和列表的不同之處在於,元組一經初始化後就不能...