首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >零基础学编程022:函数的世界

零基础学编程022:函数的世界

作者头像
申龙斌
发布2018-03-06 10:47:08
7090
发布2018-03-06 10:47:08
举报

通过《零基础学编程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 ---

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-02-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 申龙斌的程序人生 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档