目录
对于商业项目而言,通常在一个项目中,只有一个 可以直接执行的 Python 源程序
1. Python 简介
1.1 历史简介
- 1989 年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的解释程序,作为 ABC 语言的一种继承(感觉下什么叫牛人)
- ABC 是由吉多参加设计的一种教学语言,就吉多本人看来,ABC 这种语言非常优美和强大,是专门为非专业程序员设计的。但是 ABC 语言并没有成功,究其原因,吉多认为是非开放造成的。吉多决心在 Python 中避免这一错误,并获取了非常好的效果
- 之所以选中 Python(蟒蛇) 作为程序的名字,是因为他是 BBC 电视剧——蒙提·派森的飞行马戏团(Monty Python’s Flying Circus)的爱好者
- 1991 年,第一个 Python 解释器 诞生,它是用 C 语言实现的,并能够调用 C 语言的库文件
在 Python 社区,吉多被称为“仁慈的独裁者”
同一样问题,用不同的语言解决,代码量差距还是很多的,一般情况下
Python
是Java
的 1/5,所以说 人生苦短,我用 Python
1.2 Python语言特点
- Python 是完全面向对象的语言
- 函数、模块、数字、字符串都是对象,在 Python 中一切皆对象
- 完全支持继承、重载、多重继承
- 支持重载运算符,也支持泛型设计
- Python 拥有一个强大的标准库,Python 语言的核心只包含 数字、字符串、列表、字典、文件 等常见类型和函数,而由 Python 标准库提供了 系统管理、网络通信、文本处理、数据库接口、图形系统、XML 处理 等额外的功能
- Python 社区提供了大量的第三方模块,使用方式与标准库类似。它们的功能覆盖 科学计算、人工智能、机器学习、Web 开发、数据库接口、图形系统 多个领域
2. Python的版本
-
Python 2.x 默认不支持中文
-
Python 2.x 是 过去的版本
- 解释器名称是 python
-
Python 3.x 是 现在和未来 主流的版本
- 解释器名称是 python3
- 相对于
Python
的早期版本,这是一个 较大的升级 - 为了不带入过多的累赘,
Python 3.0
在设计的时候 没有考虑向下兼容- 许多早期
Python
版本设计的程序都无法在Python 3.0
上正常执行
- 许多早期
- Python 3.0 发布于 2008 年
- 到目前为止,Python 3.0 的稳定版本已经有很多年了
- Python 3.3 发布于 2012
- Python 3.4 发布于 2014
- Python 3.5 发布于 2015
- Python 3.6 发布于 2016
-
为了照顾现有的程序,官方提供了一个过渡版本 —— Python 2.6
- 基本使用了
Python 2.x
的语法和库 - 同时考虑了向
Python 3.0
的迁移,允许使用部分Python 3.0
的语法与函数 - 2010 年中推出的
Python 2.7
被确定为 最后一个Python 2.x 版本
- 基本使用了
提示:如果开发时,无法立即使用 Python 3.0(还有极少的第三方库不支持 3.0 的语法),建议
- 先使用
Python 3.0
版本进行开发- 然后使用
Python 2.6
、Python 2.7
来执行,并且做一些兼容性的处理
3. Python的交互式环境&IDE- PyCharm
3.1 IPython
- IPython 中 的 “I” 代表 交互 interactive
-
- IPython 是一个 python 的 交互式 shell,比默认的
python shell
好用得多- 支持自动补全
- 自动缩进
- 支持
bash shell
命令 - 内置了许多很有用的功能和函数
- IPython 是一个 python 的 交互式 shell,比默认的
- IPython 是基于 BSD 开源的
版本
- Python 2.x 使用的解释器是 ipython
- Python 3.x 使用的解释器是 ipython3
退出
- 直接输入
exit
In [1]: exit
ctrl+d
3.2 Ubuntu中的PyCharm
3.2.1 配置文件位置
用户家目录下的.PyCharmxxxx.x
目录,xxxx.x是PyCharm的版本号。如果要恢复PyCharm的初始设置,可以先退出PyCharm,再删除该文件夹。
PyCharm会在目录下新建一个 .idea 的目录,用于保存 项目相关的信息,例如:解释器版本、项目包含的文件等等
3.2.2 安装和创建桌面快捷方式
$ tar -zxvf pycharm-professional-2017.1.3.tar.gz
$ sudo mv pycharm-2017.1.3/ /opt/
- 专业版创建桌面图标: Tools / Create Desktop Entry… 勾选为所有用户添加
- 其他版本:
- 编辑文件
$ sudo gedit /usr/share/applications/jetbrains-pycharm.desktop
- 修改成以下内容:
[Desktop Entry] Version=1.0 Type=Application Name=PyCharm Icon=/opt/pycharm-edu-3.5.1/bin/pycharm.png Exec="/opt/pycharm-edu-3.5.1/bin/pycharm.sh" %f Comment=The Drive to Develop Categories=Development;IDE; Terminal=false StartupWMClass=jetbrains-pycharm
- 编辑文件
3.2.3 卸载
- 删除/opt下的pycharm目录
- 删除家目录下的配置目录
- 删除快捷方式:
/usr/share/applications/jetbrains-pycharm.desktop
在
ubuntu
中,应用程序启动的快捷方式通常都保存在/usr/share/applications
目录下
4. 算数运算符
运算符 | 描述 | 实例 |
---|---|---|
+ | 加 | 10 + 20 = 30 |
- | 减 | 10 - 20 = -10 |
* | 乘 | 10 * 20 = 200 |
/ | 除 | 10 / 20 = 0.5 |
// | 取整除 | 返回除法的整数部分(商) 9 // 2 输出结果 4 |
% | 取余数 | 返回除法的余数 9 % 2 = 1 |
** | 幂 | 又称次方、乘方,2 ** 3 = 8 |
5. 变量
- 操作系统会首先让 CPU 把 Python 解释器 的程序复制到 内存 中
- Python 解释器 根据语法规则,从上向下 让 CPU 翻译 Python 程序中的代码
- CPU 负责执行翻译完成的代码
内容
- 类型:
type
- 类型转换
- 输入
- 格式化输出
- 变量命名规则
- 关键字:
import keyword keyword.kwlist
数字类型之间可以直接计算,Bool类型当作1/0.
PEP8
文档地址:https://www.python.org/dev/peps/pep-0008/
谷歌有对应的中文文档:http://zh-google-styleguide.readthedocs.io/en/latest/google-python-styleguide/python_style_rules/
6. 判断
1. 语法
2. 逻辑判断符
7. 循环
1. 语法
2. 死循环
3. 赋值运算符
4. 索引从0开始的习惯
5. 循环嵌套
6. break和continue
7. 循环嵌套
8. 函数
1. 定义
2. 文档注释
"""解释
:param p1: p1的作用
:param p2: p2的作用
:return: 返回内容作用
详细解释
"""
3. 函数名和模块名都是标识符
9. 列表
1. 创建
2. 索引
3. 添加:append
, extend
, insert
4. 删除: remove
, clear
, pop
, del
5. 计数:count
, index
6. 排序
7. 遍历
10. 元祖
1. 创建
() # 空元祖
(5) # int
(5,) # 一个元素的元祖
2. 计数: count
, index
通常元祖内保存的数据类型不同;而list中保存的数据类型相同
11. 字典
1. 创建
2. 取值
3. 取值、修改
4. 删除
di.pop('key')
del di['key']
di.clear()
5. 合并字典
dic1.update(dic2) # 合并字典,如果key相同,则更新值
6. 遍历
12. 字符串
1. 创建
2. 遍历和索引
3. 方法:
1) 判断类型 - 9
方法 | 说明 |
---|---|
string.isspace() | 如果 string 中只包含空格,则返回 True |
string.isalnum() | 如果 string 至少有一个字符并且所有字符都是字母或数字则返回 True |
string.isalpha() | 如果 string 至少有一个字符并且所有字符都是字母则返回 True |
string.isdecimal() | 如果 string 只包含数字则返回 True,全角数字 ,无法判断小数 |
string.isdigit() | 如果 string 只包含数字则返回 True,全角数字 、⑴ 、\u00b2 ,无法判断小数 |
string.isnumeric() | 如果 string 只包含数字则返回 True,全角数字 ,汉字数字 ,无法判断小数 |
string.istitle() | 如果 string 是标题化的(每个单词的首字母大写)则返回 True |
string.islower() | 如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是小写,则返回 True |
string.isupper() | 如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是大写,则返回 True |
2) 查找和替换 - 7
方法 | 说明 |
---|---|
string.startswith(str) | 检查字符串是否是以 str 开头,是则返回 True |
string.endswith(str) | 检查字符串是否是以 str 结束,是则返回 True |
string.find(str, start=0, end=len(string)) | 检测 str 是否包含在 string 中,如果 start 和 end 指定范围,则检查是否包含在指定范围内,如果是返回开始的索引值,否则返回 -1 |
string.rfind(str, start=0, end=len(string)) | 类似于 find(),不过是从右边开始查找 |
string.index(str, start=0, end=len(string)) | 跟 find() 方法类似,不过如果 str 不在 string 会报错 |
string.rindex(str, start=0, end=len(string)) | 类似于 index(),不过是从右边开始 |
string.replace(old_str, new_str, num=string.count(old)) | 把 string 中的 old_str 替换成 new_str,如果 num 指定,则替换不超过 num 次 |
3) 大小写转换 - 5
方法 | 说明 |
---|---|
string.capitalize() | 把字符串的第一个字符大写 |
string.title() | 把字符串的每个单词首字母大写 |
string.lower() | 转换 string 中所有大写字符为小写 |
string.upper() | 转换 string 中的小写字母为大写 |
string.swapcase() | 翻转 string 中的大小写 |
4) 文本对齐 - 3
方法 | 说明 |
---|---|
string.ljust(width) | 返回一个原字符串左对齐,并使用空格填充至长度 width 的新字符串 |
string.rjust(width) | 返回一个原字符串右对齐,并使用空格填充至长度 width 的新字符串 |
string.center(width) | 返回一个原字符串居中,并使用空格填充至长度 width 的新字符串 |
5) 去除空白字符 - 3
方法 | 说明 |
---|---|
string.lstrip() | 截掉 string 左边(开始)的空白字符 |
string.rstrip() | 截掉 string 右边(末尾)的空白字符 |
string.strip() | 截掉 string 左右两边的空白字符 |
6) 拆分和连接 - 5
方法 | 说明 |
---|---|
string.partition(str) | 把字符串 string 分成一个 3 元素的元组 (str前面, str, str后面) |
string.rpartition(str) | 类似于 partition() 方法,不过是从右边开始查找 |
string.split(str="", num) | 以 str 为分隔符拆分 string,如果 num 有指定值,则仅分隔 num + 1 个子字符串,str 默认包含 ‘\r’, ‘\t’, ‘\n’ 和空格 |
string.splitlines() | 按照行(’\r’, ‘\n’, ‘\r\n’)分隔,返回一个包含各行作为元素的列表 |
string.join(seq) | 以 string 作为分隔符,将 seq 中所有的元素(的字符串表示)合并为一个新的字符串 |
4. 切片
13. 高级数据类型的公共方法
方法
函数 | 描述 | 备注 |
---|---|---|
len(item) | 计算容器中元素个数 | |
del(item) | 删除变量 | del 有两种方式 |
max(item) | 返回容器中元素最大值 | 如果是字典,只针对 key 比较 |
min(item) | 返回容器中元素最小值 | 如果是字典,只针对 key 比较 |
cmp(item1, item2) | 比较两个值,-1 小于/0 相等/1 大于 | Python 3.x 取消了 cmp 函数 |
描述 | Python 表达式 | 结果 | 支持的数据类型 |
---|---|---|---|
切片 | “0123456789”[::-2] | “97531” | 字符串、列表、元组 |
运算符
运算符 | Python 表达式 | 结果 | 描述 | 支持的数据类型 |
---|---|---|---|---|
+ | [1, 2] + [3, 4] | [1, 2, 3, 4] | 合并 | 字符串、列表、元组 |
* | [“Hi!”] * 4 | [‘Hi!’, ‘Hi!’, ‘Hi!’, ‘Hi!’] | 重复 | 字符串、列表、元组 |
in |
3 in (1, 2, 3) | True | 元素是否存在 | 字符串、列表、元组、字典 |
not in |
4 not in (1, 2, 3) | True | 元素是否不存在 | 字符串、列表、元组、字典 |
> >= == < <= |
(1, 2, 3) < (2, 2, 3) | True | 元素比较 | 字符串、列表、元组 |
注意
in
在对 字典 操作时,判断的是 字典的键in
和not in
被称为 成员运算符
完整的for循环语法——for else
for 变量 in 集合:
循环体代码
else:
没有通过 break 退出循环,循环结束后,会执行的代码
14. 名片管理系统
1. pass关键字
2. pycharm中的# TODO 内容
3. shebang
#!
这个符号叫做Shebang
或者Sha-bang
Shebang
通常在Unix
系统脚本的中 第一行开头 使用- 指明 执行这个脚本文件 的 解释程序
使用 Shebang 的步骤
- 使用
which
查询python3
解释器所在路径
$ which python3
- 修改要运行的 主 python 文件,在第一行增加以下内容
#! /usr/bin/python3
- 修改 主 python 文件 的文件权限,增加执行权限
$ chmod +x cards_main.py
- 在需要时执行程序即可
./cards_main.py
15. 变量引用
1. id
函数返回对象实际地址
2. 引用传值
3. 可变/不可变
4. 内置函数hash
可以计算哈希值
16. 局部变量/全局变量
1. 生命周期
2. 查找变量过程
函数执行时,需要处理变量时 会:
- 首先 查找 函数内部 是否存在 指定名称 的局部变量,如果有,直接使用
- 如果没有,查找 函数外部 是否存在 指定名称 的全局变量,如果有,直接使用
- 如果还没有,程序报错!
函数不能直接修改
全局变量的引用
3. global
关键字
global num
4. 全局变量定义位置
如果函数中使用了全局变量,则该全局变量的定义位置,需要在函数调用之前
num = 10
def foo():
print(num)
print(title)
print(bar)
title = "name"
foo() # 打印 num、title, 而对bar报错
bar = "456"
代码结构示意图
17. 函数高级
1. 返回值返回tuple
2. 函数参数的引用传递
- 在
python
中,列表变量调用+=
本质上是在执行列表变量的extend
方法,不会修改变量的引用
3. 默认参数(缺省参数)
4. 多值参数
# * args
# **kwargs
def demo(num, *args, **kwargs):
print(num)
print(args)
print(kwargs)
demo(1)
# 1
# ()
# {}
demo(1,2,3,4,5)
# 1
# (2,3,4,5)
# {}
demo(1,2,3,4,5, name="小明")
# 1
# (2,3,4,5)
# {"name“: "小明"}
demo(1, *mylist, **mydict) # 传入值的拆包