Python基础之变量进阶

目录

1、变量的引用

1.1引用

1.2函数的参数和返回值的传递

2、可变和不可变数据类型

3,局部变量和全局变量


1、变量的引用

变量和数据都保存在内存中。

python中函数的参数传递以及返回值都是靠引用传递。

1.1引用

变量和数据是分开存储的

数据保存在内存中的一个位置

变量中保存着数据在内存中的地址

变量中记录数据的地址,就叫做引用

id()函数可以查看变量中保存数据的内存地址

注意:变量已经被定义,当给一个变量赋值时,本质是改变数据的引用(变量不再对之前的数据引用,改为对新赋值引用)

1.2函数的参数和返回值的传递

def demo(num):
    print("%d在函数内的内存地址是%x" % (num, id(num)))
    result = 100
    print("返回值%d在函数中的内存地址是%x" % (result, id(result)))
    return result


a = 10
print("函数调用前内存地址是%x" % id(a))
r = demo(a)
print("函数调用后实参内存地址是%x" % id(a))
print("函数调用后返回值的内存地址%x" % id(r))

2、可变和不可变数据类型

不可变数据类型(内存中的数据不允许被修改):

数字类型:int,bool,float,complex

字符串 str

元组 tuple

可变数据类型(内存中的数据可以被修改):

列表:list

字典:dict

注意:字典中的键只能是不可变数据类型

可变数据类型的改变是通过方法

如果给可变数据类型赋一个新值,引用会修改

哈希(hash)

hash()函数接收一个不可变数据类型作为参数,返回一个整数

在python中,设置字典键值对,会首先对字典的键进行hash,决定如何在内存中保存字典的数据,以方便后续对字典的增,删,改,查

3,局部变量和全局变量

局部变量是在函数内部定义的变量,只能在函数内部使用。函数执行结束后,函数内部的局部变量会被系统回收,不同函数可以定义相同名字的局部变量,彼此之间不会有影响。

局部变量的生命周期:

局部变量在函数执行的时候才会被创建,函数执行结束被系统回收,局部变量在生命周期内,可以用来存储函数内部临时使用到的数据。

全局变量是在函数外部定义的变量,所有函数内部都可以使用这个变量。

注意:函数执行时,需要处理变量会首先在函数内部查找是都存在执行名称的局部变量,如果有,直接使用,如果没有,在函数外部查找是否存在指定名称的全局变量,如果有,直接使用,如果没有,报错。

1.函数不能直接修改全局变量的引用

全局变量是在函数外部定义的变量,所有函数内部都可以使用这个变量

提示:在其他开发语言中,大多不推荐使用全局变量--可变范围太大,导致程序不好维护

在函数内部,可以通过全局变量的引用获取对应的数据

但是,不允许直接修改全局变量的引用--使用赋值语句修改全局变量的值

注意:在函数内部对全局变量进行赋值,只是新定义一个与全局变量变量名相同的局部变量,如果需要修改全局变量,需要使用global关键字进行声明

def demo01():
    num = 100
    print("num=%d id(num)=%d" % (num, id(num)))
    return num


# 调用函数  在函数的外部不能直接访问局部变量
# print(num)
ret = demo01()


# 全局变量  在函数外面定义的变量就是全局变量
# 作用:所有函数都能访问,作为函数通信的桥梁,一般放在最前面
# 一般情况,为了区分全局变量和一般变量,需要加上g_或者gl_前缀
g_num = 200
print("g_num:%d, id(g_num):%d" % (g_num, id(g_num)))


def demo02():
    # 注意:在函数内部修改全局变量,必须加上global关键字
    # global关键字就是告诉python解释器,我修改的是全局变量
    global g_num
    g_num = 300
    print("demo02:%d, id(demo02):%d" % (g_num, id(g_num)))


def demo03():
    print("demo02:%d, id(demo02):%d" % (g_num, id(g_num)))


demo02()
demo03()

全局变量定义的位置:为了保证所有函数都能正确使用全局变量,应该将全局变量定义在其他函数的上方。

全局变量命名建议:为了避免全局变量和局部变量混淆,在进行全局变量定义时,全局变量前面增加g_或者gl_的前缀

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值