引言:
Python是现在最热门,最实用的编程语言之一,也是一种解释型、面向对象、动态数据类型的高级程序设计语言(本次课程所有的教学都是基于Python3),本章以股票数据为例进行展示。
推荐学习资料:Python3的官方文档(以3.7版本为例):docs.python.org/zh-cn/3.7/廖雪峰老师的Python3教程:www.liaoxuefeng.com/wiki/101695…菜鸟教程:www.runoob.com/python3/pyt…
课程镜像选择:
本模块都是基于CPU2核8G基础资源和基础镜像进行实验
1. Python中变量
- 每个变量都是在内存中被创建
- 在python中,变量赋值就是一个“打标签”的过程,不需要声明任何数据类型
- 每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建,一般利用“=”来进行赋值操作
- 多个变量可以同时赋值
1.1 变量的定义规范
- 变量只能由数字,字母,下划线任意组合。
- 不能以数字开头。
- 不能是python中的关键字。比如下面的关键字 ['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec']
- 变量要有描述性。name = 'Roy'
- 变量不能使用中文。
- 变量不能过长。错误的例子:ssssssssssss = 'Financial'
- 官方推荐使用: 1.驼峰体(SchoolName='Financial') 2.下划线(school_name='Financial')
#对变量进行单一赋值 a='Today\'s stock price is' #此处的'需要在其前加上\才能正确哦! b='股票代码' b=603227 c='股票价格' d=4.84 e=True print('a=%s'%a) # s 输出字符串 s print('b=%d'%b) # d 输出整数 print('c=%s'%c) # s 输出字符串 print('d=%.1f'%d) # .1f 输出浮点数,且保留一位小数 print(e)
a=Today's stock price is b=603227 c=股票价格 d=4.8 True
#多变量赋值的另外一种形式 将一条股票代码信息一次性赋值 a, b, c ,d, e = '股票代码', 688698, '伟创电气', '今天的收盘价格是',4.8 print(a) print(b) print(c) print(d) print(e)
股票代码 688698 伟创电气 今天的收盘价格是 4.8
#多个变量进行 赋值股票代码 a=b=c=688679 print(a) print(b) print(c)
688679 688679 688679
1.2 格式符
格式符为真实值预留位置,并控制显示的格式。完整的模板如下: %[(name)][flags][width].[precision]typecode
其中typecode是类型码,用以控制显示的类型,如下: %s 字符串 (采用str()的显示) %r 字符串 (采用repr()的显示) %c 单个字符 %b 二进制整数 %d 十进制整数 %i 十进制整数 %o 八进制整数 %x 十六进制整数 %e 指数 (基底写为e) %E 指数 (基底写为E) %f 浮点数 %F 浮点数,与上相同 %g 指数(e) 或浮点数 (根据显示长度) %G 指数(E)或浮点数 (根据显示长度) (%% 表示字符“%”)
(name)为命名
flags可以有+,-,' '或0。+表示右对齐。-表示左对齐。' '为一个空格,表示在正数的左侧填充一个空格,从而与负数对齐。0表示使用0填充。
width表示显示宽度
precision表示小数点后精度
可以看到,当一个股票价格查询系统,常常需要向用户输出类似“股票代码XXXX今天的收盘价格是XXX”之类的字符串,而XXX的内容都是根据变量变化的,所以我们常会用到一种简便的格式化字符串的方式。 在Python中,我们用%实现格式化字符串
print('股票代码 %(b)d 今天的股票价格是 %(d).2f' % {'b':603227,'d':4.84})
股票代码 603227 今天的股票价格是 4.84
2. Python中变量和基本数据类型
- 数值(Number)。数据类型用于存储数值,在python3中包括整型、浮点型、复数、布尔型等。
- 字符串(String)。字符串是由数字、字母、下划线组成的一串字符。
- 列表(List)。列表用[]标识,是python最常用的也是最通用的复合数据类型。
- 元组(Tuple)。元组用()标识,类似于列表,其中最大的区别就是元组不能二次赋值,相当与只读列表。
- 集合(Set)。集合可以使用{}和set()来标识,但是注意创建空集合必须用set()来表示,set()中的元素还可以进行集合运算。
- 字典(Dictionary)。字典用{ }标识,由索引(key)和它对应的值value组成字典是无序对象集合。字典的形式非常的灵活,比如字典中的键可以对应多个值。
其中列表,元组和字典属于集合类型。 同时数值,字符串,元组属于不可变数据类型,列表,字典和集合属于可变数据类型。
2.1 数值及计算
#Python3 支持 int、float、bool、complex(复数) a, b, c, d = 14, 9.14, True, 4+5j print(type(a), type(b), type(c), type(d))
<class 'int'> <class 'float'> <class 'bool'> <class 'complex'>
5+2 #加法运算
7
4-3 #减法运算
1
3*4 #乘法运算
12
4/3 #除法运算,输出浮点数(python2中取整)
1.3333333333333333
5//2 #除法运算,输出整数部分
2
6**3 #乘方运算
216
7%4 #取余预算
3
2.2 字符串
s = 'Financial data analysis' print(s)
Financial data analysis
- 字符串还可以进行切片操作,方便提取想要的字符
- 规则是[头下标:尾下标] 获取的子字符串包含头下标的字符,但不包含尾下标的字符
#比如取字符串的Financ print(s[0:6])
Financ
2.3 列表
# 索引值以 0 为开始值,-1 为从末尾的开始位置 test_list = [ 'Financial', 9.14, 'analysis', 2015 ,2020 ] print(test_list[0],test_list[-1]) #第一个元素和最后一个元素 print(test_list[1:]) #第二个元素到最后一个元素 print(test_list[:4]) #第一个到第四个元素
Financial 2020 [9.14, 'analysis', 2015, 2020] ['Financial', 9.14, 'analysis', 2015]
2.4 元组
元组与列表类似,不同之处在于元组的元素不能修改。 且元组使用小括号 ( ),列表使用方括号 [ ]。
test_tuple = ('Financial', 9.14, 'analysis', 2015 ,2020) print(test_tuple[0],test_tuple[-1]) #第一个元素和最后一个元素 print(test_tuple[1:]) #第二个元素到最后一个元素 print(test_tuple[:3]) #第一个到第三个元素
Financial 2020 (9.14, 'analysis', 2015, 2020) ('Financial', 9.14, 'analysis')
2.5 集合
集合是一个无序的不重复元素序列。 可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。
test_set = {'Financial', 'analysis', 9.14, 'analysis', 'data',2015 ,2020} #去掉重复的元素 print(test_set)
{2020, 'Financial', 9.14, 'data', 'analysis', 2015}
#集合运算 a = set('Financial') b = set('analysis') print(a) #去掉重复的字母 print(b) #去掉重复的i print(a - b) # a 和 b 的差集 print(a | b) # a 和 b 的并集 print(a & b) # a 和 b 的交集 print(a ^ b) # a 和 b 中不同时存在的元素
{'c', 'n', 'a', 'l', 'F', 'i'} {'n', 's', 'l', 'a', 'y', 'i'} {'c', 'F'} {'c', 'n', 's', 'l', 'a', 'F', 'y', 'i'} {'l', 'n', 'i', 'a'} {'c', 'y', 's', 'F'}
2.6 字典
#创建字典 dict = {} dict = { '688698': "伟创电气", '300894': "火星人", '003031': "中瓷电子" } print(dict)
{'688698': '伟创电气', '300894': '火星人', '003031': '中瓷电子'}
#遍历字典的元素 for item in dict: print(item) #仅仅遍历到了key值
688698 300894 003031
for item in dict.items(): print(item) #遍历到了每个key和相对应的value
('688698', '伟创电气') ('300894', '火星人') ('003031', '中瓷电子')
for item in dict.values(): print(item) #遍历到每个元素的value
伟创电气 火星人 中瓷电子
#对字典中的元素按照value进行排序 dict={'a':914,'c':2015,'b':2020} dict=sorted(dict.items(),key=lambda x:x[1]) #lambda是用于定义无名称的函数的关键字 print(dict)
[('a', 914), ('c', 2015), ('b', 2020)]
#对字典中的元素按照key进行排序 dict={'a':914,'c':2015,'b':2020} dict=sorted(dict.items(),key=lambda x:x[0]) print(dict)
[('a', 914), ('b', 2020), ('c', 2015)]
#创建一个key对应多个值映射 dict1={'688698':['伟创电气',2.4,'股票'], '300894':['火星人',4.5], '003031':['中瓷电子',6.6]} print(dict1)
{'688698': ['伟创电气', 2.4, '股票'], '300894': ['火星人', 4.5], '003031': ['中瓷电子', 6.6]}
Task
1.思考:List和 Tuple的区别?
- 1.List中是可变的,tuple不可变 所以tuple没有insert, pop,append方法
- 2.元组使用(),列表用[]
- 3.List最常用,用途最广
- 4.定义只有一个元素的tuple的时候,必须加逗号,否则不会被认为是tuple,而被识别为括号 比如,a = (1) 会被识别为数字1, (1,)这样才被识别为一个元组,只有一个元素,数字1
- 5.元组可以转列表,但不可以转字典。不可变的tuple有什么意义?因为tuple不可变,所以代码更安全。如果可能,能用tuple代替list就尽量用tuple。
- 6.tuple 放弃了对元素的增删(内存结构设计上变的更精简),换取的是性能上的提升:创建 tuple 比 list 要快,存储空间比 list 占用更小。所以就出现了“能用 tuple 的地方就不用 list”的说法。
- 7.直接在同一个元组上更新是不可行的,但是可以通过拷贝现有的元组片段构造一个新的元组的方式解决。
- 8.关系操作符 in 和 not in 也可以直接应用在元组上,这跟列表是一样的。
- 9.关系操作符 in 和 not in 也可以直接应用在元组上,这跟列表是一样的。
- 10.多线程并发的时候,tuple 是不需要加锁的,不用担心安全问题,编写也简单多了。
2. 在这6个数据类型中,不可变数据有哪些?可变数据有哪些?
答案
- 可变数据类型:list,dic,set
- 不可变数据类型:Number, String, Tuple
解释
1.python3的基本数据类型有六种
Number(int, float, bool, complex),String, List, Tuple, Dictionary, Set
2.什么是可变数据类型和不可变数据类型?
1、Python中的不可变数据类型,不允许变量的值发生变化,如果改变了变量的值,相当于是新建了一个对象。而对于相同的值的对象,在内存中则只有一个对象,内部会有一个引用计数来记录有多少个变量引用这个对象。
2、Python中的可变数据类型,允许变量的值发生变化,如果对变量进行append、+=等这种操作后,只是改变了变量的值,而不会新建一个对象,变量引用的对象的地址也不会变化。不过对于相同的值的不同对象,在内存中则会存在不同的对象,即每个对象都有自己的地址,相当于内存中对于相同值的对象保存了多份,这里不存在引用计数,是实实在在的对象。