python知识点
1、深拷贝、浅拷贝、引用
- 1.对象的赋值
- 都是进行对象引用(内存地址)传递,即‘’ b is a‘’ ,a 变 b 也变
- 2.浅拷贝
-
会创建一个新的对象,即 “c is not a” ,但是,对于对象中的元素,浅拷贝就只会使用原始元素的引用(内存地址),也就是说”c[i] is a[i]”
-
当我们使用下面的操作的时候,会产生浅拷贝的效果:
- 使用切片[:]操作
- 使用工厂函数(如list/dir/set)
- 使用copy模块中的copy()函数
-
- 3.深拷贝
- 会创建一个新的对象,即”d is not a” ,并且 对于对象中的元素,深拷贝都会重新生成一份(有特殊情况,下面会说明),而不是简单的使用原始元素的引用(内存地址)
- 拷贝的特殊情况
- 对于非容器类型(如数字、字符串、和其他’原子’类型的对象)没有拷贝这一说
- 如果元祖变量只包含原子类型对象,则不能深拷贝
2、协程和线程
3、python版本
- print math.floor(5.5) 返回5.0 【python2】
- print(math.floor(5.5)) 返回5 【python3】
4、字符串编码解码
- 字符串编码的过程:gbk==>unicode==>utf16==>url解码
- 字符串解码顺序为:url解码==>utf16==>unicode==>gbk
5、ASCII大小贵规则
- 1)数字0~9比字母要小。如"7"<“F”;
- 2)数字0比数字9要小,并按0到9顺序递增。如"3"<“8”
- 3)字母A比字母Z要小,并按A到Z顺序递增。如"A"<“Z”
- 4)同个字母的大写字母比小写字母要小。如"A"<“a”。
6、对象三要素
- Python中的对象包含三要素:id、type、value其中id用来唯一标识一个对象,type标识对象的类型,value是对象的值
- is判断的是a对象是否就是b对象,是通过id来判断的在这里,a,b为字符串不可变类型,所以指向相同地址,所以 a is b
- ==判断的是a对象的值是否和b对象的值相等,是通过value来判断的
- 例子:a = ‘123’ ,b = ‘123’ 。 a is b是正确的
7、装饰器
- 装饰器本身是一个函数,目的是在不改变待装饰函数的情况下,增加一些额外的功能,装饰器的返回值是已装饰的函数对象。
- 【连接在此】
8、生成器
9、列表推导式
10、浮点数
- 浮点数在计算机内无法精确表示, 1.2-1.0 == 0.2,返回False.
- 9/3.0=3.0, 9/3=3.0
11、函数参数位置
- Python2 参数顺序:必选参数、默认参数、可变参数和关键字参数。
- Python3参数顺序:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。
11、列表的append()方法
- 会将待加入的对象作为一个整体添加,例如:a = [1,2,3],b = [‘hello’,3],a.append(b)结果为:[1,2,3,[‘hello’,3]]。
12、动态语言
- 动态语言的定义:动态编程语言 是 高级程序设计语言 的一个类别,在计算机科学领域已被广泛应用。它是一类 在 运行时可以改变其结构的语言 :例如新的函数、对象、甚至代码可以被引进,已有的函数可以被删除或是其他结构上的变化。动态语言目前非常具有活力。众所周知的 ECMAScript ( JavaScript )便是一个动态语言,除此之外如 PHP 、 Ruby 、 Python 等也都属于动态语言,而 C 、 C++ 等语言则不属于动态语言。
13、argv
- sys.argv是传递给python脚本的命令行参数【字符串】列表。argv[0]为该脚本自身路径,其余为命令行参数。
14、解释型语言的特性
- 非独立
- 效率低
15、解释型语言和编译型语言
-
解释性语言和编译性语言的定义:
- 计算机不能直接理解高级语言,只能直接理解机器语言,所以必须要把高级语言翻译成机器语言,计算机才能执行高级语言编写的程序。
- 翻译的方式有两种,一个是编译,一个是解释。两种方式只是翻译的时间不同。
-
解释性语言的定义:
- 解释性语言的程序不需要编译,在运行程序的时候才翻译,每个语句都是执行的时候才翻译。这样解释性语言每执行一次就需要逐行翻译一次,效率比较低。
- 现代解释性语言通常把源程序编译成中间代码,然后用解释器把中间代码一条条翻译成目标机器代码,一条条执行。
-
编译性语言的定义:
- 编译性语言写的程序在被执行之前,需要一个专门的编译过程,把程序编译成为机器语言的文件,比如exe文件,以后要运行的话就不用重新翻译了,直接使用编译的结果就行了(exe文件),因为翻译只做了一次,运行时不需要翻译,所以编译型语言的程序执行效率高。
16、变量命名方式
- python中主要存在四种命名方式:
- 1、object #公用方法
- 2、_object #半保护
- 被看作是“protect”,意思是只有类对象和子类对象自己能访问到这些变量,在模块或类外不可以使用,不能用’from module import *’导入。
- __object 是为了避免与子类的方法名称冲突, 对于该标识符描述的方法,父类的方法不能轻易地被子类的方法覆盖,他们的名字实际上是_classname__methodname。
- 3、_ _ object #全私有,全保护
- #私有成员“private”,意思是只有类对象自己能访问,连子类对象也不能访 问到这个数据,不能用’from module import *’导入。
- 4、_ _ object_ _ #内建方法,用户不要这样定义
17、__new__和__init__的区别
- __new__是一个静态方法,而__init__是一个实例方法
- __new__方法会返回一个创建的实例,而__init__什么都不返回
- 只有在__new__返回一个cls的实例时,后面的__init__才能被调用
- 当创建一个新实例时调用__new__,初始化一个实例时用__init__
18、locals()
- 可以使用该函数查看当前作用域内的所有局部变量和值的字典。
19、变量的引用
- 可以使用sys库中的getrefcount方法用于查看,一个对象被引用多少次。
20、函数式编程
- 函数式编程是一种结构化编程范式,是如何编写程序的方法论
- 函数是第一等公民first class,是指它享有与变量同等的地位
- 高阶函数可以接收入另一个函数作为其输入参数
- 函数可以像变量一样被当被参数传入,也可以被return
21、python中set和frozenset方法和区别
- set(可变集合)与frozenset(不可变集合)的区别:
*set无序排序且不重复,是可变的,有add(),remove()等方法。既然是可变的,所以它不存在哈希值。- 基本功能包括关系测试和消除重复元素. 集合对象还支持union(联合), intersection(交集), difference(差集)和sysmmetric difference(对称差集)等数学运算.
- sets 支持 x in set, len(set),和 for x in set。作为一个无序的集合,sets不记录元素位置或者插入点。因此,sets不支持 indexing, 或其它类序列的操作。
- frozenset是冻结的集合,它是不可变的,存在哈希值,好处是它可以作为字典的key,也可以作为其它集合的元素。缺点是一旦创建便不能更改,没有add,remove方法。