栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python基础知识

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python基础知识

一、基础理论 1、is 和 == 的区别:
  • is 用来判断两个变量关联的对象是否是同一个,是否指向同一个内存地址,相当于 id(a) == id(b);
    (id() 获取对象的标识、内存地址)
  • == 判断两个变量对应的值是否相等,默认会调用对象的__eq__方法。

[备注]
1、小整数对象[-5,256],在全局解释器范围内被重复使用,不会被GC回收。所以无论脚本模式下还是交互式模式下,值相等的小整数都对应同一个地址。
2、同一个代码块中的不可变对象,只要值是相等的就不会重复创建新的对象。
所以,通过 is 对比小整数范围[-5, 256]内的值相同的不同变量时,命令行模式和脚本模式输出一致,都是True。超出小整数范围的整数及其他不可变对象,输出则不同,命令行模式输入False,脚本模式输入True。
什么是代码块:一个模块文件、一个函数体、一个类、交互式命令中的单行代码。
所以在交互式模式下 x = 257 和y = 257 是两个独立代码块,Python会创建新的内存空间;但是在脚本模式下 x = 257 与 y = 257 属于同一个代码块,python不会创建新的内存空间。

>>> a = 256
>>> b = 256
>>> a is b
True
>>> a = 257
>>> b = 257
>>> a is b
False
>>> a = 257; b = 257  # 效果与脚本模式相同
>>> a is b
True
>>> a = -5
>>> b = -5
>>> a is b
True
>>> a=-6
>>> b=-6
>>> a is b
False
>>> a = -6; b = -6 # 效果与脚本模式相同
>>> a is b
True
>>> a=(1,2); b=(1,2) # 效果与脚本模式相同
>>> a is b
True
>>> id(a)
2064077050176
>>> id(b)
2064077050176

[ reference ]
https://blog.csdn.net/wangpachong/article/details/123349046

2、直接赋值、浅拷贝、深拷贝的区别

三种创建新变量的不同方式。

  • 直接赋值:将对象a直接赋值给变量b,生成b与a对应相同的对象实体,仅是对象引用的复制
  • 浅拷贝:copy.copy(a)方法复制对象a赋值给变量b,生成b与a对应不同的对象实体,但对象内部的子对象共用相同的对象实体
  • 深拷贝:copy.deepcopy(a)方法复制对象a赋值给变量b,a、b两者对应完全不同的对象及其子对象实体

直接赋值:生成变量是对象实体的引用(别名,标签)
浅拷贝:拷贝了父对象,不会拷贝对象内部的子对象(list, dict)。仅拷贝数据集合的第一层数据。
深拷贝:完全拷贝了父对象及其子(可变)对象,使用copy模块的deepcopy方法。拷贝数据集合的所有层。

深拷贝会把可变对象也拷贝一份,而浅拷贝不会。
面例子中说的是列表(可变对象)的拷贝,那对于元组,字符等不可不对象呢?
答案是,对不可变对象,不存在深浅拷贝的问题。无论怎么拷贝,效果都是新建立一个指向不可变对象的指针而已。

import copy
a = {1: [1, 2, [33, 44]], 2: (2, 3, 4)}  # tuple (2,3,4) 为不可变对象,无论那种方式,均引用共同的对象
b = a
c = a.copy()
d = copy.deepcopy(a)

代码各对象的关系示意图。
(绘图工具地址:https://pythontutor.com/)

3、可变对象与不可变对象
  • 可变对象:list, dict, set

  • 不可变对象:tuple, str, bytes, int, float

  • Container sequences:
    list, tuple, and collections.deque can hold items of different types.

  • Flat sequences:
    str, bytes, bytearray, memoryview, and array.array hold items of one type.

4、PYTHON垃圾回收机制

引用计数的方式为主,会对变量的引用进行计数,引用数为零时,释放变量。
标记清除、分代回收

5、闭包和装饰器
二、编码技巧 5、列举布尔值为False的常见值
0, [], {}, (), None, '', False
6、按字典的key或value对其排序
d = {'a': 13, 'f': 11, 'c': 7, 'b': 24}
e = sorted(d.items(), key=lambda x: x[1])
f = sorted(d.items(), key=lambda x: x[0])
print(e) # [('c', 7), ('f', 11), ('a', 13), ('b', 24)]
print(f) # [('a', 13), ('b', 24), ('c', 7), ('f', 11)]
7、反转字符串的简单方法
s = 'Hello, World!'
reversed_s = s[::-1]  # 生成新的字符串变量:'!dlroW ,olleH'
8、按age逆序排列如下对象
list1 = [{'name': 'a', 'age':23}, {'name': 'b', 'age':15}, {'name': 'c', 'age':99}]
list2 = sorted(list1, key=lambda x: x['age'], reverse=True)
print(list2) #[{'name': 'c', 'age': 99}, {'name': 'a', 'age': 23}, {'name': 'b', 'age': 15}]
9、常用字符串格式方法
s = 'I am {}, I am {} old'.format('HanMeimei', 15)
sa = 'I am %s, I am %s old' % ('HanMeimei', 15)
10、python实现单例模式 11、__new__和__init__区别? 12、三目运算符 13、协程相关知识
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/997241.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号