python一些面试题

1 Python的函数参数传递

对象有两种,“可更改”(mutable)与“不可更改”(immutable)对象。在python中,strings, tuples, 和numbers是不可更改的对象,而list,dict等则是可以修改的对象。可变的有:数组、集合、字典;不可变的有:字符串、元组、数

2 @staticmethod和@classmethod

对于实例方法,我们知道在类里每次定义方法的时候都需要绑定这个实例,就是foo(self, x),为什么要这么做呢?因为实例方法的调用离不开实例,我们需要把实例自己传给函数。

3 Python自省

自省就是面向对象的语言所写的程序在运行时,所能知道对象的类型.简单一句就是运行时能够获得对象的类型.比如type(),dir(),getattr(),hasattr(),isinstance()

dir() 函数一个排好序的字符串列表

4 迭代器和生成器

当你创建了一个列表,你可以一个一个的读取它的每一项,这叫做iteration. 生成器也是迭代器的一种,但是你只能迭代它们一次.原因很简单,因为它们不是全部存在内存里,它们只在要调用的时候在内存里生成。

5 *args and **kwargs

当你不确定你的函数里将要传递多少参数时你可以用*args。**kwargs允许你使用没有事先定义的参数名。

6 Python中重载

仅仅当两个函数除了参数类型和参数个数不同以外,其功能是完全相同的,此时才使用函数重载,如果两个函数的功能其实不同,那么不应当使用重载,而应当使用一个名字不同的函数。

7 __new__和__init__的区别

__new__方法会返回一个创建的实例,而__init__什么都不返回. 当创建一个新实例时调用__new__,初始化一个实例时用__init__.

8 lambda函数

lambda 表达式,通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就是指匿名函数

9 Python垃圾回收机制

要使用引用计数(reference counting)来跟踪和回收垃圾。

10 编译

编译过程就是把预处理完的文件进行一系列的词法分析、语法分析、语义分析及优化后生成相应的汇编代码文件。这个过程是整个程序构建的核心部分。

11 汇编

汇编器是将汇编代码转化成机器可以执行的指令,每一条汇编语句几乎都是一条机器指令。经过编译、链接、汇编输出的文件成为目标文件(Object File)

12 HTTP中Get与Post的区别

GET一般用于获取/查询资源信息,而POST一般用于更新资源信息

13 正则表达式

正则表达式的大致匹配过程是:依次拿出表达式和文本中的字符比较,如果每一个字符都能匹配,则匹配成功;一旦有匹配不成功的字符则匹配失败。\d数字,\D非数字

14 cookie

1. Cookie 是浏览器访问服务器后,服务器传给浏览器的一段数据。2. 浏览器需要保存这段数据,不得轻易删除。3. 此后每次浏览器访问该服务器,都必须带上这段数据。Cookie 一般有两个作用。第一个作用是识别用户身份。第二个作用是记录历史。

 

发送请求——获得页面——解析页面——下载内容——储存内容


1.      re模块

Python通过re模块提供对正则表达式的支持。使用re的一般步骤是先将正则表达式的字符串形式编译为Pattern实例,然后使用Pattern实例处理文本并获得匹配结果(一个Match实例),最后使用Match实例获得信息,进行其他的操作。match(),search(),sub(),split(),findall,

2.      beautiful soup

   Beautiful Soup 是一个可以从HTMLXML文件中提取数据的Python库。

使用BeautifulSoup解析这段代码,能够得到一个 BeautifulSoup 的对象,并能按照标准的缩进格式的结构输出。for link in soup.find_all('a'): 可以用tag, class, id来定位我们想要的东西, 可以直接提取出正文信息, 可以全文搜索, 同样也支持正则表达式

Beautiful Soup将复杂HTML文档转换成一个复杂的树形结构,每个节点都是Python对象,所有对象可以归纳为4种:Tag,NavigableString,BeautifulSoup,Comment

3.      request 库

r = requests.get(url='http://www.itwhy.org')能够发送get和post请求。使用requests方法后,会返回一个response对象,其存储了服务器响应的内容。

requests库提供了http所有的基本请求方式。如果一个响应中包含了cookie,那么我们可以利用 cookies 变量

4.      urllib库

调用的是urllib2库里面的urlopen方法,传入一个URL,再read就得到了源码。

有些网站不会同意程序直接用上面的方式进行访问,如果识别有问题,那么站点根本不会响应,所以为了完全模拟浏览器的工作,我们需要设置一些Headers 的属性。urllib2 默认会使用环境变量 http_proxy 来设置 HTTP Proxy。可以利用Urllib2库保存我们登录的Cookie,然后再抓取其他页面就达到目的了

5.      phantomJS

如果页面不是单纯的HTML代码,而是被JS渲染的页面,就要使用phantomJS模块。

 

框架

1.      Scrapy

Scrapy运行流程大概如下:

 

首先,引擎从调度器中取出一个链接(URL)用于接下来的抓取

引擎把URL封装成一个请求(Request)传给下载器,下载器把资源下载下来,并封装成应答包(Response)

然后,爬虫解析Response

若是解析出实体(Item),则交给实体管道进行进一步的处理。

若是解析出的是链接(URL),则把URL交给Scheduler等待抓取

 

2.       

 

Python2,python3

Decode,encode,string-bytes

除法运算

不等式运算符

 

装饰器是一种特殊的函数,要么接受函数作为输入参数,并返回一个函数,要么接受一个类作为输入参数,并返回一个类。

python是一种解释型语言。这就是说,与C语言和C的衍生语言不同,Python代码在运行之前不需要编译。Python是动态类型语言,指的是你在声明变量时,不需要说明变量的类型。你可以直接编写类似x=111和x="I'm a string"这样的代码,程序不会报错。Python非常适合面向对象的编程(OOP)。

python并不支持真正意义上的多线程。Python中提供了多线程包.GlobalInterpreter Lock(GIL)的东西,它会确保任何时候你的多个线程中,只有一个被执行。线程的执行速度非常之快,会让你误以为线程是并行执行的,但是实际上都是轮流执行。如果你想同时执行一些任务,而且不考虑效率问题,那么使用这个包是完全没问题的,而且也很方便.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值