python入門與進階篇(六)之高階語法及用法
高階知識針對包、類庫的開發者,函式只是一段可執行的程式碼 並不是物件,閉包、函數語言程式設計
閉包=函式+環境變數
a=10
def outer():
a=25
def inner(x):
print(a*x*x)
return inner
f=outer()
# __closure__內建變數
# 環境變數
print(f.__closure__[0].cell_contents) #25
f(2) # 100
def f1():
a=10
def f2():
# a此時被python認為是一個區域性變數 區域性變數是不影響外部變數的
a=20
print(a) #20
print(a) #10
f2()
print(a) #10
f1() # 10 20 10
#非閉包方式
x=0
def f1(num):
#global關鍵字可以使用全域性變數
global x
y=x+num
x=y
return y
print(f1(3)) #3
print(f1(5)) #5
print(f1(8)) #8
#閉包方式
def f1():
x=0
def f2(steps):
#nonlocal關鍵字將變數強制為非本地的區域性變數
nonlocal x
x=x+steps
return x
return f2
f=f1()
print(f(3)) #3
print(f(5)) #8
print(f(8)) #16
匿名函式
#匿名函式 lambda 不需要return 函式體只能是表示式
f=lambda x,y:x+y
print(f(2,3)) #5
三元表示式
x>y 返回x 否則返回y
條件為真的結果 if 條件 else 條件為假的結果
r=x if x>y else y
map
list_x=[1,2,3,4,5]
def squre(x):
return x*x
# for v in list_x:
# squre(v)
r=map(squre,list_x)
# [1, 4, 9, 16, 25]
print(list(r))
map與lambda
list_x=[1,2,3,4,5,6]
list_y=[1,2,3,4,5]
# 以引數較少的為準 list_x->x list_y->y
r=map(lambda x,y:x*x+y,list_x,list_y)
#[2, 6, 12, 20, 30]
print(list(r))
reduce
from functools import reduce
# reduce 連續計算
list1=['1','2','3','4','5']
#reduce(lambda表示式,引數序列,初始值)
# 執行過程 (((('aaa'+'1')+'2')+'3')+'4')+'5'
r=reduce(lambda x,y:x+y,list1,'aaa')
print(r) #aaa12345
#map/reduce 函數語言程式設計 大資料程式設計模型 對映 歸約 平行計算
filter
list1=[1,0,0,1,1]
# 大小寫的過濾 list2=['a','B','C','d']
#x>0 返回布林值
r=filter(lambda x:x>0,list1) #filter 返回一個集合
print(list(r)) #[1, 1, 1]
指令式程式設計與函數語言程式設計
指令式程式設計:def if else for 類 物件等
函數語言程式設計:lambda:運算元 map reduce filter 使程式碼更簡潔
裝飾器
#裝飾器
# 在每一個函式前面列印當前時間
import time
#func:核心函式
def decorate(func):
# *arg 可變引數 **kw:關鍵字引數組成的字典
def wrapper(*arg,**kw):
#unix時間戳:是從1970年1月1日(UTC/GMT的午夜)開始所經過的秒數,不考慮閏秒。
print(time.time())
# 未知函式引數的函式的通用寫法
func(*arg,**kw)
return wrapper
#1個引數 @裝飾器名 語法糖
@decorate
def f1(func_name):
print("this is function1"+func_name)
#2個引數
@decorate
def f2(func_name1,func_name2):
print("this is function2"+func_name1)
print("this is function2"+func_name2)
# 帶關鍵字引數的情況
@decorate
def f3(func_name1,func_name2,**kw):
print("this is function3"+func_name1)
print("this is function3"+func_name2)
print(kw) # {'a': 1, 'b': 2, 'c': 3}
# 無參
@decorate
def f4():
print("this is function4")
# 不改變原函式的呼叫方式
#1538815374.121 ,this is function1引數1
f1("引數1")
# 1538815374.122 this is function2引數1 this is function2引數2
f2("引數1","引數2")
#1538815374.122,this is function3引數1,this is function3引數2,{'a': 1, 'b': 2, 'c': 3}
f3("引數1","引數2",a=1,b=2,c=3)
#1538815374.125,this is function4
f4()
# 裝飾器的應用:flask框架 @api.router使函式成為控制器
# 還有可以設定對外可以訪問的介面還是需要登入才能訪問的介面的裝飾器 @auth.login.required
相關文章
- python入門與進階篇(八)之Pythonic與Python雜記Python
- python入門與進階篇(七)之原生爬蟲Python爬蟲
- python之高階函式map,reduce,filter用法Python函式Filter
- Python 爬蟲從入門到進階之路(六)Python爬蟲
- python3入門與進階(二)Python
- Python進階:切片的誤區與高階用法Python
- Google高階搜尋技巧之高階語法查詢指令Go
- python語法進階這一篇就夠了Python
- 前端基礎入門六(JQuery進階)前端jQuery
- Typescript 高階語法進階TypeScript
- 4、JavaScript進階篇①——基礎語法JavaScript
- Dart語法詳解(三)——進階篇Dart
- 第十一章、高階語法與用法
- webpack4之高階篇Web
- 趙童鞋帶你入門PHP(四) PHP進階語法PHP
- React高階元件入門與常用用法React元件
- Python學習之高階特性Python
- koa2 從入門到進階之路 (六)
- Gradle入門系列(二)——groovy高階語法Gradle
- Python 從入門到進階之路(三)Python
- Python 從入門到進階之路(四)Python
- Python 從入門到進階之路(五)Python
- Python 從入門到進階之路(七)Python
- Linux Capabilities 入門教程:進階實戰篇Linux
- Python語法進階(2)- 正規表示式Python
- Python語法進階(1)- 程式與執行緒程式設計Python執行緒程式設計
- python網路進階篇Python
- Python爬蟲進階之JS逆向入門Python爬蟲JS
- Mysql常用語法及入門開篇(一)MySql
- elk 入門到進階
- SQL入門-進階教程SQL
- printf 進階用法
- aardio教程二) 進階語法
- Hive語法及其進階(二)Hive
- SpringBoot基礎篇AOP之高階使用技能Spring Boot
- React高階指南之高階元件React元件
- Python 爬蟲從入門到進階之路(十)Python爬蟲
- Python 爬蟲從入門到進階之路(十五)Python爬蟲