博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
深入理解:Python基础概念辨析之高阶基础____容易混淆的概念
阅读量:4709 次
发布时间:2019-06-10

本文共 2244 字,大约阅读时间需要 7 分钟。

# 这种类似的文章个人觉得还是非常有价值的,所以近期打算出一篇。

# 后面会进行多次更新

  • 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相当于一片大空间,里面有很多个小空间。

转载于:https://www.cnblogs.com/xiegalpha/p/9231663.html

你可能感兴趣的文章
LaTex公式在线转图片
查看>>
hadoop学习2----HDFS操作
查看>>
单元测试小结
查看>>
python 中的split()函数和os.path.split()函数
查看>>
搜索引擎的检索模型-查询与文档的相关度计算
查看>>
实现简单的对拍
查看>>
IOS MVC与MVVM的区别
查看>>
学习python之路_入门篇A
查看>>
向数据库中全部表中增加一个字段的SQL
查看>>
RapidMiner Studio之Process源码分析
查看>>
CF 5 A. Chat Server's Outgoing Traffic
查看>>
10.4 使用布局管理器3(CardLayout)
查看>>
uva 11143
查看>>
uva 1377
查看>>
HDU 2489 Minimal Ratio Tree
查看>>
SQLite数据库的加密【转】
查看>>
ZOJ3811 Untrusted Patrol
查看>>
雍正王朝里康熙临终予四爷言
查看>>
Java垃圾回收之新生代垃圾收集器
查看>>
hdu_1848_Fibonacci again and again(博弈sg函数)
查看>>