Python学习笔记

目录

abs函数的用法       

 map函数

Zip函数

sum函数

浮点数 

不同数据类型运算规律

range函数返回值为range类型

循环模运算

字符串格式控制

对文件的读写

for-else语句

lambda函数

 LEGB原则

组合数据类型(表示多个数据的类型)tips

字典排序

datetime库

turtle库

运动指令

控制指令

一些繁杂的函数



Python是脚本语言(动态语言),通过解释器执行代码

abs函数的用法       

        1.取绝对值   (absolute)

        2.取模(turtle库,二维坐标系)

 map函数

map是python内置函数,会根据提供的函数对指定的序列做映射。

map()函数的格式是:map(function,iterable,...)
第一个参数接受一个函数名,后面的参数接受一个或多个可迭代的序列,返回的是一个集合。

map将函数参数依次作用在list中的每一个元素上,得到一个新的list并返回。注意,map不改变原list,而是返回一个新list。

类似的replace,reversed,sorted不改变原有迭代器,返回被改变后新的迭代器

这里注意sorted是函数(内为参数)  而sort是方法直接用.

reverse,sort直接改变原有迭代器,且无返回值

注意没有replaced函数

Zip函数

zip函数将多个可迭代对象转化为一个迭代器,对迭代器可以用for循环遍历提取,也可以用list转化为一个元组元素的列表

sum函数

iterable – 可迭代对象,如:列表(list)、元组(tuple)、集合(set)、字典(dictionary)。

start – 指定相加的参数,如果没有设置这个值,默认为0。

也就是说sum()最后求得的值 = 可迭代对象里面的数加起来的总和(字典:key值相加) + start的值(如果没写start的值,则默认为0) 所以,我所求的几个int值的和可以写成这样

>>>sum = sum([1,2,3])            6

如果我们加上start的话,应该是这样的

>>> sum = sum([1,2,3],5)        11

浮点数 

        1.必须带有小数点   

        2.科学计数法 写成<a> e <b> 形式 含义为a * 10 的 b 次方        e为实数10

        此外 浮点数在超过15位会产生误差,这与计算机本质上采用二进制运算有关\

        3.浮点数转为整数时,去掉小数位而不是四舍五入

如何精确运算浮点数?

        我们可以使用整数表达浮点数的方式。

        1.由于整数的运算是精确的,所以我们可以先用整数运算,再转化为浮点数。

        2.Python中可以通过标准库decimal(小数的),decimal提供了一个更精确的数据类型Decimal类型,并且可以使用getcontext(),prec = 精度参数 (context:上下文)来控制浮点数的位数,注意这里的总位数包括小数点本身,即小数点占一位,通过decimal.Decimal('小数字符串')来创建Decimal 小数类型

        3.涉及浮点数运算建议使用math库提供的函数,而不是Python运算符

        如:math.fsum([x1,x2,x3,......])对浮点数进行求和

                math.pow(x,y) 返回x的y次幂

                math.exp(x)返回e的x次幂,e为自然对数

                math.sqrt(x)返回x的平方根,注意也可以使用math.pow(x,1/2)

不同数据类型运算规律

        整数可以看作浮点数没有小数的情况,浮点数可以看作复数虚部为0的情况,所以运算结果按一下顺序靠拢

        整数 -> 浮点数 -> 复数

python中复数必须带括号不可省略 此外 复数为0 写为 0j  其虚部单位j不可省略 而且虚部如果是1不能省略,但实部为0可以省略

range函数返回值为range类型

        for i in range(65,97)和for i in  (65,97)有本质的区别!前者表示遍历范围,后者表示分别选取数值并操作

循环模运算

条件1.T>A

条件2.A自增

        如果A从0开始自增          A % T  返回的值范围为 [0,T-1]

字符串格式控制

引用符号       填充符         对齐方式         宽度         千分位分隔符              精度                     格式

:                  字符参数           <,>,^            整数                ,                 .精度位数(不包含逗号) f,%

 其中居中对齐也可以使用str.center(宽度,填充字符)函数

区分一下千分位分隔符是逗号

精度控制符是点

在使用千分位分隔符时必须要求字符串是整数

而使用其他控制符时可以是整数 也可以是字符串

字符串str() 如果含有表达式的先计算表达式 再转化为字符 直接加引号 对于列表也是直接加引号

而不是变成字符串列表

eval函数的参数只能是字符串 如果有字符串可以拼接 先进字符串拼接再去引号操作

同样的join函数和split函数的参数也只能是字符串或者字符串列表之类由字符串组成的

\0为转义字符,表示字符串的结束,在python中使用len函数遇到\0不会结束函数,\0视为1个长度

对文件的读写

对文件的逐行遍历

f.read(size)返回文件的所有内容,如果给出参数size则读入size长度的字符串或字节流

f.readline(size)返回文件的一行内容,如果给出参数size则读入size长度的字符串或字节流

f.readlines(hint)返回所有行为元素组成的字符串列表,如果给出hint参数则读入hint行

注意 read操作有readline(逐行读取) 但是 write操作没有writeline (逐行写入)

Python将文件本身作为一个行序列可以直接 for line in f 完成对文件行的遍历

f = f.open

f只是一个文件对象,对其内容的输出仍然需要f.read等函数来访问这个文件对象

单纯print(f)只是输出这个文件对象的相关信息!!!

w打开的文件不能进行读操作

对文件操作完成后,要关闭文件,才能保证所修改的数据保存到文件中

--------------------------------------------------------------------------------------------------------------------------------

JSON类型是 字典列表  [ {‘a’ : b}, {'c' : d} , ...  ]

csv类型是以逗号分隔数据,以行为单位,每行表示一个一位数据,多行表示二维数据,的纯文本格式!可以用记事本打开

导入csv数据到Python列表

对csv数据进行处理

f = open('bla/bla/bla/bla.csv','r')

list = []

for lien in f:

  line.replace('\n','')

  list.append(line.split(','))

f.close

csv转JSON

将csv转为Python列表格式后

用dump函数将Python数据类型转化为JSON类型,注意dump函数需要键值对

for i in range (0,len(list)):

        list[i] = dict(zip([标签1,标签2,...] , list[i] ))

json.dump (list , indent(缩进) = 4 ,sort_keys = True)

f.close

JSON转csv

使用load函数将JSON类型转化为Python数据类型,便于用Python操作

f = open('bla/bla/bla/bla.json','r')

ls = json.load()

for i in ls:

  fw.write(','.join(i) + '\n') 

---------------------------------------------------------------------------------------------------------------------------------

文件的写入

write(str)写入字符串或字节流

writelines()写入一个字符串列表的全字符串元素,每个元素间以+连接写入

write函数和writelines函数在写入后不增加换行

write操作没有writeline!!!

只能通过对文件行的遍历(for循环)结合write函数实现逐行写入

writelines写入一个字符串列表

readlines读取并返回一个字符串列表

由于文件写入后文件操作指针在写入内容的后面,所有我们使用f.seek()函数来移动文件指针

便于文件的打印输出

f.seek()的三个参数        0:文件开头        1:当前位置        2:文件末尾

str.split() 将字符串按照指定的分隔符分成多个子串,返回这个子串的字符串列表

单纯的对列表进行str转化得不到字符串列表,只能得到字符串

str.split(sep.maxsplit)

解释:

  • str:要进行分隔的字符串
  • sep:指定的分隔符,也可以包含多种分隔符。默认为None,表示所有空字符,包括空格、换行符“\n”、制表符“\t”等
  • maxsplit:可选的参数,用于只当分割的次数,最后列表中子串的个数最多为maxsplit+1。如果不指定或者指定为-1,表示分割次数没有限制。

str.join()

用来将列表(或元组,或字符串)中包含的多个字符串通过自定义的连接符(可以为空)链接成一个字符串。注意对象必须是字符串列表,字符串元组,或者字符串

newstr = str.join(iterable)

解释:

  • newstr:合并后生成的新字符串;
  • str:用于指定合并时的分隔符,如果想要以csv格式,用‘,’拼接
  • iterable:做合并操作时的源字符串数据,允许以列表、元组形式提供。

ste.find('目标字符串',开始位置索引,结束位置索引) 方法检测字符串中是否包含子字符串 str ,如果指定 beg(开始) 和 end(结束) 范围,则检查是否包含在指定范围内,如果包含子字符串返回开始的索引值,否则返回-1。

同样的

str.index('目标元素',开始位置索引,结束位置索引)

Python字符串index()函数将引发ValueError而find()函数将返回-1。 这是这些功能之间的唯一区别。

对字符串的查找可以替换为list

在for循环列表时,分为待遍历次数已遍历次数带遍历次数是由列表长度(待遍历次数)决定的,可以改变,但已遍历次数只会递增,如果在for循环中进行列表增删操作时,需要注意这个问题!

for-else语句

        Python特有的 for else语句

                当for循环正常执行且遍历结束后,程序会继续执行else语句中的内容。else语句的内容只在

循环正常执行并且循环遍历结束后,才会执行。因此可以在else语句的内容中放置判断循环执行情况的语句。类似于异常处理中的finally语句,但finally无论是否正常运行均会执行

                continue则是跳过循环中位于continue下方的代码,继续执行下一次循环,此时循环未必结束

同样的Python还有 while else语句

lambda函数

        lambda函数返回函数类型,因此我们使用lambda函数是为了快捷灵活地创造函数,使用lambda函数后返回函数类型,用一个变量去接收这个类型,再去调用这个函数类型变量,或者写在表达式里作为自定义功能

比如对字典的排序可以用到lambad函数

对于序列类型如列表含有多个数据需要传参时,不用遍历列表去传参,直接将列表打包传参

f(*list)

 LEGB原则

局部-嵌套-全局-内置模块

        对于内部外部重名的变量,函数优先考虑自身包含的变量,如果对其进行修改,函数结束后变量内存空间被释放,所以全局变量没有改变!

由于代码是自上而下,从左到右执行的

对于已经定义的全局变量x

如果在函数内

如 x = x + 1 其含义为 先访问这个全局变量然后尝试去修改这个全局变量

由于只能访问不能修改所以会引发UnbondLocalError

注意

        对于列表类型,由于Python中的列表类型必须赋值才能真实的被创建(与c语言不通,c语言的数组需要事先定义好数量和类型,因此c语言中数组已然被创建,而python中只是引用,两者概念不同),因此在函数内部对空列表进行追加时,由于赋值了元素,因此导致列表的真实创建,进而对列表实现了'修改',我的理解是类似于c语言的数组名指针

组合数据类型(表示多个数据的类型)tips

序列类型

字符串,元组,列表,均可使用切片和索引以及len()函数,in,not in操作

列表可以用切片赋值

字符串是不可变的,因此对字符串的所有的元素赋值和切片赋值都是非法的 ! ! !

python中元组的圆括号是可选择的 比如 a,b = b,a 实质上就是两个元组的赋值而已 !

对序列类型使用索引超出范围会报错但使用切片则会返回其对应的空类型! !  如字符串返回'',列表返回[],元组返回()

集合类型

  1.  无序,输出时顺序不固定且与原先数据不一致 字典是特殊的集合 同样无序
  2. 不可重复(可以用来去重)
  3. 元素类型为不可变类型(元组,字符串,整数,浮点数等),列表,字典和集合本身都是可变数据类型(不能进行哈希计算)这些不能作为集合元素。

使用set(任何组合数据类型)函数生成集合(也可以进行数据类型转化),

而不是{},这是生成字典的方法,同样的也可以使用tuple(),dict(),list()函数进行创建数据类型或转化

对字典进行列表类型的转化时 只是对字典的键进行操作而舍弃了值

字典类型(映射类型)

  1. 字典的get(key,返回值),和pop(key,返回值) 其返回值可自定义
  2. 字典的键值为不可变类型
  3. 字典无序

        如d = { [1,2] : 1 }错误        d = { (1,2) :1 } 正确        d ={ 1 : [1,2] }正确

       字典的修改通过中括号的访问和赋值实现,键存在则修改对应值,键不存在则创建新的键值对。而d.get和d.pop方法只能进行访问,没有修改作用,其第二个参数是人为规定的不存在时的返回值,用来更好的处理访问的结果,如果存在返回对应的值

pop的参数只是键名,而del函数需要通过中括号索引的方式删除

字典排序

d.items   d.keys    d.values   均为dict_类型

需进行类型转化 list()函数 因为字典不可变 所以为 列表元组

转为列表类型后可对字典进行排序操作 如sorted方法或sort方法

这里重点介绍一下sort方法中的参数key

key – 是一个函数,用来选取参与比较的元素。

因此可以用匿名函数进行选参 , lambad x : x[0] 意为在迭代中对每个被迭代的元组选取第一个元素 key值 同样的 1 就意味着第二个 value值

函数在传参时是单向一次性的值传递,不可以重复传参

datetime库

datetime

import datetime

t = datetime.now

注时间戳是字符串而不是浮点数 这样才能格式化输出

t_now = t.strftime ('%Y %m %d %H %M %S')

print(t_now)

这个如果要用的话可以说是固定模板了

turtle库

运动指令

控制指令

 注:

turtle.color 两个参数 一个是画笔颜色 一个是填充颜色

turtle.pencolor 一个参数 设置画笔颜色

turtle.fillcolor 一个参数颜色 可以是字符串 也可以是rgb元组  (配合begin_fill和end_fill使用)

一些库函数

chr(x)返回Unicode编码x所对应的 单个字符

ord(x)返回单个字符x所对应的 Unicode编码

python本身没有可以判断小数的函数故先用replace去掉小数点再判断是否为数字

str.isdigit()判断数字,只有此函数判断byte数不会报错

str.isnumeric()可以判断汉字数字

str.isdecimal判断数字,

math库

math.fsum([x1,x2,x3,......])对浮点数进行求和

math.pow(x,y) 返回x的y次幂

 math.exp(x)返回e的x次幂,e为自然对数

math.sqrt(x)返回x的平方根,注意也可以使用math.pow(x,1/2)

jieba库

jieba.lcut(str)精确模式,返回的分词能够完整不多余地组成原始文本

jieba.lcut(str,cut_all = True)全模式,输出原始文本中可能产生的所有词语组合,冗余性最大

jieba.lcut_for_search(str)搜索引擎模式,该模式首先行执行精确模式,然后再对其中的长句子进一步切分获得结果

jieba.add_word(word)向分词库添加自定义词

PIL(pillow)库

图像的本质是有规则的二维数据所以可以用np.array转化为二维数组

from PIL import image

Image.open(文件路径)

Image.fomat

Image.mode

Image.size

Image.save(文件名,格式)参数均为字符类型

Image.convert(格式)格式参数为字符类型参数有真色彩图像'RGB' , 灰度图像'L' , 出版图像'CMYK

Image.getpixel(x,y)获取(x,y)坐标对应的像素值(RGB为三元素元组,灰度值为单元素元组,范围均为0~255)

r,g,b=Image.split()获得rgb通道,返回图像副本

r.point(func)根据func对每个元素进行运算返回图像副本

Image.merge(g,b,r)根据新的色彩通道生成新图像

Image.fromarray()将array转化为Image

json库

json.dump(obj,sort_keys=False)将Python数据类型(字典键值对类型或者每个元素为二元元组的列表等)转化为JSON格式,sort_key参数为按key值排序,因为Python中字典列表无序

json.load(str)将JSON格式转化为Python数据类型

numpy库

np.array(Python列表或元组或Image对象)创建数组,副本

np.asarry()同array,只不过是直接cut过去而不是copy,cut过去的数组会随着输入的改变而改变。

np.uint()将数据转化为整数类型可以是数组

np.linespace(s,e,sep) 返回一维数组,三个参数代表开始值、结束值(默认包括)和步长(s到e均分为sep-1个元素的数组)

np.concatenate( (数组1,数组2) )将两个数组进行拼接

matplotlib.pyplot库

主要使用matplotlib.pyplot字库

import matplotlib.pyplot as plt

正确显示中文字体

matplotlib.rcParams['font.family'] = 'SimHei'

matplotlib.rcParams['font.sans-serif'] = 'SimHei'

plt.subplot(行数,列数,区域)在全局绘图区域中创建子区域,当子区域不超过9时,三个参数可以连写,行数列数代表分割线

plt.plot(x,y,lable,color,width)根据x,y数组绘制直线,曲线

plt.bar(x,width,height,lable)  绘制条形图

  1. x:表示x坐标;
  2. height:表示柱状图的高度,也就是y坐标值,数据类型为int或float类型;
  3. width:表示柱状图的宽度,取值在0~1之间,默认为0.8;

plt.pie(x,explode,labels,colors)绘制扇形图

  1. x即每个扇形的占比的序列或数组
  2. explode如果不是None,则是一个len(x)长度的数组,指定每一块的突出程度;突出显示,设置每一块分割出来的间隙大小
  3. labels为每个扇形提供标签的字符串序列
  4. colors为每个扇形提供颜色的字符串序列

plt.title()设置居中标题

plt.figtext(x,y,str)在(x,y)坐标设置文字

plt.lengd()放置图注

plt.fill_between(x,y1,y2)填充两条曲线围成的多边形

plt.thetagrids(angles,labels)

  • Angles:

    将角度设置为theta网格的位置(这些网格线沿theta尺寸相等)

  • labels:如果不是None,则为len(angles)或在每个角度使用的标签字符串列表。

至此Python学习暂告一段落,特此留念~

Life is short,use python.

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值