第一篇博客: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]]
原文:https://www.cnblogs.com/fdsimin/p/12510662.html