一.垃圾回收机制详解
<1>.引用计数
x=10 #直接引用
print(id(x))
j=["k",x] #间接引用
print(id(j[1]))
<2>.标记清除
标记/清除算法的做法是当应用程序可用的内存空间被耗尽的时,就会停止整个程序,然后进行两项工作,第一项则是标记,第二项则是清除
标记的过程其实就是,遍历所有的GC Roots对象(栈区中的所有内容或者线程都可以作为GC Roots对象),然后将所有GC Roots的对象可以直接或间接访问到的对象标记为存活的对象,其余的均为非存活对象,将没有标记的对象全部清除掉.
<3>.分代回收
将对象进行扫描筛选,经常被使用的对象会降低被扫描的频率,提升回收的效率
二.程序与用户的交互
age=input("请输入年龄;") #age=20
print(age,type(age))
18,class(str)
格式化输出
#值按照位置与%s一一对应,少一个不行,多一个也不行
res= "my name is %s my age is %s" %("xiaoming","17")
print(res)
#以字典的形式传值,打破位置的限制
res = "我的名字是%(name)s,我的年龄是%(age)s" %{"age":"17","name":"xiaoming"}
print(res)
%s可以接收任意类型,%d只能接收int
format
res = '我的名字是{},我的年龄是{}".format("xiaoming","17"}
print(res)
res = '我的名字是{0}{0}{0},我的年龄是{1}{1}'.format("xiaoming","17"}
print(res)
打破了位置的限制
res = "我的名字是{name},我的年龄是{age}".format{age=17,name=xiaoming}
print(res)
填充与格式化
# 先设定填充格式:[填充字符][对取到值,然后在冒号后齐方式][宽度]
# *<10:左对齐,总共10个字符,不够的用*号填充
print('{0:*<10}'.format('开始执行')) # 开始执行******
# *>10:右对齐,总共10个字符,不够的用*号填充
print('{0:*>10}'.format('开始执行')) # ******开始执行
# *^10:居中显示,总共10个字符,不够的用*号填充
print('{0:*^10}'.format('开始执行')) # ***开始执行***
#f:python3.5以后才推出
x = input('your name: ')
y = input('your age: ')
res = f'我的名字是{x} 我的年龄是{y}'
print(res)
三.基本运算符
算术运算符
+、-、/、//、%、**
比较运算符
< > >= <= == !=
赋值运算符
增量赋值: += -= *= /= //= %=
逻辑运算符
not and or
优先级递减