一、前言

def是什麼?很多時候在寫程式的時候某一部分需要一直用到,重複性非常高,

這時候為何不把常會用到的部分變成一個方法(函數),需要的時候去呼叫他叫好了?

這樣重複的程式碼我們就只需要寫一次。

 

二、自訂函數def

這次的目的有兩個:

a. 把常出現的程式碼變成只要寫一次

b. 可以把這個方法用在你之後寫的py檔裡面

讓我們來看這次的範例吧!

 

(1) 原本又臭又長的程式碼

 從yahoofinance把多檔股票資料抓下來,並且計算技術指標方便後續使用

1-1

 

你會發現,抓下股票及計算指標不一樣而已

1-2

 

(2) def規則及注意要點

a. 使用方法如下

def 你的函數名稱(預設參數):
    你的執行邏輯
    return 你要回傳的值

 

b. 縮行的地方要一起執行(逐行執行時要注意)

記得def下面你的執行邏輯在逐行執行時,要一同反白執行

 

c. 預設參數可給可不給

預測參數可給可不給看需求

 

d. 用return拿到我們要的東西

最後要拿到的東西用return返回給我們,範例中我要拿回我計算過後技術指標的df並且放到我之後給的變數中

改完的完整程式碼如下:

# good.py
import pandas, numpy
import pandas_datareader as web

# 自訂一函數
def get_stock(stock):
    # 取得股票
    df = web.DataReader(stock + '.TW', 'yahoo')
    
    # 計算技術指標
    df['SMA20'] = df['Close'].rolling(20).mean() # 在close每20個算一個平均並滾動
    df['SMA40'] = df['Close'].rolling(40).mean()
    df['SMA60'] = df['Close'].rolling(60).mean() 
    df['SMA120'] = df['Close'].rolling(120).mean() 

    return df # 算完回傳df給我

df_2330 = get_stock('2330')
df_2454 = get_stock('2454')
df_2317 = get_stock('2317')

是不是美觀很多呢!,效果是一樣的!

2

 

三、在其他py檔用其他py檔的def

3

同一目錄下  from [放寫好函數的py檔] import [你的函數名稱]

# main.py
from good import get_stock


df_2330 = get_stock('2330')
df_2454 = get_stock('2454')
df_2317 = get_stock('2317')

# 附註 from good import * 給米字鍵就是good.py裡面全部的def

 

四、後記

趕快把程式碼變美觀吧,之後我們來看看 if __name__ == '__main__':是什麼意思吧!

 

arrow
arrow
    創作者介紹
    創作者 恩哥Python 的頭像
    恩哥Python

    恩哥Python量化教室-零基礎也能學會Python

    恩哥Python 發表在 痞客邦 留言(0) 人氣()