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

内置函数与自定义函数

内置函数也叫自带函数,是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.

你可能感兴趣的:(刺猬教你量化投资(三) :函数的概念)