前序
博主本身是一名java搬砖工人,最近在极客时间上学习覃超老师的算法基础课程,课程中很多解题示例代码都是用Python写的,在很多语法不理解的状态下也了解了Python相比java在编程上的便捷,所以对Python产生了一些兴趣,便去图书馆借了一本《Python基础案例教程》,进行了Python基础编程的自学,还书之前做了下读书笔记,就让它开启我打破CSDN只看不发的恶习吧!
正文
书籍本身对Python和编程的一些基本常识都做了介绍,但我在学习时是依据java做了对比,所以很多编程中常识性的的名次或者代码,符号的含义就没有做记录,只记录的自己觉得重要的内容,使用自己的理解做了笔记,可能有些不完善或者他人不好理解,见谅~
基础
Python的基本语法:
1.严格区分大小写
2.每一行就是一条语句,每条语句以换行符结束
3.建议每行代码不超过80字符
4.分多行编写一条语句,每行语句中都要加引号来包裹代码
5.缩进严格,不能随意缩进
print()函数: 控制台输出方法
基本语法:print(arg1[,arg2])
input()函数: 控制台输入方法
注释符号:
#单行注释
''' 多行注释 '''
变量:
不可变变量:数字,元组,字符串
可变变量:列表,字典,序列
变量声明:a=1,b='123',
赋值:支持为多个变量同时赋值,a=b=c=235;a,b,c = '1','2','3'
数据类型:
整型:整数大小无限制
浮点型:pyhton中的浮点型为float类型
布尔型:True/False
字符串:定义方式:''/""都可以,非字符串与字符串拼接输出时需 要print(arg1,arg2);
占位符:字符串占位符%s,
使用方式a = '12%s56%s90'% ('34','78')
浮点数占位符%f,整数占位符%d
格式化字符串:使用f创建格式化字符串
示例:
a = '我是变量a'
b = '我是变量b'
c = f'hello{a} {b}'
字符串赋值:将字符串与数字相乘可将字符串重复指定的次数返回
空值:None
类型检查:type(obj)
类型转换:int(),float():转换布尔值时F-0,T-1;
str();bool():对于所有表示空性的对象都会转换为False,其余转换为True
运算符:
算术运算符:
*:字符串与数字相乘,返回字符串重复次数
/:除法运算符,返回浮点数
//:整除运算符
**:幂运算符,返回一个值的几次幂
赋值运算符:无差异
关系运算符:
is:比较两个对象是否是同一个对象
is not: 比较两个对象不是否是同一个对象
逻辑运算符:
not(逻辑非),and(逻辑与),or(逻辑或)
条件运算符:无差异
三目运算:max = a if a > b else b
控制流程
if-else结构:
基本结构:
if()
代码块1
elif()
代码块2
elif()
代码块3
...
else
代码块
for循环:
基本结构:
for 变量 in 序列 :
代码块
常用到range()函数,生成一个自然序列
while循环:
基本结构:
while 条件表达式
代码块
else:
代码块
可以使用break退出循环(包括else)
序列
Python分为可变序列(list)和不可变序列(str和tuple:元组)
列表:
使用[]创建,示例:my_list=[];my_list[10,20,30]
索引:获取my_list[1],可以为负数
列表的切片:列表[起始:结束:步长],获取一个子列表,步长:每隔步长的个数获取一个数据
修改:my_list[0]=50
通过切片修改:列表[第一个修改元素位置:元素个数:步长]
删除:切片删除:列表[第一个修改元素位置:元素个数:步长]
列表运算符:
+:拼接列表;*:重复指定次数;
in:检查元素是否在列表中
not in:检查元素是否不在列表中
len():返回列表长度
min():获取列表中的最小值
max():获取列表中的最大值
列表方法:
index():获取指定元素在列表中第一次出现的索引
count():统计指定元素在列表中出现的次数
append():向列表的最后添加一个元素
insert():向列表的指定位置插入一个元素
extend():使用新的序列来扩展当前序列
clear():清空序列
pop():根据索引删除并返回被删除的元素
remove():删除指定值得元素,有多个只删除第一个
reverse():反转列表
sort():排序,默认升序,降序要添加reverse=True参数
列表的遍历:
使用while 或者 for循环
for循环示例:
for i in list:
print("序号:%s 值:%s" % (i + 1, list[i]))
元组: 不可变序列,操作基本跟列表一至,不希望列表改变时使用
创建元组:my_tuple = () or my_tuple = (1,2,3,4),不为空时可以省略括号
字典: 相当于数据结构中的Map
创建:
d = {} or d = {key1:value1,key2:value2...}
or
d = dict(k1=v1,k2=v2)
or
d = dict([(key1:value1,key2:value2)])(子序列)
获取:d[key],get(key[,defaul]))
修改:
d[key] = newValue
or
d.setdefault(key,[,default])
or
d.update([other])
or
使用copy()函数修改字典值
删除:
del d[key]
or
popitem():随机删除一个键值对并返回
or
pop(key[,default]):删除元素并返回value
clear():清空字典
遍历:
keys(): for k in d.keys():
values(): for v in d.values():
items(): for k,v in d.items()
常用函数:len(),in,not in
***集合:***无序不重复的元素序列
创建:必须使用set()
常用方法:
set():创建集合
len():获取集合中元素的数量
in/not in: 在或不在
add():添加一个元素
update():将一个集合中的元素添加到当前集合
remove():删除集合中的指定元素
clear():清空集合
copy():对集合进行浅复制
集合运算:
&:交集
|:并集
-:差集运算
^:异或集运算
<=:是否为子集
<:是否为真子集
>=:是否超集
>:是否真超集
函数
基本:
基本语法:
def 函数名([arg1,arg2,arg3,...,argN]):
函数体
默认参数:
def powerofn(num, n=2)(n不传值时,默认为2):
不定长参数:参数个数不确定
定义方式:形参前加*
def avg(* num) :
函数体
返回值使用return返回
高阶函数:将另一函数作为参数的函数,或将函数作为返回值的函数
实例:
def getsum(x,y,fn):
return fn(x) + fn(y)
闭包:将内部函数作为返回值返回,内部函数使用到外部函数的变量
def make_averager();
面向对象
类:
结构:
class 类名([父类]):
公共属性...
#初始化方法
def __init__(self,...):
...
#其他方法
def method_1(self,...):
...
def method_2(self,...):
...
实例化类:
#创建一个类:
class Person:
类体
#实例化类
p = Person()
类的特殊方法:__methodName__,自动调用
封装
类的私有属性:一般情况下,__或者_开头的属性是私有属性
getter和setter方法:get_属性名/set_属性名
*self参数:只在类中的方法使用,对象本身,默认把对象本身
传给方法的第一个参数
property:将一个getter和setter方法转换为的对象的属性
getter方法:@property修饰,使用d.方法名
setter方法:@属性名.setter
继承:支持多重继承
class 子类(父类A,父类B)
多态:实现方式与java类似
isinstance(B,A)函数:判断B类是否是A类的子类
静态方法:静态方法使用@staticmethod来修饰
垃圾回收:python自带垃圾回收
模块: 在Python中,一个py文件就是一个模块
引入外部模块:
方法:
1.import模块
2.inport模块名 as 模块别名
3.from模块名 import 属性,属性(模块中的变量,方法,函数等)
4.from模块名 import *(引入模块的所有内容)
5.from模块名 import 属性 as 别名(引入单个属性时)
模块私有化变量:
使用_开头的变量
私有化函数:只在主模块执行,被其他模块调用时不需要执行,使用函数私有化处理,示例:
if __name__ == '__main__':
代码块
模块主函数:
每个模块都有一个__name__属性,通过这个属性可以获得模块的名字;
__name__为__main__的模块是主模块,直接通过Python执行的模块
异常:
结构:
try:
代码块(可能出现错误的语句)
except 异常类型 as 异常名:
代码块(出现问题后的操作)
except 异常类型 as 异常名:
代码块(出现问题后的操作)
else:
代码块(没出现异常的操作)
finally:
代码块(总会执行)
Exception是所有异常的父类,except后什么都不跟默认为捕获所有异常,
自定义对象需要继承该类
文件:
示例:
创建文件
#定义读取文件路径
file = 'myFile'
try:
obj = open(file, encoding = 'utf-8') #使用open()函数返回路径对应的文件对象
print(obj)
except FileExistsError:
print('文件找不到')
文件操作函数:
output = open(r'C:\file','w):创建输出文件(w指写入)
intput = open('data','r'):创建输入文件(r指读取,为默认值)
input.read(N):读取N个字节,默认为1
input.readline()/readlines():读取下一行到一个字符串/读取整个文件到字符串列表
output.write(aString)/writeLines(aList):写字节字符串到文件/把列表内所有字符串写入文件
close():关闭文件
output.flush():将输出缓存区的内容刷到硬盘中,但不关闭文件
anyFile.seek(N):修改当前文件位置到偏移量N处以便进行下一操作