3. 变量与数据类型

变量

  • 变量是一种变化的量,程序执行的本质上就是一系列状态的变化,变是程序执行的直接体现,所以需要一种机制能够反映或者说是保存下来程序执行时的状态,以及状态的变化,因此出现了变量

  • 变量的使用:先定义后引用

    • name='奇点' # 定义
    • print(name) # 引用
  • 变量的三大组成部分:

    • 变量名:指向等号右侧值得内存地址,用来访问等号右侧的值

      命名原则:不要使用拼音,不要使用中文,在见名知意的基础上,尽可能的短,可读性要高,除此之外,还要符合以下原则

      ​ 数字字母下划线组成

      ​ 不能以数字开头

      ​ 不能是python的关键字,会造成关键字的覆盖,导致关键字不能用了

      命名风格

      ​ 纯小写加下划线的方式birth_age(python中的变量名命名建议这个)
      ​ 大驼峰体:所有单词首字母大写,BirthAge
      ​ 小驼峰体:除第一个单词外,其它单词首字母大写,birthAge

    • 赋值符号:将变量的内存地址绑定给变量名

    • 变量值:代表记录事物的状态

      ​ id:反映的是变量值的内存地址,内存地址不同,id不同——》id(变量名)进行查询

      ​ type:不同的值记录不同的状态——》type()

      ​ value:代表的是值本身

  • is和==的区别

    • is是比较左右两个值的身份id是否相同
    • ==是比较两个值是否相同
    • 值相同,id不一定相同(两块不同的空间可以存储一样的值),id相同,值一定相同
  • 小整数池:python解释器启动时,会在内存中申请一系列的空间存放常用的整数(就是提前进行缓存,当你将这些整数赋值给变量时,不用创建对象而是直接进行引用),方便python调用,这些整数的范围是-5256的整数,换句话说-5256中的整数是一个内存空间,257是另外一个内存空间(可通过python解释器验证),对于字符串来说,是将一些具有一定规则的字符串放在字符串驻留池中,变量使用时也是直接引用

常量:

在程序运行中不会改变的量,在程序运行中,有些值是固定的,不应该被改变,比如圆周率π

python语法中没有常量的概念,但是程序开发中会涉及常量的概念,所以约定俗成以全大写的变量名为常量

基本数据类型

通过作用、定义、使用方法三个方面来学习

整型int:

​ 就是整数

浮点型float:

​ 就是小数

字符串类型str:

定义:'你好'/"你好"/"""你好"""/'''你好''' 四种定义方法(三连可以多行表示)

字符串中想要显示引号的办法:

​ 内外的引号不一致'abc"d"'

​ 使用转义字符反斜杠'abc\'d\''

字符串的拼接

  • 字符串之间可以相加,但是拼接的效率很低,所以不推荐使用

    "a"+"b"="ab"

    字符串之间的相加,并不会在字符串1的基础上加字符串2,而是申请一个全新的内存空间存入字符串1和字符串2,相当字符串1与字符串3的空间被复制了一次,效率很低

  • 只能字符串加字符串,不能字符串加其他类型

列表类型list:

定义:中括号里面放元素,可以存放n个任意类型的值,列表是有序的数据类型——》l=[1,'a',1.1,[1,2,3]]

取值:l[0]——》结果是1

​ 索引对应值,索引从0开始,0代表第一个,索引可以倒数取值,倒数第一个的索引是-1

用途:记录多个值,通过索引精准定位取值

字典类型dict:

定义:由键值对(key:value)组成,其中key通常是字符串类型d={'name':'david','age':13},其中key必须是不可变的数据类型,value可以是任意的数据类型

作用:存储多个值,每个值都有唯一一个key与之对应,key对值有描述性功能,方便取值

取值:通过key来取值——》d['name']结果是'david'

字典是没有顺序的数据类型

布尔类型bool:

定义:只有两个值True和False

显式布尔值:就是比较的结果,比如3大于2的结果就是true,或者直接就是true

隐式布尔值:0、空字符串、空列表、空字符串、None代表的是false,其他的数据代表的都是true

作用:记录真假两种状态

# 所有数据类型都自带布尔值
1、None,0,空(空字符串,空列表,空字典等)三种情况下布尔值为False
2、其余均为真 

可变与不可变类型

可变数据类型:值改变时,id不改变,证明改变的是数据本身,证明原值是可以改变的

list、dict,set

不可变数据类型:值改变时,id改变,证明产生了新的值,原值没有改变,无法被修改

int、float、str、bool,tuple

​ 简单的说,不可变的数据类型被认为是python中元素的最小单位,不可再被分割引用,但是可变的数据类型,可被看成是一个容器,其中存放的是元素的地址,当元素改变时,改变是其实是里面的元素的地址改变了,可变数据类型本身的地址没变

  • 类型转换
# 转换成整数类型
print(int(1))
print(int(1.1))
print(int('1'))
# print(int('1.1')) # 转换错误
# print(int('abc')) # 转换错误

# 转换成浮点类型
print(float(1))
print(float(1.1))
print(float('1.1'))
print(float('1'))
# print(float('abc')) # 转换错误


# 转换成字符串类型
print('| ' + str(1) + ' |')
print('| ' + str(1.1) + ' |')
print('| ' + str('1') + ' |')
print('| ' + str('1.1') + ' |')
print('| ' + str('abc') + ' |')
print('| ' + str(True) + ' |')


# chr 函数
# 将一个数字转换成字符
print(chr(48))  # '0'
print(chr(65))  # 'A'
print(chr(97))  # 'a'

# ord 函数
# 转换一个字符转换对应的数字编码
print(ord('0'))
print(ord('A'))
print(ord('a'))

用户交互(输入输出)

  • 将结果输出给用户:print()函数

    格式化输出:

    # 1 %字符串格式化输出
    'my name is %s,my age is %s' %('libai','18')  # 按位置传值
    'my name is %(name)s,my age is %(age)s' %{'name':'libai','age':'18'}  # 以字典的形式传值
    
    # %s可以接收字符串,也可以接收数字
    # %d只能接收数字
    
    # 2 str.format方法
    'my name is {},my age is {}' .format('libai','18') # 按照位置传值
    'my name is {0},my age is {1}' .format('libai','18') # 按照索引
    'my name is {name},my age is {age}' .format(name='libai',age='18')  # 按照键值对进行传值
    # 格式化显示
    'my name is {name=<10}'.format(name='libai')
    # 表示的含义是共10个字符的长度,name靠左显示,剩下的位置用等号填充,"libai=====",大于号是靠右显示,^是居中显示
    'my age is {age:.3f}'.format(age=18.1111111)
    # 显示的是保留三位小数,处理的方式是四舍五入
    
    # 3 f字符串方法(这种方法python3.5以后才有)
    f'my name is {name},my age is {age}'
    f'{print('nihao')}'--->nihao
    f'{10+3}'--->13
    speaker = f'Hi {name}.'\
              f'You are {age} years old.'\
              f'You are a {ajd} guy!'  # 多行显示
    
    # ! , : { } ;这些标点不能出现在{} 这里面。
    # print(f'{;12}')  # 报错
    # 所以使用lambda表达式会出现一些问题。
    # 解决方式:可将lambda嵌套在圆括号里面解决此问题。
    x = 5
    print(f'{(lambda x: x*2) (x)}')  # 10
    # 花括号内的字符串会被当做表达式来运行
    
    # 占位符
      '''
      %d  以整数输出
      	%3d 输出时,数据占3个字符宽度 
      	%03d 输出时,数据占3个字符宽度 ,当数字不足三个字符时,前缀补0  001
      	%-3d 输出时,数据占3个字符宽度 , 左对齐
      %f  以小数输出
      	%.3f 小数点后保留位数是3位
      %s :字符串
      	字符串的占位符比较厉害,能够为整型、浮点型、布尔值占位
    
      '''
    
    
    
  • 接收用户输入:input("请输入你的账号:")函数

    ​ python3中输入的内容是字符串

    ​ 在python2中有一个函数raw_input():用法与input一致,在python2中,input的用法不同,在输入时必须声明数据的类型,输入的数据是什么类型,就存成什么类型的数据

pycharm中的提示性信息

三种波浪线:

  • 灰色是显示语法存在错误,但是不影响使用。
  • 绿色是单词的拼写可能存在问题,不影响使用。
  • 红色是语法的错误,必须要进行修改。

运算符

1.算术运算符

+、-、*、/、//整除、%取余(模运算)、**乘方

优先级与算术运算一致。

2.比较运算符

== 等于(=是赋值)
!= 不等于
< 小于
> 大于
<= 小于等于
>= 大于等于

字符串的比较运算

==、!=比较的是字符串是不是一致

<、> 等判断时比较的是字符的ASCII码

总的来说就是数字<大写字母<小写字母

当多个字符的时候,比较的原理是第一个和第一个比,再第二个和第二个比……

3.赋值运算符

  • 变量的赋值:=
  • 增量赋值:a+=1(a=a+1)、-=、*=、/=、**=
  • 链式赋值:x=y=z=10(注意是从右向左开始赋值的)
  • 交叉赋值:m=10 n=20 交换值 ——》 m,n=n,m
  • 解压赋值:l=[1,2,3,4,5,6] a,b,c,d,e,f=l 解压赋值,必须一一对应,当列表元素特别多时用a,b,c,*_=l,abc一一对应,4,5,6三个数据会被星号聚合成列表传递给下划线,下划线接收废弃的数据,但是这种方法只能帮助取两边的值,不能取中间的值(解压字典默认解压的是key)

注意:对于a+=1这种复合赋值运算,在进行运算时,等效于展开,但并没有展开,举例来说就是10=5+3并不是先算10=5,再加上3,而是先算5+3=8,再算10*8

4.逻辑运算符

  • and:与,两者必须同时为真才为真,比较非零数字的时候取后面

  • or:或,两者满足一个是真就为真,非零数字比较的时候须选前面

  • not:非,就是取反

  • 优先级:算术运算>比较运算>not>and>or

  • 短路运算:

    10>13 and true
    # 所谓短路运算就是进行逻辑运算时,判断and时如果前面是false,就不继续向下判断,直接返回前面的结果false,同理,or运算前面是true的时候,直接返回true,不会继续向下运算
    

5.成员运算符

in 和 not in:判断元素是否在容器类数据类型中(字符串也可以使用)

6.身份运算符

is :判断id是否相同,如果两个数据的id相同,则一定是相等得(==),但是如果两个数据的值相等,id不一定相同

==:判断的是值

函数介绍print()和len()

​ print()函数就是打印,需要注意的是,print这个函数是没有返回值的,无法传递给变量,也就是传递给变量之后,显示的结果是none

​ 打印多个对象的时候用逗号隔开就行

​ end是设置每一行结束之后的标点,默认情况下是换行(end='\n'),这也是为什么两个print的内容默认呈现两行的原因

​ len()函数是将可迭代对象的长度计算出来

posted @ 2021-07-19 23:52  奇点^  阅读(79)  评论(0)    收藏  举报