1. 程式人生 > >python基礎學習筆記(五)裝飾器,高階函式

python基礎學習筆記(五)裝飾器,高階函式

  • 多程序程式設計
import multiprocessing

def process1():
    return 1
def process2():
    return 2

p1=multiprocessing.Process(target=process1)
p2=multiprocessing.Process(target=process1)

p1.start()     #啟動
p2.start()

p1.join()      #在主程式中等待相應程序完成
p2.join()
  • 函式作為返回值
def line_out():
   def line(x):
      return x+1
my_line=line_out()
print(my_line(2))      #3 
  • 閉包

函式定義中引入外部變數

def line_out():
    b=10
    def line(x):
        return x+b
    b=1
    return line

my_line=line_out()
print(my_line(5))      #6

line和b構成了閉包

再來一個例子

def line_out(a,b):
   def line(x):
      return a*x**2+b
   return line
line1=line_out(1,2)   #x^2+2    
line2=line_out(2,3)   #2x^2+3
  • 裝飾器
def decorate(old_func):
    def new_func(a,b):
        print("input",a,b)
        return old_func
    return new_func

@decorate
def add(a,b):         #將函式作為引數傳遞給decorate( )
    return a+b
@decorate
def divide(a,b):
    return a-b

if __name__=="__main__":
    print(add(1,2))         #add=decorate(add)
                            #add(1,2)
    print(divide(1,2))

裝飾器也可以帶參,定義和@處加引數即可

裝飾類:

def decorate_class(someClass):
    class new_class(object):
        def __init__(self,age):
            self.total_display = 0
            self.wrapped       = someClass(age)
            
        def display(self):
            self.total_display += 1
            print("total dispay:",self.total_display)
            self.wrapped.display()
return new_class @decorate_class class bird: def __init__(self,age): self.age=age def display(self): print("age:",self.age) if __name__=="__main__": chicken=bird(3) for i in range(3): chicken.display()

結果  :

total display:1

age:3

total display:1

age:3

total display:1

age:3

  • lambda語法
lambda_sum=lamda x,y:x+y
print(lambda_sum(1,2))
  • map
lis=[6,7,3,4]
res=map(lambda x:x+3,lis)    #第二個為可迴圈物件
print(list(res))             #[9,10,6,8]

或:

lis1=[1,3,5,6]
lis2=[1,3,5,6]
def add(x,y):
    return x+y

res=map(add,lis1,lis2)     #2,6,10,12
  • filter函式:根據函式返回bool值篩選資料
def larger(a):
    if a>100:
        return True
    else:
        return False

for i in filter(larger,[1,101,99,20]):
    print(i)   #101
  • reduce函式,作為引數的函式物件必須能接受兩個引數
from functools import reduce

lis=[1,2,3,4,5]
res=reduce(lambda x,y:x+y,lis)      #函式累進的作用於各個引數
print(res)                          #15
  • 便捷表達

生成器: gen=(x for x in range(3))

列表:lis=[x**2 for x in range(3)]

x1=[1,2,3,4]

y1=[2,3,4,5]

lis=[x**2 for (x,y) in zip(x1,y1) if y>4]

詞典: dic={k : v for k,v in enumerate("scar") if v not in"sc"}
print(dic)  #  {2:a, 3:r}

相關推薦

python基礎學習筆記裝飾高階函式

多程序程式設計import multiprocessing def process1(): return 1 def process2(): return 2 p1=multiprocessing.Process(target=process1) p2=m

Spark (Python版) 零基礎學習筆記—— Spark RDDs程式設計

RDD基礎概念 建立RDD 建立RDD的方法: 1.載入外部資料集 2.分佈一個物件的集合 前邊幾次的筆記已經提到過多次了,因此,這裡只列出幾個注意事項: 1.利用sc.parallelize建立RDD一般只適用於在測試的時候使用,因為這需要我們將整

Python + OpenCV 學習筆記>>> 畫素運算

1. 算數運算 注意:兩幅影象的畫素大小要一致 進行影象畫素之間的算術運算,首先要匯入影象,讀取其中資訊: m1 = cv.imread("/home/pi/Desktop/m1.jpg") m2 = cv.imread("/home/pi/Desktop/m2.jpg")

Python基礎學習筆記

一、Windows平臺 1、下載Python 3.6.4 https://www.python.org/ 2、雙擊安裝即可,注意點選Add python 3.6 to path 3、win+r 輸入cmd 開啟控制檯 輸入python命令,檢視是

內建資料型別---Python基礎學習筆記

內建資料的三大主要型別: 1、數字(整數、浮點數) 2、序列(字串、列表、元組) 3、對映(字典) 按照是否可原地修改值分兩大類: 不可變物件(數字,字串,元組,不可變集合) 可變物件(列表,字典,可變集合) 一、整數(不

內建資料型別---Python基礎學習筆記

一、if-else條件語句 條件語句,條件滿足,執行一部分程式碼,不滿足,執行另一部分程式碼 四種基本格式: 1、單if …① if條件: 條件滿足時執行的程式碼…② …③ 執行順序: S1:執行① S2

面向物件---Python基礎學習筆記

一、單繼承 在程式中,繼承描述的是事物之間的所屬關係,例如貓和狗都屬於動物,程式中便可以描述為貓和狗繼承自動物。 #定義一個父類,如下: class Cat(object): def_in

Spring基礎學習筆記

dao-service-action依賴注入(三層小整合) 步驟: user->dao->service->action->bean.xml   User public class User { private int id; private

Python基礎學習筆記

安裝python可以去官網下載安裝包,各個系統安裝步驟可以自行搜尋。記錄python中常用語法:一、print:字串用'' 或者""print('hello') print("hello")連線字串用+二、運算直接在運行臺上用 加減乘除+-*/int() 和 float();

python機器學習入門3——裝飾和元類

記住這幾句話: 萬物皆物件 裝飾器(decorator):函式亦物件 元類(meta class):類亦物件 物件意味著可以被賦值給變數,通過變數也能呼叫此物件   兩個簡單的程式: 裝飾器例程:實現對函式func的計時   元類例程: 實

Pr_cc 學習筆記工作區快捷鍵介面設定

(一) 在時間序列的視訊段中,按住ctrl鍵拖動一個視訊段到另一視訊段前面,可以把視訊段向後頂(無覆蓋的插入) 如圖 (二) 在編輯-常規可以設定時間線的滾動效果,如圖   (三) 想了解更多快捷鍵,如圖 (四) 在素材的圖示檢視中,右

類的學習筆記2——裝飾

@property   使函式能夠以類似屬性一樣被呼叫,不需要加括號,例如area(),用了裝飾器後,可直接用area就可以被呼叫了 。使用後這個函式是例項的函式,只能被例項使用 @staticmethod   類中函式fun(self)都需要加self,但是用了這個裝飾器

Python學習筆記OOP

默認 tro acl 引入 支持 不同 post set 成像 模塊 使用模塊import 模塊名。有的僅僅導入了某個模塊的一個類或者函數,使用from 模塊名 import 函數或類名實現。為了避免模塊名沖突。Python引入了按文件夾來組織模塊的方

如鵬網學習筆記MySql基礎

修改列 記錄 tex 令行 金額 升序 查詢 自動遞增 col MySQL基礎 一、數據庫概念  1,網友裝備信息、論壇帖子信息、QQ好友關系信息、學籍管理系統中的學生信息等都要“持久化”的保存到一個地方,    如果通過IO寫到文件中,那麽會非常麻煩,而且不利於多人共享數

流暢的python和cookbook學習筆記

pytho col () 學習 util 學習筆記 取出 minute python 1.隨機選擇   python中生成隨機數使用random模塊。   1.從序列中隨機挑選元素,使用random.choice() >>> import random

python學習筆記數值類型和類型轉換

學習 系統 oat cal 關於 trac hide sed lin Python中的數值類型有:   整型,如2,520   浮點型,如3.14159,1.5e10   布爾類型 True和False e記法:   e記法即對應數學中的科學記數法 1 >>

python學習筆記

推導式 for mod cal pos [] 類名 left 開頭 38、繼承 子類繼承父類時,如果不寫init方法,表示繼承父類的init方法。如果寫了init方法,表示重寫父類的init方法。其他方法也是同理。對於變量也是同樣的道理。 class A: def __in

Python自動化學習筆記——介面測試基礎

1.1 介面基礎知識  1.1.1    Get&post請求 GET和POST請求:       GET提交的資料會放在URL之後,以?分割URL和傳輸資料,引數之間以&相連,如EditPosts.aspx?name

Python學習筆記變數的命名

一、識別符號 識別符號就是程式設計師定義的變數名、函式名 名字 需要有 見名知義的效果   識別符號可以由 字母、下劃線和數字組成 不能以數字開頭 不能與關鍵字重名   二、關鍵字 關鍵字就是pyt

Python 學習筆記[面向物件]

變數 類的變數 class A: num = 1 a = A() # 1 a.num # 1 A.num # 修改類的變數值 A.num = 2 # 2 a.num # 修改物件的變數值 a.num = 3 2 A.num # 給物件新增屬性 a.age