目录
python注释
- 单行注释 #
- 多行注释 ‘’’ ‘’’ 或 “”" “”"
python变量
- python是强类型语言,变量命名会自行判断数据类型,是个动态类型的值
- 标识符声明:包含字母数字下划线不能以数字开头,不能为关键字
- 数据类型: number String bool list set tuple
- 布尔类型的值首字母大写 True False,可以参与整数类型的计算
- float转int不会损失精度
语言特性
- Python语言采用代码缩进的原理,默认缩进四个空格,可以利用tab或者空格键补全
- Python语言的代码执行体,不在{}里面,而是在:之后写代码的执行体
- Python语言里面执行代码的时候,不会按照由上到下的原则
新特性
- Python3.2以后不支持单一参数,因为单一参数不可以和变量属性进行赋值相匹配
- Python支持常量的重新定义操作
字符串(str)
- 命名规则(大驼峰命名法也叫帕斯卡命名法,小驼峰命名法)
- 类型转换int() float() str() bool()
- 下标与切片,如s[1:10:2] ,表示下标0-9,步长为2取字符。步长为-1表示倒序,切片顺序只能从前到后[-2:-5]返回为空
- 字符串函数:split() 不建议使用,会占用内存空间;title()将空格进行压缩,性能一般;capitalize()用来调整不规范的代码
- count()第三个参数只能为len函数
- split() 第二个参数 从0开始分割成1个字符串(分割0次)
- partition()以第一个遍历到的字符串为准
运算符
- / 取余,int/int=float
- % 取模
- // 整除
- ** 幂次方
- += -=用于循环结构居多,单独使用不建议
其他
- 空格和‘’可以占用内存,但是不参与计算;null 是一个数据类型的默认值,它可以释放内存,从而不消耗内存空间,建议使用;0 指的是具体的资源内存,可以参与计算
- {}存放变量名称和变量值,存放list 元祖 set集合,表示一个方法体,和Java的new构造器一个功能
- None 不会占用内存但是会让程序进行大量的执行,产生代码的可执行体,不要经常使用
- 键盘输入 input() 可以用于算法(贝叶斯,泰勒)
列表
[]就是一个内存空间,所以list可以再[]里面存放数据
列表里可以存放任意类型的东西
存放数据的核心 CRUD
列表的作用
- 存放数据,list存放数据是安全的,不能存放大数据的东西,例如 音频 视频 图片等
- list可以遍历数据库的结果集 ★
- list的底层原理是一个bean容器 ★
下标
- 下标是可以被改变的,更改下标对list的内存空间没有任何影响;主键一般不删除,删除会影响数据的性能
- 负数可以取list,也会越界
切片
- 如果切片的次数大于list里面的数据,程序不会报错,因为有无限大的内存
- [1:1]会将数据进行破坏
- 省略结束位置,一直截取到最后;省略起始位置,会从第一个元素开始
- 只包含开始索引位置,不包含结束索引位置
- 起始位置和结束位置全部省略,则相当于创建了一个列表的副本,尽量不要出现。
- :表示的是一个内存,如果没有起始位置和结束位置的定义,这个内存默认无限大,会导致大量的内存空间闲置,最后会导致程序、数据的空闲例程
- 步长不能为0,可以为负数,负数不建议使用,读写操作很慢,因为不确定数据的起始值和结束值(没有最大值和最小值)数据不好维护,会产生数据的垃圾碎片,导致数据的脏读
拼接
- 左边为主列表,右边为子列表
- 列表拼接之后就是一个完整的列表,将值默认存放到对应内存里面
- 列表遵守数据的先进后出
- *可以进行数据复制操作,重新分配内存,不建议使用 (数据的批处理)
函数
- in, not in 数据筛选操作(安全)
- max(),min()字符串不能参与运算,不能随意被更改
- count表示统计,并非计算,不推荐使用
- 通过index索引修改的数据只是在控制台给客户打印输出,不能将原始数据库数据进行修改;通过index修改元素并不影响原始数据的性能和数据完整性,也不会造成数据的脏读脏写;企业开发获取参数的值,获取数据库表字段建议使用index,操作安全快捷;常修改的数据不适合索引,后果 内存溢出、数据缺失(数据完整性)、给内存造成负载均衡
- del 关键字删除 只会删除元素内存里面的内容,并不会将数据内存的地址彻底删除
- insert() 顶部插入
- extend() 是动态参数的形式去获取列表元素(直接操作数据),拼接列表是通过 + 表示的是静态操作(不操作数据)
- clear() 清空内容,地址不变
- reverse() 基于客户端,并不会修改数据
其他
- String str = new String(“abc”) 产生了2个对象,一个在pool中(相同的字符串不会重复创建),一个放在堆中
- 线程安全:多个线程在操作过程当中,一个线程在执行的时候,另一个线程不能执行,采用了加锁机制,来保证数据的安全性,直到线程1结束释放CPU资源,线程2才可以执行;线程不安全:指的是多个线程在执行的过程中,抢夺CPU资源,最后导致服务器崩溃,数据泄露,线程发生死锁
- where 表示一个条件判断,降低数据库的性能;having 数据筛选操作
- tomcat+ngix集群+Hadoop(分析大数据)+solr(全文检索)+Redis(缓存数据库)非关系型数据库
- 遍历数据:for循环(for(参数1:参数2))、迭代器、foreach、…list
- 序列化作用:对数据的读写操作很快,IO直接读取二进制字节码
元组(tuple)
- 不可改变的列表。数据不改变时,使用元组,数据改变使用列表
- 元组使用小括号,列表方括号
- 元组不可重新赋值
- 元组赋值时可以省略括号,不建议使用,效率低;()表示是一个函数,表示一个可以带参数或不带参数的方法,效率高
- 元组的截取是通过list列表的切片机制操作
- example = (12) 值为12,内存执行的时候会按照内存12操作数据
删除
- del 元组名 和del函数功能一样
- delete只能操作表数据,但是不能操作表结构,也不能改变表结构;执行drop命令会将表和表数据彻底删除,会破坏表结构,造成内存溢出,数据很难维护
元组函数
- max() 取最大值,可以带多个参数将元素原样输出
- tuple(list) 强制类型转换
- 元组和列表的区别:列表是有序的可以改变值,元组是固定位置不可以改变值;元组的优先级大于列表;列表没有元组安全,也不易维护;元组的查询速度更快;对象的属性方法属于元组
字典(dict)
- 字典可变容器类型,可以储存任意类型对象
- {}表示键值对的写法,速度极快
- 键不可以重复,值可以重复
- 字典的键和数据库的ID主键原理一样
- 键一般用str,因为服务器传输数据用str
- 不建议通过key获取值,get()建议使用(通过映射关系)
- fromkeys可以处理海量数据
- 元组里面嵌套字典/列表,会引发值得不确定性
- keys底层其实就是实现一个like函数的查询方法,效率很低,不可以满足查询海量数据的操作
其他
- 括号合法定义([]) {[],[]}
- 多维元组定义 (),() [],[]
- 列表是特殊的元组,元组包含列表
- 调试BUG Ctrl+1
- 映射的作用:通过映射可以减少开发代码量,映射可以很好的将项目的业务进行关联维护
- like缺点:like查询数据会产生缓存;like操作数据的时候会将数据切片,数据可能不是很完整
条件
- 单独的if不建议使用
- 反复执行条件判断会对服务器造成压力,影响开发软件的性能
循环
- while容易造成死循环,不建议进行遍历大量结果集,建议使用for
- while else 中断循环,else终止循环回收有弊端(强制退出),建议使用break(安全退出)
- continue 建议使用
- in表示一个空间内存(将列表、元组、集合等数据放到in里面遍历),for循环的核心是in关键字
pass
- 如果没有想好业务代码需求,可以暂时不写任何代码,但是要用pass将这个代码区域占用
遍历
- 遍历结果集 list();元组;集合set,建议使用list
- list底层是链表,对数据解析安全,读取二进制字节码速度很快;list底层具有一种计数器/游标/指针,数据在内存一行一行读取,不发生数据的阻塞
- for和while也可以遍历函数自身的结果
其他(Java)
- 先概念模型(cdm),后物理模型(pdm),快捷键Ctrl + G
- 表设计:用户信息功能模块表(用户表,角色表,权限表),项目的功能业务表
- 微服务(SpringBoot,Springcloud)
函数(def)
- 函数能够提高应用的模块性和代码的重复利用率,容易维护,降低软件之间的耦合度
- 函数为变量赋值的效率高
- 函数参数:必备参数(位置实参),关键字参数,默认参数(不建议使用,解释器会将实参和形参混淆),不定长参数 参数类型一般是字符串
- *表示内存,类型是元组
- **类型是字典,在函数调用出直接赋值,效率高
- Java语言变量重新赋值会是用来两个不同的内存空间,Python重新赋值时,内存会丢弃,重新生成
- 可变类型:字典 列表
return
- return表示的是返回客户端浏览器的一行数据;return返回的永远是一个程序所控制的一个数据结果集;return以后的代码不再执行
- print表示的是只给客户端控制台打印输出结果,并非数据
- id可以打印地址,变量的值相同时,变量地址相同,节省内存空间,所以可以返回海量数据
- return一次性可以返回多个值,保存到元组里,不建议使用
迭代器
- yield只能返回一次,可以返回多个值,将函数或者变量作为一个生成器generator,返回一个迭代器对象
- 调用next方法将生成器里面的值按照游标的原理读取,iter方法没有前者效率高,next方法更加接近迭代器的迭代原理
yield函数会暂停并保存当前所有的运行信息,返回yield的值。并在下一次从当期前位置继续运行。 - 通过iter方法将数据从内存里面获取到,之后交给next方法去执行遍历结果集;先有iter再有next,iter方法和内存数据有关系,next方法和内存没有关系,操作是安全的
- send方法表示将当前的yield的值返回,不再进行执行next方法,操作不安全
递归
- range包括起始值,不包括结尾值
- 无穷递归函数:会将数据溢出,泄露核心数据
- 递归的核心思想 基线——将数据进行切片
高阶函数
- 接受一个活多个函数作为参数;将函数作为返回值返回
- 高阶函数在实际工作里大量使用,作为函数返回;高阶函数可以减少代码的重用性,避免大量的循环判断语句;让业务代码块之间清晰
内置函数
- reverse FALSE要进行逻辑判断,true直接返回
- round 第一个参数是浮点类型,金融项目和货币计算结合使用
其他
- 自增mysql auto increment,oracle 序列,所以oracle更适合做大数据
- sorted本质是克隆,不会影响内存数据
- 常见的设计模式,装饰 会话 单例 适配器 工厂 隐藏
- 装饰器:创建外部函数,创建内部函数,调用被扩展的函数,返回内部结果,返回新函数
- 面向过程:代码重用度低,不易维护;面向对象:重用度高,易维护,编写麻烦,不符合思维逻辑