# 这种类似的文章个人觉得还是非常有价值的,所以近期打算出一篇。
# 后面会进行多次更新
- 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 = 99gl_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 = 9gl_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相当于一片大空间,里面有很多个小空间。