1. 程式人生 > 其它 >零基礎學程式設計022:函式的世界

零基礎學程式設計022:函式的世界

通過《零基礎學程式設計021:獲取股票實時行情資料》的學習,我們已經可以取出“谷歌”股票的開盤價,今天我們要取出GAFATA共6支股票的開盤價。

先回顧上次的程式碼:

import urllib.request as req

with req.urlopen('http://hq.sinajs.cn/list=gb_goog') as f :
    hq = f.read().decode('GBK')
    v = hq.split(',')
    print(v[1])

要獲取6支股票行情,那就先找到GAFATA的股票編碼(gb_goog,gb_aman,gb_fb,gb_aapl,gb_hk00700,gb_baba),然後把這段程式碼複製幾遍,把股票編碼替換一下就可以完成任務了。

import urllib.request as req with req.urlopen('http://hq.sinajs.cn/list=gb_goog') as f : hq = f.read().decode('GBK') v = hq.split(',') print(v[1]) with req.urlopen('http://hq.sinajs.cn/list=gb_amzn') as f : hq = f.read().decode('GBK') v = hq.split(',') print(v[1]) with req.urlopen('http://hq.sinajs.cn/list=gb_fb') as f : hq = f.read().decode('GBK') v = hq.split(',') print(v[1]) with req.urlopen('http://hq.sinajs.cn/list=gb_aapl') as f : hq = f.read().decode('GBK') v = hq.split(',') print(v[1]) with req.urlopen('http://hq.sinajs.cn/list=rt_hk00700') as f : hq = f.read().decode('GBK') v = hq.split(',') print(v[2]) #注意港股有所不同 with req.urlopen('http://hq.sinajs.cn/list=gb_baba') as f : hq = f.read().decode('GBK') v = hq.split(',') print(v[1])

任務雖然完成,但這種程式碼太重複了,有四行程式碼重複了6次,只是股票編碼不同而已。如果以後我們要取出收盤價,又得把所有語句中帶 v[1] 的地方都換掉,非常不方便。所有程式語言中都提供了“函式function”這個特性來解決重複程式碼的問題。

程式設計新手學習時,可以把程式語言中的函式與數學中的函式進行類比,數學函式中有函式名、變數、公式、函式值,在程式語言中分別對應著函式名、引數、函式體、返回值。數學中有二元函式,程式中有多個引數。

例如:我們在《零基礎學程式設計011:複利資料表問題(總結) 》裡遇到的複利公式就是一個簡單的數學函式。

在Python中定義一個函式非常方便,剛才的複利公式可以這樣寫:

def f(x) :
   return (1 + 0.01) ** x

關鍵詞def表示定義一個函式塊,可以用英語單詞define function(定義函式)來助記,定義完成後,以後只需呼叫函式(call function)就可以得到相應的結果。

print( f(100) )
print( f(365) )

函式的一個主要功能就是減少重複的程式碼,便於將來的維護。回到我們的股票程式上,我們定義一個函式,給出股票編碼,返回開盤價。

def price(stock) :
    url = 'http://hq.sinajs.cn/list=' + stock
    with req.urlopen(url) as f :
        hq = f.read().decode('GBK')
        v = hq.split(',')
        return v[1]

有了函式定義之後,只需要呼叫6次,就可以得到6支股票的行情了。

print( price('gb_goog') )
print( price('gb_amzn') ) 
print( price('gb_fb') )
print( price('gb_aapl') )
print( price('rt_hk00700') ) 
print( price('gb_baba') ) 

其實print也是函式,不過它是python系統自帶的,也叫內建函式(built-in function)。而我們用def定義的函式,稱為自定義函式

小結:

  • 函式function可以減少重複性程式碼,便於將來的維護
  • 有內建函式,我們自己寫的叫自定義函式
  • python中大量模組中包括了大量函式
  • def 關鍵字用於定義一個函式塊
  • 冒號之後的各行是函式體,要注意縮排
  • 用return返回想要的結果
  • 呼叫函式的基本形式:函式名( 函式引數 )

上面的程式中有一個小問題,你能否發現?你能自己解決它嗎?

--- END ---