Python 語言中經常有疑惑的地方

2022-08-18 22:15:17 字數 2908 閱讀 5792

*)可以這樣,不用儲存遞迴中的變數

import os

def findfile (str,dir = os.path.abspath('.')):

for x in os.listdir(dir):

if os.path.isdir(os.path.join(dir,x)):

findfile(str,os.path.join(dir,x))

elif str in x:

print(os.path.join(dir,x))#我一直都是想辦法儲存在遞迴的程式中

*)誰說while最少會執行一次的,並不是這樣

>>> while a>2

:... print(a)

... a-=1

...>>>

>>> a=3

>>> while a>2

:... print(a)

... a-=1

...3

view code

>>> a.extend(2,3)

traceback (most recent call last):

file "", line 1, in typeerror: extend() takes exactly one argument (2 given)

>>> a.extend(2)

traceback (most recent call last):

file "", line 1, in typeerror: 'int' object is not iterable

>>> a

[1, 2, 2, 4, [2, 4]]

extend()不是

>>> a=[1,2]

>>> b=[2,4]

>>> a.extend(b)

>>> a

[1, 2, 2, 4]

>>> a

[1, 2, 2, 4, [2, 4]]

*)方法名相同的情況下,例如方法名內部有重名的方法和引數,呼叫的情況

def name1(collection):

print('外面的name1,引數:collection:',collection)

def name1(collection):

print('裡面的name1,引數:collection:',collection)

name1(collection)

if __name__=='__main__':

collection=[1,2,3,4,5,6]

name1(collection[2:])

(sort) λ python fortest.py

外面的name1,引數:collection: [3, 4, 5, 6]

裡面的name1,引數:collection: [3, 4, 5, 6]

*)遞迴失敗:

def name1(collection):

print('外面的name1,引數:collection:',collection)

name1(collection)

traceback (most recent call last):

file "fortest.py", line 8, in name1(a)

file "fortest.py", line 5, in name1

name1(collection)

file "fortest.py", line 5, in name1

name1(collection)

file "fortest.py", line 5, in name1

name1(collection)

[previous line repeated 993 more times]

file "fortest.py", line 2, in name1

print('外面的name1,引數:collection:',collection)

recursionerror: maximum recursion depth exceeded while calling a python object

*)python中的切片也是[a:b]是從a到b-1的

*)關於for迴圈中range(2),i到底是從0還是1開始。特別是在用陣列的長度作為range的引數的時候經常會犯糊塗

還有range(a,b,c)無論怎樣,返回的陣列都是[a,....b-1](c>0)或者[a,.....b+1](c<0)就是不到b

#首先

>>> for i in range(5):

... print(i)

...012

34#> s=[1,2,3,4,5]

>>> length=len(s)

>>> for i in range(length):#所以,這裡完全不用-1,類似於,因為range()會減去1,這就抵消掉了陣列長度比陣列下標多了1這個屬性說造成的訪問陣列會超出index這個trouble。

... print(s[i])

...123

45>>> length

5

*)range反向迴圈、反向遞減、將步長設定為負數就好了,注意要調換開始和結束的位置

>>> for i in range(5,3,-1):#從5開始,到3結束

... print(i)

...5

4>>>

*)這樣range(0,0)並不會丟擲異常,而是什麼也不輸出

>>> for i in range(0,0):

... print(i)

...>>>

Python 語言中經常有疑惑的地方

可以這樣,不用儲存遞迴中的變數 import os def findfile str,dir os.path.abspath for x in os.listdir dir if os.path.isdir os.path.join dir,x findfile str,os.path.join d...

學習Python 中經常遇到疑惑的地方

可以這樣,不用儲存遞迴中的變數 import os deffindfile str dir os.path.abspath for x in os.listdir dir if os.path.isdir os.path.join dir,x findfile str,os.path.join di...

c語言中經常忽略的型別提公升

型別提公升常發生在表示式中,char,short 包括它們的signed和unsigned型別 以及列舉型別enum,在表示式中被提公升為int 如果int足夠表示轉換後的數的話,否則就是unsigned int 在含有unsigned int的表示式裡,int轉換為unsigned int來做運算...