量化分析师的 Python 日记 [第 1 天:谁来给我讲讲 Python?]

2016-09-05 17:18:01 +08:00
 datayes2015
###“谁来给我讲讲 Python ?”
作为无基础的初学者,只想先大概了解一下 Python ,随便编个小程序,并能看懂一般的程序,那些什么 JAVA 啊、 C 啊、继承啊、异常啊通通不懂怎么办,于是我找了很多资料,写成下面这篇日记,希望以完全初学者的角度入手来认识 Python 这个在量化领域日益重要的语言
###一,熟悉基本
在正式介绍 python 之前,了解下面两个基本操作对后面的学习是有好处的:
1 )基本的输入输出 可以在 Python 中使用+、-、*、/直接进行四则运算。
( 2 )导入模块 使用 import 可以导入模块,导入之后,就可以使用这个模块下面的函数了。 比如导入 math 模块,然后使用 math 模块下面的 sqrt 函数:
import math
math.sqrt(9)
这时我有疑问了:
“每次引用函数的时候, math 这个模块前缀都要带吗?可不可以不带?”
直接输入 sqrt(9)是会报错的,好烦人,那么有什么办法可以不用每次都带前缀?办法是有的,用“ from 模块 import 函数”的格式先把函数给“拿”出来。

1 from math import sqrt
2 sqrt(9)
这样每次使用 sqrt 函数的时候就不用再加 math 前缀了。当我正准备跳过的时候,又有了一个问题?
“ math 模块下面有那么多函数,可不可以写一个语句,然后 math 下面所有函数都可以直接使用?”
调用了 math 下面的 sqrt 函数,写一个 from … import …,再调用下面的 floor ,还要写一个,如此也挺麻烦的,有个办法可以一下把所有函数都给“拿”出来:
from math import *
print sqrt(9)
print floor(32.9)
3.0
32.0
###二,容器 1 ,什么是容器
开始学 Python 时,被它的数据结构,什么字典、序列、元组等等搞的很混乱,估计有跟我一样的初学者,所以我梳理了一下留存: 首先要从容器说起, Python 中有一种名为容器的数据结构,顾名思义,容器,就是装数据的器具,它主要包括序列和词典,其中序列又主要包括列表、元组、字符串等(见下面那张图)。

https://uqer.io/community/share/55e913a5f9f06c1ea681f9e8

列表的基本形式比如:[1,3,6,10]或者[‘ yes ’,’ no ’,’ OK ’]
元组的基本形式比如:(1,3,6,10)或者(‘ yes ’,’ no ’,’ OK ’)
字符串的基本形式比如:’ hello ’
以上几种属于序列,序列中的每一个元素都被分配一个序号——即元素的位置,也称为“索引”,第一个索引,即第一个元素的位置是 0 ,第二个是 1 ,依次类推。列表和元组的区别主要在于,列表可以修改,而元组不能(注意列表用中括号而元组用括号)。序列的这个特点,使得我们可以利用索引来访问序列中的某个或某几个元素,比如:
a=[1,3,6,10]
a[2]
b=(1,3,6,10)
b[2]
c='hello'
c[0:3]
'hel'
而与序列对应的“字典”则不一样,它是一个无序的容器,
它的基本形式比如: d={7:'seven',8:'eight',9:'nine'}
这是一个“键—值”映射的结构,因此字典不能通过索引来访问其中的元素,而要根据键来访问其中的元素:
d={7:'seven',8:'eight',9:'nine'}
d[8]
'eight'
2 、序列的一些通用操作
除了上面说到的索引,列表、元组、字符串等这些序列还有一些共同的操作。
( 1 )索引(补充上面)
序列的最后一个元素的索引,也可以是-1 ,倒数第二个也可以用-2 ,依次类推:
a=[1,3,6,10]
print a[3]
print a[-1]
10
10
( 2 )分片
使用分片操作来访问一定范围内的元素,它的格式为:
a[开始索引:结束索引:步长]
那么访问的是,从开始索引号的那个元素,到结束索引号-1 的那个元素,每间隔步长个元素访问一次,步长可以忽略,默认步长为 1 。
c='hello'
c[0:3]
'hel'
( 3 )序列相加
即两种序列合并在一起,两种相同类型的序列才能相加
[1, 2, 3, 4, 5, 6]
invalid syntax (line 2)
( 4 )成员资格
为了检查一个值是否在序列中,可以用 in 运算符
a='hello'
print 'o' in a
print 't' in a
3 、列表操作
以上是序列共有的一些操作,列表也有一些自己独有的操作,这是其他序列所没有的
( 1 ) List 函数
可以通过 list(序列)函数把一个序列转换成一个列表
list('hello')
查看全部
['h', 'e', 'l', 'l', 'o']
( 2 )元素赋值、删除
元素删除—— del a[索引号]
元素赋值—— a[索引号]=值
查看全部
'hello'

1
b=list(a)
2
b
查看全部
['h', 'e', 'l', 'l', 'o']

1
del b[2]
2
b
查看全部
['h', 'e', 'l', 'o']

1
b[2]='t'
2
b
查看全部
['h', 'e', 't', 'o']
分片赋值—— a[开始索引号:结束索引号]=list(值)
为列表的某一范围内的元素赋值,即在开始索引号到结束索引号-1 的区间几个元素赋值,比如,利用上面语句,如何把 hello 变成 heyyo ?
b=list('hello')
2
b
查看全部
['h', 'e', 'l', 'l', 'o']

1
b[2:4]=list('yy')
2
b
查看全部
['h', 'e', 'y', 'y', 'o']
注意虽然“ ll ”处于“ hello ”这个单词的第 2 、 3 号索引的位置,但赋值时是用 b[2:4]而不是 b[2:3],另外注意 list()用小括号。
( 3 )列表方法
上面说过 list 函数,函数这个东西在很多语言中都有,比如 excel 里面的 if 函数、 vlookup 函数, SQL 里面的 count 函数,以及各种语言中都有的 sqrt 函数等等, python 中也有很多函数。 Python 中的方法,是一个“与某些对象有紧密联系的”函数,所以列表方法,就是属于列表的函数,它可以对列表实现一些比较深入的操作,方法这样调用:
对象.方法(参数)
那么列表方法的调用就理所当然是:
列表.方法(参数)
常用的列表方法这么几个,以 a=['h','e','l','l','o']为例:
a=['h','e','l','l','o']
2
a
查看全部
['h', 'e', 'l', 'l', 'o']
给列表 a 的 n 索引位置插入一个元素 m: a.insert(n,m)
a.insert(2,'t')
2
a
查看全部
['h', 'e', 't', 'l', 'l', 'o']
给列表的最后添加元素 m: a.append(m)

1
a.append('q')
2
a
查看全部
['h', 'e', 't', 'l', 'l', 'o', 'q']
返回 a 列表中,元素 m 第一次出现的索引位置: a.index(m)

1
a.index('e')
查看全部
1
删除 a 中的第一个 m 元素: a.remove(m)

1
a.remove('e')
2
a
查看全部
['h', 't', 'l', 'l', 'o', 'q']
将列表 a 从大到小排列: a.sort()

1
a.sort()
2
a
查看全部
['h', 'l', 'l', 'o', 'q', 't']
4 、字典操作
( 1 ) dict 函数
dict 函数可以通过关键字参数来创建字典,格式为:
dict(参数 1=值 1,参数 2=值 2, …)={参数 1:值 1, 参数 2=值 2, …}
比如,如何创建一个名字 name 为 jiayounet ,年龄 age 为 28 的字典?
dict(name='jiayounet',age=27)
查看全部
{'age': 27, 'name': 'jiayounet'
基本操作
字典的基本行为与列表在很多地方都相似,下面的例子以序列 a=[1,3,6,10],字典 f={'age': 27, 'name': 'shushuo'}为例
my picture
日记小结: 今天学习了 Python 的基本页面、操作,以及几种主要的容器类型,天还要学习 Python 的函数、循环和条件、类,然后才算是对 Python 有一个大致的了解。
2975 次点击
所在节点    Python
10 条回复
server
2016-09-05 17:22:45 +08:00
好 软文
ethanlu
2016-09-05 17:34:53 +08:00
列表是不是就是数组?
lneoi
2016-09-05 17:43:36 +08:00
没格式 难阅读
songshan
2016-09-05 17:50:39 +08:00
咦?顶一个,顺便招聘量化研究员啦~通联数据, base 上海,简历投递 hire@datayes.com
zmj1316
2016-09-05 19:32:51 +08:00
https://www.v2ex.com/t/182389

看看这贴,多久前就有人转过了, lz 把人家祖坟都给挖了还不注明出处啊, LS 也是一伙的,拜托搞软文的取名字也用点心啊!
xiahei
2016-09-05 19:46:39 +08:00
排版感人。
Tink
2016-09-05 20:36:50 +08:00
...
taxidriver
2016-09-05 21:13:09 +08:00
现在到处都是这个矿那个矿的贴,又是量化又是 python ,你们烦不烦人
taxidriver
2016-09-05 21:14:24 +08:00
而且你来程序员网站发这种基础的 python 教学贴?拜托走点心好吧,你去炒股论坛发编程教学贴可以,来程序员论坛至少是发金融入门的贴才对路
datayes2015
2016-09-06 16:48:00 +08:00
@taxidriver 恩恩,金融入门往后会发的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/304088

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX