Python的10个基础知识点
Python是一个面向对象的解释型的交互式高级脚本语言:Python被设计成一种高可读性的语言,因为它大量地使用了英语中的单词作为关键字,而且不像其他语言使用标点符号构成复杂的语法结构,Python的语法结构非常少。
Python是一种面向对象的语言:即Python是支持面向对象的,支持在对象中进行代码封装。
Python是一种解释型语言:即Python程序是在运行时由解释器解释执行的,因而不用事先编译源程序。这一点和Perl和PHP类似。
Python是一种交互式语言:即你能够在Python提示符下直接交互式地编写你的程序。
Python是初学者的语言:Python是一种非常适合初学者的语言,它支持多种类型的应用程序的开发,如简单的文本处理、www浏览器应用程序开发、游戏开发等等。
1)什么是Python?使用Python的优点有哪些?缺点有哪些?
Python是一种面向对象的解释性的交互式语言,带有对象、模块、线程、异常和内存自动管理的机制。
使用Python的优点有:简单、易学、轻便可移植、可扩展、可读性、具有多种内建数据类型、开源等等。
使用Python的缺点有:运行速度慢,代码不能加密(解释性语言,发布python应用只能发布源代码,不像C发布编译后的应用文件)
2)什么是PEP 8?
PEP 8是一种编码规范,是一系列关于如何让Python代码更加具有可读性的编码建议。
3)什么是序列化(pickling)和反序列化(unpickling)?
序列化:将在内存中的变量转为可存储或传输的过程。应用JSON传输,序列化为统一格式json
反序列化:与序列化的过程相反
Pickle模块允许我们将Python对象转换成一个string表示的信息,并且可以使用dump函数将其保存到一个文件中去,这样的过程称为序列化。而使用文件中保存的对象信息重构Python对象的过程称为反序列化。
4)Python是如何被解释执行的?
Python是一种解释型语言,它可以直接从源代码运行程序。程序员编写的源代码首先转变成一种中间语言代码,然后再被转换成能够直接执行的机器语言代码。
5)Python是如何进行内存管理的?
Python内存空间是以Python私有堆的形式进行管理的。所有的Python对象和数据结构都存放在一个私有堆中。解释器可以访问私有堆,而程序员不可以。
将Python堆空间中的内存分配给Python对象的工作是由Python内存管理器完成的。而内核API则会提供给程序员一些相关的工具来完成涉及到内存的编码工作。
Python还内置垃圾回收器,从而进行回收释放内存到堆空间。
6)能够找到程序中的bug进行静态分析的工具有哪些?
PyChecker是一种能够发现Python源代码中的bug并对其中的代码风格和复杂度进行警告的静态分析工具。另外一种工具是Pylint,它能够验证模块是否满足编码标准。
7)什么是Python装饰器?
用来装饰一个函数从而使这个函数在不修改本身的函数定义外,动态产生额外的功能;装饰函数的入参为需要被装饰的函数。装饰器本质上是一个返回函数的高阶函数
一个Python装饰器是我们在符合Python语法的同时又方便地对函数做的一些特定的修改。
8)列表、元组、集合、字典的区别是什么?
列表:元素可变(任何数据类型),有序(可索引),append/insert/pop;
元组:元素不可变,但元素中的可变元素是可变的;有序(可索引);而且元组可以被散列,例如作为字典的键。
集合:无序(不可被索引)、互异
字典:无序,键值对(key:value),key唯一不可重复
9)怎样理解字典和列表?
它们是一种用来创建可变对象的语法结构,数据容器。
dic插入、查找速度比list快,不会随key的增加而增加,但list会随着元素的增加而增加(偏移量)
10)参数是如何通过值或者引用传递的?
python中确切说应该是“传对象引用”的方式,引用对象传递。一切皆对象,参数皆引用
如果函数收到的是一个可变对象(比如列表、字典)的引用,则可修改对象的原始值==相当于“引用传递”方式;
如果函数收到的是一个不可变对象(比如数字、字符、元组),就不能直接修改原始对象指向的值==相当于“值传递”方式;