刺猬教你量化投资(三) :函数的概念

内置函数与自定义函数

内置函数也叫自带函数,是Python已经定义好的函数,比如之前提过的sort()。 内置函数无需自定义,拿来即可用,方便又好使,不过功能有限。

以下是几个常见的内置函数:

函数名 函数用途
len(a) 返回变量a的长度
a.split(“x”) 对变量a以x进行分割,返回一个包含分割后元素的列表
a.sort() 对列表的元素进行从小到大排序
a.append() 整段作为扩展内容
a.extend() 分别作为扩展内容

当我们希望实现一些特定的功能而内置函数不能实现时,就需要建立自定义函数。自定义的格式如下:

def name():
code

用我们的语言翻译过来,意思是:定义一个函数,函数名为name,当遇到执行name函数的要求时,执行以下代码。

比如说:

In [1]:def addition(a,b):
    return a+b     
c=addition(1,2)
c
Out[1]:3  

通过自定义addition()函数,我们可以很方便地在往后的编程过程中,将数值同时赋予a、b两个变量,并自动执行设定好的加法运算。

但需要注意的是,在这段代码中我们没有使用print语句对a+b进行处理,而是用return进行了替代。实际操作中,return的使用频率要比print高许多。因为print仅仅只是打印出来显示一下而已,不涉及电脑的计算功能,而return则是运算后返回结果,能够产生实实在在的对象并进行输出。

再以斐波那契数列为例,建一个自动显示该数列列表的自定义函数feibo():

In [2]:def feibo(n):
    outcome=[0,1]
    for i in range(n-2):
        outcome.append(outcome[-1]+outcome[-2])
    return outcome
feibo(8)
Out[2]:[0, 1, 1, 2, 3, 5, 8, 13]

参数的类型与传递

当我们调用函数时,函数会对某些数据进行处理,这些数据便是参数。有些时候,没有参数的函数是起不到任何作用的。此类函数需要结合括号里的参数才能返回有意义的结果。

括号里的参数,有些变量只是为了占位,方便日后进行定义,而有些则是常量,为程序指明了应当处理的内容是什么。前者是形式上的参数,称为形参,而后者则是实在的参数,称为实参。

当我们为函数提供实参时,数据将传递到形参的位置上。传递的方式有两种,一种是同位置传递,一种是关键字传递。

同位置传递只需按照自定义函数形参的排序输入实参即可。比如addition(1,2), 意味着a=1,b=2。而关键字传递则可在函数内指定为形参指定实参,比如addition(b=2, a=1)。两种传递方式将使函数返回相同的结果,但需要注意的是,传递的过程中,只能选择一种传递方式,不能混着来,否则Python会报错。

如果在自定义函数时就为形参指定了默认值,那么当使用自定义函数时,若不进行具体的指定,函数将按照默认值运行。比如说:

In [3]:def feibo(n=5): #设定n的默认值为5
    outcome=[0,1]
    for i in range(n-2):
        outcome.append(outcome[-1]+outcome[-2])
    return outcome
feibo()
Out[3]:[0, 1, 1, 2, 3]

函数中的变量

在自定义函数中的变量,一般只能在自定义函数内起作用,所以称为局部变量。一旦跳出了函数的作用域,局部变量将不会产生任何影响。

如果希望函数内部的局部变量对所有作用域都起作用,就需要对局部变量进行全局变量的声明,方式为在变量前加上global,比如

In [22]:a=10
b=20
def show():
    global a
    a=1
    b=2
    return a+b
print show()
print a
print b

3
1
20

当函数内的a变成了全局变量,函数内被重新赋值的a,在后面print a时即可见其变化。未被声明为全局变量的局部变量b,在后面print b时没有产生任何影响,b依然等于20。

函数与模块

Python中的模块,简称为库。打个比方,一个函数能解决一个问题,那么把一堆函数放在一起,就能解决一件事情。为这堆函数打个包,就形成了模块的概念。

  • 模块的安装

Python的魅力之一,在于其丰富多样且功能强大的第三方库资源。要查看电脑里已安装的模块,只需打开anaconda prompt,然后在命令行中输入conda listpip list,即会出现已安装模块的列表。如果里面没有找到自己想要运行的模块,则可通过自行安装解决。

比如说要安装jieba模块,则可输入conda install jiebapip install jieba,前者在anaconda的云中导入安装,后者在网上下载安装。

  • 模块的导入

一旦安装完成,我们便可在Python中导入模块,格式为import 模块名 as 简称from 模块名 import 函数名。例如import pandas as pd(全部引用)、from pandas import DataFrame(局部引用)

结语

学习Python基础知识,或许会令人感到枯燥,但稳步打好基础,是为了日后编写策略代码的高效。基础扎实了,阅读高人的代码时,才能更易领悟他人的想法和思路。千里之行始于足下,我们接下来将接触Python的科学计算,敬请期待。



刺猬偷腥
2017年9月25日


to be continued.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343

推荐阅读更多精彩内容