V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
datayes2015
V2EX  ›  Python

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

  •  1
     
  •   datayes2015 · 2016-09-05 17:18:01 +08:00 · 2982 次点击
    这是一个创建于 3003 天前的主题,其中的信息可能已经有所发展或是发生改变。
    ###“谁来给我讲讲 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 有一个大致的了解。
    10 条回复    2016-09-06 16:48:00 +08:00
    server
        1
    server  
       2016-09-05 17:22:45 +08:00
    好 软文
    ethanlu
        2
    ethanlu  
       2016-09-05 17:34:53 +08:00
    列表是不是就是数组?
    lneoi
        3
    lneoi  
       2016-09-05 17:43:36 +08:00
    没格式 难阅读
    songshan
        4
    songshan  
       2016-09-05 17:50:39 +08:00
    咦?顶一个,顺便招聘量化研究员啦~通联数据, base 上海,简历投递 [email protected]
    zmj1316
        5
    zmj1316  
       2016-09-05 19:32:51 +08:00
    https://www.v2ex.com/t/182389

    看看这贴,多久前就有人转过了, lz 把人家祖坟都给挖了还不注明出处啊, LS 也是一伙的,拜托搞软文的取名字也用点心啊!
    xiahei
        6
    xiahei  
       2016-09-05 19:46:39 +08:00
    排版感人。
    Tink
        7
    Tink  
       2016-09-05 20:36:50 +08:00
    ...
    taxidriver
        8
    taxidriver  
       2016-09-05 21:13:09 +08:00
    现在到处都是这个矿那个矿的贴,又是量化又是 python ,你们烦不烦人
    taxidriver
        9
    taxidriver  
       2016-09-05 21:14:24 +08:00
    而且你来程序员网站发这种基础的 python 教学贴?拜托走点心好吧,你去炒股论坛发编程教学贴可以,来程序员论坛至少是发金融入门的贴才对路
    datayes2015
        10
    datayes2015  
    OP
       2016-09-06 16:48:00 +08:00
    @taxidriver 恩恩,金融入门往后会发的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5402 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 08:26 · PVG 16:26 · LAX 00:26 · JFK 03:26
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.