什么是变量?

通俗理解就是储存数据的空间的名字,比如购物车

_My _price是不是Python标识符 price在python_全局变量

 

 

定义并使用变量

1 # 苹果单价 元/斤
2 apple_price = 5.5
3 # 苹果重量 斤
4 apple_weight = 10
5 # 计算购买苹果的价格
6 all_price = apple_price * apple_weight
7 print('购买十斤苹果一共需要:', all_price, "元")

输出效果:

_My _price是不是Python标识符 price在python_全局变量_02

注:Python中一个“ = ”代表的是赋值,不是判断是否等于。

变量名 = 变量值

# 定义苹果的单价 元/斤
# 对变量apple_price赋值 5.5
apple_price = 5.5
# 苹果的重量 斤
apple_weight = 10
# 计算购买需要的金额 首先计算右边的结果再赋值给左边的变量
all_price = apple_price * apple_weight
# 执行逻辑:先把变量值计算出来,再赋值给变量名
print("购买苹果的价格一共需要:",all_price,"元")

输出效果:

 

_My _price是不是Python标识符 price在python_赋值_03

 

 注:1、在Python当中,被单\双引号括起来的内容,我们称之为字符串

        2、Python不会对字符串的输出进行处理

        3、字符串和变量之间可以用 “ + ” 号拼接

变量命名的规范:

1、见名知意

2、如果有多个单词,用下划线链接。

3、不能用数字开头

4、变量名称由数字、字母(包括大写字母和小写字母)、下划线组成。最好使用英文,不要使用中文。

5、禁止使用关键字和函数名

(什么是关键字?就是Python的源代码的开发者,事先已经使用了的名字具有特殊含义,咱们不能在使用了)

Python关键字的查看方式

import keyword
print(keyword.kwlist)

关键字:

['False', 'None', 'True', '__peg_parser__', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']

注:变量只能先声明才能使用!

交换两个变量的值

a = 10
b = 5
# Python独有的方式
a,b = b,a
print(a,b)

# 添加一个中间变量交换值
c = 0
c = b
b = a
a = c
print(a)
print(b)

# 不借助中间值
a = a + b
b = a - b
a = a - b
print(a)
print(b)

输出效果:

_My _price是不是Python标识符 price在python_全局变量_04

变量的运用

案例:根据苹果的单价和重量计算金额。

 

# 定义苹果的单价 元/斤
# 对变量apple_price赋值 5.5
apple_price = 5.5
# 苹果的重量 斤
apple_weight = 10
# 计算购买需要的金额 首先计算右边的结果再赋值给左边的变量
all_price = apple_price * apple_weight
# 执行逻辑:先把变量值计算出来,再赋值给变量名
print("购买苹果的价格一共需要:",all_price,"元")

 

输出效果:

_My _price是不是Python标识符 price在python_数据_05

 

 知识点:

1、变量首先计算右边(变量值)的结果,再赋值给左边(变量名)。

2、在Python中不同类型的值是不能用 + 号拼接

 

(例如案例中,"购买苹果的价格一共需要:"这个是字符串,all_price输出的是数值,两个不同类型,故无法用 + 号进行拼接,只能用逗号拼接,仅在Print当中使用)

 

3、print 升级用法:可以填入多种类型的数据,用逗号分隔开,这样可以将里面的内容一次性输出

 

变量的引用

当程序执行过程中,数据在内存中处理,也就是说,所有的数据在内存中都有自己的地址。

id()函数可以检测当前的数据在内存中的地址

代码示例:

# 定义一个变量
a = 10 
# 解读:变量 a 保存了数据10在内存中的地址,当我们读取 a 时,就可以通过这个内存地址读取到10这个数据

print("全局变量 a 在内存中的地址为:",id(a)) # 在print函数中调用了id函数

# 定义函数
def test(num):
    print("{}在函数内部的内存地址是:{}".format(num,id(num)))

    # 定义另一个变量
    result = "hello"
    print("函数的返回值的内存地址是:",id(result))
    return result
test(a)
"""
输出结果:
全局变量 a 在内存中的地址为: 2259036826192
10在函数内部的内存地址是:2259036826192
函数的返回值的内存地址是: 2259042573168
"""

变量本质上保存的是数据的内存地址,这个地址指向了数据在内存中的位置。

如果一个内存空间,没有任何引用指向(变量),那么这个对象就是一个垃圾对象,Python垃圾回收器会自动回收。

 

应用场景:

代码示例:

# 定义一个列表
a = [100]

def test(num):
    num = num + num # 全局变量的值没有改变
    print("函数内部的num的值:",num)

test(a)

print("全局变量 a 的值:",a)

"""
输出结果:
函数内部的num的值: [100, 100]
全局变量 a 的值: [100]
"""


# 定义一个列表
b = [100]

def test(num):
    num += num  # 全局变量的值发生了改变
    print("函数内部的num的值:",num)

test(b)

print("全局变量 b 的值:",b)

"""
输出结果:
函数内部的num的值: [100, 100]
全局变量 b 的值: [100, 100]
"""

分析:

当使用num += num 时,全局变量的值发生了改变;

由于列表是可变的数据类型,+= 表示num指向谁,就对谁进行修改;当 a 传递进来的时候,a 是可变类型,则直接修改。

当使用num = num + num 时,全局变量的值没有改变;

等于号前面的num是一个新的变量,一个等于号是赋值的意思,要先执行等于号右边的结果,将我们的结果保存在内存中,此时,左边的局部变量指向这个值