1.垃圾回收机制详解(了解)
-
栈区与堆区
- 栈区:变量名与值内存地址的关联关系存放于栈区
- 堆区:变量值存放于堆区,内存管理回收的是堆区的内容
-
引用计数
x = 10 #直接引用:指的是从栈区出发直接引用到内存的地址 print(id(x)) l = ['a',x] #间接引用:指的是从栈区出发引用到堆区后,再通过进一步引用才能到达的内存地址,一般指容器型数据 print(id(l[1]))
-
标记清除:解决引用计数循环引用问题
-
分带回收:提升回收效率
2.与用户交互
-
接收用户输入
在python3中:input会将用户输入的所有内容都存成字符串类型
age = input("请输入你的年龄: ") print(age,type(age)) age = int(age) #int只能将纯数字的字符串转化成整形
在python2中:
raw_input():用法与python3的input一模一样
input():要求用户必须输入一个明确的数据类型,输入的是什么类型,输出的就是什么类型
-
字符串的格式化输出
-
%,值按照位置与%s一一对应,少一个不行,多一个也不行;
%s实际上可传入任意数据类型,%d只能接受int
%%替代%符号
①按照位置传值
res = 'my name is %s my age is %s' %('egon','18') res = 'my name is %s my age is %s' %('18','egon') res = 'my name is %s' %'egon' print(res)
②以字典形式,打破位置的限制
res = '我的名字是 %(name)s 我的年龄是 %(age)s' %{'age':'18','name':'egon'} print(res)
-
str.format:兼容性好
①按照位置传值
res = '我的名字是{} 我的年龄是{}'.format('egon',18) print(res) res = '我的名字是{0}{0}{0} 我的年龄是{1}{1}'.format('egon',18) print(res)
②打破位置限制,按照key=value传值
res = '我的名字是{name}我的年龄是{age}'.format(age=18,name='egon') print(res)
③填充特殊数量字符
print('{x}=========='.format(x='开始执行')) print('{x:=<10}'.format(x='开始执行')) # 字符串左对齐,不足10个的用=填充 print('{x:=>10}'.format(x='开始执行')) # 字符串右对齐,不足10个的用=填充 print('{x:=^10}'.format(x='开始执行')) # 字符串居中对齐,不足10个的用=填充
④精度与进制(四舍五入)
print('{salary:.3f}.format(sarlary=1235.12345)') #精确到小数点后三位
-
f:python3.5以后才推出
①直接输出,{{}}代表输出{}符号,类似%
x = input('your name: ') y = input('your age: ') res = f'我的名字是{x},我的年龄是{y}' print(res)
②{}内的字符串可以被当做表达式运行
res = f'{10+3}' print(res) f'{print('aaa')}'
-
-
print
print('hello',end='')
print('world')
'''
helloworld #空字符替代换行
'''
print('hello',end='*')
print('world',end='*')
'''
hello*world* #星号替代换行
'''
print('hello','world','egon')
'''
hello world egon #逗号替代空格
'''
3.基本运算符
3.1算数运算符
print(10 + 3.1)
print(10 + 3)
print(10 / 3) # 结果带小数
print(10 // 3) # 只保留整数部分
print(10 % 3) # 只保留余数
print(10 ** 3) # 幂
3.2赋值运算符
=:变量的赋值
- 增量赋值:
age = 18
age += 1 # age = age + 1
print(age)
age *= 3
age /= 3
age %= 3
age **= 3
- 链式赋值
x = 10
y = x
z = y
z = y = x = 10
print(x, y, z)
print(id(x), id(y), id(z))
- 交叉赋值
m = 10
n = 20
print(m, n)
# 交换值
# temp = m
# m = n
# n = temp
# print(m,n)
m, n = n, m
print(m, n)
- 解压赋值
salaries = [111,222,333,444,555]
把五个月的工资取出来分诶赋值给不同的变量名
mom0=salaries[0]
mom1=salaries[1]
mom2=salaries[2]
mom3=salaries[3]
mom4=salaries[4]
print(mom0)
print(mom1)
print(mom2)
print(mom3)
print(mom4)
mom0,mom1,mom2,mom3,mom4=salaries #对应的变量名少一个不行
引入*,可以帮助我们取两头的值,默认不用来取中间的值
取前三个值
x,y,z,*_=salaries=[111,222,333,444,555]
*会将没有对应关系的值存成列表然后赋值给紧跟其后的那个变量名,此处变量名为为_
取后三个值
*_,x,y,z=salaries=[111,222,333,444,555]
解压字典默认解压出来的是key
x,y,z=dic={'a':1,'b':2,'c':3}
print(x,y,z)
4.可变不可变类型
- 可变类型:值改变,id不变,证明改的是原值,证明原值是可以改变的(list、dict)
- 不可变类型:值改变,id也变了,证明是产生了新的值,压根没有改变原值,证明原值是不可以被修改的(int、float、str、tuple)