python入门之垃圾回收机制、用户交互与基本运算符

一、垃圾回收机制

1、什么是垃圾?

	我们写代码过程中对变量引用过的一些值,在后续操作中这个值不在使用了,
没有变量能找到它了,我们称这个值是垃圾。

2、垃圾为什么要被回收

	在我们编写代码的过程中会有给变量赋值的操作,赋值过程中会在内存空间
中为值开辟出一个空间来存储这个值,然后将值的内存地址给到变量。变量与值地
址所在区域我们称为栈区,值所在区域称为堆区,例如:x=10,y=20 如下图

变量与值存取位置

	当执行x=y时x会指向20,x与10的关系解除了,没有变量可以找到10了,
10也就没意义了,当这样的值多了会大量占用内存,导致内存溢出,所以需要
进行垃圾回收,释放内存空间

3、什么是垃圾回收机制

	垃圾回收机制(简称GC)是Python解释器自带一种机,专门用来回收不可
用的变量值所占用的内存空间

4、垃圾回收机制的原理

4.1、引用计数

	引用计数就是值被变量名关联的次数。
	如:x=10
	我们就说10被关联了一次
	如果y=x,这样10也被y关联了,10的计数就 为2,这叫**计数增加**。
	del x   将x的关联解除,10的计数变为1,这叫**计数减少**。
	当计数被减为0时,该值没有变量与它关联,它就变为了垃圾,需要进行回
收

4.2、标记清除

	有两个列表
	l1 = [1,2,l2]
	l2 = [1,2,l1]
	可以看到俩个列表互相引用,你中有我,我中有你。但是,这样会出现一个
问题,我们说一个值被回收有个前提,是没有关联计数了,如果我们将l1、l2的
关联解除 :
	del l1
	del l2
	这俩列表没有变量可以引用他们了,但由于他俩又在互相引用,引用计数不
为0,但是这俩列表又没有变量相关联也就不会被调用了,内存被占用。所以为了
解决这个问题引入了标记与清除。
	再运行程序到内存快满的时候,程序会停下来,进行扫描标记,标记什么呢?
就是那些引用计数不为0,但是又没有变量引用的数据,进行清除,释放内存。

4.3、分代回收

	分代回收是为了提升python的回收效率设定的以空间换时间的方法。
	python会将数据进行分代,每次扫描垃圾时会将一些正在使用的值进行
标记,当标记积累到一定程度时会升代,然后,减少该值的扫描频率,增加扫描效
率。这会导致一些辈分高的数据不能及时回收,会占用内存空间,但会使扫描效
率加,所以说分代回收是以空间换时间

二、用户交互输入

1、交互

	交互说白了就是人与计算机交流的过程,人进行信息输入(input)计算机进行结果
输出(print)例如:输入
user_name = input('请输入账号:')
user_password = input('请输入密码:')
	输出
print(user == user_name)
print(password == user_password)

2、字符串格式化

2.1、为什么进行字符串格式化?

我们在需要输出某些固定格式的字符串时,例如:
‘’我们去***玩,坐***去,住***酒店”,我们需要将***替换成具体的内容,这

就需要就行字符串格式化。

2.2、如何格式化字符串

2.2.1、占位符

占位符例如%s、%d
print('我们去%s玩,坐%s去,住%s酒店,价钱是%d元' %('迪士尼','飞机',
'上海大酒店',100))
我们去迪士尼玩,坐飞机去,住上海大酒店酒店,价钱是100

2.2.2、format

	使用方式是:str.format
'''
1、
用户输入姓名、年龄、工作、爱好 ,然后打印成以下格式
------------ info of Egon -----------
Name  : Egon
Age   : 22
Sex   : male
Job   : Teacher
------------- end -----------------

'''

user_name = input('请输入姓名:')
user_age = int(input('请输入年龄:'))
user_work = input('请输入工作:')
user_like = input('请输入爱好:')

res = '''
------------ info of Egon -----------
Name  : {name}
Age   : {age}
Sex   : {like}
Job   : {work}
------------- end -----------------

'''.format(name=user_name, age=user_age, like=user_like, work=user_work)
print(res)

3、基本运算符

1.算数运算符

+ - * / // % **
 print(10 + 3.1)
 print(10 + 3)
 print(10 / 3)  # 结果带小数
 print(10 // 3)  # 只保留整数部分
 print(10 % 3) # 取模、取余数
 print(10 ** 3) # 幂运算

2、比较运算符

< > = <= >= !=
 print(10 > 3)
 print(10 == 10)
 print(10 >= 10)
 print(10 >= 3)

 name=input('your name: ')
 print(name == 'egon')

3、赋值运算符

 =  += -= *= %= /= //= **=
 age = 18
 age += 1  # age=age + 1
 print(age)
 age*=3
 age/=3
 age%=3
 age**=3 # age=age**3

3.1、链式赋值

 x=10
 y=x
 z=y
 z = y = x = 10 # 链式赋值
 print(x, y, z)
 print(id(x), id(y), id(z))
 

3.2、交叉赋值

 m=10
 n=20
 print(m,n)
 交换值
 temp=m
 m=n
 n=temp
 print(m,n)
 m,n=n,m # 交叉赋值
 print(m,n)

3.3、解压赋值

salaries=[111,222,333,444,555]
mon0,mon1,mon2,mon3,mon4=salaries
 print(mon0)
 print(mon1)
 print(mon2)
 print(mon3)
 print(mon4)
 mon0,mon1,mon2,mon3=salaries # 对应的变量名少一个不行
 mon0,mon1,mon2,mon3,mon4,mon5=salaries # 对应的变量名多一个也不行
# 引入*,可以帮助我们取两头的值,无法取中间的值
# 取前三个值
 x,y,z,*_=salaries=[111,222,333,444,555] # *会将没有对应关系的值存成列表然后赋值给紧跟其后的那个变量名,此处为_
 print(x,y,z)
 print(_)

 #取后三个值
 *_,x,y,z=salaries=[111,222,333,444,555]
 print(x,y,z)

 x,*_,y,z=salaries=[111,222,333,444,555]
 print(x,y,z)

 salaries=[111,222,333,444,555]
 _,*middle,_=salaries
 print(middle)

# 解压字典默认解压出来的是字典的key
x,y,z=dic={'a':1,'b':2,'c':3}
print(x,y,z)


4、成员运算符

	只有一个 :in
1.判断一个字符或字符串是否在一个大字符串中
 print("world" in "hello world")
 print('w' in 'hello world')
2、判断元素是否在一个列表中
list1 = ['age','name','sex']
print('age' in list1)
3、判断key是否在字典中
dict1 = {'name':'dog','age':18,'sex':'play'}
print('name' in dict1)
4not in
print ('world' not in 'hello world')

5、身份运算符

	只有一个:is
	作用:判断两个变量id是否相等

6、逻辑运算符

包含:not and or
优先级:not > and > or
1、逻辑非not #就是把跟在not后面的条件结果取反,即:真变假,假变真
# ps:not与紧跟其后的那个条件是一个不可分割的整体
 print(not 16 > 13)
 print(not True)
 print(not False)
 print(not 10)
 print(not 0)
 print(not None)
 print(not '')

2、逻辑与 and #and用来链接左右两个条件,两个条件同时为True,最终结果
#才为真
 print(True and 10 > 3)
 print(True and 10 > 3 and 10 and 0) # 条件全为真,最终结果才为True
 print( 10 > 3 and 10 and 0 and 1 > 3 )  # 偷懒原则
 3、逻辑或 or#or用来链接左右两个条件,两个条件但凡有一个为True,最终结果就为True,
# 两个条件都为False的情况下,最终结果才为False
print(3 > 2 or 0)
print(3 > 4 or False or 3 != 2 or 3 > 2 or True) # 偷懒原则

	
发布了16 篇原创文章 · 获赞 0 · 访问量 157

猜你喜欢

转载自blog.csdn.net/weixin_46466247/article/details/104684805
今日推荐