python基础内存管理机制,基本运算符,与用户交互
基础内存管理机制,基本运算符,与用户交互
1.内存管理机制
-
1垃圾回收机制GC
#引用计数 x=18 #值18的引用计数为1 y = x # 值18的引用计数为2 l = [111, x] # 值18的引用计数为3 减少用del 比如del(x),切断x指向18的引用 如果一个值没有任何引用指向他。 那他就是垃圾 但是循环引用的,虽然没有直接引用,但是有间接引用一直指向他
#分代回收
如果指向一个值有很多变量,那么系统执行会很繁重,效率低下,比如老师检查三个人作业很轻松,但是人越来越多,老师工作就很繁忙,为了解决这个问题,如果检查一个周有10人天天交作业,那么这10个可以划分到好学生,可以一周检查一次,如果好学生连续5个周天天叫作业 ,可以划分到尖子生, 好学生和尖子生也会检查 只是频率相对于会减少,这样下来会大大减少系统的效率
但是 好学生也有可能不交作业而,没被检查到,所以就用到下面的标记清除
#标记/清除
l1['123']
l2['321']
l1.append(l2)
l2.append(l1)
这样即使切断了直接引用 ,还是会被间接引用到,所以标记/清除
一个变量值没有任意一条可以从栈区出发到自己的引用,就会被标记下来,方便后续清除
1.2小整数池
在python中,
x=100
y=100
按照逻辑 ,上面那两个应该内存地址不一样 即id()不一样,但是python 有一个小整数池概念,所以就会指向同一个地址 在python解释器里 范围更大 ,只需要记住有一个小整数池概念范围是 -5到256
2.基本运算符
# 2.1 算术运算符 + - * / // ** %
加减乘除没有啥写的
/有小数可能,
//不要小数,不会四舍五入
**乘方
%取余
*可以字符串乘 也可以列表乘 比如print("abc"*3) 输出 abcabcabc
# 2.2 比较运算符 > >= < <= == !=:主要用于数字类型 也可以给其他类型用,但仅限于同类型之间
# x = "abcdefg"
# y = "abz"
# print(x > y)
false 因为字符串一位一位比较,z>c
# 2.3 赋值运算符
2.3.1 增量赋值
就是+= 还有-=.........
2.3.2 链式赋值
连续赋值
x = y = z = 100
2.3.3 交叉赋值
在Java需要用第三个变量temp
# x = 100
# y = 200
# temp = x
# x = y
# y = temp
# del temp
现在 x,y=y,x 实际底层也是用了temp
2.3.4 解压赋值 *_一般就是收这些没有的变量
在字典取值或者列表取值 注意字典取得是key 而不是value 下面的成员运算in也判断的key
salaries = [11, 22, 33, 44, 55]
mon1,mon2,*_ ,last = salaries 取得是前两个和最后一个
一般用来取前几个或者后几个 或者前边几个 后边几个
# 2.4 逻辑运算符 优先级not>and>or
2.4.1 not
取反
2.4.2 and
只有都为TRUE 结果才是TRUE ,只要有一个FALSE结果就是FALSE
需要全部满足才是true 有点像并且的意思 比如 我吃饭,并且喝水,并且学习
2.4.3 or
有一个为TRUE结果就是TRUE 有点像或者,我吃饭 或者 喝水 或者学习,满足一个就是true
# 2.5 成员运算符
2.5.1 in
判断这个字符是否在后面那个字符里面
字典的成员运算判断的是key 上面的解压赋值也是判断key
# print('k3' not in {'k1': 111, 'k2': 222}) # 推荐
# print(not 'k3' in {'k1': 111, 'k2': 222}) # 不推荐
# 2.6 身份运算符
2.6.1 is
判断id是否一样 即 内存地址
==成立is不一定成立,但是is成立==一定成立
3.与用户交互:输入输出
接收用户输入
input().
python3中 接受的不管是什么都会转换成str 字符串
python2中 接受的是什么 就转换什么
输出 print里面还有一个参数end 默认为\n换行 可以如下修改 取消换行
print("666",end="*")
格式化输出 %s
# name=input("请输入名字:")
# age=input("请输入年龄:")
#
# # print("你的名字是 %s ,你的年龄是%s" %(name,age))
# print("你的名字是 {} ,你的年龄是{}".format(name,age))
格式化输出之浮点数输出
%f ——保留小数点后面六位有效数字
%.3f,保留3位小数位
%s不管你输入什么都给你转换成字符串str