Python 基础1 数据类型 数字与字符串
Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。
Python 的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号,它具有比其他语言更有特色语法结构。
-
Python 是一种解释型语言: 这意味着开发过程中没有了编译这个环节。类似于PHP和Perl语言。
-
Python 是交互式语言: 这意味着,您可以在一个 Python 提示符 >>> 后直接执行代码。
-
Python 是面向对象语言: 这意味着Python支持面向对象的风格或代码封装在对象的编程技术。
-
Python 是初学者的语言:Python 对初级程序员而言,是一种伟大的语言,它支持广泛的应用程序开发,从简单的文字处理到 WWW 浏览器再到游戏。
Python 特点
-
1.易于学习:Python有相对较少的关键字,结构简单,和一个明确定义的语法,学习起来更加简单。
-
2.易于阅读:Python代码定义的更清晰。
-
3.易于维护:Python的成功在于它的源代码是相当容易维护的。
-
4.一个广泛的标准库:Python的最大的优势之一是丰富的库,跨平台的,在UNIX,Windows和Macintosh兼容很好。
-
5.互动模式:互动模式的支持,您可以从终端输入执行代码并获得结果的语言,互动的测试和调试代码片断。
-
6.可移植:基于其开放源代码的特性,Python已经被移植(也就是使其工作)到许多平台。
-
7.可扩展:如果你需要一段运行很快的关键代码,或者是想要编写一些不愿开放的算法,你可以使用C或C++完成那部分程序,然后从你的Python程序中调用。
-
8.数据库:Python提供所有主要的商业数据库的接口。
-
9.GUI编程:Python支持GUI可以创建和移植到许多系统调用。
-
10.可嵌入: 你可以将Python嵌入到C/C++程序,让你的程序的用户获得"脚本化"的能力。
Python可以应用于众多领域,如:数据分析、组件集成、网络服务、图像处理、数值计算和科学计算等众多领域。目前业内几乎所有大中型互联网企业都在使用Python,如:Youtube、Dropbox、BT、Quora(中国知乎)、豆瓣、知乎、Google、Yahoo!、Facebook、NASA、百度、腾讯、汽车之家、美团等。
目前Python主要应用领域:
- 云计算: 云计算最火的语言, 典型应用OpenStack
- WEB开发: 众多优秀的WEB框架,众多大型网站均为Python开发,Youtube, Dropbox, 豆瓣。。。, 典型WEB框架有Django
- 科学运算、人工智能: 典型库NumPy, SciPy, Matplotlib, Enthought librarys,pandas
- 系统运维: 运维人员必备语言
- 金融:量化交易,金融分析,在金融工程领域,Python不但在用,且用的最多,而且重要性逐年提高。原因:作为动态语言的Python,语言结构清晰简单,库丰富,成熟稳定,科学计算和统计分析都很牛逼,生产效率远远高于c,c++,java,尤其擅长策略回测
- 图形GUI: PyQT, WxPython,TkInter
Python在一些公司的应用:
- 谷歌:Google App Engine 、code.google.com 、Google earth 、谷歌爬虫、Google广告等项目都在大量使用Python开发
- CIA: 美国中情局网站就是用Python开发的
- NASA: 美国航天局(NASA)大量使用Python进行数据分析和运算
- YouTube:世界上最大的视频网站YouTube就是用Python开发的
- Dropbox:美国最大的在线云存储网站,全部用Python实现,每天网站处理10亿个文件的上传和下载
- Instagram:美国最大的图片分享社交网站,每天超过3千万张照片被分享,全部用python开发
- Facebook:大量的基础库均通过Python实现的
- Redhat: 世界上最流行的Linux发行版本中的yum包管理工具就是用python开发的
- 豆瓣: 公司几乎所有的业务均是通过Python开发的
- 知乎: 国内最大的问答社区,通过Python开发(国外Quora)
- 春雨医生:国内知名的在线医疗网站是用Python开发的
- 除上面之外,还有搜狐、金山、腾讯、盛大、网易、百度、阿里、淘宝 、土豆、新浪、果壳等公司都在使用Python完成各种各样的任务。
Python的优缺点
先看优点
- Python的定位是“优雅”、“明确”、“简单”,所以Python程序看上去总是简单易懂,初学者学Python,不但入门容易,而且将来深入下去,可以编写那些非常非常复杂的程序。
- 开发效率非常高,Python有非常强大的第三方库,基本上你想通过计算机实现任何功能,Python官方库里都有相应的模块进行支持,直接下载调用后,在基础库的基础上再进行开发,大大降低开发周期,避免重复造轮子。
- 高级语言————当你用Python语言编写程序的时候,你无需考虑诸如如何管理你的程序使用的内存一类的底层细节
- 可移植性————由于它的开源本质,Python已经被移植在许多平台上(经过改动使它能够工 作在不同平台上)。如果你小心地避免使用依赖于系统的特性,那么你的所有Python程序无需修改就几乎可以在市场上所有的系统平台上运行
- 可扩展性————如果你需要你的一段关键代码运行得更快或者希望某些算法不公开,你可以把你的部分程序用C或C++编写,然后在你的Python程序中使用它们。
- 可嵌入性————你可以把Python嵌入你的C/C++程序,从而向你的程序用户提供脚本功能。
再看缺点:
- 速度慢,Python 的运行速度相比C语言确实慢很多,跟JAVA相比也要慢一些,因此这也是很多所谓的大牛不屑于使用Python的主要原因,但其实这里所指的运行速度慢在大多数情况下用户是无法直接感知到的,必须借助测试工具才能体现出来,比如你用C运一个程序花了0.01s,用Python是0.1s,这样C语言直接比Python快了10倍,算是非常夸张了,但是你是无法直接通过肉眼感知的,因为一个正常人所能感知的时间最小单位是0.15-0.4s左右,哈哈。其实在大多数情况下Python已经完全可以满足你对程序速度的要求,除非你要写对速度要求极高的搜索引擎等,这种情况下,当然还是建议你用C去实现的。
- 代码不能加密,因为PYTHON是解释性语言,它的源码都是以名文形式存放的,不过我不认为这算是一个缺点,如果你的项目要求源代码必须是加密的,那你一开始就不应该用Python来去实现。
- 线程不能利用多CPU问题,这是Python被人诟病最多的一个缺点,GIL即全局解释器锁(Global Interpreter Lock),是计算机程序设计语言解释器用于同步线程的工具,使得任何时刻仅有一个线程在执行,Python的线程是操作系统的原生线程。在Linux上为pthread,在Windows上为Win thread,完全由操作系统调度线程的执行。一个python解释器进程内有一条主线程,以及多条用户程序的执行线程。即使在多核CPU平台上,由于GIL的存在,所以禁止多线程的并行执行。关于这个问题的折衷解决方法,我们在以后线程和进程章节里再进行详细探讨。
一、Python数据类型 数字
整型数 int :整型数是不带小数部分的数,包括自然数,0,及负数。
整型数的字面值表示方式:
十进制表示:无存储限制(根据硬件限制)10 、99999999999999999999999999
二进制表示:(0b开头,后跟0或1) 0b1111
八进制表示:(0o开头,后跟0-7)
十六进制表示:(0x开头,后跟0-9) 0x11 # 17 0xff #255 0x1234abcd
浮点型数 float
型数是带有小数部分的数字
表示方式 : 小数形式:3.14 3.1 3. 0.14 .14
科学计数法: 格式 小数e/E(正负号) 指数 6.18E-1(等同于0.618)
>>> 6.18e-1
0.618
>>> 6.18e+1
61.8
复数 complex
分两部分
实部real
虚部image
虚部以j或J结尾
字面值 1j (2j) 1+1J 3-4J (-100+100J)
布尔类型数 bool
用来表示真和假两个状态的类型
True 表示真(条件满足或成立)值为1
Flase 表示假(条件不满足或不成立) 值为0
空值 None 对象
None 是一个表示不存在的特殊对象
作用: 用来占位 用来变量解除绑定
表达式 和 运算符(也叫操作符)
表达式 expression
由一个数字或数字和运算符组成
作用:
通常让计算机做一些事情并返回结果
运算符 描述 实例
+ 加 - 两个对象相加 a + b 输出结果 30
- 减 - 得到负数或是一个数减去另一个数 a - b 输出结果 -10
* 乘 - 两个数相乘或是返回一个被重复若干次的字符串 a * b 输出结果 200
/ 除 - x除以y b / a 输出结果 2
% 取模 - 返回除法的余数 b % a 输出结果 0
** 幂 - 返回x的y次幂 a**b 为10的20次方, 输出结果 100000000000000000000
// 取整除 - 返回商的整数部分(向下取整)
== 等于 - 比较对象是否相等 (a == b) 返回 False。
!= 不等于 - 比较两个对象是否不相等 (a != b) 返回 true.
<> 不等于 - 比较两个对象是否不相等 (a <> b) 返回 true。这个运算符类似 != 。
> 大于 - 返回x是否大于y (a > b) 返回 False。
< 小于 - 返回x是否小于y。所有比较运算符返回1表示真,返回0表示假。这分别与特殊的变量True和False等价。 (a < b) 返回 true。
>= 大于等于 - 返回x是否大于等于y。 (a >= b) 返回 False。
<= 小于等于 - 返回x是否小于等于y。 (a <= b) 返回 true。
运算符的优先级:
**
* / // %
+ -
括号分组子表达式
用()可以将表达式分组,()内的表达式先进行计算
变量 varibale
什么是变量
变量是用来绑定数据对象的标识符
变量名的命名方法:
1.变量名必须为字母或下划线开头,后跟字母或下划线或数字
2.不能使用Python的关键字做变量名
合法的变量名示例:
a a1 b bbb _aaa _Abcd var a1b2c2
不合法的变量名示例:
1a 123 $ABC +a -b #ab @ab
python的关键字:
True, False, None, is, del, if, elif等
python 中的自动化内存管理
未被引用/绑定/关联的对象会从内存中自动清除,以释放内存。
python 中 关联、绑定、引用的含义
在python中,变量没有类型
关联/绑定/引用都是指变量和一个对象的关联关系
在交互模式下查看变量的绑定关系:
>>> help('__main__') Help on built-in module __main__: NAME __main__ FILE (built-in) DATA a = 100 b = 200 c = 300 >>>
is / is not 运算符
作用:
判断两个变量是否绑定同一个对象,如果是同一个对象返回True,否则返回False
is not 与 is 作用相反。
小整数对象池
CPython中整数 -5 至 256
永远存在小整数池中,不会释放并可重复使用
>>>a = 5 >>>b = 5 >>>a is b True >>> a = 10000 >>> b = 10000 >>> a is b False >>>
id() 函数
格式: id(对象)
作用:返回一个对象在内存中的地址
del语句 (del是delete的简写)
作用: 用于删除变量,同时删除与对象的关联关系。如果可能则释放对象
语法: del 变量名
python的内存管理和引用计数
每个对象都会记录有几个变量引用自身,当引用的数量为0时,则对象被销毁,此种自动化内存管理的方式叫引用计数。
复合赋值算术运算符:
运算符 说明
y += x 等同于 y = y + x
y -= x 等同于 y = y - x
y *= x 等同于 y = y * x
y /= x 等同于 y = y / x
y //= x 等同于 y = y // x
y %= x 等同于 y = y % x
y **= x 等同于 y = y ** x
数值对象的构造(创建)函数:
float(obj)
用字符串或数字转换为浮点数,如果不能出参数则返回0
int(x,base=10) 或 int(x=0) base进制默认为10十进制
用数字或字符串转换为整数,如果不给出参数,则返回0
complex(r=0.0, i=0.0) 用数字创建一个复数(实部为r,虚部为i)
bool(x) 用x创建一个布尔值(True/False)
函数调用:
函数名(传参列表)
说明: 函数调用是表达式,一定会返回一个对象的引用关系。
eg:
>>> int("1001",10) #默认为10,10可以省略不写
1001
>>> int("1001",2) #2进制
9
>>> int("1001",8) #8进制
513
>>> int("1001",16) #16进制
4097
bool(x) 返回假值的情况:
None 空值
False 布尔假值
0,0.0,0j
------以下内容后面会讲-----------
‘’ 空字符串
() 空元组
[] 空列表
{} 空字典
set() 空集合
help() 函数可查看函数帮助文档
>>>help(函数名)
语句:statement
语句是由一些表达式等组成,通常一条语句可以独自执行来完成一部分事情,并形成结果;
一条语句建议写在一行内;
多条语句写在一行内需要用分号(;)分开。
显示换行:
折行符 “\” (反斜杠) 必须放在一行的末尾,来示意解释执行器,下一行也是本行的语句。
隐式换行:
所有的括号内的空容换行称为隐式换行() {} [] ''
输出函数print:
作用:将一系列的值以字符串形式输出到标准输出设备上,默认为终端
格式:print(value, ..., sep=' ', end='\n')
关键字参数:
sep: 两个值之间的分隔符,默认为一个空格''
end: 输出完毕后在末尾自动追加一个字符串,默认为换行符‘\n’
布尔运算:
运算符(三个): not 、and、 or
最经典的算法 求最大值: print('猴子掰玉米故事') max = a #先假设a最大 if b > max: max = b if c > max max= c print("最高分数为:",max) 判断闰年: if year % 400 == 0 or (year % 4 == 0 and year % 100 != 0): print("你输入的",year,"年,是闰年!") else: print("你输入的",year,"年,非闰年!")
二、Python数据类型 字符串
字符串 str
作用:用来记录文本作息。
表示方法:
在非注释中,凡是用引号括起来的部分都是字符串
' 单引号
“ 双引号
‘’‘ 三单引号
”“” 三双引号
空字符串的表示方法:
’’
“”
‘’‘’‘’
“”“”“”
注:空字符串的布尔值为False
单引号与双引号的区别:
单引号内可以包含双引号('"A"是大写字母')
双引号内可以包含单引号("I'm teacher")
三引号字符串的作用:
三引号字符串中的换行会自动转换为换行符'\n'
三引号内可以包含单引号和双引号
用转义序列代表特殊字符
字符串字面值中用字符反斜杠(\)后跟一些字符代表特殊的一个字符
\' 代表一个单引号
\" 代表一个双引号
\\ 代表一个反斜杠
\n 换行
\r 返回光标至行首
\f 换页
\v 垂直制表符
\b 倒退
\0 空字符(字符值为零)
\0oo oo为两位八进制表示字符
\xXX XX为两位十六进制表示的字符 print('\x41') A
\uXXXX UNICODE16的十六进制表示的字符 print('\x0041') A
\UXXXXXXXX UNICODE32的十六进制表示字符 print('\x00000041') A
求字符串序列长度的函数len(x)
返回字符串中字符的个数
序列的概念:
字符串是序列的一种,有序排列(有先后顺序的排列)。
字符串的运算: + 加号用于拼接字符串 x += y 等同于 x = x + y * 运算符生成重复的字符串;注:字符串只能和整数相乘。 x = "ABC" * 2 print(x) *= 运算符: x *= y 等同于 x = x * y 字符串的比较运算: 运算符: > >= < <= == != 示例: “A” == 'A' 'A' < 'B' 'ABC' > 'ABB' #True 'ADC' < 'ABC' #False 'AD' > 'ABC' #True 'AB' > 'ABC' #False
in / not in 运算符:
作用:
in 用于序列,字典,集合等容器类中,用于判断某个值是否存在于容器中,
如果存在返回True,不存在返回False
not in 与 in 运算符返回的布尔值相反
字符串的索引
索引 index
python 字符串是不可以改变的字符序列
语法:字符串[整数表达式]
说明:
python序列都可以用索引(index)来访问序列中的对象
python序列的正向索引从0开始,第二个索引为1,最后一个索引为len(s)-1
python 序列的反向索引从-1开始,-1代表最后一个,-2代表倒数第二个,以此类推,第一个是-len(s)
切片 slice
作用:从字符串序列中取出一部分相应的元素重新组成一个字符串
语法:字符串[(开始索引b):(结束索引e):(步长s)]
注:()内括起的部分代表可以省略
说明:
1.开始索引是切片开始切下的位置0代表第一个元素,-1代表最后一个元素;
2.结束索引是切片的终止索引(但不包含终止索引);
3.步长是切片每次获取完当前索引后移动的方向和偏移量
1)没有步长,相当于取值完成后向后移动一个索引的位置(默认为1);
2)当步长为正整数时,取正向切片:
步长默认值为1,开始索引默认值为0,结束索引默认值为len(s);
3) 当步长为负数时,取反向切片:
反向切片时,默认的起始位置为最后一个元素,默认终止位置为第一个元素的前一个益;
示例: s = 'ABCDE' a = s[1:4] #a -> 'BCD' a = s[1:1] #a -> ' ' a = s[1:] #a -> 'BCDE' a = s[:2] #a -> 'AB' a = s[:] #a -> 'ABCDE' a = s[1::2] #a -> 'BD' a = s[::-1] #a ->'EDCBA' a = s[::-2] #a-> 'ECA' a = s[4:0:-2] #a-> 'EC'
len(x) 返回序列的长度
max(x) 返回序列的最大值元素
min(x) 返回序列的最小值元素
abs(x) 取x的绝对值
round(number[, ndigits]) 对数值进行四舍五入,ndigits是小数点向右取整的位数,负数表示小数点向左取整;
pow(x, y, z=None) 两个参数相当于x ** y 或三个参数 x ** y % z
hex(i) 将整数转换为十六进制的字符串
oct(i) 将整数转换为八进制的字符串
bin(i) 将整数转换为二进制的字符串
字符串编码(encode)的转换函数:
ord('廖') 返回一个字符的Unicode值 ord('o')
chr(24278) 返回i这个值所对应的字符
常用的字符串方法:
---------常用的字符串方法: 见文档:str.html 方法 说明 S.isdigit() 判断字符串中的字符是否全为数字 S.isalpha() 判断字符串是否全为英文字母 S.islowe() 判断字符串所有字符是否全为小写英文字母 S.isupper() 判断字符串所有字符是否全为大写英文字母 S.isspace() 判断字符串是否全为空白字符(空白字符是指空格,水平制表符(\t),换行(\n)等不可见的字符) S.center(width[,fill]) 将原字符串居中,左右默认填充空格,eg."ABC",center(10,'#')填#号 S.rjust(width,[, fillchar]) 返回一个原字符串右对齐,并使用fillchar(默认空格)填充至长度 width 的新字符串 S.ljust(width[, fillchar]) 返回一个原字符串左对齐,并使用 fillchar 填充至长度 width 的新字符串,fillchar 默认为空格。 S.count(sub[,start[,end]]) 获取一个字符串中子串sub的个数,start,end表开始与结束范围 S.find(sub[,start[,end]]) 获取字符串中子串sub的索引,失败返回-1;start,end表开始与结束范围 S.strip() 返回去掉左右空白字符的字符串 S.lstrip() 返回去掉左侧空白字符的字符串 S.rstrip() 返回去掉右侧空白字符的字符串 S.upper() 生成将英文转换为大写的字符串 S.lower() 生成将英文转换为小写的字符串 S.replace(old,new[,count]) 将原字符串的old用new代替,生成一个新的字符串,count替换的个数,默认替换所有 S.startswith(prefix[,start[,end]]) 返回S是否是以prefix开头,如果以prefix开头返回True,否则返回False S.endswith(suffix[,start[,end]]) 返回S是否是以suffix结尾,如果以suffix结尾返回True,否则返回False S.title() 生成每个英文单词的首字母大写字符串 S.isnumeric() 判断字符串是否全为数字字符
字符串格式化表达式:
示例: str_fomart.py fmt = "姓名:_%s_, 年龄:_%d_" name = input('请输入姓名:') age = int(input('请输入年龄:')) print(fmt % (name, age)) 请输入姓名:廖松 请输入年龄:33 姓名:_廖松_, 年龄:_33_
------ 格式化字符串中的占位符和类型码: 占位符 意义 %s 字符串,使用str函数转换 %r 字符串,使用repr函数转换 %c 整数转为单个字符 %d 十进制整数 %o 八进制整数 %x 十六进制整数(a-f小写) %X 十六进制整数(A-F大写) %e 指数形浮点数(e小写) 2.9e+10 %E 指数形浮点数(E大写) 2.9E+10 %f, %F 浮点十进制形式 %g, %G 十进制形式浮点数或指数浮点数自动转换 %% 等同于一个%字符 >>> "%d%%" % 50 '50%'
------占位符和类型码之间的格式语法: 格式: % [- + 0 宽度.精度] 类型码 - 左对齐(默认右对齐) #注意重点 + 显示正号 0 左侧空白位置补零 宽度:整个数据输入的宽度 精度:保留小数点后多少位(默认是6位) 示例: >>> '%016d' % int(format(5, 'b')) # '0000000000000101' 输入数字5整数的16位比特形式 ‘%10d’ % 123 #' 123' '%-10d' % 123 #'123 ' '%10s' % 'abc' #' abc' '%05d' % '123' #'00123' '%-+5d' % '123' #'+123 ' >>> "%10.2f" % 123.1234561 ' 123.12' >>> "%-10.2f" % 123.1234561 #注: 负号表示左对齐,不加负号默认右对齐,10表示占位宽度,2表示小数位数精度; '123.12 '
while 语句:
作用:根据一定条件,重复的执行一条语句或金条语句
语法:
while 真值表达式:
语句块1
else:
语句块2
说明:
1.先执行真值表达式,测试布尔值是否为True
2.如果真值表达式值为True,则执行语句1,然后再返回到第1步,重复进行测试;
3.如果真值表达式的值为False,则执行else子句中的语句块2,然后结束此while语句,如果没有else子名,则直接结束此while语句的执行;
4.else 子句部分可以省略(同if类似)
5.通过循环变量,控制循环的次数
示例见:py1104.py
注意事项:
1.要控制循环的真值表达式的值来防止死循环
2.通常用真值表达式内的循环变量来控制循环条件
3.通常在循环语句块内改变循环变量来控制循环的次数和变量的走向
break 语句:
作用:用于循环语句中(while,for)中,用来终止当前循环语句的执行。
说明:
1.当break语句执行后,此循环语句break之后的语句将不在再执行;
2.break 语句通常和if语句组合使用;
3.break语句终止循环时,循环语句的else子句的语句不会被执行;
4.break语句只能终止当前循环语句的执行,如果有循环嵌套时,不会跳出嵌套的外重循环;
5.break 语句只能用在循环语句(while 或for)内部使用;
死循环:
死循环是指条件一直成立的循环
死循环通常用break语句来终止循环
死循环的else子句永远不会执行
continue语句:
问题:如何让程序不再向下执行,重新开始一次新的循环?
作用:用于循环语句中(while,for)中,不再执行本次循环continue之后的语句,重新
开始一次新的循环。
说明:1.在for语句中执行continue语句,将会从可迭代对象中取下一个元素,绑定变量后再次开始执行;
2.在while语句中执行continue,将会直接跳转到while语句的真值表达式处重新判断循环条件;
for 语句:
作用:用来遍历迭代对象的数据元素,可迭代对象是指能依次获取数据元素的对象;
可迭代对象包括:
字符串str
列表 list
元组 tuple
字典 dict
集合 set
range函数返回的对象等.
range 函数:
作用:用来创建一个生成系列整数的可迭代对象(也叫整数序列生成器)
格式见:help(range)
range(stop) 从零开始,每次生成一个整数后加1操作,起到stop为止(不包含stop);
range(start,stop[,step]):
从start开始,每次生成一个整数后移动step,
直到stop为止(不包含stop,且step可以是负整数);
示例: range(4) #生成0,1,2,3 range(3, 6) #生成3,4,5 range(1,10,2) #生成1,3,5,7,9
for 语句的注意事项: #请问下面程序的打印结果是什么: >>> i = 6 >>> for x in range(1,i): #range调用一次,对象就已经全部返回给循环。 ... print('x = ', x, 'i = ',i) ... i -= 1 #<<------注意此处 ... x = 1 i = 6 x = 2 i = 5 x = 3 i = 4 x = 4 i = 3 x = 5 i = 2 #如下语句执行的结果是什么?为什么? for x in range(4,0): #range(4,0)返回空,无法创建x变量 print(x) print('x绑定',x) #<<-----此处打印什么? expected an indented block

浙公网安备 33010602011771号