写在前面的话:
我是霈烟学长,就读于浙江某大学金融专业。承蒙金融计量学社公众号运营人言音学姐的邀请,也为了表达对言音学姐专业课笔记分享帮助到同学的感动与肯定,霈烟学长决定根据他的Python学习经验,为大家做一场Python的入门分享。
《金刚经》云:“若菩萨不住相布施,其福德不可思量”。
社会上很多人希望为了给自己的履历增色而做公益,那样的公益不见得就是真公益。相反地,在合理合法的范围内分享知识与技术,真诚恳切地希望别人的处境变得更好,才是我们向往的真公益。
我只是一个普通大学的在读学生,所分享的内容在专业性方面肯定比不过专业的程序员。只愿意用自己所学所长,为需要的朋友们在学习Python入门的路上尽一份绵薄之力。
公益分享嘉宾介绍

霈烟学长
没有什么很厉害的履历
只是和你一样普通的
大二金融专业学生
有c语言及Python方面学习经历
完成过量化投资课程学习

以下是讲座内容整理
全文字数:5641;阅读时间:17 分钟
一
Python语言介绍
(一)
Python简介及主要优势
Python诞生于1991年,由阿姆斯特丹国家数学和计算机科学研究所的研究员Rossum开发的一种高级脚本编程语言。
Python的原意为大蟒蛇,其前身是ABC(All BASIC CODE)。ABC是一种教学语言,为非专业程序人员编写,但最终这种语言没有成功。Python从其中汲取了很多语法,改正了很多错误。
Python是一门跨平台、开源、免费的解释性高级动态强类型脚本语言。从91年面世以来,现已成为最受欢迎的语言之一。为什么Python能够脱颖而出,他的优势就在他的定义上。
1
简单、脚本语言
Python是很能代表简单主义思想的一门语言,入门后你会发现阅读代码仿佛在做阅读理解,语义简单明了,没有编程语言复杂、严谨的语法和规则,很容易上手。
2
免费、开源
Python的安装和使用均不需收费,他是全球计算机工作者共同的努力成果,而且其源代码免费开放,可用于其他项目,我们所知道的Linux、R语言、Android、Firefox等均有Python的贡献。
3
跨平台、解释型
可以在不同操作系统和硬件架构的电脑上运行。Python是脚本语言,通过解释器执行,虽然效率比C++低,但跨平台性好。
而且具有可扩展性,你甚至可以使用C或者C++完成部分代码编写,再用Python程序进行调用。
4
高级、动态、强类型
相对于汇编语言等低级语言,用户可以不关注底层实现细节。许多底层细节已经被打包成模块使用。动态是指变量运行时可以被改变类型,C语言的变量类型则相对死板,需要事先声明且改变困难。强类型是指不允许同类型相加。
5
丰富无比的库
库正是Python受到欢迎的重要因素,许多程序编写完成后可以被打包成库。
而经过这么多年的发展,已经有了一个庞大的标准库,可以帮助你处理各种工作,网页、数据库、量化、统计、图形设计等均有相应的库。即使你的编写水平没有达到很高水准,使用这些库也可以帮助你达到目的。
6
总结一下
Python优势在于:
简单易学;
开源且免费;
支持命令式和函数式编程;
可以与多种不同语言编无缝拼接;
完全支持面向对象程序设计,语法简洁清晰;
拥有大量的几乎支持所有领域应用开发的成熟扩展库;

(二)
简单介绍计算机语言发展历史
从1951年至今,人类一共发明了200多种编程语言,每一种语言的出现都带有某些新特征。
1957年约翰·巴科斯创建了是全世界第一套高阶语言:FORTRAN。
1972年丹尼斯·里奇在贝尔实验室的工作时间里感到无聊,决定制作带有花括号的C,并最终取得了巨大的成功。
1983年比雅尼·斯特劳斯特鲁普发明了C++。
1991年吉多·范罗苏姆因为不喜欢使用大括号,所以发明了Python。
1995年布兰登·艾克在周末的时候设计了JavaScript。
1996年詹姆斯·高斯林发明了Java,这是第一个真正的面向对象的编程语言。

(三)
Python在经济学科的应用实践举例
量化投资
量化投资是借助数学理论和计算机技术实现的,以数据为基础,以策略模型为核心,以程序化交易为手段,以获取稳定收益为目的的投资方法。
西蒙斯的神话
西蒙斯是世界级数学家,提出了陈氏-西蒙斯定理,是一名伟大的对冲基金经理。文艺复兴科技大奖章基金。1989-2013年年化平均收益率35%,2008年回报率80%。
而量化投资的基础就在于计算机模型的构建。Python可以实现大量模型的构建,Python也已经在金融量化投资领域占据了重要位置,各个业务链条都能找到相应的框架实现。因为Python是一门比较全面与平衡的语言,既能满足包括web在内的系统应用的开发,又能满足数据统计分析等数学领域的计算需求,同时也能作为胶水语言跟其它开发语言互通融合。

二
Python的安装及集成开发环境搭建
(一)
基础Python的安装
Python是免费的开源软件,进入Python的官网即可下载,Python现有Python3和Python2两个版本两版本之间不互通,现阶段学习使用的大部分都是Python3。

(二)
Python集成开发环境:Anaconda
Anaconda是一个开源的Python发行版本,其包含了Conda、Python、Spyder、Jupyter Notebook、IPython等软件及其依赖项,以及NumPy、SciPy、Pandas、Matplotlib等400多个扩展包。
Anaconda安装简单,在官网下载安装包后点击执行文件安装即可,且支持多种操作系统,Windows、Mac系统均可使用。而且在Anaconda中,Python2和Python3版本可同时存在。
但是要注意,Anaconda是一个Python的集成开发环境,内置Python。所以安装Anaconda后,最好不要再次安装Python,否则可能会产生冲突。

(三)
Python的运行介绍
Python 环境中最主要的部分是解释器。
首先介绍一下如果只有原生Python环境下的运行,直接下载的Python安装后可以在cmd窗口运行,就是那个最原始最硬核的黑乎乎的窗口,除非是特别喜欢硬核风的程序员,否则以这个原始界面来说,用户友好度肯定不足。

图:cmd运行界面
再聊一聊安装Anaconda后的的运行环境,Anaconda自带一个cmd运行环境Anaconda Prompt,这个界面依旧是原始的黑框,但是内置信息丰富度已经比原生Python要好很多,用户交互性有所提升,在anaconda prompt内可进行程序编写、23版本的切换。也可以制作原始的图像。
但是在cmd运行环境内程序很难修改,一旦出错需要重新复制一遍程序再debug。

图:Prompt的运行界面
除了上述cmd运行环境,IPython 是另一种更为广泛使用的交互对话环境。
它具有自动补全代码、自动缩进和查询等功能。在只安装了Python 的情况下,通过pip安装可以安装该环境。在Anaconda 环境中自动安装IPython。
当代码较短的时候可以直接用Python自带的shell执行,但如果代码较长可能产生错误的时候推荐使用IPython进行编译。

图:IPython的运行界面
介绍了上述的Shell环境,IPython环境,他们有各自的优缺点,而Anaconda中有一个功能更为综合的集合开发环境——Spyder。
Spyder 是一个整合了科学计算功能的典型函数库,如 NumPy、Pandas。除了 Python 内置的 Shell 以外, Spyder也内置安装了 Python 交互环境库 IPython、和Shell,该集合开发环境软件页面左侧是IPython环境,右侧是Shell环境,在IPython中运行可在右侧界面查看运行结果。而且Spyder具有许多辅助编译功能。

图:Spyder界面

(四)
Python编程常识
Python程序的基本元素是语句。一般情况下一个语句占据一个物理行,也就是编译器上一行的位置,但是实际编写过程中,多个物理行之前存在逻辑关系时,为了能正确识别,需要一些方法区分识别不同物理行之间的关系,形成逻辑行。
“#”:以“#”开头的行为注释行,起到解释作用,运行时不会运行该部分
“/”:一个逻辑行可以占据一个物理行,当语句较长时,一个逻辑行可能占据多个物理行。用斜线"\"表示语句跨行。
缩进(Tab):Python中不用花括号表示语句块,是通过缩进表示的,缩进相同的语句表示同一语句块。

三
Python基本语法及编程规范
(一)
对象
是Python语言中最基本的概念,在Python中处理的一切都是对象,命令是对象,函数也是对象。
Python中有许多可直接使用的内置对象,如数字、字符串、列表、字典等;
非内置对象需要导入模块才能使用,如正弦函数sin(x),随机数产生函数random( )等。
以下是不同对象类型的介绍:
1
数字(number)
数字有整数、浮点数、复数及布尔型,整数就是无小数的数字。Python3版本中没有整数范围限制,取决于内存大小,一般情况下默认为十进制,在数字前加上各个进制代表符号可以转换进制。
// 浮点数float //
是具有小数点的数,因为浮点数在电脑中用二进制保存,所以表达的是近似值。浮点数可以求固定精确度的小数。
// 布尔类型 //
用于确定真假,语句为真返回true,语句为假返回False。True的值为1,False为0。
// 复数 //
有实部和虚部两个部分,但Python中的虚数单位用J和j表示,可以通过complex(x,y)函数或直接写复数表达式创建。
// 字符串 //
是由字符组成的序列,字符集合用引号框起来即形成字符串,并可以从左到右按照相对位置进行访问,比如‘Apple’第一个字符‘A’的偏移量为0,后续字符分别为1、2、3、4。字符串内的字符元素不可变动。
2
列表(lsit)
列表具有容器功能,可让任何类型的对象组成一个序列,这是Python语言最通用的一个序列,也可以通过偏移量进行索引,创建方法就是使用list()函数或者用[]包含对象。列表可以放入任何类型对象,包括列表。
3
元祖(Tuple)
也是一种序列类型数据,和列表一样可储蓄任何类型数据,但是列表中元素可以变化,但是元祖不可以变化元素,列表能够删除、增加、变换元素,但元祖不可以,和字符串类似。但字符串只能放入字符元祖可以放入任何类型对象。
4
字典(dict)
字典属于一种映射关系,没有从左到右的顺序关系,字典内部由“键:值”的配对组成,可以看做两类数据对照表,输入其中一个即可找到另一个。字典使用{}创建,比如{‘a身高’:169,‘b身高’,180}。
5
集合(set)
集合是无序可变序列,使用一对大括号界定,元素不可重复;只能包含数字、字符串、元组等不可变类型。

图:对象类型的整理表格

(二)
变量及命名规则
Python的变量名称一般由英文字母、下划线或者数字构成。不需要事先声明变量名及其类型,直接赋值即可创建各种类型的对象变量。
但变量名称不能以数字开头;也不能与Python内置关键字名字相同,比如if、for等。Python具有大小写敏感,同样的字符变量如果大小写不同依然会被识别为不同变量。
在Python 3中加入了Unicode编码,中文、日文等其他非英文语言也可以作为变量名。意味着你可以在变量名称上使用中文字符,但是为了程序运行的流畅性和阅读兼容性,各位编写程序最好还是使用英文变量。

变量的难点在于可变与不可变。
举个例子,创建变量“x=7”时,编译器建立对象7,如果x没有被创建则创建一个x,再把7赋值给x,x和7绑定,但是如果运行“x=8”,则x指向对量8, 7则被自动回收。X的地址就会变化,这就是可变的。但创建的整数7、8的内存地址不可改变,这就是不可变对象。
各类对象类型中,数字、字符串、元祖属于不可变对象,列表元素可变,属于可变对象。
总结来说,不可变对象一且在内存中建立后,其值就无法变动。无法通过指向该对象的变量修改对象的内容。

(三)
常用语句
1
赋值语句
赋值语句通过赋值运算符、表达式和变量实现。通过赋值符号“=”将右边的表达式的返回值赋值给左边的变量。比如‘a=1+1’先计算1+1再赋值给a
多重赋值:将一个对象引用赋值给多个变量,如’a=b=c=1’
多元赋值:使用一个赋值语句实现多变量引用多对象的方法,如’a,b,c=1,2,3’
增强赋值:即先对变量进行计算再赋值给这个变量,a=a+1,a+=1,
2
条件语句
Python 条件语句是指通过对指定条件的真假结果来确定要执行哪条语句。
常用条件语句为if语句,基本形式为:
if 语句1:
执行语句1
else:
执行语句2
常用分支语句有单分支,双分支,多分支。根据不同实际情况使用。

图:条件语句代码
3
循环语句
属于重复执行某代码块。Python有for循环和while循环两种。
循环语句可批量处理数据,比如输出1000以内的偶数,可利用循环语句使变量遍历所有数据并找出符合条件的数据输出。

图:循环语句代码
(四)
函数
Python中将可将需要反复执行的代码封装为函数,并在需要该功能的地方进行调用,实现代码复用,保证代码的一致性。
1
形参与实参
函数参数分为形式参数(简称形参)、实际参数(简称实参)。
函数定义时括弧内为形参,一个函数可以没有形参,但是括弧必须要有,表示该函数不接受参数。
函数调用时向其传递实参,让形参指向实参所指的对象(设涉及可变不可变的问题),在定义函数时,对参数个数并没有限制,如果有多个形参,需要使用逗号进行分割。
函数有内置函数、库内定义好的函数、编写者自己定义的函数。
2
定义一个函数
使用def()函数,函数形参不需要声明其类型,也不需要指定函数返回值类型,即使该函数不需要接收任何参数,也必须保留一对空的圆括号,而且函数后的冒号不可删除。
函数体相对于def关键字必须保持一定的空格缩进。

图:定义函数的代码

四
Python模块、包、库简介
(一)
模块、包、库的介绍
1
模块
模块是一种以“.py”为后缀的文件,里面包含一些常量或者函数,使用这些常量和函数组合可以实现特定的目的。可以将可能所需的函数或者数据处理方法封装成模块,这个模块可以被其他模块获取与导入。
2
包
包是模块的一种结构化管理,将具有关联性的模块结构化,整合功能。一个包内可拥有许多模块,这样也可以避免模块重名的错误,因为导入时需要导入‘包.模块名’。
除了模块文件以外,包文件里面可以包含子包。可以无限套娃。
3
库
Python广受欢迎的原因之一谁因为其具有众多功能强大的库。而Python自带的标准库可以满足大多数基本功能需求,文本处理、数值运算、文件管理、代码调试等功能都有涵盖。
Python 中的库是借用其他编程语言的概念,没有特别具体的定义,Python 库着重强调其功能性。在 Python中,具有某些功能的模块和包都可以被称作库。
举个例子,Numpy库就是一个科学计算功能的函数库,它也可以被看做一个包的集合。

(二)
Python标准库
Python 的标准库是Python 自带的函数库,成功安装 Python 后,即可使用标准库。标准库中包含内置函数、内置常量、内置数据等等模块。这些基础的模块由C语言编写,可在Python的编译器内直接使用。
简单介绍几个模块,比如具有数学功能的math和cmath模块。Math模块位浮点数运算提供一些函数,不接受复数输入;而cmath模块接受复数作为参数。比如math.pi输出值为3.141592653589793。
具有时间和日期功能的calendar模块、time模块、datatime模块。这些模块可以帮助用户获取日期,处理日期,制作时间表等等。

图:Python的标准库

四
Python编程思想
在讨论面对对象和面对过程的区别之前,我们先明确一下:
Q1: 到底什么是编程?
A1: 编程的目的是让计算机帮我们做事情。
Q2: 那编程如何实现?
A2: 是写一个剧本,让计算机去表演。

那又有几个问题了:
Q3: 剧本用什么语言写?
(中文?英文?编程语言?)
Q4: 剧本结构怎么安排?
(算法?编程思想?面向过程?面向对象?)

语言是工具,编程能力是功夫,编程思想是高级功夫,算法是灵魂。能运用Python是一个基础,研究思想和算法才是自由发挥的地方。
现在在讨论一下面对对象和面对过程的编程。
1
面对对象VS面对过程
面向对象程序设计:
主要针对大型软件设计而提出,使得软件设计更加灵活,能够很好地支持代码复用和设计复用,并且使得代码具有更好的可读性和可扩展性。这是面向对象的定义
但编程思想就是我们用计算机来解决实际问题时所采用的思维方式。
6
面向过程VS面向对象; 员工思维VS领导思维
面向过程思想是早期的程序语言设计思想。思路是以行为为主线,分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现。也就是现在典型的学生解题的思维。
面向对象思想是软件工程的基础。思路是以对象为主线,把构成问题的事物分解成各个对象,把行为封装到对象中,通过对象来解决问题。

举一个很通俗的例子
煮鸡蛋

// 面向过程 //
从冰箱里取出鸡蛋,
用锅接水,放鸡蛋,
开火,烧水,关火。
// 面向对象 //
有请鸡蛋、请锅、煤气灶!
- 鸡蛋:我负责由生变熟;
- 锅:我负责接水,盛鸡蛋;
- 煤气灶:我负责烧和关火(不用担心忘记关火);

面向过程的思维就是员工思维,我按照应该煮鸡蛋的方法拿鸡蛋、烧水、煮熟,事事亲力亲为。
而面向对象的方法就是先将这这些步骤打包好,在调动这些模块去完成目标,这也是典型的老板思维。所以这个思想不仅实用于编程,也对于问题的思考有很大帮助。
学习编程的过程不仅仅是计算机技术的联系,也是思维上的锻炼。

- 声 明 -
金融计量学社是一个私人公众号。不是组织,也不是社团。只是一群志同道合、至心为人且热爱学习的小伙伴们,自发自愿为同学们建立的公益学术传播交流平台。

文案 / 霈烟学长,Z学长
排版 / 言音学姐
学术指导 / Rose学姐,Torres学长
审核 / Rose学姐的新团队
更多学术干货详见往期推送


关于我们

经济学子忠诚可靠的学术亲友团
以积极的利他之心
开创公益学术分享之氛围
于大学校园中弘扬利他互助之文化


