垃圾回收机制详解(了解)
1、引用计数
x = 10 ##### 直接引用
print(id(x))
y = x
z = x
l = ['a', 'b', x] ##### 间接引用
print(id(l[2]))
d = {'mmm': x} ##### 间接引用
print(id(d['mmm']))
x=10
l=['a','b',x] ##### l=['a'的内存地址,'b'的内存地址,10的内存地址]
x=123
print(l[2])
x=10
x=[10,]
l=['a','b',10]
2、标记清除:用来解决循环引用带来的内存泄露问题
循环引用=>导致内存泄露
l1=[111,]
l2=[222,]
l1.append(l2) ##### l1=[值111的内存地址,l2列表的内存地址]
l2.append(l1) ##### l2=[值222的内存地址,l1列表的内存地址]
print(id(l1[1]))
print(id(l2))
print(id(l2[1]))
print(id(l1))
print(l2)
print(l1[1])
del l1
del l2
3、分代回收:用来降低引用计数的扫描频率,提升垃圾回收的效率
1、接收用户的输入
在Python3:input会将用户输入的所有内容都存成字符串类型
username = input("请输入您的账号:") ##### "egon"
print(username, type(username))
age = input("请输入的你的年龄: ") ##### age="18"
print(age, type(age))
age=int(age) ##### int只能将纯数字的字符串转成整型
print(age > 16)
int("12345")
int("1234.5")
int("1234abc5")
在python2中:
raw_input():用法与python3的input一模一样
input(): 要求用户必须输入一个明确的数据类型,输入的是什么类型,就存成什么类型
>>> age=input(">>>>>>>>>>>>>>>>>>>>>: ")
>>>>>>>>>>>>>>>>>>>>>: 18
>>> age,type(age)
(18, <type 'int'>)
>>>
>>> x=input(">>>>>>>>>>>>>>>>>>>>>: ")
>>>>>>>>>>>>>>>>>>>>>: 1.3
>>> x,type(x)
(1.3, <type 'float'>)
>>>
>>> x=input(">>>>>>>>>>>>>>>>>>>>>: ")
>>>>>>>>>>>>>>>>>>>>>: [1,2,3]
>>> x,type(x)
([1, 2, 3], <type 'list'>)
>>>
2。字符串的格式化输出
2.1 %
值按照位置与%s一一对应,少一个不行,多一个也不行
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)
%s可以接收任意类型
print('my age is %s' %18)
print('my age is %s' %[1,23])
print('my age is %s' %{'a':333})
print('my age is %d' %18) ##### %d只能接收int
print('my age is %d' %"18")
2.2 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)
了解知识
"""
2.4 填充与格式化
先取到值,然后在冒号后设定填充格式:[填充字符][对齐方式][宽度]
<10:左对齐,总共10个字符,不够的用号填充
print('{0:<10}'.format('开始执行')) ##### 开始执行*****
>10:右对齐,总共10个字符,不够的用号填充
print('{0:*>10}'.format('开始执行')) ##### ******开始执行
^10:居中显示,总共10个字符,不够的用号填充
print('{0:*^10}'.format('开始执行')) ##### 开始执行
2.5 精度与进制
print('{salary:.3f}'.format(salary=1232132.12351)) #####精确到小数点后3位,四舍五入,结果为:1232132.124
print('{0:b}'.format(123)) ##### 转成二进制,结果为:1111011
print('{0:o}'.format(9)) ##### 转成八进制,结果为:11
print('{0:x}'.format(15)) ##### 转成十六进制,结果为:f
print('{0:,}'.format(99812939393931)) ##### 千分位格式化,结果为:99,812,939,393,931
"""
2.3 f:python3.5以后才推出
x = input('your name: ')
y = input('your age: ')
res = f'我的名字是{x} 我的年龄是{y}'
print(res)
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、赋值运算符
3.1 =:变量的赋值
3.2 增量赋值:
age = 18
##### age += 1 ##### age=age + 1
##### print(age)
age*=3
age/=3
age%=3
age=3 ##### age=age3
3.3 链式赋值
x=10
y=x
z=y
z = y = x = 10 ##### 链式赋值
print(x, y, z)
print(id(x), id(y), id(z))
3.4 交叉赋值
m=10
n=20
print(m,n)
交换值
temp=m
m=n
n=temp
print(m,n)
m,n=n,m ##### 交叉赋值
print(m,n)
3.5 解压赋值
salaries=[111,222,333,444,555]
把五个月的工资取出来分别赋值给不同的变量名
mon0=salaries[0]
mon1=salaries[1]
mon2=salaries[2]
mon3=salaries[3]
mon4=salaries[4]
解压赋值
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)
'''
作业
作业:
0、分别画出下面两个列表在内存中是如何存放的
l1=[11,22,[333,444]]
l2=[11,22,[33,{'name':'egon','age':18}]]
1、
用户输入姓名、年龄、工作、爱好 ,然后打印成以下格式
------------ info of Egon -----------
Name : Egon
Age : 22
Sex : male
Job : Teacher
------------- end -----------------
2、
用户输入账号密码,程序分别单独判断账号与密码是否正确,正确输出True,错误输出False即可
3、让计算机提前记下egon的年龄为18岁,写一个才年龄的程序,要求用户输入所猜的年龄
,然后程序拿到用户输入的年龄与egon的年龄比较,输出比较结果即可
4、程序从数据库中取出来10000条数据,打算显示到页面中,
但一个页面最多显示30条数据,请选取合适的算数运算符,计算
显示满30条数据的页面总共有多少个?
最后一页显示几条数据?
5、egon今年为18岁,请用增量赋值计算3年后egon老师的年龄
6、将值10一次性赋值给变量名x、y、z
7、请将下面的值关联到它应该对应的变量名上,你懂的
dsb = "egon"
superman = "alex"
8、我们只需要将列表中的傻逼解压出来,一次性赋值给对应的变量名即可
names=['alex_sb','wusir_sb','oldboy_sb','egon_nb','lxx_nb','tank_nb']
选做题:
编写用户登录接口(学的多的同学,尝试做下述作业,这是截止到下周二学完文件处理之后的作业)
1、输入账号密码完成验证,验证通过后输出"登录成功"
2、可以登录不同的用户
3、同一账号输错三次锁定(附加功能,在程序一直运行的情况下,一旦锁定,则锁定5分钟后自动解锁)
扩展需求:在3的基础上,完成用户一旦锁定,无论程序是否关闭,都锁定5分钟
'''