python基础内存管理机制,基本运算符,与用户交互

基础内存管理机制,基本运算符,与用户交互

1.内存管理机制

  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
posted @ 2021-07-29 15:37  迪迦张  阅读(45)  评论(0编辑  收藏  举报