# 这种类似的文章个人觉得还是非常有价值的,所以近期打算出一篇。
# 后面会进行多次更新
- 1.字典方法keys和values中的概念:
- dict.keys() 或 dict.values()生成的虽然是一个类似列表对象,可以对其进行遍历,但是并不能进行列表的操作。
one_dict = {"中国": "北京", "法国": "巴黎", "美国": "纽约"}
print(one_dict.keys())
for i in one_dict.keys():
print(i)
# 但是使用其他常见列表方法则不可以
- 2.关于可变类型数据结构 与 python中变量--标签概念的理解
a = b = []
b.append(1)
print(a)
print(b)
# 第一个输出结果:
[1]
[1]
a = b = []
b = [1]
print(a)
print(b)
# 第二个输出结果:
[]
[1]
解释:
第一个例子中,a,b变量(标签)指向的是同一个内存地址,变量b调用了列表对象的append方法,相当于进入b指向的内存空间内部进行了内容的修改,所以同样指向同一块儿内存空间的变量a的内容也跟着变化。print函数操作的过程是对变量指向的内存地址的内容进行输出。
第二个例子中,a,b变量最开始指向了同一个内存空间,但是随后变量b(标签)从指向a变换到指向新的内存空间(内容为[1]的空间),而a指向的内存空间并未改变,所以打印结果如上。PS:用赋值的方式,意味着重新创建一个块儿新的内存地址。和调用方法不同。
- 3.函数进阶 与 可变类型和不可变类型 与 局部变量全局变量
"注:"这个问题是上一个问题的扩展:
def demo(num, num_list):
# 赋值语句
num = 200
num_list = [1, 2, 3]
print(num)
print(num_list)
print("函数代码完成")
# python解释器中是逐行翻译,首先开辟一块内存存储int对象:99,并生成标签gl_num指向它; (先看右边,再看左边)
# 再开辟内存,存放列表[4,5,6],然后生成变量gl_list(标签)指向它
# 在掉用函数的过程中,def后面的形式参数作为变量(标签)分别指向:num和gl_num都同时指向了99;num_list和gl_list都指向了[4,5,6]
# 但是进入函数内部,函数开辟新内存空间创建int对象200,并将局部变量num(标签)从指向99改成指向200;同理,num_list 也指向了[1,2,3]
gl_num = 99
gl_list = [4, 5, 6]
demo(gl_num, gl_list)
print(gl_num)
print(gl_list)
# 运行结果:
200
[1, 2, 3]
函数代码完成
99
[4, 5, 6]
在函数内部,针对参数使用 赋值语句,会不会影响调用函数时传递的 实参变量? —— 不会!
无论传递的参数是 可变 还是 不可变
- 只要 针对参数 使用 赋值语句,会在 函数内部 修改 局部变量的引用,不会影响到 外部变量的引用
def mutable(num_list):
# num_list = [1, 2, 3]
num_list.extend([1, 2, 3])
print(num_list)
gl_list = [6, 7, 8]
mutable(gl_list)
print(gl_list)
# 执行结果:
[6, 7, 8, 1, 2, 3]
[6, 7, 8, 1, 2, 3]
- 4.函数进阶 与 可变类型和不可变类型 与 局部变量全局变量
def demo(num, num_list):
print("函数开始")
# num = num + num
num += num
# num_list = num_list + num_list
# 列表做 += 并不会做相加再赋值操作
# 在Python中针对列表操作 += 运算的时候,本质上是调用了 extend()方法
num_list += num_list
print(num)
print(num_list)
print("函数完成")
gl_num = 9
gl_list = [1, 2, 3]
demo(gl_num, gl_list)
print(gl_num)
print(gl_list)
#执行结果:
函数开始
18
[1, 2, 3, 1, 2, 3]
函数完成
9
[1, 2, 3, 1, 2, 3]
5.函数和类定义上的一些区别:
- 函数命名一般使用小驼峰或者单词之间下划线连接的方式
- 类命名采用大驼峰法,不使用下划线
- 函数用def关键字,类用class关键字
- 函数def 变量名后面要加小括号;类后面不需要括号,直接在变量名后面加冒号
- 类的方法(函数)中必须要加self参数,否则报错
6.del
- 作为关键字 不需要括号, del ls 或 del ls[1]
- 作为函数del(ls) 或 del(ls[1])
- 本质上是从内存中删除,ls相当于一片大空间,里面有很多个小空间。