input(): 要求用户必须输入一个明确的数据类型,输入的是什么类型,就存成什么类型, 方便了程序开发者, 无需考虑用户输入, 用户需要按照Python的要求去输入数据类型 input会将用户输入的所有内容都存成字符串类型,方便用户, 由程序员去开发程序识别解释用户输入
1.2 字符串格式化输出
值或者变量在()中按照位置与%s一一对应,少一个不行,多一个也不行
用户名是%s, 密码是%s 用户名是%s,密码是%s
# 前两种方式是按照%()中的值的顺序, 给%s一一传值, 需要记住顺序才行, 不方便, 可以利用字典传值, 但是用字典传值也是显得很臃肿
# %s可以接收任意类型的值
# 如果规定必须是数字, 那么可以用%d
如果需要输出%, 那么要写两个%
Python3.5以后才推出, 以变量的形式接收用户的输入
f 运行字符串里的功能
三种字符串格式化输出的效率
# 先取到值,然后在冒号后设定填充格式:[填充字符][对齐方式][宽度]
*<10:左对齐,总共10个字符,不够的用*号填充
*>10:右对齐,总共10个字符,不够的用*号填充
*^10:居中显示,总共10个字符,不够的用*号填充
解释器中单纯的输入1+1是不会报错的, 因为1和+都是解释器能解释的数据, 并且解释器会做计算
只是因为没有print, 所以运行后是没有结果的
+ 号一般用于数字计算, 不要用来做字符串拼接, 效率很低 # Python3中, 用户的输入都被认为是字符串, 因此, 与数字做比较时, 要先把用户输入转成整型或float
增量赋值, 会在单独的内存空间存放新的值, 然后把新的值再绑定给变量, 原值的内存空间会被回收, 因为已经没有变量名和它绑定
把一个值赋值给多个变量名
把五个月的工资取出来分别赋值给不同的变量名
引入*,可以帮助我们取两头的值,也可以取除了第一个和最后一个之间的值, 但是一般不用
# 所有没有被对应到的列表中的值, 都会被*接受, 复制给变量名'_', 所以print(_)的结果就是没有被解压的列表
# '_'就是一个占位符, 用来接收没有对应关系的值, 存成列表
# *_只能使用一次, 其余用_
解压字典默认解压出来的是字典的key
可不可变看的是修改了变量值后, 变量名的id号码是否发生改变, 如果没有发生改变, 说明变量名所捆绑的内存地址是不变的, 变得只是该内存空间里的内容; 而如果id发生了变化, 说明变量名所捆绑的内存地址发生了变化, 因此改变变量值产生了新值, 变量名被捆绑到了新的内存空间, 那么id也就变了
可变类型: 变量值改变, 但是id不变, 证明改的是原值, 原值是可以改变的
简单理解就是, 在变量值所在的内存空间中, 把原值修改, 但是内存地址还是原来的地址, 瓶子没变, 水换了
修改了列表中的值, 但是id没变,因此列表是可变类型
字典的堆区存的是key:value的内存地址
修改了字典中的值, 但是id没变, 因此字典是可变类型
不可变类型: 变量值改变了, id也发生改变, 证明原值是没有改的, 而是产生了新的值, 放在了新的内存空间地址. 因此, 原值不可被修改
修改了整型值, id发生了变化, 说明修改了x的值是产生了新的值, 开辟了新的内存空间, 把11放进去, 然后和x进行捆绑, x指向了新的内存地址, 因此id号也就发生了改变
因此, 整型是不可变类型, 所有的赋值都是产生新值, 需要开辟新的内存空间
整型, 浮点和字符串都是一个整体, 其在内部是不可被分隔的, 无法只修改一个数字或者一个字符, 因此, 修改整型, 浮点, 字符串都是修改了一个整体. 同理, 布尔也是不可变的
列表, 字典, 都是容器类数据类型, 其内部的值是可以更改的, 但是容器本身是不变的