Python基础语法
1. 认识Python
1.1 Python 简介
Python 的创始人为吉多·范罗苏姆(Guido van Rossum)。
Python 的设计目标:
- 一门简单直观的语言并与主要竞争者一样强大
- 开源,以便任何人都可以为它做贡献
- 代码像纯英语那样容易理解
- 适用于短期开发的日常任务
Python 的设计哲学:
- 优雅、明确、简单
Python 开发者的哲学是:用一种方法,最好是只有一种方法来做一件事
Python 是完全面向对象的语言,在 Python 中一切皆对象。
可扩展性:如果需要一段关键代码运行得更快或者希望某些算法不公开,可以把这部分程序用 C 或 C 编写,然后在 Python 程序中使用它们。
1.2. 第一个Python程序
执行 Python 程序的三种方式:
解释器、交互式运行、IDE运行
Python 是一个格式非常严格的程序设计语言。
python 2.x 默认不支持中文。
- ASCII 字符只包含 256 个字符,不支持中文
- Python 2.x 的解释器名称是python
- Python 3.x 的解释器名称是python3
为了照顾现有的程序,官方提供了一个过渡版本 —— Python 2.6。
提示:如果开发时,无法立即使用 Python 3.0(还有极少的第三方库不支持 3.0 的语法),建议
- 先使用 Python 3.0 版本进行开发
- 然后使用 Python 2.6、Python 2.7 来执行,并且做一些兼容性的处理
IPython 是一个 python 的 交互式 shell,比默认的 python shell 好用得多,它支持 bash shell 命令,适合于学习/验证 Python 语法或者局部代码。
集成开发环境(IDE,Integrated Development Environment)—— 集成了开发软件需要的所有工具,一般包括以下工具:
- 图形用户界面
- 代码编辑器(支持代码补全/自动缩进)
- 编译器/解释器
- 调试器(断点/单步执行)
- ……
1.3. PyCharm 的设置
PyCharm 的 配置信息 是保存在 用户家目录下 的 .PyCharmxxxx.x 目录下的,xxxx.x 表示当前使用的 PyCharm 的版本号
1.3.1 恢复 PyCharm 的初始设置:
- 关闭正在运行的 PyCharm
- 在终端中执行以下终端命令,删除 PyCharm 的配置信息目录:
$ rm -r ~/.PyCharm2016.3
- 重新启动 PyCharm
1.3.2 PyCharm 安装和启动步骤:
- 执行以下终端命令,解压缩下载后的安装包
$ tar -zxvf pycharm-professional-2017.1.3.tar.gz
- 将解压缩后的目录移动到 /opt 目录下,可以方便其他用户使用
/opt 目录用户存放给主机额外安装的软件
$ sudo mv pycharm-2017.1.3/ /opt/
- 切换工作目录
$ cd /opt/pycharm-2017.1.3/bin
- 启动 PyCharm
$ ./pycharm.sh
1.3.3 设置启动图标
- 在专业版中,选择菜单Tools/Create Desktop Entry...可以设置任务栏启动图标
- 注意:设置图标时,需要勾选 Create the entry for all users
- 快捷方式文件
- /usr/share/applications/jetbrains-pycharm.desktop
在 ubuntu 中,应用程序启动的快捷方式通常都保存在 /usr/share/applications 目录下
1.3.4 卸载之前版本的 PyCharm
要卸载 PyCharm 只需要做以下两步工作:
- 删除解压缩目录
$ sudo rm -r /opt/pycharm-2016.3.1/
- 删除家目录下用于保存配置信息的隐藏目录
$ rm -r ~/.PyCharm2016.3/
如果不再使用 PyCharm 还需要将 /usr/share/applications/ 下的 jetbrains-pycharm.desktop 删掉
1.4. 多文件项目的演练
- 开发项目就是开发一个专门解决一个复杂业务功能的软件
- 通常每一个项目就具有一个独立专属的目录,用于保存所有和项目相关的文件
- 在 PyCharm 中,要想让哪一个 Python 程序能够执行,必须首先通过鼠标右键的方式执行一下
- 对于初学者而言,在一个项目中设置多个程序可以执行,是非常方便的,可以方便对不同知识点的练习和测试
- 对于商业项目而言,通常在一个项目中,只有一个可以直接执行的 Python 源程序
2. 注释
- 注释的作用
- 使用用自己熟悉的语言,在程序中对某些代码进行标注说明,增强程序的可读性
2.1 单行注释(行注释)
- 以 # 开头,# 右边的所有东西都被当做说明文字,而不是真正要执行的程序,只起到辅助说明作用
print('hello python') # 输出 `hello python`
为了保证代码的可读性,# 后面建议先添加一个空格,然后再编写相应的说明文字;为了保证代码的可读性,注释和代码之间 至少要有 两个空格。
2.2 多行注释(块注释)
- 要在 Python 程序中使用多行注释,可以用 一对 连续的 三个 引号(单引号和双引号都可以)
''' 这是一个多行注释 在多行注释之间,可以写很多很多的内容…… ''' print('hello python')
提示:
- 注释不是越多越好,对于一目了然的代码,不需要添加注释
- 对于复杂的操作,应该在操作开始前写上若干行注释
- 对于不是一目了然的代码,应在其行尾添加注释(为了提高可读性,注释应该至少离开代码 2 个空格)
- 绝不要描述代码,假设阅读代码的人比你更懂 Python,他只是不知道你的代码要做什么
2.3 代码规范:
- Python 官方提供有一系列 PEP(Python Enhancement Proposals) 文档,其中第 8 篇文档专门针对Python 的代码格式给出了建议,也就是俗称的PEP 8:
- 文档地址:https://www.python.org/dev/peps/pep-0008/
- 谷歌有对应的中文文档:http://zh-google-styleguide.readthedocs.io/en/latest/google-python-styleguide/python_style_rules/
3. 运算符
3.1 算数运算符
是完成基本的算术运算使用的符号,用来处理四则运算,而“ ”和“*”还可以用来处理字符串。
3.2 比较(关系)运算符
- Python 2.x 中判断不等于还可以使用 <> 运算符
- != 在 Python 2.x 中同样可以用来判断不等于
3.3 赋值运算符
- 在 Python 中,使用 = 可以给变量赋值。在算术运算时,为了简化代码的编写,Python 还提供了一系列的 与算术运算符对应的赋值运算符,注意:赋值运算符中间不能使用空格。
3.4 身份运算符
身份运算符比较两个对象的内存位置。常用的有两个身份运算符,如下所述:
辨析
- is 用于判断 两个变量引用的对象是否为同一个
- == 用于判断 引用变量的值是否相等
3.5 成员运算符
Python成员运算符测试给定值是否为序列中的成员。 有两个成员运算符,如下所述:
3.6 逻辑运算符
3.7 运算符优先级
- 以下表格的算数优先级由高到最低顺序排列:
- 操作系统会首先让CPU把Python 解释器的程序复制到内存中
- Python 解释器根据语法规则,从上向下让CPU翻译Python 程序中的代码
- CPU负责执行翻译完成的代码
Python 的解释器有多大?
- 执行以下终端命令可以查看 Python 解释器的大小
# 1. 确认解释器所在位置 $ which python # 2. 查看 python 文件大小(只是一个软链接) $ ls -lh /usr/bin/python # 3. 查看具体文件大小 $ ls -lh /usr/bin/python2.7
4. 变量
4.1 变量定义
- 在 Python 中,每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建
- 可以用其他变量的计算结果来定义变量
- 变量名 只有在第一次出现才是定义变量
变量名 = 值
使用交互式方式,如果要查看变量内容,直接输入变量名即可,不需要使用 print 函数
使用解释器执行,如果要输出变量的内容,必须要要使用 print 函数
4.2 变量的类型
- 在 Python 中定义变量是不需要指定类型(在其他很多高级语言中都需要),Python 可以根据 = 等号右侧的值,自动推导出变量中存储数据的类型
- 数据类型可以分为数字型和非数字型数字型
- 整型 (int):Python3中的所有整数都表示为长整数。 因此,长整数没有单独的数字类型。
- 浮点型(float)
- 布尔型(bool) :真 True 非 0 数 —— 非零即真,假 False 0。
- 复数型 (complex):复数是由x yj表示的有序对的实数浮点数组成,其中x和y是实数,j是虚数单位。
- 非数字型:有些运算符还支持这些数据类型,详见4.4.5.3 运算符。
- 字符串(str):加号( )是字符串连接运算符,星号(*)是重复运算符。
- 列表(list)
- 元组(tuple)
- 字典(dict)
提示:在 Python 2.x 中,整数 根据保存数值的长度还分为:
- int(整数)
- long(长整数)
- 使用 type 函数可以查看一个变量的类型
In [1]: type(name)
<补>不同类型变量之间的计算
- 数字型变量之间可以直接计算
- 在 Python 中,两个数字型变量是可以直接进行 算数运算的
- 如果变量是 bool 型,在计算时
- True 对应的数字是 1
- False 对应的数字是 0
- 字符串变量之间使用 拼接字符串
- 字符串变量可以和整数使用 * 重复拼接相同的字符串
- 数字型变量和字符串之间不能进行其他计算
<补>从键盘获取输入信息:input
- 在 Python 中可以使用 input 函数从键盘等待用户的输入
- 用户输入的任何内容Python 都认为是一个字符串
字符串变量 = input('提示信息:')
<补>类型转换函数
price = float(input('请输入价格:'))
<补>格式化输出:print
- 如果希望输出文字信息的同时,一起输出数据,就需要使用到格式化操作符
- % 被称为格式化操作符,专门用于处理字符串中的格式
- 包含 % 的字符串,被称为格式化字符串
- % 和不同的字符连用,不同类型的数据需要使用不同的格式化字符语法格式如下:
- print('格式化字符串' % 变量1) print('格式化字符串' % (变量1, 变量2...))
4.3 变量的命名
4.3.1 标识符和关键字
标示符就是程序员定义的 变量名、函数名
- 标示符可以由字母、下划线和数字组成
- 不能以数字开头
- 不能与关键字重名
关键字 就是在 Python 内部已经使用的标识符
- 关键字具有特殊的功能和含义
- 开发者不允许定义和关键字相同的名字的标识符
- 通过以下命令可以查看 Python 中的关键字
- In [1]: import keyword In [2]: print(keyword.kwlist)
4.3.2 变量的命名规则
命名规则 可以被视为一种 惯例,并无绝对与强制
目的是为了 增加代码的识别和可读性注意 Python 中的 标识符 是 区分大小写的
- 在定义变量时,为了保证代码格式,= 的左右应该各保留一个空格
- 在 Python 中,如果 变量名 需要由 二个 或 多个单词 组成时,可以按照以下方式命名:每个单词都使用小写字母,单词与单词之间使用_下划线连接,例如:first_name、last_name、qq_number、qq_password。
当然,还有驼峰命名法:
小驼峰式命名法:第一个单词以小写字母开始,后续单词的首字母大写,例如:firstName、lastName。
大驼峰式命名法,每一个单词的首字母都采用大写字母,例如:FirstName、LastName、CamelCase 。
4.4 高级变量类型
在 Python 中,所有 非数字型变量 都支持以下特点:
1. 都是一个 序列 sequence,也可以理解为 容器
2. 取值 []
3. 遍历 for in
4. 计算长度len、最大/最小值max/min、比较、删除del
5. 链接 和 重复 *
6. 切片
4.4.1 列表(list)
- List(列表) 是 Python 中使用最频繁的数据类型,在其他语言中通常叫做数组,专门用于存储一串 信息,列表用 [] 定义,数据之间使用 , 分隔,列表的索引从 0 开始。
索引 就是数据在 列表 中的位置编号,索引 又可以被称为 下标
注意:从列表中取值时,如果 超出索引范围,程序会报错
- name_list = ['zhangsan', 'lisi', 'wangwu']
<补>del 关键字
- 使用 del 关键字(delete) 同样可以删除列表中元素
- del 关键字本质上是用来将一个变量从内存中删除的
- 如果使用 del 关键字将变量从内存中删除,后续的代码就不能再使用这个变量了
In [1]: l = [1,2,3,4] In [2]: del l[1] In [3]: l[1] Out[3]: 3
在日常开发中,要从列表删除数据,建议 使用列表提供的方法
<补>函数与方法
- 函数封装了独立功能,可以直接调用
函数名(参数)
函数需要死记硬背
- 方法和函数类似,同样是封装了独立的功能
- 方法需要通过对象来调用,表示针对这个对象要做的操作
对象.方法名(参数)
在变量后面输入 .,然后选择针对这个变量要执行的操作,记忆起来比函数要简单很多
<补>循环遍历
- 遍历就是从头到尾依次从列表中获取数据,在循环体内部针对每一个元素,执行相同的操作。
- 在 Python 中为了提高列表的遍历效率,使用 for 就能够实现迭代遍历。
# for 循环内部使用的变量 in 列表 for name in name_list: 循环内部针对列表元素进行操作 print(name)
for-in循环流程图
- 尽管 Python 的列表中可以存储不同类型的数据
- 但是在开发中,更多的应用场景是
- 列表存储相同类型的数据
- 通过迭代遍历,在循环体内部,针对列表中的每一项元素,执行相同的操作
4.4.2 元组(tuple)
- Tuple(元组)与列表类似,不同之处在于元组的元素不能修改元组表示多个元素组成的序列
- 元组在 Python 开发中,有特定的应用场景
- 用于存储一串 信息,数据之间使用 , 分隔
- 元组用 () 定义,元组的索引从 0 开始,索引就是数据在元组中的位置编号。
info_tuple = ('zhangsan', 18, 1.75)
创建空元组:
info_tuple = ()
元组中 只包含一个元素 时,需要 在元素后面添加逗号:
info_tuple = (50, )
元组示意图
- 在 Python 中,可以使用 for 循环遍历所有非数字型类型的变量:列表、元组、字典以及字符串
- 提示:在实际开发中,除非能够确认元组中的数据类型,否则针对元组的循环遍历需求并不是很多
- 在开发中,更多的应用场景是:
- 函数的 参数 和 返回值,一个函数可以接收任意多个参数,或者一次返回多个数据
- 格式字符串,格式化字符串后面的 () 本质上就是一个元组
- 让列表不可以被修改,以保护数据安全
<补>元组和列表之间的转换
- 使用 list 函数可以把元组转换成列表
list(元组)
- 使用 tuple 函数可以把列表转换成元组
tuple(列表)
4.4.3 字典(dict)
dict(字典) 是 除列表以外 Python 之中 最灵活 的数据类型。
字典同样可以用来 存储多个数据,通常用于存储 描述一个 物体 的相关信息
- 和列表的区别:
- 列表是有序的对象集合
- 字典是无序的对象集合
- 字典用 {} 定义。
- 字典使用键值对存储数据,键值对之间使用逗号, 分隔:
- 键key 是索引
- 值value 是数据
- 键和值之间使用冒号: 分隔
- 键必须是唯一的
- 值可以取任何数据类型,但键只能使用字符串、数字或元组
xiaoming = {'name': '小明', 'age': 18, 'gender': True, 'height': 1.75}
- 字典的遍历 就是 依次 从 字典 中获取所有键值对:
# for 循环内部使用的 `key 的变量` in 字典 for k in xiaoming: print('%s: %s' % (k, xiaoming[k]))
提示:在实际开发中,由于字典中每一个键值对保存数据的类型是不同的,所以针对字典的循环遍历需求并不是很多
- 尽管可以使用 for in 遍历字典
- 但是在开发中,更多的应用场景是:
- 使用多个键值对,存储描述一个 物体 的相关信息—— 描述更复杂的数据信息
- 将多个字典放在一个列表中,再进行遍历,在循环体内部针对每一个字典进行相同的处理
card_list = [{'name': '张三',
'qq': '12345',
'phone': '110'},
{'name': '李四',
'qq': '54321',
'phone': '10086'}
]
4.4.4 字符串(str)
- 字符串就是一串字符,是编程语言中表示文本的数据类型
- 在 Python 中可以使用一对双引号' 或者一对单引号' 定义一个字符串
- 虽然可以使用 ' 或者 ' 做字符串的转义,但是在实际开发中:
- 如果字符串内部需要使用 ',可以使用 ' 定义字符串
- 如果字符串内部需要使用 ',可以使用 ' 定义字符串
- 可以使用索引获取一个字符串中指定位置的字符,索引计数从0开始
- 也可以使用 for循环遍历字符串中每一个字符
大多数编程语言都是用 ' 来定义字符串
string = 'Hello Python' for c in string: print(c)
提示:在 python 中对字符串操作,内置提供的方法足够多,使得在开发时,能够针对字符串进行更加灵活的操作!应对更多的开发需求!
2) 查找和替换 - 7
3) 大小写转换 - 5
4) 文本对齐 - 3
5) 去除空白字符 - 3
<补>字符串的切片
- 切片方法适用于字符串、列表、元组切片使用索引值来限定范围,从一个大的字符串中切出小的字符串
- 列表和元组都是有序的集合,都能够通过索引值获取到对应的数据
- 字典是一个无序的集合,是使用键值对保存数据