变量及数据类型
Numbers数字分为:int整型,long长整型,float浮点型,complex复数
String字符串由数字、字母、下划线组成的一串字符,用于表示文本的数据类型
bool布尔型:True,False,用于做判断(True实际值是1,False实际值是0)
List列表,支持字符,数字,字符串以包含列表(即嵌套),用[]标识,有序对象
Tuple元祖,用()标识,不能二次赋值,可以理解成不可变的列表(只读列表),有序对象
Dict字典,用{}标识,由索引(key)和它对应的值value组成,无序对象字
简单的数据类型转换方法
- int(x)函数:将x转为整数,如果是四舍五入则是round(x)函数
- float(x)函数:将x转为浮点数
- str(x)函数:将x转为字符串
- dict(x)函数: 将x转为字典 #dic = dict(m = 10 ,n = 'aa', h = [1,2,3]) 或 lst1=[("a","fff"),("b","ggg")] →dic1 = dict(lst1)→{'a': 'fff', 'b': 'ggg'}
序列及字符串(list/str)
序列及通用操作
print(lst1+lst2) # "+":序列的链接
print(lst1*3,lst2*2) # "*":序列重复
print(lst[0],lst[2],lst[9]) # 索引从0开始,eg lst[2]中,下标索引是2,指向lst的第3个值
print(lst[-1]) # 索引-1代表最后一个值
print(lst[2:5]) # 切片可以理解成列表的值区间,且是一个左闭右开区间,这里lst[2:5]代表的区间是:索引2的值 - 索引4的值
print(lst[0:5:2]) # List[i:j:n]代表:索引i - 索引j,以n为步长
列表的特征
- 可包含任意类型的对象:数值、字符串、列表等
- 通过下标索引访问序列中的值 → 序列的顺序是不能改变的,通过索引来定位列表的元素
- 可随意变换列表长度,相当于随意指定新的列表
- 可嵌套
- 可原位改变
- 列表生成器:range()是生成器,指向了一个范围 #range(0,10,2)代表指向了0,2,4,6,8这几个值,最后的2代表步长
可变列表list常用操作
- list.append() 添加元素
- 添加多个元素用.extend()方法:用新列表扩展原来的列表(直接拓展)
- .remove方法:移除列表中某个值的第一个匹配项
- del语句:删除list的相应索引值
- lst.clear():移除所有值
- .insert(i,m)方法:在索引i处插入m,这里索引i代表第(i+1)个值
- .copy()方法:复制一个新的列表(分别指向两个列表) 与字典相同
- .sort():默认升序排序/字母顺序(参数reverse:反向排序,针对数字)
- 函数sorted() :排序并复制
字符串相关注释
- 双引号单引号无区别,但文本中有引号的时候要相互交替使用
- 需要多行字符串时候用三引号 ''' ''',""" """
转义字符
- \',\" :分别输出单引号,双引号
- \n:空行
- 输出\,所以文件路径用“/”或者“\\”
- 延伸-数据读写# 本地文件的界定:指向一个本地存储的文件,是一个链接或者一个映射
- path1 = 'C:/Users/Hjx/Desktop/text.txt' # 单个反斜杠:/
- path2 = 'C:\\Users\\Hjx\\Desktop\\text.txt' # 两个斜杠:\\(第一个\是转义符)
- path3 = r'C:\Users\Hjx\Desktop\text.txt' # r用于防止字符转义
序列通用功能
- in/not in :判断是否存在
- 文本连接:print('我很帅' + "没错"
- 文本复制:print('handsome '*4)
- .index()方法:print(st.index('g'))
- 计算字符串长度:len()
字符串的常用功能
- .replace(old,new,count):修改字符串,count:更换几个
- .split(obj):拆分字符串,生成列表
- .join():连接字符串,对象为列表
- .startswith(“xie”) 判断是否以“xie”开头;str.endswith (“xie”) 判断是否以“xie”结尾
- .upper() 全部大写
- .lower() 全部小写
- .swapcase() 大小写互换
- .capitalize() 首字母大写
- .isnumeric() 如果 string 只包含数字则返回 True,否则返回 False
- .isalpha() 如果 string 至少有一个字符并且所有字符都是字母则返回 True,否则返回 False
- .rstrip() 删除字符末尾的空格
- %s %i %f都是格式化字符串,s/i/f分别代表插入字符串的源数据类型:整型/字符型/浮点型
- %+.2f 输出两位小数并显示加号 %e %E
- %g 科学计数法小数位数少的时候自动识别用浮点数,数据复杂的时候自动识别用科学计数法
# 更强大的格式化方法.format print("User ID: {0}".format("root"))
print("{} 呵呵 {}".format("a","b"))
# {} 这里代表占位符,其中可以有数字也可以没有 print("{}{}{}".format('a','b','c'),'\n',
"{0}{1}{2}{0}".format('a','b','c'),'\n')
#print("{}{}{}{}".format('a','b','c'))
# {}和{0}的区别:都是占位符,后者有了明确指定 print("我的工作是{work}".format(work = '设计'))
# 也可以用变量来指示更强大的格式化方法.format
字典(dict)
字典的特点
- 键值对,一定共同出现,不能只有一个
- 不允许同一个键出现两次:创建时如果同一个键被赋值两次,后一个值会被记住
- key必须是字符串,value则可以是任意对象:数值,字符串,序列,字典
- 字典是一个无序集合,序列由于没有key来做对应,所以以顺序来对应值
- dic = {'var1':1, 'var2':'hello', 'var3':[1,2,3], 'var4':{'a':1,'b':2}}
- 任意添加元素:dic['var5'] = '添加一个值'
- 任意修改元素:dic['var4'] = '任意修改其中一个值'
- 任意删除元素:del dic['var1'] 删除字典 del dic
字典常用操作
- .update() 更新/合并一个字典,把第二个字典合并到第一个字典,改变了第一个字典
- .copy() 复制一个新的字典 与列表相同
- in / not in 判断是否包含,这里的判断对象是key
- len() 字典个数判断
字典的元素访问
dic = {'a':1, "b":2, "c":3}
print(dic['a'])
#print(dic[1]) # 不能用序列的索引方式
# 字典里面也就同样的意思,但字典没有顺序,以key来作为指向,所以指向的key必须存在 poi = {'name':'shop', 'city':'shanghai', 'information':{'address':'somewhere', 'num':66663333}}
print(poi['information']['address'])
# 对于嵌套字典,输出嵌套内容,通过重复指向来输出 print(poi.get('name'))
print(poi.get('type',print('nothing')))
# .get(key)方法:直接查看key的value,如果没有相应key则返回None,添加print参数可以多返回一个值 print(poi.keys(),type(poi.keys()))
print(list(poi.keys()))
# .keys()方法:输出字典所有key,注意这里的输出内容格式是视图,可以用list()得到key的列表,类似range() print(poi.values(),type(poi.values()))
print(list(poi.values()))
# .values()方法:输出字典所有values,原理同.keys()方法 print(poi.items(),type(poi.items()))
print(list(poi.items()))
# .items()方法:输出字典所有items(元素),原理同.keys()方法
字典的元素遍历
poi = {'name':'shop', 'city':'shanghai', 'information':{'address':'somewhere', 'num':66663333}}
#前三项输出key 后两项输出value
for key in poi.keys():
print(key) for keys in poi.keys():
print(keys) for values in poi:
print(values) for value in poi.values():
print(value) for values in poi:
print(poi[values])
条件及循环语句(if,while,for)
Python条件语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块
基础函数
- 输入函数 input() 注:input()返回结果都为字符串,如果需要变为数字则用到int()/float()
- 两种条件判断:if-else ------- 多种条件判断:if-elif-...-else
- 单语句多条件判断:or and 注: or(满足其1)and(同时满足)
- for循环 可以遍历任何序列的项目,如一个列表或者一个字符串。 (循环套循环,注意:尽量不要多于3个嵌套)
- while循环 执行语句可以是单个语句或语句块,判断条件可以是任何表达式,任何非零、或非空(null)的值均为true。当判断条件假false时,循环结束。 ---- -while-else语句
循环控制语句
- break:在语句块执行过程中终止循环,并且跳出整个循环
- continue:在语句块执行过程中跳出该次循环,执行下一次循环
- pass:pass是空语句,是为了保持程序结构的完整性
定义函数(def)
基础理解
- return语句退出函数,并返回一个表达式。不带参数值的return语句返回None
- 默认参数 可在定义f(x,y=2)设置默认参数
- 可变参数 f(*x) 加*则为可变参数 注:默认会把可变参数传入一个元祖
- 局部与全局变量:定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域。
- 局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问。调用函数时,所有在函数内声明的变量名称都将被加入到作用域中
- global x 将x定义为全局变量
- 匿名函数Lambda lambda作为匿名函数,是不需要函数名的 → 需要一个函数 如:f = lambda a,b,c:a+b+c 只能处理一行
模块与包
基础使用
- print(包.__file__)查看现有包所在路径
- 包名.path.append('C:/Users/Hjx/Desktop/') 改路径
- import 调用包 as 简化名
- 包. 使用包内函数
- from ... import ... 调用部分
基础模块
# python标准模块 —— random随机数 import random x = random.random()
y = random.random()
print(x,y*10)
# random.random()随机生成一个[0:1)的随机数 m = random.randint(0,10)
print(m)
# random.randint()随机生成一个[0:10]的整数 st1 = random.choice(list(range(10)))
st2 = random.choice('abcdnehgjla')
print(st1,st2)
# random.choice()随机获取()中的一个元素,()种必须是一个有序类型 lst = list(range(20))
sli = random.sample(lst,5)
print(sli)
# random.sample(a,b)随机获取a中指定b长度的片段,不会改变原序列 lst = [1,3,5,7,9,11,13]
random.shuffle(lst)
print(lst)
# random.shuffle(list)将一个列表内的元素打乱 # python标准模块 —— time时间模块 import time for i in range(2):
print('hello')
time.sleep(1)
# time.sleep()程序休息()秒 print(time.ctime())
print(type(time.ctime()))
# 将当前时间转换为一个字符串 print(time.localtime())
print(type(time.localtime()))
# 将当前时间转为当前时区的struct_time
# wday 0-6表示周日到周六
# ydat 1-366 一年中的第几天
# isdst 是否为夏令时,默认为-1 print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime()))
# time.strftime(a,b)
# a为格式化字符串格式
# b为时间戳,一般用localtime() %y 两位数的年份表示(00-99) %Y 四位数的年份表示(000-9999) %m 月份(01-12) %d 月内中的一天(0-31) %H 24小时制小时数(0-23) %I 12小时制小时数(01-12) %M 分钟数(00=59) %S 秒(00-59) %a 本地简化星期名称 %A 本地完整星期名称 %b 本地简化的月份名称 %B 本地完整的月份名称 %c 本地相应的日期表示和时间表示 %j 年内的一天(001-366) %p 本地A.M.或P.M.的等价符 %U 一年中的星期数(00-53)星期天为星期的开始 %w 星期(0-6),星期天为星期的开始 %W 一年中的星期数(00-53)星期一为星期的开始 %x 本地相应的日期表示 %X 本地相应的时间表示 %Z 当前时区的名称 %% %号本身
基础模块
数据读写
基础操作
- 本地文件的界定:指向一个本地存储的文件,是一个链接或者一个映射 (详情见序列及字符串-转义字符延伸)
- 读取:open('路径', '模式', enconding = '编码' )
- 模式:r:读取文件,默认;w:写入;rw:读取+写入;a:追加
- 简答的读取方法:.read() → 读取后,光标将会留在读取末尾
- .readline() 读取行
- 遍历前20个文件:for语句+f.readlines()[0:20]
- .seek(0) 移动光标 0初始
- .close() 关闭文件链接
- 在申明了目录之后,就可以直接输出文件名了 → 相对路径
# 存储:pickle.dump(obj, file, [,protocol]) import pickle data = {'a':[1,2,3,4], 'b':('string','abc'), 'c':'hello'}
print(data)
# 创建一个字典变量data pic = open( 'C:\\Users\\Hjx\\Desktop\\data.pkl', 'wb')
# 以二进制来存储:rb, wb, wrb, ab pickle.dump(data,pic)
pic.close()
# 将一个字典数据存成了pkl文件 # 读取:pickle.load(file) f = open( 'C:\\Users\\Hjx\\Desktop\\data.pkl', 'rb') st = pickle.load(f)
print(st)
# 直接读取pkl文件内的数据,该数据为一个字典储存和读取pkl文件
# 文件写入 - write path = 'C:\\Users\\Hjx\\Desktop\\test_write.txt'
f = open(path, 'w', encoding = 'utf8')
f.write('hello world!')
f.close()
# 执行后直接创建“test_write.txt”文件,并写入“hello world!” #写入列元素-.writelines(list)
path = 'C:\\Users\\Hjx\\Desktop\\'
f = open(path + 'test_write2.txt', 'w', encoding = 'utf8')
lst = ['a','b','c','d','e'] for i in range(len(lst)):
lst[i] = lst[i] + '\n' f.writelines(lst)
f.close()
# 通过遍历给每个元素最后加上"\n"写入/写入列
基础模块
# os模块:系统模块 - 常用命令 import os # 导入模块 print(os.name) # 输出字符串指示正在使用的平台。如果是window 则用'nt'表示,对Linux/Unix用户,它是'posix'。 print(os.getcwd()) # 函数得到当前工作目录,即当前Python脚本工作的目录路径。 print(os.listdir()) # 返回指定目录下的所有文件和目录名。 #os.chdir('C:\\Users\\Hjx\\Desktop\\' ) # 切换到目标路径
#print(os.getcwd()) #os.remove('text2.txt') # 删除一个文件 print(os.path.split('C:\\Users\\Hjx\\Desktop\\text.txt')) # 函数返回一个路径的目录名和文件名 print(os.path.exists('C:\\Users\\Hjx\\Desktop\\heheh.txt'))
# 用来检验给出的路径是否真地存在,这里不存在改文件故False,但路径存在故True
OS模块