日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

Python笔记(2)函数

發布時間:2023/11/27 生活经验 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python笔记(2)函数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

python中一切皆對象,函數也看做對象。函數被函數名所引用,但是同樣的他也可以被其他標識符所引用,可以作為參數傳遞。

def f():return "hi"

可見a引用了函數返回值,b引用了函數本身,a不可調用,b可調用。而函數作為參數,即引用函數本身,下面的裝飾器就是以函數作為參數,引用的函數本身,而不是返回值。

常用的幾個內建函數Map,Reduce,Filter,lamda。

Filter

篩選出滿足過濾條件的元素

s = "@431$%$314&6i7(431)^&^%2l#%^i6861642k765e&$%65%^$^#$p%^&*%66757y%*^&%th%*&^%&^$o$&*^n4637"
print filter(str.isalpha,s)

Map

  接收兩個參數,第一個是函數,第二個是list,返回結果

l = [random.randint(0,100) for i in range(10)]def sub50(a):return a-50print map(sub50,l)

Reduce?

和map一樣接收兩個參數,但是他返回一個結果,會迭代第二個參數list,不停的計算。

# 1+2+3+...+99
def f_add(a,b):return a+b
print reduce(f_add,range(1,100))

  python3中Reduce被從全局命名空間中移除,要想使用需要--from functools import reduce,在函數式中reduce所表達的概念稱為規約fold。

?這里的map reduce和大數據中的map reduce不是一回事。

Lambda

lambda就是一個匿名函數,在需要一個函數,但是不用費力起名字的時候用lambda.

map(lambda x:x*x, [x for x in range(10)])
##等價于
def pf(x):return x * xmap(pf, [x for x in range(10)])

map,filter,reduce并沒有列表解析容易理解,3里面返回的是一個iterator而不再是一個list。

回調 CallBack?也即函數作為參數,運行到callback()返回上一層

閉包closure

綁定外部變量的函數

閉包和裝飾器 都是函數作為返回值

def pow_x(x):def echo(value):return value**xreturn echolst = [pow_x(2),pow_x(3),pow_x(4)]
for p in lst:print "closure",p(2)

1.嵌套函數

2.內部函數用了外部變量

3.外部函數返回了內部函數

如果外部變量是list,是可以改變的。但是只是一個變量,是無法改變的。

函數內部要注意LEGB原則,有局部變量的時候,就不再調用外部變量。

裝飾器decorator

裝飾就是在原有函數的基礎上,加一些其他的功能,他是函數作為返回值,函數作為參數的一種應用。

多層嵌套就是用了閉包,被修飾函數作為綁定量。

兩層嵌套結構

目標函數可以帶參數

def time_cost(f):def _f(*arg, **kwarg):start = time.clock()a=f(*arg,**kwarg)end = time.clock()print f.__name__,"run cost time is ",end-startreturn areturn _f@time_cost
def list_comp(length):return [(x,y) for x in range(length) for y in range(length) if x*y > 25]if __name__ == '__main__':list_comp(1000)

  

三層嵌套結構

不僅目標函數可以帶參數,裝飾器也可以帶參數

遞歸

遞歸就是1)函數自己調用自己2)有明確的出口。常用于Fibonacci數列,樹圖的遍歷等數據或是結構上定義為遞歸的情況。遞歸和循環是等價的。

遞歸的次數過多,會造成棧溢出,并且Python并不支持尾遞歸優化。

#字符串取反
def reverse_str(s):if len(s) <= 1:return selse:return reverse_str(s[1:]) + s[0]

  

?

轉載于:https://www.cnblogs.com/zephyr-1/p/5489303.html

總結

以上是生活随笔為你收集整理的Python笔记(2)函数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。