通过《零基础学编程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定义的函数,称为自定义函数。
小结:
上面的程序中有一个小问题,你能否发现?你能自己解决它吗?
--- END ---
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有