yyz notes yyz notes
首页
  • RBAC权限设计
  • 架构图标设计
  • 账号体系
  • python基础
  • python高级
  • python模块
  • python设计模式
  • python数据结构与算法
  • django
  • django-DRF
  • flask
  • 直接设计开源pip包
  • 直接设计开源项目
  • python示例题/脚本
  • python面试题
  • golang基础
  • golang高级
  • golang常用组件
  • gin框架
  • es6
  • javascript
  • react
  • vue
  • TypeScript
  • mysql
  • redis
  • minio
  • elasticsearch
  • mongodb
  • 消息队列
  • 自动化测试
  • 操作系统

    • linux
    • windows
  • nginx
  • docker
  • k8s
  • git
  • ldap
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

益章

可乐鸡翅
首页
  • RBAC权限设计
  • 架构图标设计
  • 账号体系
  • python基础
  • python高级
  • python模块
  • python设计模式
  • python数据结构与算法
  • django
  • django-DRF
  • flask
  • 直接设计开源pip包
  • 直接设计开源项目
  • python示例题/脚本
  • python面试题
  • golang基础
  • golang高级
  • golang常用组件
  • gin框架
  • es6
  • javascript
  • react
  • vue
  • TypeScript
  • mysql
  • redis
  • minio
  • elasticsearch
  • mongodb
  • 消息队列
  • 自动化测试
  • 操作系统

    • linux
    • windows
  • nginx
  • docker
  • k8s
  • git
  • ldap
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • python基础

    • python概述

    • python环境搭建

    • python基础语法

      • 变量与常量
        • 简介
        • 链接资料
        • 1.1 变量名规范
        • 1.2 *向多个变量赋值*
        • 1.3 变量交换
        • 1.4 内存指向
        • 1.5 Python中变量在内存中的存储(放置到数据类型)
          • 1. 引用和对象
          • 2. 可变数据类型和不可变数据类型
          • 3. 引用传递和值传递(函数传值)
      • 基本数据类型-整数类型
      • 基本数据类型-浮点数类型
      • 基本数据类型-复数类型
      • 基本数据类型-布尔类型
      • 基本数据类型-bytes类型
      • 复杂数据类型-序列
      • 复杂数据类型-字符串
      • 复杂数据类型-列表
      • 复杂数据类型-元组
      • 复杂数据类型-字典
      • 复杂数据类型-集合
      • list,tuple,dict,set的区别和联系
      • 推导式
      • 浅拷贝和深拷贝
      • 运算符
      • 输入输出
    • python关键字与标识符

    • python流程控制

    • python函数

    • python内置函数

    • python面向对象

    • python模块与包

    • python文件IO与OS

    • python异常处理机制

  • python高级

  • python模块

  • python设计模式

  • python数据结构与算法

  • django

  • django-DRF

  • flask

  • 自己设计开源pip包

  • 自己设计开源项目

  • python小示例

  • python面试题

  • python
  • python基础
  • python基础语法
YiZhang-You
2023-05-09
目录

变量与常量

# 变量与常量

# 简介

任何编程语言都需要处理数据,比如数字、字符串、字符等,我们可以直接使用数据,也可以将数据保存到变量中,方便以后使用。

变量(Variable)可以看成一个小箱子,专门用来“盛装”程序中的数据。每个变量都拥有独一无二的名字,通过变量的名字就能找到变量中的数据。

从底层看,程序中的数据最终都要放到内存(内存条)中,变量其实就是这块内存的名字。

和变量相对应的是常量(Constant),它们都是用来“盛装”数据的小箱子,不同的是:变量保存的数据可以被多次修改,而常量一旦保存某个数据之后就不能修改了

# 链接资料

  1. c语言中文网

    Python变量的定义和使用 (opens new window)

  2. 自己gitee总结

# 1. 变量

变量**是一块保留的内存区域(内存地址)来存储值。**格式为: 【变量名 = 值】,通过变量名来操作其对应的值。例如:

age = 18
name = "xxx"
1
2

弱类型语言有两个特点:

  • 变量无须声明就可以直接赋值,对一个不存在的变量赋值就相当于定义了一个新变量。
  • 变量的数据类型可以随时改变,比如,同一个变量可以一会儿被赋值为整数,一会儿被赋值为字符串。

# 1.1 变量名规范

Python中的变量名不是随便定义的,关于变量名的定义需要遵循如下规范:

  • 三条规范(必须遵循,否则定义变量会报错)

    • 变量名只能由 字母、数字、下划线 组成。
    • 变量名不能以数字开头。
    • 变量名不能是Python内置关键字,如:[‘and’, ‘as’, ‘assert’, ‘break’, ‘class’, ‘continue’, ‘def’, ‘del’, ‘elif’, ‘else’, ‘except’, ‘exec’, ‘finally’, ‘for’, ‘from’, ‘global’, ‘if’, ‘import’, ‘in’, ‘is’, ‘lambda’, ‘not’, ‘or’, ‘pass’, ‘print’, ‘raise’, ‘return’, ‘try’, ‘while’, ‘with’, ‘yield’]
  • 二条建议(遵循可以显得更加专业,不遵循也可以正常运行不报错)

    • 下划线命名法,多个单词表示的变量名用下划线连接(均小写)

      father_age = 18
      father_name = "xxx"
      
      1
      2
    • 见名知意,通过阅读变量名就能知道此变量的含义。

      age = 18
      color = "red"
      current_user_first_name = "xxx"
      
      1
      2
      3

# 1.2 *向多个变量赋值*

Python 允许您在一行中为多个变量赋值:

x, y, z = "Orange", "Banana", "Cherry"
print(x)
print(y)
print(z)
1
2
3
4

# 1.3 变量交换

x = 1
y = 2
x1, y1 = y, x
print(x1)
print(y1)
1
2
3
4
5

# 1.4 内存指向

通过学习上述变量知识让我们对变量了有了初步认识,接下来我们就要从稍稍高级一些的角度来学习变量,即:内存指向(在电脑的内存中是怎么存储的)。

情景一

name = "xxx"
1

在计算机的内存中创建一块区域保存字符串”xxx”,name变量名则指向这块区域。

情景二

name = "xxx"
name = "aaa"
1
2

在计算机的内存中创建一块区域保存字符串”xxx”,name变量名则指向这块区域。然后又再内存中创建了一块域保存字符串”aaa”,name变量名则指向”aaa”所在的区域,不再指向”xxx”所在区域(无人指向的数据会被标记为垃圾,由解释器自动化回收)

情景三

name = "xxx"
new_name = name
1
2

在计算机的内存中创建一块区域保存字符串”xxx”,name变量名则指向这块区域。new_name变量名指向name变量,因为被指向的是变量名,所以自动会转指向到name变量代表的内存区域。

情景四

name = "xxx"
new_name = name
name = "aaa"
1
2
3

在计算机的内存中创建一块区域保存字符串”xxx”,name变量名则指向这块区域(灰色线), 然后new_name指向name所指向的内存区域,最后又创建了一块区域存放”aaa”,让name变量指向”aaa”所在区域.

情景五

num = 18
age = str(num)
1
2

在计算机的内存中创建一块区域保存整型18,name变量名则指向这块区域。通过类型转换依据整型18再在内存中创建一个字符串”18”, age变量指向保存这个字符串的内存区域。

# 1.5 Python中变量在内存中的存储(放置到数据类型)

# 1. 引用和对象

  • 对象:当创建数据对象时,在内存中会保存对象的值,这个值就是对象自己
  • 引用:对象保存在内存空间,外部想要使用对象的值,就需要使用引用来操作对象。内存中会保存对象引用的数量,当某个对象的引用为0时,对象就会被回收。

# 2. 可变数据类型和不可变数据类型

  • 可变数据类型

    可变数据类型:允许变量的值进行改变,对于变量给值的过程中,只是改变了变量的值,而不会新建一个对象,所以可变数据类型的意思就是说对一个变量进行操作时,其值是可变的,值的变化并不会引起新建对象,即地址是不会变的,只是地址中的内容变化了或者地址得到了扩充。
    
    1
  • 不可变数据类型

    对象本身的值不可变,如果改变了变量的值,相当于新建一个对象,而对于相同的值的对象,在内存中只有一个对象
    
    1

可变数据对象:列表(list)、字典(dict)

不可变数据对象:数值类型(int、float、bool)、string(字符串)、tuple(元组)

注:此处的可变和不可变,是指内存中的对象(value)是否可以改变,对于不可变类型的对象,在对对象进行操作的时候,必须要在内存中重新开辟一块新的区域。对于可变类型的对象,在对对象进行操作的时候,不会重新申请新的地址,而是在该 对象的地址后面继续申请即可。

总结:可变数据类型更改值后,内存地址不发生改变;不可变数据类型更改值后,内存地址发生改变。

# 3. 引用传递和值传递(函数传值)

说明:可变对象为引用传递,不可变对象为值传递。

  • 引用传递:传递列表或者字典时,如果改变引用的值,就修改了原始的对象

    def check(a): # 因为列表是可变对象
        print(a)
        print(id(a))
        a.append([1, 2, 3])
        return a
    
    a = [3, 4, 5]
    print(check(a))
    print(id(a))
    
    """
    [3, 4, 5]
    44909288
    [3, 4, 5, [1, 2, 3]]
    44909288
    """
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
  • 值传递:当传递不可变对象时,如果改变引用变量的值,只是创建了不同的对象,原始对象并没有改变

    def check1(a):  # 因为字符串是不可变对象,所有重新创建了地址
        print(a)
        print(id(a))
        a = "i am test"
        print(id(a))
        return a
    
    a = "This is aa"
    print(check1(a))
    print(id(a))
    """
    This is aa
    58547040
    58547120
    i am test
    58547040
    """
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17

# 2. 常量

常量就是不变的变量,比如常用的数学常数圆周率就是一个常量。在Python中,通常用全部大写的变量名表示常量:

PI = 3.14159265359
print(PI)
PI = 2
print(PI)

"""
3.14159265359
2
"""
1
2
3
4
5
6
7
8
9

但事实上,从Python语法角度看,PI仍然是一个变量,因为Python根本没有任何机制保证PI不会被改变。你完全可以给PI赋值为10,不会弹出任何错误。所以,用全部大写的变量名表示常量只是一个习惯上的用法。

编辑 (opens new window)
上次更新: 2023/05/17, 23:08:21
python环境搭建
基本数据类型-整数类型

← python环境搭建 基本数据类型-整数类型→

最近更新
01
配置yun源
05-24
02
linux-配置python虚拟环境
05-24
03
linux文件目录管理
05-24
更多文章>
Theme by Vdoing | Copyright © 2023-2023 yizhang | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式