零基础学python,看完这篇文章,你的python基础就差不多了!
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 的配置信息目录:
重新启动 PyCharm
1.3.2 PyCharm 安装和启动步骤:
执行以下终端命令,解压缩下载后的安装包
将解压缩后的目录移动到 /opt 目录下,可以方便其他用户使用
/opt 目录用户存放给主机额外安装的软件
切换工作目录
启动 PyCharm
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 只需要做以下两步工作:
删除解压缩目录
删除家目录下用于保存配置信息的隐藏目录
如果不再使用 PyCharm 还需要将 /usr/share/applications/ 下的 jetbrains-pycharm.desktop 删掉
1.4. 多文件项目的演练
开发
项目
就是开发一个
专门解决一个复杂业务功能的软件
通常每
一个项目
就具有一个
独立专属的目录
,用于保存
所有和项目相关的文件
在 PyCharm 中,要想让哪一个 Python 程序能够执行,必须首先通过
鼠标右键的方式执行
一下
对于初学者而言,在一个项目中设置多个程序可以执行,是非常方便的,可以方便对不同知识点的练习和测试
对于商业项目而言,通常在一个项目中,只有一个
可以直接执行的 Python 源程序
2. 注释
注释的作用
使用用自己熟悉的语言,在程序中对某些代码进行标注说明,增强程序的可读性
2.1 单行注释(行注释)
以 # 开头,# 右边的所有东西都被当做说明文字,而不是真正要执行的程序,只起到辅助说明作用
为了保证代码的可读性,# 后面建议先添加一个空格,然后再编写相应的说明文字;为了保证代码的可读性,注释和代码之间 至少要有 两个空格。
2.2 多行注释(块注释)
要在 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 解释器的大小
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 函数可以查看一个变量的类型
<补>不同类型变量之间的计算
数字型变量
之间可以直接计算
在 Python 中,两个数字型变量是可以直接进行 算数运算的
如果变量是 bool 型,在计算时
True 对应的数字是 1
False 对应的数字是 0
字符串变量
之间使用 拼接字符串
字符串变量
可以和
整数
使用 * 重复拼接相同的字符串
数字型变量
和
字符串
之间
不能进行其他计算
<补>从键盘获取输入信息:input
在 Python 中可以使用 input 函数从键盘等待用户的输入
用户输入的
任何内容
Python 都认为是一个
字符串
<补>类型转换函数
<补>格式化输出:print
如果希望输出文字信息的同时,
一起输出
数据
,就需要使用到
格式化操作符
% 被称为
格式化操作符
,专门用于处理字符串中的格式
包含 % 的字符串,被称为
格式化字符串
% 和不同的
字符
连用,
不同类型的数据
需要使用
不同的格式化字符
语法格式如下:
4.3 变量的命名
4.3.1 标识符和关键字
标示符就是程序员定义的 变量名、函数名
标示符可以由
字母
、
下划线
和
数字
组成
不能以数字开头
不能与关键字重名
关键字 就是在 Python 内部已经使用的标识符
关键字
具有特殊的功能和含义
开发者
不允许定义和关键字相同的名字的标识符
通过以下命令可以查看 Python 中的关键字
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 开始。
索引 就是数据在 列表 中的位置编号,索引 又可以被称为 下标
注意:从列表中取值时,如果 超出索引范围,程序会报错
<补>del 关键字
使用 del 关键字(delete) 同样可以删除列表中元素
del 关键字本质上是用来
将一个变量从内存中删除的
如果使用 del 关键字将变量从内存中删除,后续的代码就不能再使用这个变量了
在日常开发中,要从列表删除数据,建议 使用列表提供的方法
<补>函数与方法
函数
封装了独立功能,可以直接调用
函数需要死记硬背
方法
和函数类似,同样是封装了独立的功能
方法
需要通过
对象
来调用,表示针对这个
对象
要做的操作
在变量后面输入 .,然后选择针对这个变量要执行的操作,记忆起来比函数要简单很多
<补>循环遍历
遍历
就是
从头到尾
依次
从
列表
中获取数据,在
循环体内部
针对
每一个元素
,执行相同的操作。
在 Python 中为了提高列表的遍历效率,使用 for 就能够实现迭代遍历。
for-in循环流程图
尽管 Python 的
列表
中可以
存储不同类型的数据
但是在开发中,更多的应用场景是
列表
存储相同类型的数据
通过
迭代遍历
,在循环体内部,针对列表中的每一项元素,执行相同的操作
4.4.2 元组(tuple)
Tuple(元组)与列表类似,不同之处在于元组的
元素不能修改元组
表示多个元素组成的序列
元组
在 Python 开发中,有特定的应用场景
用于存储
一串 信息
,
数据
之间使用 , 分隔
元组用 () 定义,元组的
索引
从 0 开始,
索引
就是数据在
元组
中的位置编号。
创建空元组:
元组中 只包含一个元素 时,需要 在元素后面添加逗号:
元组示意图
在 Python 中,可以使用 for 循环遍历所有非数字型类型的变量:
列表
、
元组
、
字典
以及
字符串
提示:在实际开发中,除非
能够确认元组中的数据类型
,否则针对元组的循环遍历需求并不是很多
在开发中,更多的应用场景是:
函数的 参数 和 返回值
,一个函数可以接收
任意多个参数
,或者
一次返回多个数据
格式字符串
,格式化字符串后面的 () 本质上就是一个元组
让列表不可以被修改
,以保护数据安全
<补>元组和列表之间的转换
使用 list 函数可以把元组转换成列表
使用 tuple 函数可以把列表转换成元组
4.4.3 字典(dict)
dict(字典) 是 除列表以外 Python 之中 最灵活 的数据类型。
字典同样可以用来 存储多个数据,通常用于存储 描述一个 物体 的相关信息
和列表的区别:
列表
是
有序
的对象集合
字典
是
无序
的对象集合
字典用 {} 定义。
字典使用
键值对
存储数据,键值对之间使用
逗号
, 分隔:
键
key 是索引
值
value 是数据
键
和
值
之间使用
冒号
: 分隔
键必须是唯一的
值
可以取任何数据类型,但
键
只能使用
字符串
、
数字
或
元组
字典的遍历 就是 依次 从 字典 中获取所有键值对:
提示:在实际开发中,由于字典中每一个键值对保存数据的类型是不同的,所以针对字典的循环遍历需求并不是很多
尽管可以使用 for in 遍历
字典
但是在开发中,更多的应用场景是:
使用
多个键值对
,存储
描述一个 物体 的相关信息
—— 描述更复杂的数据信息
将
多个字典
放在
一个列表
中,再进行遍历,在循环体内部针对每一个字典进行
相同的处理
card_list = [{'name': '张三',
'qq': '12345',
'phone': '110'},
{'name': '李四',
'qq': '54321',
'phone': '10086'}
]
4.4.4 字符串(str)
字符串
就是
一串字符
,是编程语言中表示文本的数据类型
在 Python 中可以使用
一对双引号
' 或者
一对单引号
' 定义一个字符串
虽然可以使用 \' 或者 \' 做字符串的转义,但是在实际开发中:
如果字符串内部需要使用 ',可以使用 ' 定义字符串
如果字符串内部需要使用 ',可以使用 ' 定义字符串
可以使用
索引
获取一个字符串中
指定位置的字符
,索引计数从
0
开始
也可以使用 for
循环遍历
字符串中每一个字符
大多数编程语言都是用 ' 来定义字符串
提示:在 python 中对字符串操作,内置提供的方法足够多,使得在开发时,能够针对字符串进行更加灵活的操作!应对更多的开发需求!
1) 判断类型 - 9
2) 查找和替换 - 7
3) 大小写转换 - 5
4) 文本对齐 - 3
5) 去除空白字符 - 3
6) 拆分和连接 - 5
<补>字符串的切片
切片
方法适用于
字符串
、
列表
、
元组切片
使用
索引值
来限定范围,从一个大的
字符串
中
切出
小的
字符串
列表
和
元组
都是
有序
的集合,都能够
通过索引值
获取到对应的数据
字典
是一个
无序
的集合,是使用
键值对
保存数据
注意:
指定的区间属于
左闭右开
型 [开始索引, 结束索引) => 开始索引 <= 范围 < 结束索引从 起始 位开始,到
结束位的前一位
结束(
不包含结束位本身
)
从头开始,
开始索引
数字可以省略,冒号不能省略
到末尾结束,
结束索引
数字可以省略,冒号不能省略
步长默认为 1,如果连续切片,
数字和冒号都可以省略
<补>索引的顺序和倒序
在 Python 中不仅支持
顺序索引
,同时还支持
倒序索引
所谓倒序索引就是
从右向左
计算索引:最右边的索引值是
-1
,依次递减。
4.4.5 公共方法和变量的高级应用
4.4.5.1 内置函数
Python 包含了以下内置函数:
注意:字符串 比较符合以下规则: '0' < 'A' < 'a'。
4.4.5.2 切片
切片
使用
索引值
来限定范围,从一个大的
字符串
中
切出
小的
字符串
列表
和
元组
都是
有序
的集合,都能够
通过索引值
获取到对应的数据
字典
是一个
无序
的集合,是使用
键值对
保存数据
4.4.5.3 运算符
注意
in 在对
字典
操作时,判断的是
字典的键
in 和 not in 被称为
成员运算符
4.4.5.4 内置函数完整的 for 循环语法
在 Python 中完整的 for 循环 的语法如下:
应用场景:
在
迭代遍历
嵌套的数据类型时,例如
一个列表包含了多个字典
需求:要判断 某一个字典中 是否存在 指定的 值
如果
存在
,提示并且退出循环
如果
不存在
,在
循环整体结束
后,希望
得到一个统一的提示
4.4.5.5 变量的引用
变量 和 数据 都是保存在
内存
中的
在 Python 中
函数 的 参数传递
以及
返回值
都是靠
引用
传递的
在 Python 中:变量 和 数据 是分开存储的,数据 保存在内存中的一个位置,变量 中保存着数据在内存中的地址,就叫做 引用,使用 id() 函数可以查看变量中保存数据所在的 内存地址。
注意:如果变量已经被定义,当给一个变量赋值的时候,本质上是 修改了数据的引用
变量
不再
对之前的数据引用
变量
改为
对新赋值的数据引用
在 Python 中,变量的名字类似于 便签纸 贴在 数据 上:
定义一个整数变量 a,并且赋值为 1
在 Python 中,函数的 实参/返回值 都是是靠 引用 来传递来的
结果
结果
4.4.5.6 可变和不可变类型
不可变类型
,内存中的数据不允许被修改:
数字类型 int, bool, float, complex, long(2.x)
字符串 str
元组 tuple
可变类型
,内存中的数据可以被修改:
列表 list
字典 dict
注意:字典的 key 只能使用不可变类型的数据
注意
可变类型
的数据变化,是通过
方法
来实现的
如果给一个可变类型的变量,赋值了一个新的数据,
引用会修改
变量
不再
对之前的数据引用
变量
改为
对新赋值的数据引用
<补>哈希 (hash)
Python 中内置有一个名字叫做 hash(o) 的函数:接收一个
不可变类型
的数据作为
参数
,
返回
结果是一个
整数
。
哈希 是一种
算法
,其作用就是提取数据的
特征码(指纹)
,
相同的内容
得到
相同的结果
,
不同的内容
得到
不同的结果
。
在 Python 中,设置字典的
键值对
时,会首先对 key 进行 hash 已决定如何在内存中保存字典的数据,以方便
后续
对字典的操作:
增、删、改、查
:键值对的 key 必须是不可变类型数据,键值对的 value 可以是任意类型的数据。
4.4.5.7 局部变量和全局变量
局部变量
是在
函数内部
定义的变量,
只能在函数内部使用
;函数执行结束后,
函数内部的局部变量,会被系统回收
;不同的函数,可以定义相同的名字的局部变量,但是
彼此之间
不会产生影响;局部变量一般
临时
保存
函数内部需要使用的数据
。
全局变量
是在
函数外部定义
的变量(没有定义在某一个函数内),
所有函数
内部
都可以使用这个变量
。
提示:在其他的开发语言中,大多 不推荐使用全局变量 —— 可变范围太大,导致程序不好维护!
注意:函数执行时,需要处理变量时 会:
首先 查找
函数内部
是否存在 指定名称 的局部变量,如果有,直接使用
如果没有,查找
函数外部
是否存在 指定名称 的全局变量,如果有,直接使用
如果还没有,程序报错!
注意:函数不能直接修改全局变量的引用,如果要修改,必须要用global声明该变量是全局变量。
注意:为了避免局部变量和全局变量出现混淆,在定义全局变量时,有些公司会有一些开发要求,例如:全局变量名前应该增加 g_ 或者 gl_ 的前缀。
5. 判断(分支)
5.1 if 语句语法
1、if 判断语句基本语法:
注意:代码的缩进为一个 tab 键,或者 4 个空格 —— 建议使用空格
在 Python 开发中,Tab 和空格不要混用!
2、如果需要在 不满足条件的时候,做某些事情,该如何做呢?
在程序开发中,通常 在判断条件时,会需要同时判断多个条件,只有多个条件都满足,才能够执行后续代码,这个时候需要使用到 逻辑运算符。
Python 中的 逻辑运算符 包括:
与 and
/
或 or
/
非 not
三种
3、如果希望 再增加一些条件,条件不同,需要执行的代码也不同 时,就可以使用 elif :
注意
elif 和 else 都必须和 if 联合使用,而不能单独使用
可以将 if、elif 和 else 以及各自缩进的代码,看成一个
完整的代码块
4、在开发中,使用 if 进行条件判断,如果希望 在条件成立的执行语句中 再 增加条件判断,就可以使用 if 的嵌套:
5.2 if语句的应用
5.2.1 随机数的处理
在 Python 中,要使用随机数,首先需要导入
随机数
的
模块
—— “工具包”
导入模块后,可以直接在
模块名称
后面敲一个 . 然后按 Tab 键,会提示该模块中包含的所有函数
random.randint(a, b) ,返回 [a, b] 之间的整数,包含 a 和 b
例如:
5.2.2 石头剪刀布
6. 循环
6.1 程序执行的三大流程
在程序开发中,一共有三种流程方式:
顺序 —— 从上向下,顺序执行代码
分支 —— 根据条件判断,决定执行代码的 分支
循环 —— 让 特定代码 重复 执行
程序执行的三大流程
6.2 while 循环基本使用
while 语句基本语法:
由于程序员的原因,忘记 在循环内部 修改循环的判断条件,导致循环持续执行,程序将陷入死循环而无法终止!
计数器 1 :可以通过赋值运算符简化代码的编写。
常见的计数方法有两种,可以分别称为:
自然计数法
(从 1 开始)—— 更符合人类的习惯
程序计数法
(从 0 开始)—— 几乎所有的程序语言都选择从 0 开始计数
因此,大家在编写程序时,应该尽量养成习惯:除非需求的特殊要求,否则 循环 的计数都从 0 开始
6.3 break 和 continue
break 和 continue 是专门在循环中使用的关键字
break :某一条件满足时,退出循环,不再执行后续的代码
continue :某一条件满足时,不执行后续的代码直接进入下一次循环
break 和 continue 只针对
当前所在循环
有效
6.4 while 循环嵌套
while 嵌套就是:while 里面还有 while,每一次循环中还要做完一个循环。
示例:
<补>字符串中的转义字符
\t 在控制台输出一个
制表符
,协助在输出文本时
垂直方向
保持对齐
\n 在控制台输出一个
换行符
制表符 的功能是在不使用表格的情况下在 垂直方向 按列对齐文本