如何在Python中使用变量?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
目标
01. 变量的引用
1.1 引用的概念
在 Python 中
注意:如果变量已经被定义,当给一个变量赋值的时候,本质上是 修改了数据的引用
变量 不再 对之前的数据引用
变量 改为 对新赋值的数据引用
1.2 变量引用 的示例
在 Python 中,变量的名字类似于 便签纸 贴在 数据 上
1.3 函数的参数和返回值的传递
在 Python 中,函数的 实参/返回值 都是是靠 引用 来传递来的
def test(num):
print("-" * 50)
print("%d 在函数内的内存地址是 %x" % (num, id(num)))
result = 100
print("返回值 %d 在内存中的地址是 %x" % (result, id(result)))
print("-" * 50)
return result
a = 10
print("调用函数前 内存地址是 %x" % id(a))
r = test(a)
print("调用函数后 实参内存地址是 %x" % id(a))
print("调用函数后 返回值内存地址是 %x" % id(r))
02. 可变和不可变类型
不可变类型,内存中的数据不允许被修改:
数字类型 int, bool, float, complex, long(2.x)
字符串 str
元组 tuple
可变类型,内存中的数据可以被修改:
a = 1
a = "hello"
a = [1, 2, 3]
a = [3, 2, 1]
demo_list = [1, 2, 3]
print("定义列表后的内存地址 %d" % id(demo_list))
demo_list.append(999)
demo_list.pop(0)
demo_list.remove(2)
demo_list[0] = 10
print("修改数据后的内存地址 %d" % id(demo_list))
demo_dict = {"name": "小明"}
print("定义字典后的内存地址 %d" % id(demo_dict))
demo_dict["age"] = 18
demo_dict.pop("name")
demo_dict["name"] = "老王"
print("修改数据后的内存地址 %d" % id(demo_dict))
注意:字典的 key 只能使用不可变类型的数据
注意
可变类型的数据变化,是通过 方法 来实现的
如果给一个可变类型的变量,赋值了一个新的数据,引用会修改
变量 不再 对之前的数据引用
变量 改为 对新赋值的数据引用
哈希 (hash)
Python 中内置有一个名字叫做 hash(o) 的函数
接收一个 不可变类型 的数据作为 参数
返回 结果是一个 整数
哈希 是一种 算法,其作用就是提取数据的 特征码(指纹)
相同的内容 得到 相同的结果
不同的内容 得到 不同的结果
在 Python 中,设置字典的 键值对 时,会首先对 key 进行 hash 已决定如何在内存中保存字典的数据,以方便 后续 对字典的操作:增、删、改、查
键值对的 key 必须是不可变类型数据
键值对的 value 可以是任意类型的数据
03. 局部变量和全局变量
提示:在其他的开发语言中,大多 不推荐使用全局变量 —— 可变范围太大,导致程序不好维护!
3.1 局部变量
局部变量的作用
def demo1():
num = 10
print(num)
num = 20
print("修改后 %d" % num)
def demo2():
num = 100
print(num)
demo1()
demo2()
print("over")
局部变量的生命周期
3.2 全局变量
# 定义一个全局变量
num = 10
def demo1():
print(num)
def demo2():
print(num)
demo1()
demo2()
print("over")
注意:函数执行时,需要处理变量时 会:
首先 查找 函数内部 是否存在 指定名称 的局部变量,如果有,直接使用
如果没有,查找 函数外部 是否存在 指定名称 的全局变量,如果有,直接使用
如果还没有,程序报错!
1) 函数不能直接修改 全局变量的引用
提示:在其他的开发语言中,大多 不推荐使用全局变量 —— 可变范围太大,导致程序不好维护!
num = 10
def demo1():
print("demo1" + "-" * 50)
# 只是定义了一个局部变量,不会修改到全局变量,只是变量名相同而已
num = 100
print(num)
def demo2():
print("demo2" + "-" * 50)
print(num)
demo1()
demo2()
print("over")
注意:只是在函数内部定义了一个局部变量而已,只是变量名相同 —— 在函数内部不能直接修改全局变量的值
2) 在函数内部修改全局变量的值
num = 10
def demo1():
print("demo1" + "-" * 50)
# global 关键字,告诉 Python 解释器 num 是一个全局变量
global num
# 只是定义了一个局部变量,不会修改到全局变量,只是变量名相同而已
num = 100
print(num)
def demo2():
print("demo2" + "-" * 50)
print(num)
demo1()
demo2()
print("over")
3) 全局变量定义的位置
a = 10
def demo():
print("%d" % a)
print("%d" % b)
print("%d" % c)
b = 20
demo()
c = 30
注意
代码结构示意图如下

4) 全局变量命名的建议
Python的优点有哪些
1、简单易用,与C/C++、Java、C# 等传统语言相比,Python对代码格式的要求没有那么严格;2、Python属于开源的,所有人都可以看到源代码,并且可以被移植在许多平台上使用;3、Python面向对象,能够支持面向过程编程,也支持面向对象编程;4、Python是一种解释性语言,Python写的程序不需要编译成二进制代码,可以直接从源代码运行程序;5、Python功能强大,拥有的模块众多,基本能够实现所有的常见功能。
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注天达云行业资讯频道,感谢您对天达云的支持。