python 中用filter求素數的時候,這裡的篩選函式是什麼意思啊?

時間 2021-05-29 23:48:34

1樓:

def _odd_iter():

n = 1

while Truen = n + 2

yield n

#生成器產生的惰性奇數序列def _not_divisible():

return lambda x: x % n#每次都把整個序列除序列裡的乙個數,如果有餘就是素數,這裡傳進來的x是it這個序列,n是it經過next(it)生成的乙個數

def primes():

yield 2

it = _odd_iter() # 初始序列while Truen = next(it) # 返回序列的第乙個數yield n

it = filter(_not_divisible(), it) # filter篩選生成新序列

for n in primes():

if n < 1000print(n)

elsebreak

# 列印1000以內的素數:

2樓:

whileTruen = next(it) # 返回序列的第乙個數yieldn

it = filter(_not_divisible(n), it) # 構造新序列

it這個序列是在 it = _odd_iter()的時候就生成了還是通過後面迴圈裡的next()來生成的?

3樓:丁冬

謝 @孟雪峰 邀,我猜題主是沒看懂那個閉包,如果有興趣其實還可以去了解一下lambda演算。

Python的filter第乙個引數要求是個一元謂詞,但事實上我們篩選過程中有兩個引數:待篩的元素和當前篩選所用因數。由於每輪篩選時因數是一定的,所以我們可以通過每輪生成乙個攜帶因數的閉包來變二元謂詞為一元謂詞。

知道了思路以後,再看一下這個lambda表示式:

lambdax:

x%n>

0簡單理解,你可以把這個當成乙個和下面這貨等價的匿名函式:

defanonymous(x

)returnx%

n>0只是它攜帶了_not_divisible提供的因數而已

4樓:

def_not_divisible(n

):return

lambdax:

x%n>

0呼叫 _not_divisible(n), 返回的是乙個匿名函式。這個函式接受乙個引數 x, 返回 x % n > 0。

即,呼叫 _not_divisible(n) 後返回的是乙個能過濾掉能被 n 整除的數,留下不能被 n 整除的數的函式。

在Python控制台中用pip命令安裝的第三方庫和在Pycharm中安裝的第三方庫有什麼區別?

唯羽 1.pycharm不是預設安裝到虛擬環境,而是因為你settings中對本專案的環境選擇為venv的 2.控制台中安裝也能到虛擬環境中,控制台命令 workon 你的虛擬環境名,然後再pip install 也是裝進虛擬環境 3.關於把安裝到非虛擬環境中,這樣不用重複安裝,這事兒有利有弊,如果...

Python學渣求問

Python確實很強大,資料獲取,web scraping,data analyst,data wrangling什麼的,進入Data Science世界,少不了接觸python Yang Deliang 只能說你的學習方式太浮躁了。計算機本質離不開計算機組成及原理,資料結構,演算法,編譯原理,設計...

Python中離散點如何求曲率?

Scavenger 我也做模型正好碰到這個問題,覺得跟你的需求一樣,分享一下我的做法。一系列離散點其實並沒有曲率,如果非得求,求得是某一點與其前一點和後一點共三點所確定的唯一乙個圓周的曲率。按上圖的話三點順序是BAC,求A點曲率。這樣的話,根本不用求幾階導,需要求的是A點的對邊BC,和A角角度。fr...