1. 如何用 Python 读取数据?

利用pandas中的read_csv模块直接将数据读取出来。如data = pd.read_csv(’ /
/iris.txt’,header = None) 传统方法,open打开文件。f= open(’/home
/iris.txt’,‘rb’)

  1. Python是什么?简述并说明优点和缺点?

Python是一种面向对象的解释性计算机编程语言,它是结合了解释性、编译性、互动性和面向对象的脚本语言。
优点:开源、免费、简单、易学、可移植、可扩展、易维护、开发效率高。 缺点:运行速度慢、代码不能加密。

  1. Python是如何被解释的?

Python是一种解释性语言,它的源代码可以直接运行。Python解释器会将源代码转换成中间语言,之后再翻译成机器码再执行。

  1. 什么是PEP8?

PEP8是一个编程规范,是让程序更具可读性的一些建议。

  1. Python是怎样管理内存的?

1)引用计数机制:Python内部使用引用计数,来保持追踪内存中的对象。
2)垃圾回收机制:当一个对象的引用计数归零时,它将被垃圾收集机制处理掉;循环垃圾回收器,确保释放循环引用对象。
3).内存池机制:Python提供了对内存的垃圾收集机制,但是它将不用的内存放到内存池而不是返回给操作系统:
Pymalloc机制:为了加速Python的执行效率,Python引入了一个内存池机制,用于管理对小块内存的申请和释放。对于Python对象,如整数,浮点数和List,都有其独立的私有内存池,对象间不共享他们的内存池。也就是说如果你分配又释了大量的整数,用于缓存这些整数的内存就不能再分配给浮点数。

  1. 什么是Python装饰器?

Python装饰器是一个函数,是Python中的特有变动,可以使修改函数变得更容易。它可以使函数在不修改本身的函数定义外,动态产生额外的功能:引入日志函数执行时间统计、执行函数钱预备处理、执行函数后的清理功能、权限校验等场景、缓存

  1. 可迭代对象和迭代器:可以使用for-in遍历的对象,都是可迭代对象

在Python中如果一个对象有__iter__( )方法或__getitem__()方法,则称这个对象是可迭代的(Iterable);其中__iter__( )方法的作用是让对象可以用for …in循环遍历,getitem()方法是让对象可以通过“实例名[index]”的方式访问实例中的元素。换句话说,两个条件只要满足一条,就可以说对象是可迭代的。列表、元组、字典、字符串等类型都是可迭代.
迭代器:迭代器是访问集合元素的一种方式。能够使用for-in进行遍历,并能使用next函数进行迭代的对象:
在Python中如果一个对象有__iter__( )方法和__next__()方法,则称这个对象是迭代器(Iterator);其中__iter__( )方法是让对象可以用for …in循环遍历,next( )方法是让对象可以通过next(实例名)访问下一个元素。
注意:这两个方法必须同时具备,才能称之为迭代器。列表List、元组Tuple、字典Dictionary、字符串String等数据类型虽然是可迭代的,但都不是迭代器,因为他们都没有next()方法。

  1. 函数闭包

引用了自由变量的函数即是一个闭包. 这个被引用的自由变量和这个函数一同存在, 即使已经离开了创造它的环境也不例外.

  1. 数组和元组之间的区别是什么?

数组和元组之间的区别:数组内容是可以被修改的,而元组内容是只读的。另外,元组可以被哈希,比如作为字典的关键字。

  1. 类方法和静态方法

method:通过实例调用,可以引用类内部的任何属性和方法
classmethod:无需实例化,可以调用类属性和类方法,无法取到普通的成员属性和方法
staticmethod:无需实例化,无法取到类内部的任何属性和方法, 完全独立的一个方法

  1. Python提供哪些内置类型?

整型(int)、字符串(str)、元组(tuple)、布尔(bool)、集合(set)、列表(list)、字典(dict)

  1. 字典推导式和列表推导式是什么?

它们是可以轻松创建字典和列表的语法结构。

  1. 参数按值传递和引用传递是怎样实现的?

Python中的一切都是类,所有的变量都是一个对象的引用。引用的值是由函数确定的,因此无法被改变。但是如果一个对象是可以被修改的,你可以改动对象。lambda?这是一个匿名函数,常被用于代码中的单个表达式。add
= lambda x, y : x+y add(1,2)=3

  1. pass是什么:

pass是一个占位符,用来表示空白,不被执行。

  1. Python中浅拷贝和深拷贝的区别?

copy.copy()浅拷贝:拷贝了对象,但拷贝对象的值仍然是指向原对象的值(相当于引用),修改拷贝对象的元素,则被拷贝对象的值也会被修改。
copy.deepcopy()深拷贝:不仅拷贝了对象,同时也拷贝了对象中的元素,获得了全新的对象,与被拷贝对象完全独立;但这需要牺牲一定的时间和空间。

  1. Python中的模块和包是什么?

在Python中,模块是搭建程序的一种方式。每一个Python代码文件都是一个模块,并可以引用其他的模块,比如对象和属性。一个包含许多Python代码的文件夹是一个包。一个包可以包含模块和子文件夹。

  1. 简要描述Python的垃圾回收机制(garbage collection)

Python中的垃圾回收是以引用计数为主,标记-清除和分代收集为辅。
引用计数:Python在内存中存储每个对象的引用计数,如果计数变成0,该对象就会消失,分配给该对象的内存就会释放出来。
标记-清除:一些容器对象,比如list、dict、tuple,instance等可能会出现引用循环,对于这些循环,垃圾回收器会定时回收这些循环(对象之间通过引用(指针)连在一起,构成一个有向图,对象构成这个有向图的节点,而引用关系构成这个有向图的边)。
分代收集:Python把内存根据对象存活时间划分为三代,对象创建之后,垃圾回收器会分配它们所属的代。每个对象都会被分配一个代,而被分配更年轻的代是被优先处理的,因此越晚创建的对象越容易被回收。

  1. Python中有哪些常用的内置模块?

Python模块是包含Python代码的.py文件。此代码可以是函数类或变量。一些常用的内置模块包括:sys、math、random、data
time、JSON。

  1. Python中的类型转换?

int()转换为整数类型
float()转换为float类型
ord()将字符转换为整数
hex()将整数转换为十六进制
oct()将整数转换为八进制
tuple()此函数用于转换为元组。
set()此函数在转换为set后返回类型。
list()任何数据类型转换为列表类型
dict() 此函数用于将顺序元组(键,值)转换为字典。
str()将整数转换为字符串。
complex(real,imag)将实数转换为复数(实数,图像)数。

  1. Python中的self是什么?

self是类的实例或对象。在Python中,self包含在第一个参数中。但是,Java中的情况并非如此,它是可选的。它有助于区分具有局部变量的类的方法和属性。
init方法中的self变量引用新创建的对象,而在其他方法中,它引用其方法被调用的对象。

  1. 何在Python中实现多线程?

Python有一个多线程库,但是用多线程来加速代码的效果并不是那么的好,Python有一个名为Global Interpreter
Lock(GIL)的结构。python中GIL(全局解释器锁)确保一次执行单个线程。一个线程保存GIL并在将其传递给下个线程之前执行一些操作,这会让我们产生并行运行的错觉。实际上只是线程在CPU上轮流运行,当然,所有的传递会增加程序执行的内存压力。Python的多线程主要是由于IO阻塞的情况下不会等待,而是把cpu给到另一个线程继续执行。
能独立运行的基本单位————线程

进程的创建,撤销,与切换存在较大的时空开销,因此需要引进轻型进程
进程是资源分配的最小单位,线程是cpu调度的最小单位,每一个进程至少有一个线程 进程是车间,线程是车间中的每一个工人 进程中可以开启多个线程
(1)开启一个线程所需的时间要远远小于开启一个进程
(2)多个线程内部有自己的数据栈,数据不共享
(3)全局变量在多个线程之间是共享的
实现python的多线程可以利用threading模块配合循环分配线程。开了守护线程,该线程会在所有子线程执行结束后才会结束

  1. 请解释使用*args和kwargs的含义

加*的args存放所有未命名的变量参数,args是元组; 加**的变量kwargs存放命名参数,如key=value的参数,
kwargs为字典。
*args:表示一组值的集合,普通数据
**kwargs:表示k-v格式的数据

  1. 常用Linux命令

cd,rm,mv,cp,ls,ln,echo,cat,ps

  1. 常见的数据结构分为8类有:数组、栈、队列、链表、树、散列表、堆、图

Python内置4种:列表list、元组tuple、字典dict、集合set

  1. 字符串,列表,元组,字典每个常用的5个方法?

字符串:islower,isdigit,format,decode,encode,find,count,index,endswith,ljust(左对齐)
列表:append,insert,pop,del,len,count,index,remove,reverse,sort
元组:len,min,max,cmp,del
字典:del,len,copy,clear,get,items,keys,values,has_key

  1. 提高python的运行效率

1、使用函数,局部变量比全局变量快很多
2、选择性的消除属性访问,使用:from math import sqrt 而不用import math再math.sqrt()
3、避免不必要的抽象,如装饰器@property等
4、使用python内置数据结构容器
5、变量缓存,可重复利用
6、if语句优化

  1. 描述数组,链表,队列,堆栈的区别

1、数组与链表是数据存储方式的概念,数组在连续的空间中存储数据,而链表可以在非连续的空间中存储数据;python的list可以连续也可以不连续(存放多种数据类型)
2、队列和堆栈是描述数据存取方式的概念,队列是先进先出,而堆栈是后进先出;队列和堆栈可以用数组来实现,也可以用链表实现。