函式與生成器

2022-08-26 08:57:12 字數 2696 閱讀 3459

一、函式

1.1、函式的關鍵字

def      定義函式

return      返回值

pass      佔位

exit(1)      直接退出並返回1

1.2、高階函式

高階函式都是可以通過**邏輯實現,但是自己寫的函式的複雜程度或者演算法不一定有人家內建的好

①、map高階函式:

def f(x):

return x*x

print(map(f, [1, 2, 3, 4]))

print(list((map(f, [1, 2, 3, 4]))))

for i in map(f, [1, 2, 3, 4]):

print(i)

仿照map:

def testmap(fun, iter):

l = list()

for i in iter:

return l

print(testmap(f, [1, 2, 3, 4]))

②、filter()函式用於過濾序列,和map()類似,filter()也接收乙個函式和乙個序列。和map()不同的是,filter()把傳入的函式依次作用於每個元素,然後根據返回值是true還是false決定保留還是丟棄該元素,例子:

filter(lamdba x: x%2 ==1, [1, 2, 3, 4, 5])

def add(x, y):

return x+y

reduce(add, [1, 2, 3, 4, 5])

# 1, 2 = 3

# 3, 3 = 6

# 6, 4 = 10

# 10, 5 = 15

④、sorted排序

引數:sorted(iterable, key, reverse)

iterable 乙個可迭代的物件、 key 對什麼進行排序、 reverse bool型別,如果為true為反序, 預設為false、 返回值是乙個list

print(sorted([1, 4, 342, 3, 45, 76, 435, 34], reverse=true))

對字典的key或者val進行排序:

m = dict(a=1, c=10, b=20, d=15)

print(m)

print(sorted(m.items()))

print(sorted(m.items(), key=lambda x: x[0]))

print(dict(sorted(m.items(), key=lambda x: x[1])))

# print(sorted(m.items(), key = lambda d:d[1], reverse = true))

1.3、列表生成式(執行效率高且經常用):

[exp for val in collection if condition]

a2 = [x for x in range(1, 10) if x%2==0]

print(a2)
例子(九宮格):

1.4、生成器:

方法一:

(exp for val in collection if condition)

a1 = (x for x in range(1, 10) if x%2==0)

print(a1)

for i in a1:

print(i)

print(next(a1)) #python3 是直接呼叫next方法,python2中是使用a1.next()

方法二:

def test():

a = 1

for i in range(1, 10):

yield i

# return i

a += 1

# return i

# yield 可以理解成return,但是比return多一些角色

m = test()

print(m)

1.5、示例(把1.xtx的內容按照uid排序):

import codecs

with codecs.open("1.txt", "r") as l:

result = sorted(l.readlines(), key=lambda item: int(item.split(":")[2]))

for i in result:

print(i)

1.6、函式的設計規範

耦合性:

①、通過引數接收輸入,以及通過return產生輸出以保證函式的獨立性;

②、儘量減少使用全域性變數進行函式間的通訊;

③、不要在函式中修改可變型別的引數;

④、避免直接改變定義在另外乙個模組中的變數;

聚合性:

①、每個函式都應該有乙個單一的、統一的目標;

②、每個函式的功能都應該相對簡單;

函式與生成器

一 函式屬性 函式可以在內部建立預設的屬性,還可以在外部通過句點屬性識別符號來動態建立該函式的屬性。def foo foo properly created doc string def bar pass foo.doc foo properly created doc string bar.doc...

python生成器函式 Python 生成器函式

一 生成器 生成器指的是生成器物件,可由生成器表示式得到,也可使用 yield 關鍵字得到乙個生成器函式,呼叫這個函式得到乙個生成器物件 生成器物件,是乙個可迭代物件,是乙個迭代器 生成器物件,是延遲計算 惰性求值的 1.1 生成器函式 函式體重包含 yield 語句的函式,就是生成器函式,呼叫後返...

生成器函式

pyhon優雅的魔力使生成器函式很特殊,它們像定格相機一樣工作。當乙個標準函式遇到return語句時,它會返回值,然後函式會丟棄內部的所有資料。當下次呼叫時,一切從頭開始。yield語句會做不同的事情。它像return一樣返回乙個值,但是它不會使函式丟棄資料,相反所有資料都被儲存起來。usr bin...