iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 29
0
自我挑戰組

在資訊宅中打滾的通訊系生系列 第 29

Day-29 Python2基本語法 -9

前言

這一次來教大家lambda快速寫出for。

lambda 替代 function(def) 宣告

  • 主要用於將function繁雜的宣告縮減,但(執行式)中不可有陳述句,須為運算式,所以有其限制。
  • 補充
變數名稱 = lambda 變數1,變數2,... : (執行式) #呼叫變數名稱可以得到 (執行式)運算完的值 等同於return

範例

  1. 簡單的lambda宣告

  2. 用lambda替換掉繁雜的func

  3. lambda裡面的變數為區域變數,所以不受原變數宣告的影響

map

  • 補充
  • 所有的序列的元素並將傳入的function作用於元素,最後以List作為回傳值。
map(function, 序列)
  • 可搭配lambda做簡化

filter

  • 將function作為判斷式,將序列元素中判斷後為true的元素回傳,並以list做收集
filter(function, 序列)

reduce

  • 必須傳入一個function(至少有兩個參數的函式),reduce會依序先取出兩個元素,套入function作用後的回傳值再與List中的下一個元素一同作為參數,以此類推,直到List所有元素都被取完,最後僅會回傳單一值。
reduce(function, 序列)

執行序(線程)模組 threading

import threading
變數名稱 = threading.Thread(執行式)

變數名稱.start() #執行 執行序中宣告的執行式
變數名稱.join()  #等待 執行序的執行式執行完

範例

  1. 簡易執行序結果

    • threads.py
    import threading
    import time
    
    def myfunc():
        print "Start a thread"
        time.sleep(3)
        print "End a thread"
    
    threads = []
    
    for i in range(5):
        th = threading.Thread(target = myfunc)
        th.start()
        threads.append(th)
    
    for th in threads:
        th.join()
    
    • Start顯示5個之後等待了3秒顯示5個End
  2. 無thread的情況

    • threads2.py
    import threading
    import time
    
    def myfunc():
        print "Start a thread"
        time.sleep(3)
        print "End a thread"
    
    threads = []
    
    for i in range(5):
        myfunc()
    
    • start執行一個後等了3秒在顯示start和end在等3秒..

上一篇
Day-28 Python2基本語法 -8
下一篇
Day-30 終篇
系列文
在資訊宅中打滾的通訊系生30

尚未有邦友留言

立即登入留言