python基础
语言是人类最重要的交际工具,是人类之间进行信息交换的主要表达方式。
编程语言是用来定义计算机程序的语言,用来向计算机发出指令。
1.python简介:
创始人:吉多
需要记住的语言特点:
1.开源
2.面向对象
继承 封装 多态 鸭子类型
这样做项目的时候一些问题就可以专注于调用一些方法来解决问题 ,而不太用去搞明白具体的方法里语言是怎么写的 当然 如果要优化的话 可能需要去研究下源码了
3.解释型语言读一行执行一行** 它是用C语言写的 可能执行的速度会相对慢些
4.简单 可移植性特别强 python的整个项目的代码是非常流畅的 就是如果英语比较好的话 读起来就像是在阅读一片 优美的散文一样 胶水语言 比如说可以用python语言在shell里写个脚本 就可以进行自动化测试 非常方便
5.三方架构多
6.代码规范:一个标点,一个空格都不能错 名称、缩进、语法 有一个pep8 这样的一个风格标准
2.运算
算术运算符(重点):+,-,*,/,//(整除),%(取余),**(次方)
变量(重点) 用来存储数据 容器 ,重新存储数据的时候 修改的是 空间内部的数据 不会产生新的空间
=:数据装进容器的一个通道
变量(变量是标识符的一种)名(标识符)的取名字规则:
规则:
1.只能有字母,下划线,数字组成
2.不能以数字开头
3.不能有关键字
4.区分大小写:name Name
约定:单词统一下小写,每个单词之间 用下划线分割
数据类型:
变量类型
整数:int 取值范围没有上限
小数:float 基本没有上限
bool:True False 取值范围固定 不太准确
True 数学运算表示 1
False 数学运算表示 0
非数值类型
字符串:str
查看数据类型 type()
input()
print()
输出占位符 %s:字符串的占位
3.=与is的区别
首先要知道Python中对象包含的三个基本要素,
分别是:id(身份标识)、type(数据类型)和value(值)。
is和==都是对对象进行比较判断作用的,但对对象比较判断的内容并不相同。下面来看看具体区别在哪。
==比较操作符和is同一性运算符区别
==是python标准操作符中的比较操作符,用来比较判断两个对象的value(值)是否相等
is也被叫做同一性运算符,这个运算符比较判断的是对象间的唯一身份标识,也就是id是否相同
只有数值型和字符串型的情况下,a is b才为True,当a和b是tuple,list,dict或set型时,a is b为False。
4.分支语句
计算机三种基础语句(顺序、分支、循环)之一,用于描述“如果满足什么条件,就怎么样,否则就怎么样”的语法。
num=int(input(‘请输入一个数:’))
if num % 2 ==0:
print('%s是一个偶数' num)
else:
print('%s是一个奇数' num)
== !=
案例:减肥计划、外卖结算
减肥计划
输入今天是星期几,周一跑步、周二跳绳、周三游泳、周四动感单车、周五爬山、周六健身房、周日大吃一顿。
用input int if elif else
5.循环语句
while 重复执行某些代码
循环概念
循环是程序设计语言中反复执行某些代码的一种计算机处理过程
break可以用于终止循环的执行,当执行到break语句后,程序将跳出循环,执行循环语句后面的代码
continue可以用于提前结束本轮循环的执行,当执行到continue语句后,程序将跳到判定循环是否向下执行的条件处,进行下一轮循环是否执行的判定与后续代码执行
break 和 continue 都只能用在循环结构里
break:结束当前while循环
continue:结束当次循环,继续下一次while:跳过continue后面的代码
案例:打印三角形、九九乘法表 不用海龟模块
用循环嵌套 i,j while i < 9; while j<=i; print("%d*%d=%d" % (i , j , i*j ),end="\t")
for i in range(1,10):
for j in range(1,i+1):
print('%d*%d=%d'% (j,i,j*i),end='\t') # /t 八个空格 /n 回车 光标在下一行
print('\t')
while 1:
pass
在编程中死循环并不是一个需要避免的问题,相反,在实际应用中,经常需要用到死循环。例如,我们使用的Windows操作系统下的窗口程序中的窗口都是通过一个叫消息循环的死循环实现的。
死循环也称作无限循环,是一种无法停止的循环,并不是程序的错误
6.函数
函数(function)是将具有独立功能的代码块组织成为一个整体,使其具有特殊功能的代码集。
使用函数可以加强代码的复用性,提高程序编写的效率。
使用:用别人写好的功能
定义:我们需要将 一段功能 装到一个 代码块中去 然后给这个代码块 取个名字
先定义,后调用
1.函数不调用 不执行
2.函数不能在 定义之前调用
函数的执行过程
函数名()=>回到内部依次执行=>又回到:函数名()======>继续后面的代码
函数的调用有一个等待的过程,等待函数内部功能的执行完毕
函数内部功能结束,会回到函数调用的位置
形参:定义时的 叫做形参
实参:调用时 传递的叫做 实参
把实参 赋值给 形参 >传递数据的通道,单向通道,外部=>内部
3.返回值
函数的返回值return:将函数内部的数据=====>函数调用的位置
从哪进=====>从哪出
7.对象
面向对象是一种编程思想,是对现实世界中的事物进行抽象的方式。应用到代码编程设计中,是一种建立现实世界事物模型的方式。
对象是类的具体表现形式,是实际存在的个体。(类是一系列事物的统称)
大驼峰命名,每个单词首字母大写
魔术方法:特定的情况 才会执行的叫做 魔术方法
1.init: 类名() 这个代码 即创建对象 就会执行
2.str: print(对象) 打印对象时 出现这个代码 就会执行
3.new 1.类名() 自动执行
2.使用该方法,开空间,并且产生地址值
4.del 数据被删除的时候执行
封装:
私有:在成员变量 前面 加上 两个下滑线 变量私有化
静态方法 @staticmethod
类方法 @classmethod
类方法是定义在类中,不属于某个具体对象的行为,被所有对象共同使用的行为
继承 mro继承顺序
继承:将多个类中相同成员变量和方法抽取到父类中,保留自己特有功能和特征 发生在父类和子类之间 提高代码重用
封装:封装操作可以对受访问保护的成员进行功能开放的控制,达到保护数据不被非法访问的目的
多态同一个对象,在不同的使用环境中以不同的形态展示其功能。
鸭子类型是一种特殊的调用现象,当对象在语法层面能够满足调用关系,但对象并不具有对应的对象形态,称该对象此时具备鸭子类型
鸭子类型是一种特殊的多态表现形式
比如说要招司机,来了个三轮车司机,其实招的是公交车司机
案例:反恐精英基础版、修复版、加强版、超级加强版
8.数据存储
包括列表、元组、集合、字典
列表 [] 可变数据类型
列表是一种存储大量数据的存储模型。 高级容器 有索引 从0开始
往列表里添加元素 append 、insert(索引,元素)、extend(列表)、
两个列表的合并 运算符相加(两个列表连接,产生一个新的更大的列表)、
append(把后一个列表看成是一个元素整个加入前一个列表中)、extend(把后一个列表的元素逐个加入前一个列表中)、切片、dict(zip(a,b))
删除 remove pop(有一个返回值,默认删除最后一个元素)
查询 index(元素) 查询元素的位置、索引
统计 count(数据) 统计元素的个数
元组 () 不可变数据类型
存储固定数据 有索引 元组中的数据可以进行查询操作,但不能进行添加、删除、修改操作。
支持拆包、组包
查询 index(元素) 查询元素的位置、索引
统计 count(数据) 统计元素的个数
集合 {1,} 可变数据类型
集合是一种存储大量无序不重复数据的存储模型。 可以用于简单的去重 没有索引 集合中的数据可以进行添加、删除等操作 无序性
添加 add(元素)
删除 remove(元素)、pop(有一个返回值,默认删除最后一个元素)
字典{age:1} 可变数据类型
字典是一种使用“键值对结构”存储数据的存储模型。没有索引。字典的键是不可变数据类型、是唯一的不能重复。
字典使用键key代替索引,可以通过键操作字典中存储的数据值value。字典可以根据键key进行数据的添加、删除、修改、查询操作。
删除 pop(key)、popitem()
更新字典 update(date) 使用新字典中的数据对原始字典数据进行更新
dict1 = {“name”:“itcast”,“age”:11}
dict2 = {“address”:“北京”,“age”:22}
dict1.update(dict2)
获取
获取键的值 get(key)
获取所有的键的列表 dict1.keys()
获取所有的值的列表 dict1.values()
获取所有的键值对列表 dict1.items()
dict1 = {“name”:“itcast”,“age”:11}
print(dict1.items())
dict_items([(‘name’, ‘itcast’), (‘age’, 11)])
格式转换 list()、tuple()、set()
for循环用于对数据存储模型进行访问遍历
range的功能:创建连续的整数
range()
1. 帮助列表 集合 元组 填充有规律的 整数 数据
2. 用于循环结构
range(开始,结束,递增数)
开始:默认为0 可以省略 =开始
结束:必须明确 ,不包含 <结束
递增数: 每次递增1 可以正负, +=递增数
添加从0-10的偶数,由大到小排列
list1=[]
for i in range(10,-1,-1):
if i % 2 ==0:
list1.append(i)
print(list1)
数据公用方法
查询元素长度 len()
查询最大值 max()
查询最小值 min()
切片
切片的作用 获取列表、元组或字符串中的局部数据
容器对象[开始索引:结束索引:步长]
空格也算一位元素,占用一个索引,索引从0开始,包含开始元素,不包含结束元素
可以用切片的方式实现两个列表合并
容器=容器[开始:结束:递增数] =开始 不包含结束 +递增数
递增数为正整数:
开始不写默认为0
结束不写默认取值到最后
递增数为负数: 只是切的方向发生了改变 变为从右往左切
开始不写默认为最后一个索引
结束不写默认取值到开始
省略开始索引:默认开始索引为0
范例:list1[:5:1] 等同于 list1[0:5:1]
省略结束索引:默认结束索引为数据总量
范例:list1[0::1] 等同于 list1[0:len(list1):1]
省略步长:每次递增索引数为1
范例:list1[0:5:] 等同于 list1[0:5:1]
负数步长: 反向操作/反向步长操作,需要开始索引、结束索引逆序输入,可用于逆序
范例: list1=[1,2,3,4,5] a=list1[4:0:-1] print(a) 得到[5,4,3,2]
常见格式:
范例:list1[:5:] 获取索引5之前的数据(不含5)
范例:list1[4::] 获取索引4之后的数据(含4)
用什么 容器 切 就得到什么容器
for…else基本语法
for 变量名 in 列表:
变量相关操作
else:
循环正常运行结束后执行的操作
如果for循环中执行了break语句,则else中的代码将不执行
while循环同样具有while…else语法格式
案例:斗地主 完成洗牌、发牌、打印3个玩家各自的牌
用 random模块 循环嵌套添加花色和数字 r = random.randiant(0,53) #一共54张牌random.randiant里包括末尾数,写53。
字符串 “”,‘’,“”“”“”,‘’‘’‘’
字符串是一个容器,包含若干个字符并按照一定的顺序组织成一个整体。字符串支持索引操作。可以切片。
字符串.lower() 转小写 字符串.upper() 转大写
strip (str) 关键词:左右去字符
split(str) 关键词:多段拆分
join(str) 关键词:占位连接
count(str) 关键词:字符串数量
replace(old_str,new_str,num) 关键词:替换
字符串.startswith() 判断前缀
字符串.endswith() 判断后缀
9.参数 和函数
位置参数、默认参数、关键字参数、可变参数、字典参数
递归函数、匿名函数
位置参数:包括位置形参、位置实参
默认参数:定义时的形参有值就是默认参数 def func(a=1)
关键字参数:调用时实参赋值,就是关键字参数 func(b=1)
可变参数:*args接受多余的位置参数的 可以接收无数个实参的形参 包装成元组对象 def func(a,b,*args): func(1,5,6,7,8,9)
字典参数: **kwargs接受 多余的关键字参数 包装成一个字典对象 def 函数名(**kwargs): 函数名(关键字实参,关键字实参,…)
默认参数作用:
减少函数/方法中大量反复的固定值的传参
为用户预留可操作的入口
可变参数的 另外一种使用方式:
1.定义的时候 做 组包
2.调用传递的时候 做 解包
注意点:推荐书写顺序
def 函数名(位置a,可变参数*args,默认参数b=2,字典参数**kwargs):
pass
函数名(位置0,数据1,数据2,数据3,…,关键字参数b=3,关键字参数c=4,关键字参数d=5)
递归函数定义要求
1.函数体中具有对自身函数的调用
2.函数体中具有明确的函数执行结束判定条件
Python语言中函数调用最大层级为1000层,超过该层级,程序将报错(不同语言设置不同)
5.匿名函数:匿名函数即没有名称的函数,在python语言中,匿名函数是使用lambda关键字定义的一个特殊表达式,也称为lambda表达式。
def add(a,b):
return a+b
c=add(2,3)
print(c)
可写为:c=(lambda a,b :a + b) (2,3) print(c)
10.数据类型
可变数据类型 列表,字典,集合,变量
不可变数据类型 字符串、整型、浮点型、元组
可变类型:形参的改变 直接影响实参
不可变类型:形参的改变,不影响实参
列表、集合、字典、对象的引用格式十分相似,都是指向一个存储区域,存储区域内数据发生变化,原始对象的引用不变
数字、字符串、布尔值、元组的引用格式十分相似,其存储数据的空间内容不允许发生改变,修改数据是变更原始对象的引用地址
数据存储空间中的数据可以发生变化的数据称为可变类型数据
数据存储空间中的数据不能发生变化的数据称为不可变类型数据
可变类型: 列表、集合、字典、对象
不可变类型: 数值、字符串、布尔、元组
函数的形参如果接收到的实参是不可变类型,函数内部的操作,不会对外部的实参产生影响
函数的形参如果接收到的实参是可变类型,函数内部的操作,会对外部的实参产生影响
对默认参数的值尽量避免使用可变类型的数据
3.is操作:
is 和 == 的功能相似
1.==:判断内容
2.is:判断地址
4.单例模式:
1.概念:只能创建一个对象
2.代码核心思想:限制函数或者方法 内部的 某部分 的 执行次数
限制代码的执行:
1.定义标记,判断标记
2.第一个调用者使用之后,修改标记
3.关键点:在哪儿定义标记 最重要(所有调用者共享的数据)
5.文件读写 with open(‘1.jpg’,rb) as f : f.write(11.jpg)
6.模块的导入方式
1.全部导入 import 文件名
2.局部导入:from 文件名 import 变量/函数名
重点复习:python基础、切片、字典、bool判断、=与is的区别