Python内存管理与函数进阶:引用机制、可变类型与lambda表达式深度解析
文章目录
一、引用变量
在大多数编程语言中,值的传递通常可以分为两种形式“值传递与引用(地址)传递”,但是在Python中变量的传递基本上都是引用(地址)传递。
验证Python中变量的引用关系:可以使用内置方法id(),其参数就是要显示的变量信息 => id(变量名称)
代码展示:
a = 10
print(id(a))
运行效果:

其中变量a在内存底层的存储形式如下图所示:

说明: 首先在计算机内存中创建一个数值10(占用一块内存空间);在栈空间中声明一个变量,如a;再把数值10的内存地址赋予给变量a,形成所谓的“引用关系”
思考: 如果把一个变量赋予给另外一个变量,内存地址会有什么变化吗?
这就需要我们用到Python中关于可变和非可变数据类型了。
二、可变类型与非可变类型
1、不可变类型
不可变类型 是指内存地址一旦固定,其值就不能发生改变,若不可变类型重新赋值,id(变量)会改变 。
不可变类型包括:
数值类型(int整型、float浮点类型)
bool类型(True和False)
字符串类型(str)
元组类型(tuple)
代码展示:
a = 10
b = a
a = 100
print(b)
print(id(a))
print(id(b))
运行效果:

原理图如下:

注: 不可变数据类型(数值)在赋值以后,其中一个值的改变不影响另外一个变量,因为两者指向空间地址不同。不可变类型在函数中,局部或全局的改变对外部和内部都没有任何影响。
2、可变类型
可变类型是指内存地址一旦固定,其值是可以发生改变,若可变类型重新赋值,id(变量名)不会改变。
不可变类型包括:
列表(list)
字典(dict)
集合(set)
代码展示:
a = [1, 2, 3]
print(id(a))
# 向内存中追加新数据(对数据进行改变只能通过数据类型.方法()实现)
a.append(4)
print(id(a))
运行效果:

原理图如下:

注:可变类型在函数中,如果在全局或局部中对可变类型进行增删改操作,其外部和内部都会受到影响。
三、lambda表达式
1、lambda表达式应用场景
如果一个函数有一个返回值,并且只有一句代码,可以使用lambda表达式简化。
2、lambda表达式基本语法
变量 = lambda 函数参数:表达式(函数代码 + return返回值)
# 调用变量
变量()
3、lambda表达式应用
1、lambda表达式简化不带参数函数
代码展示:
# def get_show():
# return 10 + 20
#
#
# print(get_show())
# 使用lambda表达式简化上面函数的写法
get_show = lambda: 10 + 20
print(get_show())
运行效果:

2、lambda表达式简化带参数函数
代码展示:
# def get_show(a, b):
# return a + b
#
#
# print(get_show(10, 100))
# lambda表达式简化带参数的函数的写法
get_show = lambda a, b: a + b
print(get_show(10, 100))
运行效果:

3、lambda表达式简化带默认参数函数
代码展示:
# def get_show(a, b=20):
# return a + b
#
#
# print(get_show(10, 100))
# lambda表达式简化带默认参数的写法
get_show = lambda a, b=20: a + b
print(get_show(10, 100))
运行效果:

3、lambda表达式简化带传入元组的写法
代码展示:
# def get_show(*a):
# return a
#
#
# print(get_show(10, 100, 20, 30))
# lambda表达式简化带传入元组的写法
get_show = lambda *a: a
print(get_show(10, 100, 20, 30))
运行效果:

4、lambda表达式简化带传入字典的写法
代码展示:
# def get_show(**a):
# return a
#
#
# print(get_show(id="10086", name="海市公约"))
# lambda表达式简化带传入字典的写法
get_show = lambda **a: a
print(get_show(id="10086", name="海市公约"))
运行效果:

5、lambda表达式简化带有if判断的写法
代码展示:
# lambda表达式简化带有if判断的写法
is_ok = lambda user_name, user_pass: 1 if user_name == "admin" and user_pass == "admin123" else 0
if is_ok("admin", "admin888") > 0:
print("登录成功")
else:
print("登录失败")
运行效果:

四、Python内置模块
1、Python内置模块介绍
Python 模块是一个Python文件 ,以 .py 结尾,包含了 Python 对象定义和Python语句。
模块能定义函数,类和变量,模块里也能包含可执行的代码。
在Python中,模块通常可以分为两大类: 内置模块(目前使用的)和自定义模块。
在有些情况下,如导入的模块名称过长,建议使用as关键字对其重命名操作,以后在调用这个模块时,我们就可以使用别名进行操作。
2、Python内置模块的导入方式
- import 模块名
- import 模块名 as 别名
- from 模块名 import *
- from 模块名 import 功能名
注意:
- 在有些情况下,如导入的模块名称过长,建议使用as关键字对其重命名操作,以后在调用这个模块时,我们就可以使用别名进行操作。
- import代表导入某个或多个模块中的所有功能,但是有些情况下,我们只希望使用这个模块下的某些方法,而不需要全部导入。这个时候就建议采用from模块名import 功能名
代码展示:
import math
import pandas as pd
from time import *
from DrissionPage import Chromium
更多推荐
所有评论(0)