10 11
Python是一种解释型、面向对象、动态数据类型的高级程序设计语言
原码、反码、补码
原码:规定了字节数,写明了符号位,就得到数据的原码
反码:正数的反码是其原码,负数的反码是其原码的符号位不动,其他位取反
编译型语言–>编译器–>最终可执行文件
操作系统(windows/Linux/Mac)–>CPU
解释型语言–>解释器(逐行解释每一句源代码)
IDE :继承开发环境
Linux下重置pycharm
1、关闭正在运行的pycharm
2、rm -r ~/.pycharm2018.2
3、重启pycharm
注释:1
# 内容(#后应添加一个空格,以保持代码整齐)
关于代码规范
http://www.python.org/dev/peps/pep-0008/
谷歌对应中文文档:
http://zh-google-styleguide.readthedocs.io/en/latest/google-python-styleguide/python_style_rules/
算术运算符
// :取整数 例: 9 // 2 ——>4
% :取余数 例: 9 % 2 ——>1
:幂(次方)例: 2 3 —->8
变量的类型
数字型
整数型 int
浮点型 float
布尔型 bool
复数型 complex :主要用于科学计算
非数字型
字符串
列表
元祖
字典
数据反转参考( https://blog.csdn.net/weixin_41829272/article/details/80851720 )
10 12
格式化字符 含义
%s 字符串
%d 有符号十进制整数,%06d 表示输出的整数显示位数,不足的地方用0补全
%f 浮点数,%.02f 表示小数点后显示两位
%% 输出%
代码缩进为一个tab键,或者4个空格 ———建议使用空格
Ctrl 加 / 表示快速注释
逻辑运算符
and 与
or 或者
not 非
10 13
随机数
import random 导入工具包
random.randint() 随机整数
程序开发的三大流程
-顺序:从上到下,按顺序执行代码
-分支:根据条件判断,决定执行代码的分支
-循环:让特定代码重复执行
break 和 continue
break:某一条件满足时,退出循环,不在执行后续重复的代码
continue :某一条件满足时,不执行后续重复的代码
print 自动换行问题
print(“内容” end = “”) 取消自动换行
10 14
函数
具有独立功能的代码块 在需要的时候调用
语法: def 函数名():
函数封装的代码
…….
函数的调用: 函数名()
函数文档注释:函数内使用””” 内容 “”” 在调用函数处使用Ctrl +q 查看
- 形参和实参
形参:定义函数时,小括号里的参数,是用来接收参数的,在函数内部作为 变量使用
实参:调用函数时,小括号里的参数,是用来把数据传递到 函数内部 使用的 - 函数的返回值
return 表示返回,后续的代码都不会执行
高级变量类型
列表
元祖
字典
字符串
列表:在其他语言中通常叫 数组
列表用[]定义,数据之间使用 , 分隔
索引从0开始
语法:例 names = [“张三”,”李四”]
列表常用操作方法
增加 列表.insert(索引,数据) 在指定位置插入数据
列表.append(数据) 在末尾追加数据
列表.extend(列表2) 将列表2 的数据追加到列表
修改 列表[索引] = 数据 修改指定索引的数据
删除 del 列表[索引] 删除索引的数据
列表.remove(数据) 删除第一个出现的指定数据
列表.pop 删除末尾数据
列表.pop(索引) 删除指定索引数据
列表.clear 清空列表
统计 len(列表) 列表长度
列表.count(数据) 统计在列表中出现的次数
排序 列表.sort() 升序排序
列表.sort(reverse = True) 降序排序
列表.reverse() 逆序、反转
循环遍历: 从头到尾依次从列表中获取数据
在循环内部针对每一个元素,执行相同的操作
元组: 由多个元素组成的序列 与列表相似,不同之处 元组元素不能修改
元组用()定义
10 15
字典:字典用{}定义
字典使用键值对存储数据,键值对之间使用 , 分隔
键 key 是索引(必须是不可变类型的变量)
值 value 是数据 (可以是任意类型)
键和值之间使用 : 分隔
键必须是唯一的
值可以取任何数据类型,但 键只能使用字符串、数字、元组
字符串
常用方法:
查找与替换 变量名.startswith () 以…开头
.endswith () 以…结束
.find () 指定查找内容
.replace () 替换
对齐 .center() 居中对齐
.ljust() 左对齐
.rjust() 右对齐
去掉空白字符 .strip() 去除空白字符
拆分和连接 .split() 拆分 返回一个列表类型
.join() 连接 返回一个字符串类型
字符串的切片
切片 使用索引值来限定范围,从一个大的字符串中切出小的字符串
语法: 字符串[开始索引 : 结束索引:步长]
index :如果指定的字符串不存在,会报错
find :如果指定的字符串不存在,会返回-1
10 16
公共方法
python内置函数
len() 计算容器中元素的个数
del() 删除变量
max() 返回容器中元素的最大值 如果是字典只对key比较
min() 返回容器中元素的最小值 如果是字典只对key比较
**注意:字典没有大小比较
成员运算符: in 和 not in
完整的for循环语法:
for 变量 in 集合:
循环体代码
else:
没有通过break退出循环,循环执行后,会执行的代码
pycharm中TODO注释
在 # 后跟上 TODO,用于标记需要去做的工作1
#! :叫做Shebang 或者 Sha-bang
指明 执行这个脚本文件的解释程序
10 17
- 变量高级
1.变量引用
2.可变类型(列表、字典)和不可变类型
3.局部变量和全局变量
局部变量:在函数内部定义,只能在函数内部使用
全局变量:在函数外部定义的变量,所有函数内部都能使用这个变量函数执行后,函数内部的局部变量,会被系统回收 不同函数,可以定义相同名字的局部变量,互不影响在函数内部,可以通过全局变量的引用获取对应的数据 但是,不允许直接修改全局变量的引用(使用赋值语句修改全局变量的值) 在函数内部可以使用 global 关键字修改全局变量 语法: num = 10 def demo(): global num #声明num为全局变量 num = 99 #修改 注意:在开发时,应该把 所有的全局变量 定义在所有函数的上方
交换两个数字
a = 6
b = 100
解法一: 使用临时变量c = b b = a a = c解法二: 不使用临时变量
a = a + b b = a - b a = a - b解法三:Python专有,使用元组
a,b = b,a (等号右边是一个元组,只是把小括号省略了)函数的参数
- 符号 += :在Python中,列表变量调用 += 本质上是在执行列表变量的 extend 方法,不会修改变量的引用
2.缺省参数:可以给某个参数 指定一个默认值,具有默认值的参数叫做 缺省参数
3.多值参数:需要 一个函数能够处理的参数个数是不确定的时候,可以使用多值参数注意:必须保证所有带有默认值的缺省参数在参数列表的末尾 再调用函数时,如果有多个缺省参数,需要指定参数名(明确参数的对应关系)Python中的两种多值参数 1.参数名前增加一个 * 可以接收元组 2.参数名前增加两个 * 可以接受字典 一般在给多值参数命名时,习惯以下两个名字 - *args :存放元组参数,前面一个 * - **kwargs :存放字典参数,前面连个** 说明:*args 是arguments的缩写,有变量意义 kw 是keyword 的缩写, kwargs 可以记忆 键值对参数 拆包:传递参数时 * 表示元组 ** 表示字典
- 函数的递归
函数自己调用自己 特点: 函数内部可以调用自己也可以调用其他函数 代码特点:函数内部的代码是相同的,只是针对参数不同,处理的结果不同 当参数满足一个条件时,函数不在执行(这个非常重要,为递归的出口,否则进入死循环)
10 18
控制台改变颜色
格式:print( ‘ \033[显示方式;前景色;背景色m ‘ )
说明:
前景色 背景色 颜色
1
2
3
4
5
6
7
830 40 黑色
31 41 红色
32 42 绿色
33 43 黃色
34 44 蓝色
35 45 紫红色
36 46 青蓝色
37 47 白色
显示方式 意义
1 | 0 终端默认设置 |
10 20
面向对象
❶封装
1.类和对象:
类:是一个模板,负责创建对象
对象:由类创造出来的一个具体存在
2.类的三要素
类名:满足大驼峰命名法(每个单词首字母大写,单词与单词之间没有下划线)
属性:对对象的特征描述
方法:对象的行为
3.面向对象基础语法:
dir内置函数:dir传入标识符/数据,可以查看内置方法/属性 dir( 标识符/数据 )
* 由哪一个对象调用的方法,方法内的 self 就是哪一个对象的引用 –语法:dir(类名)
在类封装的方法内部,self 就表示 当前地哦啊用方法的对象自己
一个对象的 属性 可以是 另一个 类创建的对象 参考(tj_09_oop案例2.py)
4.身份运算符
比较两个对象的内存地址是否一致 —是否是对同一个对象的引用
x is y 类似 id(x) == id (y)
x not is y 类似 id(x) != id(y)
5.私有属性和私有方法(不希望公开的)
定义方式:在 属性名或者方法名前增加两个 下划线
如果非要访问: _类名名称
❷继承(实现代码的重用)
语法:
class 子类(父类):
pass
1.单继承
子类拥有父类的所有方法和属性
2.多继承
子类拥有多个父类,并且具有所有父类的属性和方法
MRO– 方法搜索顺序:内置属性 mro__可以查看方法的搜索顺序—-print(类名,mro)
10 21
❸多态(不同的子类对象调用相同的父类方法,产生不同的执行结果)
多态可以增加代码的灵活度
以子类和重写父类的方法为前提
术语—-实例
创建出来的对象叫做类的实例
创建对象的动作叫做实例化
对象的属性叫做实例属性
对象调用的方法叫做实例方法
类方法(方法内部字需要访问类属性)
语法:
@classmethod
def 类方法名(cls):
pass
静态方法(方法内部,不需要访问实例属性和类属性,调用时不需要实例化)
语法:
@staticmethod
def 静态方法名():
pass
单例
单例设计模式:目的(让创建的对象,在系统中只有唯一的一个实例,每一次执行 类名() 返回的对象,内存地址是相同的)1
__new__ 方法:由object 基类提供的内置方法
作用: 在内存中为对象分配空间,返回对象的引用
捕获异常
语法: try:
可能出现异常的代码
except:
出现异常执行的代码
捕获未知错误
语法: except Exception as result:
print("未知错误 %s" %result)
捕获异常 完整语法 :
try:
可能出现异常的代码
except:
出现异常执行的代码
except:
出现异常执行的代码
…
except Exception as result:
print(“未知错误 %s” %result)
else:
没有异常才会执行的代码
finally:
无论是否异常,都会执行的代
10 22
模块
模块的别名
语法: import 模块名 as 别名(大驼峰命名)
form...import (部分工具导入,导入之后调用不需要使用模块名可以直接使用)
form 模块名 import 工具名
注意事项:如果两个模块,存在同名的函数,那么后倒入模块的函数,会覆盖掉先导入的函数
form...import * (导入所有模块工具)
__file__可以查看模块的完整路径 ( print(模块名 . __file__) )
__name__内置属性:测试模块的代码只在测试情况下运行,而在被导入时不会被执行
包
包含多个模块的特殊目录
目录下有一个特殊的文件 init.py
包名的命名方式和变量命名一致
文件操作(1个函数 3个方法)
open 打开文件,并且返回文件操作对象
read 将文件内容读取到内存
write 将指定内容写入文件
close 关闭文件
打开文件演练:
1.打开(文件名需要注意大小写)
file = open(“文件名”)
2.读取
text = file.read()
print(text)
3.关闭
file.close()
eval 函数 :将字符串当成有效的表达式来求值并返回计算结果
url
统一资源定位符
URL基本格式 = 协议://主机地址/路径
HTTP /HTTPs
TCP:可靠传输,传输时建立会话
UDP:不可靠传输,不会建立会话
10 23
进程:正在运行的程序、独立
线程:一个进程想要执行任务,必须要有线程(每1个进程至少要有1条线程)
进程的所有任务都是在线程中执行的
线程的串行
1个线程中的任务是串行的
- 多线程:1个进程可以开启多条线程,每1条线程可以并行(同时)执行不同的任务
原理:同一时间,cpu只能处理一条线程,只有1条线程在工作
多个线程之间来回调度(切换
