Python基础知识

第一篇博客:Python基础

变量部分——

变量定义:可以变化的量,指事物的状态。

原则:先定义,后使用。

name = "Rachel"

print(name)

 

垃圾回收机制:

作用:在程序运行过程中,会申请大量的内存空间,若长时间不清理,会影响程序运行效率,垃圾回收机制是pyhon自带的程序。变量名存在堆区,内存地址存在栈区,他们是一种对应关系。

1,引用计数:变量被引用的次数,包括直接引用和间接引用。

2,标记清除:因为有循环引用的存在,会导致内存泄漏的问题。若堆区的值只剩下间接引用,则会被标记为垃圾

3,分代回收:基于引用计数的回收机制,每次回收内存,都需要把所有对象的引用计数都扫描一遍,这是非常耗时的,于是引用分代回收来提高效率,分代回收是以空间换时间的。在多次扫描的情况下,都没有被回收的变量,gc机制就会认为,该变量是常用变量,会降低扫描频率。

 变量命名规则:

1、只能是字母,下划线,数字的组合。

2、不能以数字开头。

3、不能使用关键字。

4、最好简洁,有意义,避免用中文。

  两种命名风格:

1、纯小写加下划线。(推荐使用)age_of_Bob = 23

2、驼峰体。AgeOfBob = 23

变量值的三个重要特征

1、id:反映变量值的内存地址,id不同则内存地址不同。  print(id(name))

2、type:不同类型的值用来表示记录不同的状态。  print(type(name))

3、value:值本身。  print(name)

is和==

is: 表示两边的id是否相同。若a is b  ,得到True, 则必有a == b.

==表示两边的值是否相同。若a == b,得到True,则a和b的id可能相同,也可能不同。

若给变量做赋值操作,则id相同

小整数池

范围:-5至256

在Python解释器启动的时候,就设置好了小整数池的范围。

基本数据类型

整型int:表示整数,如年龄,身份证号。age = 16 print(type(age))——int

浮点型float:表示带小数点的数字,如工资。

字符串str:记录描述事物的状态,名字,一段话。字符串之间相加效率低。

列表:存多个值,索引对应值。l = ["张三",23]

字典: key对应值,索引对应key, key 必须是不可变类型。字典中通过key 来取值。d = {name:"张三",age:23}

布尔类型:两种状态,True和False(0和None和空值都是Flase)

与用户交互

用户输入:input 语法会把用户的输入内容存成字符串类型。username = input("请输入你的账号")

在Python2中:raw_input()的语法与 Python3中的一模一样,Python2中的input()方法规定输入什么类型的数据,就存成什么类型。

用户格式化输出:

1、%(传的值必须与需要的值个数相等,不能多也不能少。兼容性好)

res = "my name is %s,my age is %d" %("Rachel",20)

res = "my name is %(name)s,my age is %(age)d" %("name":"Rachel","age":20)  (这一种方法对传值的顺序没有要求)

 2、.format方法  (从2.6引用)

res = "my name is{},my age is{}.format("Rachel",20)

res = "my name is{0}{1},my age is {2}{2}{2}".format("Rachel","Nabil",20)   (按照标记索引顺序传多个值)

res = "my name is{name},my age is {age}".format("age":20,"name":"Rachel")    (对传值顺序没有要求)

3、f (从3.5引用)

x = input("请输入你的名字")
y = input("请输入你的年龄")
res = f"我叫{x},年龄{y}"
print(res)
扩展:
res = f"{10+3}"
print(res) ——13

基本运算符 

 1、算数运算符(+-*/)

print(10/3) 有小数

print(10//3)只保留整数部分

print(10%3)  取模,取余数

print(10**3)  取10的三次方

2、比较运算符

判断> < = True Flase ==  !=等

3、赋值运算符

变量赋值:=

增量赋值:age += 1、age *=3、age/=3、age**=3

链式赋值:x = y = z = 10

交叉赋值:m =10 n =20   m,n = n,m

解压赋值:l =[22,33,44,55]

                a,b,c,d = l   (变量名必须一一对应,不能多不能少)

取前两个变量:a,b,*_ = l

取后两个变量:*_,a,b = l

无法取中间的值,解压字典默认解压出来的是key

4、逻辑运算符

优先级:not>and>or

5、成员运算符

print("be" in "beautiful")——True
*在字典中判断的是key

 6、身份运算符

is判断id是否相等

深浅copy

浅拷贝:在复制时一般只复制第一层数据的内存地址,浅拷贝对于除开第一层的数据分开改写无法实现,如下代码,若改写其中一个列表里面第二层数据,则两个列表的第二层数据都会改变。

l = [11,22,[33,44]]
l1 = l.copy()
print(id(l),id(l1)) #1855884452552 1855885924936





l1[2][0] = 55
print(l,l1) #[11, 22, [55, 44]] [11, 22, [55, 44]]

深拷贝:在复制时将每一层数据的内存地址都拷贝过来,所以在改写的时候可以实现两个列表的单独改写。

import copy
l = [11,22,[33,44]]
l1 = copy.deepcopy(l)
print(id(l),id(l1)) #2185047793416 2185047792200
l1[2][0] = 55
print(l,l1) #[11, 22, [33, 44]] [11, 22, [55, 44]]

range函数

range(10)打印的是0--9

顾头不顾尾

 可以搭配len()使用

l = [11,34,56,33,22]
for i in range(len(l)):
print(i,l[i])

字符串操作

1、字符串正反向操作:

msg = "hello,python"
print(msg[0])
print(msg[-1])

2、切片:

msg = "hello,python"
res = msg[1:8:2]
print(res) #el,y
print(msg[::-1]) #nohtyp,olleh (可将字符串倒过来写)
*切片,顾头不顾尾,反向切片则要反过来去索引。

3、移除空白:

msg = "  my name is Bob     "
print(msg.strip()) #my name is Bob (去掉字符串左右两侧的空格)
msg = "###my name is Bob##"
print(msg.strip("#")) #my name is Bob (去掉左右两侧的#,同样也可以去掉*^等符号)
print(msg.lstrip("#")) # my name is Bob## (去掉左边)
print(msg.rstrip("#")) # ###my name is Bob (去掉右边)

4、切分:

msg = "red,blue,yellow,black"
res = msg.split(",",2)
print(res) #['red', 'blue', 'yellow,black'] (可指定切分次数)
print(msg.rsplit(",",1)) # ['red,blue,yellow', 'black']  (也可以从右边开始切)

5、变大、小写:

msg = "sjfFHGJlL"
print(msg.lower()) # sjffhgjll
print(msg.upper()) # SJFFHGJLL

6、以什么开头,结尾:

msg = "reading books"
print(msg.startswith("re")) # True
print(msg.endswith("ks")) # True

7、join拼接:

l = ["22","34","556","622"]  需为字符串
res = ",".join(l)
print(res)

8、replace替换:

msg = "我是张三,张三的张三"
print(msg.replace("张三","王五",2)) # 我是王五,王五的张三 (可以指定替换次数)

9、判断是否是数字:

print("123".isdigit()) # True  需是整数
print("12.3".isdigit()) # False

10、find查找:

msg = "我是谁,我来自哪里"
print(msg.find("我")) # 0 返回要查找的字符串在打字符串里的起始索引
print(msg.find("世界")) # -1  若找不到,返回-1
print(msg.index("世界")) # 若找不到,程序报错

11、count计数:

msg = "我是谁,我来自哪里"
print(msg.count("我")) # 2 返回要查找的字符串在大字符串的出现的次数

12、center、ljust、rjust、zfill

 print("张三".center(40,"*")) # *******************张三******************* (居中显示,用*填充至40个字符)

print("张三".ljust(40,"*")) # 张三**************************************(字符串居左显示,用*填充至40个字符)

print("张三".rjust(40,"*")) # **************************************张三(字符串居右显示,用*填充至40个字符)

print("张三".zfill(40,)) # 00000000000000000000000000000000000000张三 (字符串居右显示,用0填充至40个字符)

13、expandtabs设置制表符的空格数

msg = "hello, Bob"

print(msg.expandtabs(3)) # hello, Bob

14、capitalize、swapcase、title

msg = "A beautiful Boy!"
print(msg.capitalize()) # A beautiful boy! (将字符串首字母大写)
print(msg.swapcase()) # a BEAUTIFUL bOY! (将字符串大小写调换)
print(msg.title()) # A Beautiful Boy! (将每个单词首字母大写)

列表操作

增:

l = [22,45,23,21,66]
l1 = [1,2,3]
l.append(566)
print(l) # [22, 45, 23, 21, 66, 566] (在列表后面追加)
l.insert(2,"插队")
print(l) # [22, 45, '插队', 23, 21, 66, 566](在指定索引前插入值)
l.extend(l1)
print(l) # [22, 45, '插队', 23, 21, 66, 566, 1, 2, 3] (extend方法可以将一个可迭代对象遍历后追加到另一个列表中)

删:

l = [22,45,23,21,66]
del l[1]
print(l) # [22, 23, 21, 66] (根据索引删,若直接del l 则是直接删掉列表l)
l.pop(0)
print(l) # [23, 21, 66] (根据索引删,若无指定索引,默认删除最后一个索引的值。.pop方法删除后返回的值是删掉的值本身)
l.remove(23)
print(l) # [21, 66] (根据指定的值删除,删除后返回None)

.count方法,统计次数,.index查找索引、.reverse倒序、.sort排序、

l = [11,22,33,11,33,11]
print(l.count(11)) # 3  (统计11出现的次数)
print(l.index(22)) # 1 (统计22出现的第一次的索引,若找不到则报错)
l.reverse
print(l) # [11, 22, 33, 11, 33, 11] (将列表倒序)
l.sort()
print(l) # [11, 11, 11, 22, 33, 33] (将列表排序,默认升序)
l.sort(reverse = True)
print(l) # [33, 33, 22, 11, 11, 11] (当设置reverse为True时,则是降序)

集合

集合内元素必须是不可变类型。

集合内元素无序。

集合内元素不能重复。

交集:

l = {11,22,33}
l2 = {22,33,44}
l3 = l&l2
print(l3) # {33, 22} (取交集)
方法二:print(l.intersection(l2)) #{33, 22}

并集:

l = {11,22,33}
l2 = {22,33,44}
l3 = l|l2
print(l3) # {33, 22, 11, 44} (取并集)
方法二:print(l.union(l2)) #{33, 22, 11, 44}

差集:

l = {11,22,33}
l2 = {22,33,44}
l3 = l-l2
print(l3) # {11} (取差集,有先后顺序)
方法二:print(l.difference(l2)) #{11}

对称差集(去掉两者共同的部分):

l = {11,22,33}
l2 = {22,33,44}
l3 = l^l2
print(l3) # {11, 44} (取对称差集)
方法二:print(l.symmetric_difference(l2)) #{11, 44}

父子集:一方完全包含另一方的元素

l = {11,22,33,44}
l2 = {22,33,44}
print(l>l2) # True
方法二:print(l2.issubset(l)) #True

去重(有局限性):

只能针对不可变类型,无法保证原来的顺序,

删:

l = {11,22,33,44}
l.discard(11)
print(l) # {33, 44, 22} (若值不在集合中,则不改变集合元素)
l = {11,22,33,44}
l.remove(22)
print(l) # {33, 11, 44} (若删除的值不在集合中,则程序报错)

.update

l = {11,22,33,44}
l2 = {44,66}
l.update(l2)
print(l) # {33, 66, 22, 11, 44} (更新集合)

.pop

l = {11,22,33,44}
l.pop()
print(l) # {11, 44, 22} (随机删除一个值)

.add

l = {11,22,33,44}
l.add(55)
print(l) # {33, 11, 44, 22, 55}

.isdisjoint

l = {11,22,33,44}
l2 = {55,66}
print(l.isdisjoint(l2)) # True (判断两个集合是否有相同元素)
原文地址:https://www.cnblogs.com/fdsimin/p/12510662.html