文本文件的打开分为两种模式:文本模式 、二进制模式 通常,对 文本文件 都是以 文本模式 打开。程序读取 和 写入 的都是 字符串 对象。 一、 open 函数1. open 函数的参数 open 函数的参数: 123456789open( file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, ) 参数 file 指定需要打开文件的 路径 可以是 相对路径 也可以是 绝对路径 参数 mode 指定文件打开的 模式 r :只读文本模式打开,默认模式 w :只写文本模式打开 a : 追加文本模式打开 默认值为 r 参数 encoding 指定读写文本文件时,使用的 字符编解码 方式 未指定参数值时,会使用系统缺省字符编码方式(中文windows系统上使用的是 cp936,也就是 GPK编码 2. 文件读写模式 模式 可做操作 文件不存在时 光标位置 是否覆盖 ...
面向对象1. 面向对象面向对象都有两个基本概念, 分别是 类 和 对象。 面向对象的三大特征: 继承: 即一个派生类(derived class)继承基类(base class)的字段和方法。 继承允许把一个派生类的对象作为一个基类对象对待。 一个 Dog 类型的对象派生自 Animal 类 多态: 指对不同类型的变量进行相同的操作,它会根据对象(或类)类型的不同而表现出不同的行为 封装: 将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体(即类) 封装的目的是增强安全性和简化编程,使用者不必了解具体的实现细节,而只是要通过外部接口,一特定的访问权限来使用类的成员。 2. 类的定义和调用2.1 类的定义语法格式: 12class 类名(): ... 12345class ClassA(): var1 = 100 # 类变量 def fun1(): # 类方法 print("hello fun1") 2.2 调用类属性和类方法 类中的变量叫属性 —-> 调用格式: 类名.属性名 类中的函数叫方法 —-> 调用格式: ...
函数1. 函数1.1 自定义函数def 关键字 表示定义一个函数。1234# 定义函数def 函数名(参数1,参数2,...,参数 n): 函数体 return 函数体中的返回值 当需要调用定义的函数时,使用 函数名() 来调用。(先定义,后调用) return [表达式] 结束函数,选择性地返回一个值给调用方。 不带表达式的 return 相当于返回 None。 123456def sum(num1,num2): "两数之和" return num1+num2# 调用函数print(sum(5,6)) # 11 1.2 函数的返回值 函数的返回值 return 语句不是必须的,但是如果没有 return,函数的返回值是 None 函数中可以出现多个 return ,但必须位于不同的分支,否则后面的 return 无效 return 后面的表达式,可以返回任意类型的对象,包括:字符串、数字、列表、元组、字典等。 函数返回值一次返回多个时, 返回的数据类型是元组, 函数要返回结果,就必须要使用 return 关键字,后面加上返回的结果对象 ...
条件语句、循环语句1. 条件语句 在判断语句的结果不是不是 0 或者 False 或者 ‘’ 或者 None 时,那么都视为真 Python 语言中,使用 缩进 来判断代码的层级 可以使用 input() 函数来接收键盘输入。 1.1 if…else 语句使用 if...else 进行判断,满足条件则执行 if 下的代码,不满足则执行 else 下的代码 Python 中,if 语句的基本形式如下: 1234if 判断条件: 执行语句...else: 执行语句... if 语句的判断条件可以用>(大于)、<(小于)、==(等于)、>=(大于等于)、<=(小于等于)来表示其关系 123456results = 59if results >= 60: print('恭喜你,考试通过')else: print('很遗憾,考试未通过') 非零数值、非空字符串、非空 list 等,判断为 True,否则为 False 123num = 6if num: print('num 不 ...
浅拷贝和深拷贝拷贝需要导入 copy模块 1、赋值:简单地拷贝对象的引用,两个对象的id 相同。2、浅拷贝:创建一个新的组合对象,这个新对象与原对象 共享 内存中的子对象。3、深拷贝:创建一个新的组合对象,同时递归地拷贝所有子对象,新的组合对象与原对象没有任何关联。 浅拷贝浅拷贝:是指创建一个新的对象,其内容是原对象中元素的引用。(拷贝组合对象,不拷贝子对象) 方法:copy.copy() 浅拷贝 等价于 切片[:] 使用浅拷贝时,子对象共用(list1 的子对象改变时,list2 的子对象也会改变) 123456789import copylist1 = [10, 20, 30, [40, 50]]list2=copy.copy(list1)print(list2) # [10, 20, 30, [40, 50]]# 修改了list1的值,list2中的值也会跟着改变list1[-1][0] = 60print(list2) # [10, 20, 30, [60, 50]] 深拷贝深拷贝:是指创建一个新的对象,递归的拷贝原对象所包含的子对象。 方法:copy.deepcopy ...
列表与元组1. 列表(list)1.1 定义列表类似于 Java 中的数组,但是它更强大,可以存放 任意 数据类型。 列表的内容 可以改变,字符串的内容 不可改变,如果需要改变则需要重新赋值。 123456# 定义一个空列表nameList = []# 列表可以存放 任意 数据类型a = [1, 2, 3.14, 'hello', [7,8,9] ] 1.2 切片列表可以用元素索引的方式取出里面的元素; 也可以用切片操作 截取一部分内容生成 新的列表。列表的 索引和切片操作和 字符串是 类似的。 列表切片后得到的结果仍然为 列表。 列表切片后得到的是新列表,原来的列表不变。 1234567a = [1, 2, 3.14, 'hello', [7,8,9] ]print(a[3]) # 3.14print(a[-1]) # [7,8,9]print(a[3:]) # ['hello', [7,8,9] ]print(a[-1][:2]) # [7,8] 1.3 增、删、改1.3.1 增 使用 append添加值到列表的 ...
一、线程 线程是由进程创建的,线程就是进程的实体 线程可以分为单线程 和 多线程 单线程: 同一时刻,只允许执行一个线程; 多线程: 同一时刻,可以执行多个线程; - 并发: 同一时刻,多个任务交替执行,单核 CPU 实现多任务并发; - 并行: 同一时刻,多个任务同时执行,多核 CPU 可以实现并行; - 并行 与 并发 也可能同时存在 1. 线程使用创建线程的两种方法: 继承 Thread 类,重写 run 方法; 实现 Runnable 接口,重写 run 方法; 继承 Thread 类,创建线程: 主线程结束后,子线程任然在执行时,进程不会结束; 调用 run() 方法并不会启动线程,而且会造成主线程阻塞 调用 start() 方法可以启动线程,不会造成线程阻塞,主线程和子线程会同时执行 1234567891011121314151617181920212223// 继承 Thread 类 - 案例public class Thread01{ public static void main(String[] args) { ...
一、绘图坐标体系 坐标原点位于左上角,以像素为单位; 坐标原点(0,0): 第一个是 X 坐标,表示当前位置 水平 方向距离原点 X 个像素; 第二个是 Y 坐标,表示当前位置 垂直 方向距离原点 Y 个像素; Graphics 常用方法: 画直线 drawLine(int x1, int y1,intx2,inty2) 画矩形边框 drawRect(int x,int y, int width, int height) 画椭圆边框 drawOval (int x, int y, int width, int height) 填充矩形 fillRect (int x, int y, int width, int height) 填充椭圆 fillOval (int x, int y, int width, int height) 画图片 drawImage (Image img, int x, int y, …) 画字符串 drowString (String str, int x, int y) 设置画笔字体 setFont (Fon ...
一、反射(reflection) 反射: 加载完类之后,在堆中会产生一个 Class 类 对象(一个类只有一个 Class 类对象),这个类对象包含了该类的所有信息。 通过这个类对象,可以操作该类的所有方法或属性; 反射相关的主要类(反射中, 万物皆对象): java.lang.Class 代表一个类 Class 对象表示某个类加载后再堆中的对象 java.lang.reflect.Method 代表类的方法 Method 对象表示某个类的方法 java.lang.reflect.Field 代表类的成员变量 Field 对象表示某个类的成员变量 java.lang.refect.Constructor 代表类的构造方法 Constructor 对象表示构造器 12345678910111213141516171819// CatDemo1.javapublic class CatDemo1 { public String name = "波斯喵"; public CatDemo1() { ...
一、 协程(Coroutine)技术1. 基本用法线程 :又叫 微线程 、 纤程 协程是一种用户级的轻量级线程 。 协程 拥有自己的寄存器上下文和栈。 协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来时,恢复先前保存的寄存器和栈。 优点: 协程极高的执行效率。 因为子程序切换不是线程切换,而是由程序自身控制,因此没有线程切换的开销,和多线程比,线程数量越多,协程的性能优势就越明显。 不需要多线程的锁机制 只有一个线程,也不存在同时写变量冲突,在协程中控制共享资源不加锁,只需要判断状态就可以,所以执行效率比多线程高很多。 缺点: 无法利用多核资源 协程的本质是个单线程,他不能同时将 单个 CPU 的多个核用上,协程需要和进程配合才能运行在多 CPU上。(适用于 CPU 密集型 应用) 进行阻塞(Blocking) 操作(如 IO 时)会阻塞掉整个程序 2. geventgevent :一个现在很火、支持也会全面的 Python 第三方协程库。 由于切换是在 IO 操作时自动完成,所以 gevent 需要修改 Python 自带的一些标准库,这一过程在启动时通过 ...