前言
从今天开始,我就不用“学习之路”这个标题了,感觉突出不了重点,都没啥人看啊!前面我们已经学习了Python的基础语法,了解了Python的分支结构,也就是选择结构、循环结构以及函数这些具体的框架,还学习了列表、元组、字典、字符串这些Python中特有的数据结构,还用这些语法完成了一个简单的名片管理系统。下面我就将介绍一下Python的一些进阶语法规则,为后面更复杂的编程打下基础。
引用
引用这个名词相信学过C语言和C++指针的同学应该有点印象,引用和指针还是一个很容易被混淆的概念。简单来说,引用是一个变量,是另外一个你想被引用的变量的别名,就像是你给某个人起的一个外号,你用这个外号来代替他的名字来称呼他,类似于一个副本。在Python中,变量和数据是分开存储的,数据保存在内存中的一个位置,变量中保存数据在内存中的地址。变量中记录数据的地址,就叫做引用。下面是在终端中运行ipython这个Python的交互式窗口,其中id()函数是返回对象的内存地址。
a = 1实际上就是将a这个标签贴在1上,b = a同样也是把b这个标签贴在1上,所以b和a都是1的引用,当a = 2时,a这个标签就会贴在2上,然而b不会因为b = a这个语句发生变化,其任然是1的引用。
def test(num):
print("在函数内部 %d 对应的内存地址是 %d " % (num, id(num)))
# 1.定义一个字符串变量
result = "hello"
print("函数要返回数据的内存地址是 %d " % id(result))
# 2.将字符串变量返回,返回的是数据的引用,而不是数据本身
return result
# 1.定义一个数字的变量
a = 10
# 数据的地址本质上就是一个数字
print("a 变量保存数据的内存地址是 %d" % id(a))
# 2.调用test函数,本质上传递的是实参保存数据的引用,而不是实参保存的数据
# 注意:如果函数有返回值,但是没有定义变量接收
# 程序不会报错,但是无法获得返回结果
r = test(a)
print("%s 的内存地址是 %d" % (r,id(r)))
# 输出结果
a 变量保存数据的内存地址是 10914784
在函数内部 10 对应的内存地址是 10914784
函数要返回数据的内存地址是 139989701883752
hello 的内存地址是 139989701883752
局部变量和全局变量
简而言之,局部变量就是在函数内部定义的变量,只能在函数内部使用(后面会学类,在类内部使用),在函数外部不可被发现,不可被使用。全局变量就是定义在模块内,在所有的函数、类的外面。
局部变量:
def demo1():
# 定义一个局部变量
# 1.出生:执行了下方的代码之后,才会被创建
# 2.死亡:函数执行完成之后
num = 10
print("在demo1函数内部的变量是 %d" % num)
def demo2():
num = 99
print("%d" % num)
pass
# 在函数内部定义的变量,不能在其他位置使用
# print(num) 这里如果这样写的话会报错
demo1()
demo2()
# 运行结果
在demo1函数内部的变量是