作者:dfface 前言本文是基于黑马程序员2018年的Python基础班的内容编写的,以2018年的资料为蓝本,2016年的资料为补充,还参考了一些网上的教程,旨在更好地总结Python基础知识,力求简明扼要,以供实战演练时能够快速查询遗忘的知识点。学一门语言贵在坚持用它,不用就淡忘了,而记录下一篇文章也有助于日后快速回忆。全文分为两大部分,分别是Python基础语法和面向对象。 第一部分 Python基础语法第一部分 Python基础语法 1. 认识Python 1.1 Python 简介 Python 的创始人为吉多·范罗苏姆(Guido van Rossum)。
Python 是完全面向对象的语言,在 Python 中一切皆对象。
1.2. 第一个Python程序 执行 Python 程序的三种方式: 解释器、交互式运行、IDE运行 Python 是一个格式非常严格的程序设计语言。 python 2.x 默认不支持中文。
为了照顾现有的程序,官方提供了一个过渡版本 —— Python 2.6。
IPython 是一个 python 的 交互式 shell,比默认的 python shell 好用得多,它支持 bash shell 命令,适合于学习/验证 Python 语法或者局部代码。 集成开发环境(IDE,Integrated Development Environment)—— 集成了开发软件需要的所有工具,一般包括以下工具:
PyCharm 是 Python 的一款非常优秀的集成开发环境 PyCharm运行工具栏 1.3. PyCharm 的设置 PyCharm 的 配置信息 是保存在 用户家目录下 的 .PyCharmxxxx.x 目录下的,xxxx.x 表示当前使用的 PyCharm 的版本号 1.3.1 恢复 PyCharm 的初始设置:
$ rm -r ~/.PyCharm2016.3
1.3.2 PyCharm 安装和启动步骤:
$ tar -zxvf pycharm-professional-2017.1.3.tar.gz
$ sudo mv pycharm-2017.1.3/ /opt/
$ cd /opt/pycharm-2017.1.3/bin
$ ./pycharm.sh 1.3.3 设置启动图标
1.3.4 卸载之前版本的 PyCharm 要卸载 PyCharm 只需要做以下两步工作:
$ sudo rm -r /opt/pycharm-2016.3.1/
$ rm -r ~/.PyCharm2016.3/
1.4. 多文件项目的演练
让选中的程序可以执行 2. 注释
2.1 单行注释(行注释)
print('hello python') # 输出 `hello python`
2.2 多行注释(块注释)
'''这是一个多行注释在多行注释之间,可以写很多很多的内容……''' print('hello python') 提示:
2.3 代码规范:
3. 运算符 3.1 算数运算符 是完成基本的算术运算使用的符号,用来处理四则运算,而“+”和“*”还可以用来处理字符串。 运算符 描述 实例 + 加 10 + 20 = 30 - 减 10 - 20 = -10 * 乘 10 * 20 = 200 / 除 10 / 20 = 0.5 // 取整除 返回除法的整数部分(商) 9 // 2 输出结果 4 % 取余数 返回除法的余数 9 % 2 = 1 ** 幂 又称次方、乘方,2 ** 3 = 8 3.2 比较(关系)运算符
3.3 赋值运算符
运算符 描述 实例 = 简单的赋值运算符 c = a + b 将 a + b 的运算结果赋值为 c += 加法赋值运算符 c += a 等效于 c = c + a -= 减法赋值运算符 c -= a 等效于 c = c - a *= 乘法赋值运算符 c *= a 等效于 c = c * a /= 除法赋值运算符 c /= a 等效于 c = c / a //= 取整除赋值运算符 c //= a 等效于 c = c // a %= 取 模 (余数)赋值运算符 c %= a 等效于 c = c % a **= 幂赋值运算符 c **= a 等效于 c = c ** a 3.4 身份运算符 身份运算符比较两个对象的内存位置。常用的有两个身份运算符,如下所述: 运算符 描述 示例 is 判断两个标识符是不是引用同一个对象 x is y,类似 id(x) == id(y) is not 判断两个标识符是不是引用不同对象 x is not y,类似 id(a) != id(b) 辨析
3.5 成员运算符 Python成员运算符测试给定值是否为序列中的成员。 有两个成员运算符,如下所述: 运算符 描述 in 如果在指定的序列中找到一个变量的值,则返回true,否则返回false。 not in 如果在指定序列中找不到变量的值,则返回true,否则返回false。 3.6 逻辑运算符 运算符 逻辑表达式 描述 and x and y 只有 x 和 y 的值都为 True,才会返回 True<br />否则只要 x 或者 y 有一个值为 False,就返回 False or x or y 只要 x 或者 y 有一个值为 True,就返回 True<br />只有 x 和 y 的值都为 False,才会返回 False not not x 如果 x 为 True,返回 False<br />如果 x 为 False,返回 True 3.7 运算符优先级
运算符 描述 ** 幂 (最高优先级) * / % // 乘、除、取余数、取整除 + - 加法、减法 <= < > >= 比较运算符 == != 等于运算符 = %= /= //= -= += *= **= 赋值运算符 is is not 身份运算符 in not in 成员运算符 not or and 逻辑运算符 <补>程序执行原理 Python程序执行示意图
Python 的解释器有多大?
# 1. 确认解释器所在位置$ which python# 2. 查看 python 文件大小(只是一个软链接)$ ls -lh /usr/bin/python# 3. 查看具体文件大小$ ls -lh /usr/bin/python2.7 4. 变量 4.1 变量定义
变量名 = 值
4.2 变量的类型
In [1]: type(name) <补>不同类型变量之间的计算
<补>从键盘获取输入信息:input
字符串变量 = input('提示信息:') <补>类型转换函数 函数 说明 int(x) 将 x 转换为一个整数 float(x) 将 x 转换到一个浮点数 str(x) 将对象x转换为字符串表示形式 tuple(s) 将s转换为元组 list(s) 将s转换为列表 price = float(input('请输入价格:')) <补>格式化输出:print
print('格式化字符串' % 变量1)print('格式化字符串' % (变量1, 变量2...)) 4.3 变量的命名 4.3.1 标识符和关键字
In [1]: import keywordIn [2]: print(keyword.kwlist) 4.3.2 变量的命名规则
当然,还有驼峰命名法: 小驼峰式命名法:第一个单词以小写字母开始,后续单词的首字母大写,例如: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)
name_list = ['zhangsan', 'lisi', 'wangwu'] 列表示意图 <补>del 关键字
In [1]: l = [1,2,3,4]In [2]: del l[1]In [3]: l[1]Out[3]: 3
<补>函数与方法
函数名(参数)
对象.方法名(参数)
<补>循环遍历
# for 循环内部使用的变量 in 列表for name in name_list: 循环内部针对列表元素进行操作 print(name) for-in循环流程图
4.4.2 元组(tuple)
info_tuple = ('zhangsan', 18, 1.75) 创建空元组: info_tuple = () 元组中 只包含一个元素 时,需要 在元素后面添加逗号: info_tuple = (50, ) 元组示意图
<补>元组和列表之间的转换
list(元组)
tuple(列表) 4.4.3 字典(dict) dict(字典) 是 除列表以外 Python 之中 最灵活 的数据类型。 字典同样可以用来 存储多个数据,通常用于存储 描述一个 物体 的相关信息
xiaoming = {'name': '小明', 'age': 18, 'gender': True, 'height': 1.75} 字典示意图
# for 循环内部使用的 `key 的变量` in 字典for k in xiaoming: print('%s: %s' % (k, xiaoming[k]))
card_list = [{'name': '张三', 'qq': '12345', 'phone': '110'}, {'name': '李四', 'qq': '54321', 'phone': '10086'} ] 4.4.4 字符串(str)
string = 'Hello Python'for c in string: print(c) 字符串示意图
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 中所有的元素(的字符串表示)合并为一个新的字符串 <补>字符串的切片
字符串索引示意图 字符串[开始索引:结束索引:步长] 注意:
<补>索引的顺序和倒序
num_str = '0123456789'# 1. 截取从 2 ~ 5 位置 的字符串print(num_str[2:6])# 2. 截取从 2 ~ `末尾` 的字符串print(num_str[2:])# 3. 截取从 `开始` ~ 5 位置 的字符串print(num_str[:6])# 4. 截取完整的字符串print(num_str[:])# 5. 从开始位置,每隔一个字符截取字符串print(num_str[::2])# 6. 从索引 1 开始,每隔一个取一个print(num_str[1::2])# 倒序切片# -1 表示倒数第一个字符print(num_str[-1])# 7. 截取从 2 ~ `末尾 - 1` 的字符串print(num_str[2:-1])# 8. 截取字符串末尾两个字符print(num_str[-2:])# 9. 字符串的逆序(面试题)print(num_str[::-1]) 4.4.5 公共方法和变量的高级应用 4.4.5.1 内置函数 Python 包含了以下内置函数: 函数 描述 备注 len(item) 计算容器中元素个数 del(item) 删除变量 del 有两种方式 max(item) 返回容器中元素最大值 如果是字典,只针对 key 比较 min(item) 返回容器中元素最小值 如果是字典,只针对 key 比较 cmp(item1, item2) 比较两个值,-1 小于 / 0 相等 / 1 大于 Python 3.x 取消了 cmp 函数 注意:字符串 比较符合以下规则: '0' < 'A' < 'a'。 4.4.5.2 切片
4.4.5.3 运算符 运算符 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 元素比较 字符串、列表、元组 注意
4.4.5.4 内置函数完整的 for 循环语法
for 变量 in 集合: 循环体代码else: 没有通过 break 退出循环,循环结束后,会执行的代码 应用场景:
4.4.5.5 变量的引用
在 Python 中:变量 和 数据 是分开存储的,数据 保存在内存中的一个位置,变量 中保存着数据在内存中的地址,就叫做 引用,使用 id() 函数可以查看变量中保存数据所在的 内存地址。
在 Python 中,变量的名字类似于 便签纸 贴在 数据 上:
代码 图示 a = 1
代码 图示 a = 2
代码 图示 b = a 在 Python 中,函数的 实参/返回值 都是是靠 引用 来传递来的 def test(num): print('-' * 50) print('%d 在函数内的内存地址是 %x' % (num, id(num))) result = 100 print('返回值 %d 在内存中的地址是 %x' % (result, id(result))) print('-' * 50) return resulta = 10print('调用函数前 内存地址是 %x' % id(a))r = test(a)print('调用函数后 实参内存地址是 %x' % id(a))print('调用函数后 返回值内存地址是 %x' % id(r)) 结果 4.4.5.6 可变和不可变类型
注意
<补>哈希 (hash)
4.4.5.7 局部变量和全局变量
注意:函数执行时,需要处理变量时 会:
注意:函数不能直接修改全局变量的引用,如果要修改,必须要用global声明该变量是全局变量。 num = 10def demo1(): print('demo1' + '-' * 50) # global 关键字,告诉 Python 解释器 num 是一个全局变量 global num # 只是定义了一个局部变量,不会修改到全局变量,只是变量名相同而已 num = 100 print(num)def demo2(): print('demo2' + '-' * 50) print(num)demo1()demo2()print('over') 注意:为了避免局部变量和全局变量出现混淆,在定义全局变量时,有些公司会有一些开发要求,例如:全局变量名前应该增加 g_ 或者 gl_ 的前缀。 |
|
来自: 星光闪亮图书馆 > 《Python学习》