Py修行路 python基础(六)前期基础整理

计算机中,有且仅有CPU具有执行权限,能够执行指令的只有CPU!

人在应用程序上输入的文字或文本,叫做明文!

在屏幕上输入或是输出的是字符,计算机保存的是 有字符编码的 二进制数。

变量赋值规则:例如:a=1

先在内存中开辟一块空间,存放数1,内存上会有一个相对应的id号,然后变量a指向这块内存区域和id号,python编译器有垃圾清除的功能,若开辟的这块内存区域一段时间内不调用,数据就会被清除,为其他的数据腾空间。

python2 容错率高,自作聪明的完成转码拼接。

python3 将字节类型和字符串类型完全清晰的分开了,如果不同类型拼接,会报错!

 

#字符编码

ASCII码:127个数字:7个比特位 ----------->美国

扩展ASCII码: 256个数字:  8个比特位 --------->拉丁

中文扩展ASCII码(GB2312):几千个状态----------> 中国

中文扩展ASCII码(GBK):两万个状态----------> 中国

unicode(明文:二进制数字):两个字节 ------------>六万多个状态 -------全世界

utf-8(二进制对应二进制):-------全世界

 

py2.X 中        str : bytes数据         unicode:unicode编码后的二进制数据

py3.X中        str  : unicode(u)      bytes :bytes(b) <存储和传输时使用>

知识点:

1、unicode(2个字节,万国码),utf-8(可变长的编码,英文1个字节,中文3个字节),GBK(2个字节)都是编码方式。

2、内存存储unicode 格式的二进制数据(可理解为文件)。

3、文本以utf-8等编码方式将内存中unicode编码的文件保存到硬盘之中。utf-8格式下的存储文件占空间小。

 repr():查看字节数据

不同形式的编码,前边都有标志(unicode 对应u)

 

decode(参数):参数:指解码规则!(解码)

encode(参数):参数:指编码规则!(编码)

 

python2 容错率高,自作聪明的完成转码拼接。 

python3 将字节类型和字符串类型完全清晰的分开了,如果不同类型拼接混用,会报错!字符串中可以使用的方法对字符串或是字节数据是一样的操作!

 

IDE编译器执行没问题,但不一定终端执行没问题,可以先在IDE上执行测试,将输出的数据改成unicode 格式,在终端测试,再一种是先判断终端是哪种格式的编码,改IDE编译器的编码格式 #coding:****  ***代表编码规则,再在终端上判断测试。

 

注意点:

1、unicode,utf-8,GBK 都是编码规则。

2、为什么内存存储unicode。

任何数据执行都先放到内存中,编码和解码都是在文件执行的过程中完成的操作。

 

编码:明文 ----------->二进制数据

解码:bytes数据 ---(解码方式)-----> 二进制数据

 

对象.方法()  <对象一定对应着可以调用的方法!>

 

#变量

1、不能以数字,特殊字符开头,  下划线_可以使用,在命名之中。

2、不能以关键字命名

 

缩进  及控制块。if,循环,函数!

注释:#或是三个‘‘‘’’’或“““”””

#运算符:

算术运算符:+  -  *  /

赋值运算符: =  +=  -=  *=  /=

比较运算符:==(等于) >=  <=  !=   比较结果,返回布尔值!(一定是布尔值!)

逻辑运算符: and(与)  or(或)  not(非)

True and False  -------> False      False and False ----------> False

判断会一个一个去执行判断,从第一个开始;

or 取决权在第一个符号,某件事将结果决定了,就会按照决定值返回;而and相反,取决权在后边的符号:若第一个对了,会往后再判断,以最后起作用的返回值为准。

 

关系运算符  in  not in   是不是属于同一个对象,返回布尔值!

位运算符  

 

#数据类型

整型  int   仅有一种表达方式,叫长整型。

可变数据类型:列表,字典

不可变数据类型:整型 元组 字符串  -----------> 一旦创建,不能修改

浮点型  float (f),科学技术法   E代表10的负一次方  0.000123   1.23e-4

folat   double     精度不一样

布尔值 其本身就是一个数据类型(True = 1 False = 0),可做计算。

 

流程控制

 

#字符串(string:)

s='let\'s go'  \转义符号

原生字符串 print(r"\fsjiaakdxie.")

 

查找 :切片 [:]

s1 = "hello world" print(s1[1:4])  print (s1[1:4:2])

.strip(“参数”)  把字符串开头和结尾的空格以及\n去掉。参数可以是任何一个字符结构。

 

拼接方法 

+方法   s="hello"+"world"  效率的高低,取决于拼接文件的个数。两个拼接之后再去开辟内存空间存储合并之后的数据。以此类推。

join 方法   "*".join(["I","am","world"])以*为间隔,将字符串拼接在一起。右边是列表格式的字符串,整型不能改变,所以拼接不了!

分割方法

"字符串".split("分隔符",最大分割数)   s="hello world".split(" ")   以空格为分割符将字符串分开,生成一个列表。以某个分割符来分割的话,结果中分隔符不会留下。

. rsplit() 对字符串从右往左分割!

.splitlines()  对字符串根据换行符进行分割。

 

查找字符  find()   找不到不会报错

print("hello world".find("l"))   从左往右查找,找到一个就返回索引值

print("hello world".rfind("l"))   从右往左查找,找到一个就返回索引值

print("hello world".find("l",3))   从左往右 索引为3的位置 查找,找到一个就返回索引值。

print("hello world".index("l"))   从左往右查找对应字符的索引值,找到就返回,找不到就报错。

 

替换

print("hello world".replace("world","python"))   完全匹配,一对一的去匹配,只要一个字符匹配不上就会报错。

 

对 字符串 这种不可变数据操作,都会有一个返回值,原字符串不会发生改变。

 

大小写互换

print("Hello world".swapcase())  大写变小写,小写变大写!

首字母大写

print("Hello world".capitalize())   字符串开头,第一个字母大写!

标题

print("Hello world".title())   字符串,第一个单词的首字母大写!

"hEllo woRld".upper()  不管字符串中有没有大小写,全部变成大写!

"hEllo woRld".lower()  不管字符串中有没有大小写,全部变成小写!

 

位置对齐

print("hello world".center(50,"*"))  居中显示hello world,所有文本占50个字符,其他空白位置由*填充。

print("hello world".ljust(50,"*"))  左对齐

print("hello world".rjust(50,"*"))  右对齐

 

.zfill()  占多少个字符,多出来的补零。字符串靠右。

 

字符串的格式化输出 .format()  字符串中填充的位置和后边添加的字符串,是一一对应的关系。

 

.format_map() 括号中存放的才是字典。

 

print("hello %s,%s"%("sb","egon"))

占位符

%s 字符串

%d 整型

%f 浮点型

 

判断字符串是否是数字

"12".isdecimal()

"-12".isdigit()

"34".isnumeric()  针对性很强,对于汉语中的数字,也可以识别

print 输出,返回布尔值。

 

占空格

"hEllo\twoRld".expandtabs()  默认8个空格,作用于\t ,若是想错开多点,在后边括号内输入想扩展的数字。

 

is开头的都是判断函数,对字符串操作完之后,会返回布尔值,对就是True,错就是Flase.

 

列表      可迭代对象: 能够进行for循环的

#创建形式  l = [ 1,"hello",[4,5],{"name":"egon"}]

l2 = list([])  []叫做序列,要放到列表中的元素总结起来。

 

#查: 切片[:]

   拿到列表的索引值及对应的元素。

第一种方法:利用标志位

count=0 

for i in [11,22,33]:

    print("%s---------%s"%(count,i))

count+=1

 

第二种方法:

l = [11,22,33]

for i in l:

    print(l.index(i),i)

 

第三种方法:enumerate() 函数 自动生成序号和值

l = [11,22,33]

for i,v in enumerate(l,1):  #函数后可以自定义序号。

print(i,v)

 

#增加    此操作没有返回值!

l.append()   追加,在最后一个位置添加,每次只能添加一个对象!!!

添加多个元素:l.extend()  

可以添加多个元素,中间用,分开,或是放个列表。l.expend([7,8])

指定位置添加插入:  .instert(位置,元素)  例子:l.instert(2,"zhang")

 

#删除

通过位置删除:l.pop()  默认删除最后一个,可以指定位置。  有返回值!!!,返回值为删除的元素。

删除某个具体内容:l.remove()  括号中放入要删除的元素。

删除整个,或是一段的列表  del l[1]   del l[]   del l[1:3]

 

#改  赋值操作!!!

通过索引值的位置   l[2][0]="字符串"   字符串内的数据发生改变,但是所对应的内存地址没有改变。

清空 l.clear()   将列表内的所有数据清空!!!   与l4=[]不是一样的列表  #推荐新建的方式。清空原列表,没有新建一个空列表,效率高!

 

#计算数量 .count()  统计列举中某个元素的数量

[[1,2,3,4].count(3) 

 

统计列表所有的个数:len  print(len(l))

 

#排序:.sort()  从小到大排序,没有返回值!    ord 内置函数,查看ASCII码!

排序顺序可以自己调整,reverse =True(从大到小排)  reverse =False(从小到大排)

 

sorted([1,2,3])   内置函数,sorted() 也可以进行排序!

max()最大值  min()最小值

 

#复制 浅copy 和深copy

 

#反转

.reverse() 不管列表内数据的顺序,直接反转排序。

 

元组  是不可变类型,数据不能更改!

#创建

t = (1,2,3)  print(t)

t2 = tuple([1,2,3])  print(t2)   

#不能进行修改操作

#查

print(t[:])  打印所有

 

字典

python中唯一具有映射关系的数据类型:字典的查询效率高于列表

#创建  键唯一且为不可变数据类型!

d={"name":"alex","age":23}

#查

print(d["name"])

v=d.get("name",None)  #推荐

print(v)

 

#遍历查询

for 循环,取到的是字典的键!

for i in d

   print(i,"-------->"d[i])  #对应打印字典里的键值对

   print("%s------>%s"%(i,d[i]))  #格式化打印

 

可以用list 转换成列表

print(d.keys())   #将键全部写入一个列表

print(d.values())  #将值全部写入一个列表

print(d.items()) #将字典中的键值对,每对组成一个元组,整体组成一个列表输出。

 

#增

d["age"]=123 

 

#修改

d["键"] =值   d["1"]=666

 

#删除

根据键删除    d.pop("1")  有返回值!  .popitem() 随机删除一个

任何数据都可以删除的  del

d.clear()  将字典整个清空,然后留下空字典。

 

d.update() #增加字典,如果字典中没有就添加,有就覆盖。

d2={"height":123,"sex":"male",}

d.update(d2)

print(d)

 

for i in (序列对象seq):#seq可以是字符串,列表,元组,字典!

循环

1、循环次数由序列的一级元素的个数决定!

2、item 是定义的一个变量    range()对应一个列表,默认从0走,可以自定义起始位置。

continue  #结束本次循环

break  #结束整个循环

 

while 循环     死循环!

while 条件表达式 或是 布尔值:

执行代码

集合set   跟字典是一套,就是没有值  两个功能:1、去重,2、关系测试

          是可变的数据类型!  print({[1,2]:"hello"}) 会报错!

          set集合内的元素一定是不可变数据类型!print({1,2,[3,4]}) 会报错!

 

s = set([1,3,"hello"])  或是  s2={1,2,3}

print(s,s2)

 

#去重:

l = [1,2,2,34,45]

s="hello"

print(set(l))  

print(set(s))    输出结果{"h","e","l","o"}去除重复的“l”,输出一个!

 

#关系测试

s1 = {"hello",1,2,3}

s2={1,2,("a","b")}

linux={"hello",4,5,6}

python={"hello",3,4,5}

#求并集

print(s1.union(s2))

print(s1 | s2)

 

#求交集   两个都有

print(s1.intersection(s2))

print(s1 & s2)

 

#求差集   我有对方没有的东西

print(s1.difference(s2))

print(s1 - s2)

 

#对称差集  把都没有的合并起来。#把两个互相不在的全打印 

print(s1.symmetric_difference(s2))

print(s2.symmetric_difference(s1))

print(s1^s2)

 

 

两个集合合并  天然去重!把python合并到linux集合中

linux.update(python)

增加一个新的  linux.add("Alex")

删除 linux.discard("alex") #删除,如果元素不存在,不会报错

     linux.remove("alex")# 删除,如果元素不存在,会报错

随机删 linux.pop() #随机删除

 

linux.issubset(python) #子集  判断是否是子集

linux.issuperset() #超集,父集  判断可用<,>进行

posted @ 2017-04-08 15:58  细雨蓝枫  阅读(389)  评论(0编辑  收藏  举报