十、变量

十、变量

(1)为什么需要变量

  • 一个程序就是一个世界

  • 变量是程序的基本组成单位

    1. 不论是使用哪种高级程序语言编写程序,变量都是其程序的基本组成单位

    2. 变量有三个基本要素(类型+名称+值)

    3. 应用实例

    # @File    : var_example.py
    # @Time    : 2026/6/26 15:41
    # 定义一个变量,变量的名称a,变量的值是1, 1是int类型(整数类型)
    a = 1
    # 定义一个变量,变量的名称b,变量的值是2, 2是int类型(整数类型)
    b = 2
    # 变量b的值修改成8,变量b的值就是8,8是int类型
    b = 8
    print("a的值是", a, "类型是", type(a))   # a的值是 1 类型是 <class 'int'>
    print("b的值是", b, "类型是", type(b))   # b的值是 8 类型是 <class 'int'>
    
  • 当程序/代码执行后,变量的值是存在计算机内存的

    内存(Memory)是计算机的重要部件,它用于暂时存放CPU中的运算数据,以及与硬盘等外部存储交换的数据。它是外存与CPU进行沟通的桥梁,计算机中所有程序的运行都在内存中进行

image

(2)变量的介绍

  • 变量的概念。

    1. 变量相当于内存中一个数据存储空间的表示

    2. 你可以把变量看做是一个房间的门牌号,通过门牌号我们可以找到房间,而通过变量名可以访问到变量(值)。

    3. 需要先定义变量,才能使用,否则会提示not defined

      # 变量使用的错误用法
      print(c)   # name 'c' is not defined
      

(3)变量快速入门

  • 演示记录人的信息并输出的程序
# @File    : 02_quick_start.py
# @Time    : 2026/6/26 16:02
name = "tom"  # 字符串
age = 20       # 整形
score = 80.4   # 浮点型
gender = "男"  # 字符串

# 输出信息
print("个人信息如下")
print(name)
print(age)
print(score)
print(gender)

# 输出信息
print("个人信息如下", name, age,score,gender)

(4)格式化输出

  1. %操作符
    参考: https://blog.csdn.net/hesongzefairy/article/details/1041794192)

  2. # @File    : 03_format_output.py.py
    # @Time    : 2026/6/26 16:32
    
    age = 80
    score = 77.5
    gender = '男'
    name = "贾宝玉"
    
    # % 操作符输出
    print("个人信息: %s  %d  %s  %.2f" %(name, age, gender, score))  # %.2f"保留两位小数
    
  3. format()函数

    参考:https://www.runoob.com/python/att-string-format.html

    # format()函数
    print("个人信息: {}  {}  {}  {}".format(name, age, gender, score))
    
  4. If-strings【推荐】
    参考: https://blog.csdn.net/weixin_44200553/article/details/130408971

    print(f"个人信息:{name} {age} {score} {gender}")
    

(5)程序中+号的使用

  1. 当左右两边都是数值型时,则做加法运算

  2. 当左右两边都是字符串,则做拼接运算

  3. 举例说明

    name = "king"
    score = 50.8
    
    print(score + 90)  # 140.8
    print(name + " hi")  # king hi
    print("100" + "98")  # 10098
    print(34.5 + 100)  #134.5
    # print(2 + "5")   # 报错
    

(6)数据类型

  • 基本数据类型-目前用到的

    类型 描述
    整型int 整数:比如1,-1,200等
    浮点数float 小数:比如1.1-4.5900.9等
    布尔值bool 布尔值就是我们常说的逻辑,可以理解为对(True)或错(False)
    字符串(string) 字符串就是字符组成的一串内容,Python中用成对的单引号或双引号括起来,比如“~hello”
    1. Python中的变量在使用前都必须赋值,变量赋值以后该变量才会被创建。
    2. 我们所说的"类型"是变量所指的内存数据的类型。
  • type()函数-查看数据类型

    1. type()基本使用

      语法:type(object)

      object就是你要查看类型的数据,可以是一个数据的类型具体的数据(即:字面量),也可以是变量(也就是查看该变量指向的数据的类型)

      # @File    : 05_type_func.py
      # @Time    : 2026/6/27 16:01
      name = "tom"  # 字符串
      age = 20       # 整形
      score = 80.4   # 浮点型
      gender = "男"  # 字符串
      is_pass = True # bool类型
      
      print(type(name))
      print(type(age))
      print(type(gender))
      print(type(score))
      print(type(is_pass))
      
      # type可以直接查看具体的值(字面量)的类型
      print(f"hello 的类型是{type("hello")}")
      print(f"1.1 的类型是{type(1.1)}")
      print(f"30 的类型是{type(30)}")
      print(f"True 的类型是{type(True)}")
      

(7)整数类型

  • Python整型就是用于存放整数值的,比如12,30,3456,-1等等

  • 整数使用的细节

    1. Python 中的型, 可以表示大的数(官方: the limit (4300 digits) for integer)

      # 在Python中,int可以表达很大的数
      # ValueError: Exceeds the limit (4300 digits) for integer string conversion; use sys.set_int_max_str_digits() to increase the limit
      n3 = 9 ** 8888
      print("n3 = ", n3, type(n3))
      
    2. Python的整数有十进制,十六进制,八进制,二进制

      • 十进制就是我们最常见的写法,比如1、66、123等
      • 十六进制写法:加前缀0x,由0-9和A-F的数字和字母组合
      • 八进制写法:加前缀0o,由0-7数字组合
      • 二进制写法:加前缀0b,只有0和1数字组合
      • 运行时,会自动转换为十进制输出
      print(10)  # 10进制
      print(0x10)  # 16进制
      print(0o10) # 8进制
      print(0b10) # 二进制
      
  • Python中的整型占多少个字节?

    字节(byte):计算机中基本存储单元

    位(bit):计算机中的最小存储单位

    1byte = 8 bit

    1. 字节数随着数字增大而增大(即:python整型是变长的)

    2. 每次的增量是4个字节

    3. 参考文档:

      http://zxi.mytechroad.com/blog/desgin/python中的整型占多少个字节?/

    4. 以n=3为例,画出在内存中如何存储的

      n1 = 0
      n2 = 1
      n3 = 2
      n4 = 2 ** 14
      n5 = 2 ** 30
      n6 = 2 ** 128
      # 在Python中,可以通过sys.getsizeof返回对象(数据)的大小(按照字节单位返回)
      print(n1, sys.getsizeof(n1), "类型", type(n1))
      print(n2, sys.getsizeof(n2), "类型", type(n2))
      print(n3, sys.getsizeof(n3), "类型", type(n3))
      print(n4, sys.getsizeof(n4), "类型", type(n4))
      print(n5, sys.getsizeof(n5), "类型", type(n5))
      print(n6, sys.getsizeof(n6), "类型", type(n6))
      
      '''
      0 28 类型 <class 'int'>
      1 28 类型 <class 'int'>
      2 28 类型 <class 'int'>
      16384 28 类型 <class 'int'>
      16384 32 类型 <class 'int'>
      1073741824 44 类型 <class 'int'>
      '''
      

(8)浮点类型

  • Python的浮点类型可以表示一个小数,比如123.4,7.8,-0.12等等

  • 案例演示

    n1 = 4.5
    n2 = -3.6
    print("n1 =", n1)
    print("n2 =", n2)
    
  • 浮点型使用细节

    1. 浮点数表示形式如下

      • 十进制数形式:如:5.12,.512(必须有小数点)

      • 科学计数法形式:如:5.12e2,5.12E-2

        #科学计数法形式:如:5.12e2,5.12E-2
        n5 = 5.12e2 # 5.12乘以10的2次方
        n6 = 5.12E-2 # 5.12除以10的2次方
        print("n5 =", n5)
        print("n6 =",n6)
        
    2. 浮点数有大小限制边界值为:

      max=1.7976931348623157e+308

      min=2.2250738585072014e-308

    3. 浮点类型计算后,存在精度的损失,可以使用 Decimal 类进行精确计算

    4. 案例说明

      # 1. 为了避免浮点数的精度问题,可以使用Decimal 类进行精确计算
      # 2. 如果使用Decimal 类,需要导入Decimal 类
      from decimal import Decimal
      
      b = 8.1 / 3  # 2.7
      b2 = Decimal("8.1") / Decimal("3")
      print(b)  # 2.6999999999999997
      print(b2)  # 2.7
      

(9)布尔类型bool

  • 基本介绍

    1. 布尔类型也叫bobI类型,取值True和False

    2. True和False都是关键字,表示布尔值

    3. bool 类型适于逻辑运算,一般用于程序流程控制

      • 条件控制语句

      • 循环控制语句

        比如判断某个条件是否成立,或者在某个条件满足时执行某些代码

  • 案例演示

    # @File    : 08_bool_detail.py
    # @Time    : 2026/6/28 11:03
    num1 = 100
    num2 = 200
    if num1 < num2:
        print("num1 < num2")
    
    # 表示把num1 > num2 的结果赋值给result变量
    result = num1 > num2
    print("result =", result) # result = False
    print("result的类型", type(result))  # result的类型 <class 'bool'>
    
  • 使用细节

    1. 布尔类型只有两个值:True 和False

    2. 布尔类型可以和其他数据类型进行比较,比如数字、字符串等。在比较时,Python会将True视为1,False 视为0

      b1 = False
      b2 = True
      print(b1 + 10)  # 10
      print(b2 + 10)  # 11
      
    3. 在Python中,非0被视为真值,0值被视为假值

      if(0):
          print("你好")  # 无输出
      if(-1):
          print("嘻嘻")  # 嘻嘻
      

(10)字符串str

  • 基本介绍

    1. 字符串是Python中很常用的数据类型,通俗来说,字符串就是字符组成的一串内容

    2. 使用引号('或")包括起来,创建字符串

      #使用引号('或")包括起来,创建字符串
      str1 = 'tom说: "hello"'
      # str1 = "tom说: \"hello\""
      print(str1)
      str2 = 'jack说: \'hi\''
      # str2 = "jack说: 'hi'"
      print(str2)
      
    3. str就是string的缩写,在使用type()查看数据类型时,字符串类型显示的是str

      print(f"str2的类型:{type(str2)}")  # str2的类型:<class 'str'>
      
    4. 通过加号可以连接字符串

  • 使用注意事项

    1. Python不支持单字符类型,单字符在Python中也是作为一个字符串使用

      Str3 = 'A'
      print(type(Str3))  # <class 'str'>
      
    2. 用三个单引号'''内容"',或三个双引号"""内容"""可以使字符串内容保持原样输出,在输出格式复杂的内容是比较有用的,比如输出一段代码.

      content = """be
      the cat's whiskers/pyjamas
      (informal)最棒的东西(或主意、人等)to be the best thing, person, idea, etc.3
      He thinks he's the cat's whiskers (= he has a high opinion of himself)
      他自以为了不起"""
      print(content)
      
    3. 在字符串前面加'r’可以使整个字符串不会被转义

      str4 = "jeck\ntom\tking"
      print(str4)
      '''
      jeck
      tom king
      '''
      str4 = r"jeck\ntom\tking"
      print(str4)
      # jeck\ntom\tking
      

    字符串驻留机制

    说明:Python仅保存一份相同且不可变字符串,不同的值被存放在字符串的驻留池中,Python的驻留机制对相同的字符串只保留一份拷贝,后续创建相同字符串时,不会开辟新空间,而是把该字符串的地址赋给新创建的变量

image-20260628114639413

str1 ="Hello"
str2 = "Hello"
str3 = "Hello"
print("str1的地址:", id(str1))
print("str2的地址:", id(str2))
print("str3的地址:", id(str3))

'''
str1的地址: 2114937253456
str2的地址: 2114937253456
str3的地址: 2114937253456
'''
  • 驻留机制几种情况讨论(注意:需要在交互模式下 win+r->python)

    1. 字符串是由26个英文字母大小写,0-9,_组成

      image-20260628114909704

    2. 字符串长度为0或者1时

      image

    3. 字符串在编译时进行驻留,而非运行时

      image-20260628115118051

    4. [-5,256]的整数数字

      image-20260628115236184

      image-20260628115251641

  • PyCharm对字符串行了优化处理,使得不在上述范围内也可以实现驻留机制

  • sys中的intern方法可以强制2个字符串指向同一个对象

  • image-20260628115733749

(11)数据类型转换

  • 隐式类型转换

    1. Python变量的类型不是固定,会根据变量当前值在运行时决定的,可以通过内置函数type(变量)来查看其类型,这种方式就是隐式转换,有的书也称为自动转换

      #Python根据该变量使用的(即当前值)上下文在运行时决定的
      var1 =10
      print(type(var1))
      var1 = 1.1
      print(type(var1))
      var1="zkk"
      print(type(var1))
      
    2. 在运算的时候,数据类型会向高精度自动转换

      #在运算的时候,数据类型会向高精度转换,float的精度高于int
      var2 = 10
      var3 = 1.2
      var4 = var2 + var3
      print("var4=", var4, "var4的类型:", type(var4))  # var4= 11.2 var4的类型: <class 'float'>
      var2 = var2 + 0.1
      print("var2=", var2, "var2的类型:", type(var2))  # var2= 10.1 var2的类型: <class 'float'>
      
  • 显式类型转换

    1. 如果需要对变量数据类型进行转换,只需要将数据类型作为函数名即可,这种方式就是显示转换/强制转换

    2. 以下几个内置的函数可以完成数据类型之间的转换。函数会返回一个新的对象/值,就是强制转换后的结果

      函数 描述
      int(x[.base]) 将x转换为一个整数
      float(x) 将x转换到一个浮点数
      complex(real[.imagl) 创建一个复数
      str(x) 将对象x转换为字符串
      repr(x) 将对象x转换为表达式字符申
      eval(str) 用来计算在字符串中的有效Python表达式,并返回一个对象
      tuple(s) 将序列s转换为一个元组
      list(s) 将序列s转换为一个列表
      set(s) 转换为可变集合
      dict(d) 创建一个字典。d必须是一个(key,value)元组序列。
      frozenset(s) 转换为不可变集合
      chr(x) 将一个整数转换为一个字符
      # @File    : 12_type_force_change.py
      # @Time    : 2026/6/28 17:37
      # 显示类型转换案例
      
      i = 10
      j = float(i)
      print("j的类型", type(j), "j=", j) # j的类型 <class 'float'> j= 10.0
      
      k = str(i)
      print("k的类型", type(k), "k=", k) # k的类型 <class 'str'> k= 10
      
  • 显式类型转换注意事项

    1. 不管什么值的int,float都可以转成str,str(x)将对象x转换为字符串

    2. int转成float时,会增加小数部分,比如123 -> 123.0,float转成int时,会去掉小数部分比如123.65 -> 123

    3. str 转int,float使用int(x),float(x)将对象x转换为int/float

    4. 在将str类型转成木数据类型时,要确保str值能够转成有效的数据,比如我们可以把"123",转成一个整数但是不能把"hello”转成一个整数,如果格式不正确,程序会报ValueError,程序就会终止

    5. 对一个变量进行强制转换,会返回一个数据/值,注意,强制转换后,并不会影响原变量的数据类型(即:不会影响原变量指向的数据/值的数据类型),示意图说明

      image-20260628175041807

  • 练习

    # @File    : 13_type_change_exercise.py
    # @Time    : 2026/6/28 17:52
    # 课堂练习题5min思考
    i = 10
    j = float(i)
    print(type(i))  # int
    print(type(j))  # float
    i = j + 1
    print(type(i)) # float
    print(type(j)) # float
    print(i)  # 11.0
    print(int(i)) # 11
    print(type(i)) # float
    
posted @ 2026-06-28 18:20  尘白  阅读(7)  评论(0)    收藏  举报