python新手中常見疑惑及解答

2022-07-01 15:54:08 字數 1752 閱讀 8830

1 lambda函式

函式格式是lambda keys:express   匿名函式lambda是乙個表示式函式,接受keys引數,返回表示式的值。所以不用return,也沒有函式名,經常用在需要key引數的函式中,比如sorted。

2 元組(),它是以逗號辨別的,而不是小括號。比如乙個元素的元組新手經常寫成(12),其實他會被解釋成單個元素12.正確的寫法應該是(12,),在元素後面加上逗號。

3 模組匯入。比如

import random

print random.choice(range(10))

和from random import choice

print choice(range(10))

新手會有一種誤解,第二種方法只匯入了乙個函式,而沒有把整個模組匯入,這是錯誤的。整個模組其實已經被匯入,只是那個函式的引用被儲存了起來。所以from-import這種語法不會帶來效能上的差異,也沒有節省記憶體。

4 當你有許多module,比如幾百個,想要使用時可能會想乙個乙個匯入太麻煩,有沒有簡便的方法?答案是有的,就是將這些模組組織成乙個package。其實就是將模組都放在乙個目錄裡,然後再加乙個__init__.py檔案,python會將其看作為package,使用裡面的函式就可以以dotted-attribute方式來訪問。

5 引數傳遞可變物件是傳引用的,不可變物件是傳值的。那麼什麼物件是可變的,什麼是不可變的。所有python物件都有三個屬性:型別、識別符號和值,如果值是可變的就是可變物件,如果值不可變就是不可變物件。像數字、字串、元組都是不可變物件,剩下的列表、字典、類、類例項等都是可變物件。

6 迭代器的理解,是實現了迭代器協議的容器物件。自己實現乙個迭代器,類中要有__iter__()方法,該方法返回乙個物件。這個物件要有__next__()方法,在next方法中的適當位置返回stopiteration異常。迭代器不經常使用,所以不用太擔心。有替代方法就是生成器。

class myiterator(object

):

"""docstring for myiterator

"""def __init__(self, num):

self.num =num

def __iter__(self):

return

self;

def __next__(self):

if self.num <= 0

: raise stopiteration;

self.num -= 1

;

return

self.num;

for each in myiterator(5

): print(each);

->結果43

210

7 生成器。函式中只要出現了yield語句就會將其轉變成乙個生成器。在遇見yield語句後會儲存上下文環境,並退出函式。

注意:生成器中沒有return語句。

def fun2(num):

print(

"start generator");

while(num>0

):

yield

num;

num -=1

;

a=[each for each in fun2(5)]

print(a);

->結果

start generator

[5, 4, 3, 2, 1]

python中常見錯誤

1.手誤造成的名字錯誤 nameerror 名字錯誤 如 nameerror name pint is not defined 2.多行 不能一行寫 syntaxerror 語法錯誤 如 syntaxerror invalid syntax 3.縮排錯誤 indentationerror unexp...

python中常見函式

1.eval 去掉引數外側引導並執行餘下語句 2.in 保留字 成員判斷 3.split 能根據空格分隔字串,結果儲存在列表變數中 4.import 引用功能庫的保留字 import 庫名 from 庫名 import 函式名 from 庫名 import import 庫名 as 庫別名 5.數值...

python中常見函式使用

1 capitalize 將字串的第乙個字元轉換為大寫 2 center width,fillchar 返回乙個指定的寬度 width 居中的字串,fillchar 為填充的字元,預設為空格。3 count str,beg 0,end len string 返回 str 在 string 裡面出現的...