垃圾回收机制与用户交互

考试(10分钟) 1、什么是变量?为何要有变量?

变量是发生变化的量 ,用来记录的事物的变化状态

2、变量的三大组成部分是?每部分的作用是什么?

变量名、赋值符号、变量值

先定义后引用 ​ xxx=10 ​ print(xxx)

3、变量名的命名原则、规范、风格
变量名由字母数字下划线组成且数字不能打头
驼峰式 字母加下划线式
见名知意
  name="egon"

  age_of_egon=18
  AgeOfEgon=18

4、变量值的三个特征是什么?
  id(18):id是值在内存中的身份证号
  type(18)
  value 18
5、is与==的区别
  is:判断的是id,id是变量值的身份,所以is称之为身份运算符
  ==:判断的是值

6、id相同值是否可以相同?
      id相同值一定相同
7、id不同值是否可以相同?
      id不同值可以相同

      value1 == value2
      value1 is value2
8、用变量的定义说明int、float、str、list、dict、bool类型用于记录何种状态,每种类型
  至少写出三个示例,如下所示
      # int型
      age = 10
      level = 3
      year = 1990
    list与dict:
      相同点:都能存多个值,称之为容器类型
      不同点:
          list是用索引对应值,索引反映的是位置/顺序
          dict是用key对应值,其中key通常为字符串类型,而str类型具有描述性功能
                所以key对值可以有描述性功能

          msg="egon 10"
          l=['egon',10]
          info={'name':'egon','age':10}
          info['name']

          info={0:'egon',1:10}

 

今日内容 1、垃圾回收机制详解(了解) 引用计数 标记清除 分代回收

2、与用户交互
   接收用户输入
       # python3中
           input
       # python2.7(了解)
           input
           raw_input
   格式化输出
       %
       str.format
       f''

3、基本运算符
   算数运算符
   赋值运算符
      =
       增量赋值
       链式赋值
       交叉赋值
       解压赋值
   比较运算符
   逻辑运算符
       not、and、or
       区分优先级:not > and > or

       了解:
           短路运算
   成员运算符
       in
   身份运算符
       is

3、流程控制之if判断
   if 条件:
       代码块
   elif 条件:
       代码块
   。。。
   else
       代码块

垃圾回收机制

1.引用计数
x=10#直接引用
print(id(x))
y=x
z=x

l=["a","b",x]#间接引用
print(id(l[2]))

d={"aaa":x}
print(id(d["aaa"]))

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(l1))
print(id(l2[1]))

del l1
del l2
3.分代回收:用来降低引用计数的扫描频率,提升垃圾回收的效率

与用户交互

1.接收用户的输入
#在Python3中input输入的所有内内都会存为字符串类型
username=input("请输入您的账号:")#yoona
print(username,type(username))
age=input("请输入你的年龄:")#23
print(age,type(age))
age=int(age)#int只能将纯数字的字符串转化为整形
print(age>18)
#int("12345")可以转化成整形
#int("123.45")不可以转化为整形
#int("123ab")不可以转化为整形

#在Python2中:
raw_input():用法与Python3的input一模一样
input():要求用户必须输入一个明确的数据类型,输入的是什么类型,就存入什么类型
age=input("请输入年龄:")#18
age,type(age)#18,<type 'int'>
x=input("请输入你的薪资:")#1.4
x,type(x)#1.4,<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"%("yoona","18")
res="my name is %s my age is %s"%("18","yoona")
res="my name is %s"%"yoona"
print(res)

以字典的形式穿值,打破位置的限制
res="我的名字是%(name)s 我的年龄是%(age)s"%{"age":18,"name":"yoona"}

%s可以接收任意类型
print("my age is %s"%18)#整形
print("my age is %s"%[1,22])#列表
print("my age is %s"%{"a":1.4})#字典
print("my age is %d"%18)#%d只能接收int
print("my age is %d"%"18")#程序报错
2.2str.format:兼容性好
#按位置传值
res="我的名字是{}我的年龄是{}".format("yoona",23)
print(res)
res="我的名字是{0}{0}{0}我的年龄是{1}{1}".format("yoona",23)
print(res)#我的名字是yoonayoonayoona我的年龄是2323
#打破位置限制,按照key=value传值
res="我的名字是{name}我的年龄是{age}".format(age=18,name="yoona")

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=123123.12345))#精确到小数点后三位 123123.123
print("{0:b}".format(123))#转换成2进制结果为:1111011
print("{0:o}".format(9))#转换成8进制结果为:11
print("{0:x}".format(15))#转换成16进制结果为:f
print("{0:,}".format(999888777666))#千分位格式化999,888,777,666

2.3f: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)#结果带小数3.3333
print(10//3)#取整3
print(10%3)#取余1
print(10**3)#取乘方
2.比较运算符 > >= < <= == !=
print(10>3)
print(10==10)

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

name=input("your name:")
print(name=="yoona")
3.赋值运算符
3.1=:变量的赋值
3.2增量的赋值:
age=18
age+=1 #age=age+1
print(age)

age*=3
age/=3
age%=3
age**=3 #age=age**3

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

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)#111,222,333
print(_)
取后三个值
*_,x,y,z=salaries=[111,222,333,444,555]
print(x,y,z)#333,444,555
salaries=[111,222,333,444,555]
_,*middle,_=salaries
print(middle)

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

 

原文地址:https://www.cnblogs.com/mayrain/p/12422019.html