a_good_name

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

python 基础

一.变量,常量

(1)变量的声明

1)a=1 b=2

2)a,b=1,2

  1. a=b=1

(2)交换

1)a,b=b,a (python独有)

2)通用方法 设置中间变量进行中转

(3)常量

字母全部大写的变量即是常量,表示不希望被修改,但实际可以修改

(4)命名规则

字母数字下划线,首字符不能为数字;变量命名须达意,不可使用关键字;大小字母有区分,不可使用汉字

二.基础数据类型

1.数字类型

(1)进制:

bin二进制, oct八进制, dec十进制, hex十六进制;

数字首字符为0b表示是二进制,0o表示是八进制,0h表示是十六进制

进制之间的转换,例如: a =123 转换二进制 bin(a) 八进制 oct(a) 十六进制 hex(a)

(2)原码反码补码之间的转换

正数:原码=反码=补码

负数:反码=原码取反 补码=反码+1 由原码=>补码

​ 反码=补码取反 原码=反码+1

(3)Number类型赋值方式

int 赋值 a=bin(2) b=oct(4) c=hex(54)

float赋值 a = 3.14 或者 a = 3.14e3 (相当于3.14*e^3) a 3.14e-2(相当于3.14 *(e^(-2))

complex赋值 a = 3+4j 或者 a =complex(3,4)

##转义字符 格式化输出 和 关键字

\ 可以使无意义的变得有意义,也可以使有意义的变得无意义
如\n换行 \\n就是输出\n
\n 换行
\r\n 换行
\t 一个缩进符
\r 将后面的内容提到当前行行首覆盖掉前面的内容

元字符串  r"D:\note" 原型化输出  如果不加r的话,系统会把\n识别为换行
repr 原型化输出 在输出内容两边加上单引号

格式化输出 % 引号里面是待格式化的内容, %s 字符串 %d 整型 %f 浮点数 %.2f 小数点后保留两位的浮点数
	格式: "%d" %(内容)  (如果将%d改为%2d表示预留两位,原字符串居右,%-2d表示预留两位,原字符串居左)
高级形式 format 
传参方式有:顺序传参,索引传参,关键字传参,关键字索引传参(即可以使用容器进行传参,使用字典进行传参时,字典的键系统自动添加双引号,不用再加双引号)
占位符: :s 字符串占位符	:d 整型占位符	:f 浮点型占位符	:, 金钱占位符
    格式: "{:*^10}".format(内容)
        ^原字符串居中 <原字符串居左 >原字符串居右
        *表示填充的字符
        10表示填充后原字符串与填充的字符串之和

双引号,单引号,三引号的区别和应用
双引号与单引号的意义功能完全一样,仅是为了避免系统识别出错,如str="他是'鬼'" 这样的字符串并不会报错,但如果将里面的单引号换成双引号,系统就会报错
三引号的作用是用来输入可以换行的字符串,在代码块外面时也可以用来表示注释
## 关键字 
type 查看所属类型 id 查看所在内存地址 len 查看长度
数据类型之间的强转
  1. int: 数据强转的对象只能是 int, float, bool, 纯数字字符串

  2. float: 数据强转的对象同int, 为int, float, bool, 纯数字字符串

  3. bool: 可以转换一切, 转换结果只有两种(True, False)

##其中bool结果为False的情况总共有十种,bool(0) bool(0.0) bool(0j) bool(False) bool("") bool(list()) bool(tuple()) bool(set()) bool(dict()) bool(None)

  1. complex: 转换的对象为 int, float, bool, complex, 纯数字字符串

命名方式有两种: a=complex(0,1) 其中1指的是虚部 或者是 a=0 + 1j

##数据类型之间的精度转化 complex> float> int > bool

2.容器类型:str, list, tuple, set, dict

字符串 和 列表 索引:

正向索引:从左往右,索引从0开始 反向索引: 从右往左, 索引从-1开始

##字符串和列表的切片(舍头去尾):

str[:] 当开始值,结束值缺省时,输出整个字符串

str[:3]当开始值缺省时,输出从开始到索引为2的元素

str[2:] 当结束值缺省时,输出从索引为2到结尾的元素

str[2:4]输出从索引为2到索引为3的变量

str[::2]第三个参数用于设置步长,2为步长

列表同字符串,仅需注意一点,列表可以修改,字符串不可修改

lst[2:4]=lst_new 把lst中索引为2到索引为3的元素替换为lst_new中的元素

lst[::2]=lst_new 把选中的数量替换为lst_new中的元素,注意lst_new中的元素必须与选中的元素的数量一样

##容器如何设置

lst = [] 空列表

tup = (,) 空元组 注意里面的元素是否是一个是区分元组的关键,当里面只有一个元素时,没有逗号就不是元组,添加上逗号才是元组

set = set() 空集合 注意不要和集合混淆

dic = {} 空字典

1)容器类型的特点

(1) str: 可获取, 不可修改, 有序, 组成元素只能是字符

(2) list: 可获取, 可修改, 有序, 组成元素类型不受限:happy:

(3) tuple: 可获取, 不可修改, 有序, 组成元素类型不受限😄

(4) set: 不可获取, 不可修改, 无序, 自动去重, 组成元素只能是可哈希的值😢(即number, str,tuple)

(5) dict: 键值对存储的数据 可获取, 可修改, 表面上有序, 实际上无序, 键只能是可哈希的值😢(即number, str, tuple), 值不受限😄

2)容器类型的强转

(1) str类型强转:

强转范围: 所有

强转方式: 直接在强转对象两边加上双引号即可

(2) list类型强转

强转范围: 所有

强转方式: 1) 字符串: 将字符串的每个元素单独抽离出来,逐一放进列表

​ 2) 字典 :强转时只保留字典的键

​ 3) 其他容器类型: 直接把容器两边的括号换成中括号即可

(3) tuple类型强转

强转范围: 所有

强转方式: 1) 字符串: 将字符串的每个元素单独抽离出来,逐一放入元组

​ 2) 字典 : 强转时只保留字典的键

​ 3) 其他容器类型: 直接把容器两边的括号换成小括号即可

(4) set类型强转

强转范围: 可哈希的对象

强转方式: 1) 字符串: 将字符串的每个元素单独抽离出来,逐一放入集合, 有相同的字符时会自动去重

(5) dict类型强转

强转范围: 二级容器, 且里面的元素只有两个

强转方式: 1) 外面是列表, 里面是列表或者元组时, 容器里面的第一个元素强转成键,第二个元素强转成值

​ 2) 外面是元组, 里面是列表或者元组时, 容器里面的第一个元素强转成键,第二个元素强转成值

​ 3) 外面是集合, 里面是列表或者元组时, 容器里面的第一个元素强转成键,第二个元素强转成值

接下来的两种情况并不推荐使用,因为限制性很大

​ 4) 外面是列表, 元组, 集合, 里面是集合时, 因为集合无序,所以提取到的键值极容易与原意不符

​ 5) 外面是列表,元组,集合,里面是字符串时,字符串的元素只能为两项,限制性很强

## 多级容器的获取

例如: res = [["1","2"],("a","b"),["aa","bb","cc",{"1":"aaa","2":"bbb","3":"ccc","4":"bingo"}]]

如何获取"bingo": res[-1][-1]["4"] 注意: 前面两个-1是反向索引的索引值,"4"是字典中的键值

##容器的拷贝

导入copy函数

copy.copy() 浅拷贝

copy.deepcopy() 深拷贝

浅拷贝只适用于有一层容器时,会把拷贝的内容存储到另一个空间中

深拷贝会把容器里面的所有内容都进行拷贝储存 所以耗用资源大,且调用更慢

当目标只有一层时,用浅拷贝,多层时,用深拷贝

3) 容器的增删改查:

(1) str
1)算数运算符

+(字符串的拼接), * (重复几次) \字符串的跨行拼接

2)关键字

capitalize 字符串首字母大写

title 单词首字母大写

upper 全部大写

lower 全部小写

swapcase 大小写反转

find 查找元素所在的索引, 找不到返回-1

index 查找元素所在的索引, 找不到报错

count 查看某个元素在字符串中出现的次数

startswith 判断是否以某字符串开头😄

endswith 判断是否以某字符串结尾😄

len 计算元素的长度

replace 更换字符串的元素

split 根据符号进行分隔

join 以某种符号进行连接

strip 去掉字符串两边的符号, 默认是空格

lstrip 去掉字符串左边的符号

rstrip 去掉字符串右边的符号

isspace 判断是不是由空格组成

isdecimal判断是不是纯数字(有小数点也不行)😄

isupper 判断是不是都大写

islower 判断是不是都小写

center 原字符串居中,填充字符串😠

3)进行切片处理
(2) list
  1. 可以使用算数运算符

+(列表拼接), *(列表重复几次) del lst[0] 删除索引为0的元素

  1. 可以通过切片进行操作

  2. 增:append 在列表末尾追加元素,

​ insert 插入元素(如:lst.insert(0,"11") 在lst列表中索引为0的地方插入元素"11" )

​ extend 迭代追加所有元素 lst.extend(lst_new)

删: pop 指定索引删除 lst.pop(0)

​ remove 指定元素删除 如 lst.remove("11") 如果有多个相同值,默认删除第一个

​ clear 清空列表

改: sort 排序,默认从小到大进行排序,reverse=False,从大到小排序lst.sort(reverse=True)

​ reverse 列表反转操作

查: index 获取元素对应的索引值,找不到会报错

​ count 查看某个元素出现的个数

(3) tuple 不可修改
(4) set

intersection()交集&

difference()差集 -

union() 并集 |

symmetric_difference() 对称差集 ^

issubset()判断是否是子集<

issuperset() 判断是否是父集>

isdisjoint() 检测两集合是否不相交,不相交返回True, 相交返回False

add 添加一个数据 update 添加多个数据

pop随机删除列表中的一个数据

remove 删除集合中指定的值

discard 删除默认值,不存在也不报错

clear 清空集合

frozenset 冰冻集合

(5) dict

增: fromkeys 使用一组键和默认值创建字典,不推荐使用,当键所指代的是一个列表时,会出现问题,其他键会重复对键的操作

删: pop() 通过键删除键值对 popitem删除最后一个键值对 clear 清空字典

改: update 批量更新,(有该键就更新,没有就创建)

查: get 通过键获取值,可以设置第二个提示参数,找不到第一项时就会提示第二项, 预防报错

dict.keys()键组成的可迭代对象 dict.values()值组成的可迭代对象 dict.items()键值对凑成一个个元组,组成的可迭代对象

3.判断数据类型

instance(lst,list) 判断lst是不是属于list, 属于返回True, 不属于返回False, 第二个参数可以是多项,只要有隶属的容器就显示正确

三. 运算符

1.算数运算符

+ - * /(除, 结果为小数点后有六位的小数) //(地板除, 结果是用退一法取到的整数) %(取余) ** (幂次方)

负数与非负数之间的运算: 7%-3=4 -7%3=-4 -7%-3=-4

2.位运算符

&且|或 ^异或 ~非 <<左移几位 >>右移几位

##位运算符都是对补码进行操作的,其中~非进行取反操作,所有都需要取反(包括第一个符号位)

优先级: (<< , >>) > & > ^ > ~

3.比较运算符

> < >= <= == != 返回的结果只有两种, True 或者 False

4.身份运算符

is / is not 判断是不是位于同一个地址

#下面只对python3.6版本负责

  1. int -5-无穷 内存地址固定

  2. float 非负数相同

  3. complex 纯虚数时相同

  4. bool 值相同时相同

  5. 字符串相同或者是空元组时,相同

5.成分运算符

in / not in 判断前者是否在后者里面, 后者只能为容器类型;且对于字典,只能判断键,不能判断值

6.逻辑运算符

not and or 优先级 : ()> not> and> or

逻辑短路现象: 即只判断了第一个就不再往后判断第二个的情况, 如: False and True, True or False

牢记从上到下,从左到右顺序进行的读码原则和逻辑短路的现象, 所以在判断逻辑运算符的时候可以基于上面两条进行判断,出现逻辑短路,输入逻辑短路那对应的类型(数字或者bool), 没出现逻辑短路,则看第二位对应的是什么类型输出对应的类型(数字或者bool), 如:

True and 1 => 1 1 and True =>True True and 0 => 0 0 and True => 0

False and 0 => 0 0 and False => False

1 or True => 1 True or 1 => True False or 0 => 0 0 or False => False

0 or True => True True or 0 => True

7.赋值运算符

= += -= *= **= /= //=

8.运算符的优先级

算>位>比>身>成>逻>赋 (谐音:蒜味比深城裸夫)

二元运算符的优先级要大于一元运算符的 (一元,二元的区分标准在于需要的参数是需要一个, 还是两个)

** 优先级最高, =优先度最低

三.代码运行结构

顺序结构, 分支结构, 循环结构

分支结构可以分为:单项分支,双项分支,多项分支和巢状分支

代码块: 执行特定功能的某一段函数

循环:while可执行死循环, for可遍历无序容器

##for 可遍历等长的多级容器

lst = [("王健林","王思聪","林宁"),["马云","马化腾","马丽"],["王宝强","马蓉","宋小宝"]]

for i,j,k in lst:

​ print(i,j,k)

循环体里面的关键字: break 跳出当前运行的循环体 continue 跳过本次循环 pass 占位符

range函数 range(开始值, 结束值, 步长) 留头去尾

四.文件操作

文件可以存储两种数据格式: 字符串 和 字节流

fp 文件io对象

字节流就是用来传输和储存的一种数据格式, 实际上就是二进制

多个字节组成的就是字节流

多个字符组成的就是字符串

表示: 在字符串外头前面加上一个b,转换成字节流 (必须属于ascii码才能进行转换)

将字符串和字节流进行转换: encode 编码(将字符串转换为字节流) decode 解码(将字节流转换为字符串)

格式

​ fp = open("文件名",mode="选择模式",encoding="编码方式"):

​ fp.close() # 这种打开方式,必须要配上这个关闭文件操作, 否则操作内容不会往磁盘中操作

​ with open("文件名",mode="选择模式",encoding="编码方式") as fp:#以这种方式打开文件只需缩进,不需专门关闭

​ with 可以用来同时开启两个文件,例如

​ with open("文件名",mode="模式",encoding="编码方式") as fp, open("文件名",mode="模式",encoding="编码方式")

编写模式

​ r r+ rb rb+

​ w w+ wb wb+

​ a a+ ab ab+

r 只读模式, 只可读取, 不可写入, 读取方式是从光标开始从左往右读取,即 当光标到结尾时,读取不到内容,需要通过seek回到开头进行读取

w 编写模式, 清空重写, 不可读取, 写入方式是从开头开始从左往右进行覆盖重写

a 追加模式, 不可读取, 写入时不论光标在哪, 直接移动到末尾进行编写

+ 功能加强符号, 即缺什么功能添加什么功能, 例如: w缺少读取功能, w+ 就会添加上读取功能

b 字节流模式,输入输出的都是以字节方式进行的, 模式中有b时,不需要添加encoding编码转换字节流, 否则会报错

fp.seek(0,0) 第一个0是指从右往左数,没有字节,第二个0是指定的读取方向,从右往左读取

fp.seek(0,2)第一个0是指从左往右读没有字节,第二个0是指定的读取方向,从左往右读取

fp.flush 刷新缓冲区

### 刷新缓冲区的时刻: 文件关闭时,缓冲区内容写满时,整个程序运行结束时,手动刷新时(flush)

fp.readable() 判断文件是否可读

fp.writable() 判断文件是否可写

fp.readline() 读取光标后面一行

fp.readlines() 读取光标后面的所有内容,将内容安装换行读取到列表当中

fp.writeline() 将内容是字符串的可迭代数据写入到文件中

truncate() 把要读取的内容读取出来,其他的清空重写(字节)

fp.writelines()

## truncate 单位 字节 seek 单位 字节

​ read 单位 字符个数(如果是字符串就是字符个数,如果是字节流就是字节个数)

​ readline 单位 字符个数(如果是字符串就是字符个数,如果是字节流就是字节个数)

编码方式

​ unicode 万国码,不论中文还是英文统统都占据4个字节,因为占用资源太大, 所以现在相当于被淘汰了

​ utf-8 万国码的优化版, 中文占据3个字节, 英文,数字占据1个字节

​ gbk 中国设定的一种编码格式, 中文占据2个字节

五.函数

格式: def func() def 定义函数 func函数名

函数名可以当成另一种变量,只赋值不执行,当函数名后面加上括号时,就是在进行函数的调用了

函数命名同变量命名: 字母数字下划线,数字不能当名头,命名须达意,不可为关键字,大小字母有区分,不要使用汉字

闭包函数 外部函数返回了内部函数, 且内部函数使用了外部函数的局部变量

高阶函数 返回了函数, 或者以函数作为参数

常用内置函数

###注意: 使用内置函数时,需提前输入函数所在的包,如import time

time函数

time.ctime 当前时间 年月日 星期几 时分秒

time.time 时间戳 (相对与1970年1月1日而言过的秒数)

datetime 函数

datetime.datetime.now() 可获取当前的年月日 时分秒

datetime.datetime.today() 可获取当前的年月日 时分秒

datetime.strftime 可设置输出的日期字符串的格式

random 函数

random.range() 从范围内随机选出一个数

random.randint() 从范围内随机选出一个整数

sys 包

sys.exit(0) 强制退出系统

sys.arvg 用于收集文件名后面的参数,并把参数存放到列表中

json模块

转换成json字符串 json_str = json.dumps(str)

json字符串解压 str = json.loads(json_str)

posted on 2021-06-10 19:51  a_good_name  阅读(614)  评论(0)    收藏  举报