Python面试指南

1、Python基本语法

1、@staticmethod 和 @classmethod

Python中有三种方法,实例方法、类方法(@classmethod)、静态方法(@staticmethod)。

类方法的第一个参数是cls,表示该类的一个实例,静态方法基本上和一个全局函数相同

class A(object):

def foo(self, x):

print("executing foo(%s,%s)" % (self, x))

print(‘self:‘, self)

@classmethod

def class_foo(cls, x):

print("executing class_foo(%s,%s)" % (cls, x))

print(‘cls:‘, cls)

@staticmethod

def static_foo(x):

print("executing static_foo(%s)" % x)

a = A()

print(a.foo(1))

print(a.class_foo(1))

print(a.static_foo(1))

2、迭代器和生成器

迭代器:是访问集合元素的一种方式,从集合的第一个元素开始访问,直到所有元素被访问结束。其优点是不需要事先准备好整个迭代过程中的所有元素,仅在迭代到某个元素时才开始计算该元素。适合遍历比较巨大的集合。iter():方法返回迭代器本身, next():方法用于返回容器中下一个元素或数据。

生成器:带有yield的函数不再是一个普通函数,而是一个生成器。当函数被调用时,返回一个生成器对象。不像一般函数在生成值后退出,生成器函数在生成值后会自动挂起并暂停他们的执行状态。

‘‘‘迭代器‘‘‘

print(‘for x in iter([1, 2, 3, 4, 5]):‘)

for x in iter([1, 2, 3, 4, 5]):

print(x)

‘‘‘生成器‘‘‘

def myyield(n):

while n>0:

print("开始生成...:")

yield n

print("完成一次...:")

n -= 1

for i in myyield(4):

print("遍历得到的值:",i)

3、闭包

闭包可以实现先将一个参数传递给一个函数,而并不立即执行,以达到延迟求值的目的。满足以下三个条件:必须有一个内嵌函数;内嵌函数必须引用外部函数中变量;外部函数返回值必须是内嵌函数。

def delay_fun(x, y):

def caculator():

return x+y

return caculator

print(‘返回一个求和的函数,并不求和‘)

msum = delay_fun(3,4)

print(‘调用并求和:‘)

print(msum())

4、*args 和 **kwargs

这两个是Python中的可变参数,用于接受参数的传递。*args表示任何多个无名参数,它是一个元组,**kwargs表示关键字参数,它是一个字典。同时使用*args和**kwargs时,必须*args在**kwargs之前。

5、鸭子类型:

在鸭子类型中,关注的不是对象的类型本身,而是他是如何使用的。例如,在不使用鸭子类型的语言中,我们可以编写一个函数,它接受一个类型为鸭的对象,并调用它的走和叫方法。在使用鸭子类型的语言中,这样的一个函数可以接受一个任意类型的对象,并调用它的走和叫方法。

class duck():

def walk(self):

print(‘I am duck,I can walk...‘)

def swim(self):

print(‘I am duck,I can swim...‘)

def call(self):

print(‘I am duck,I can call...‘)

duck1=duck()

duck1.walk()

# I am duck,I can walk...

duck1.call() # I am duck,I can call...

6、@property 和 @setter

@property负责把一个方法变成属性调用。在对实例操作时,不暴露接口,而是通过getter和setter方法实现。

class Student(object):

@property

def score(self):

return self._score

@score.setter
def score(self, value):
    if not isinstance(value, int):
        raise ValueError(‘score must be an intager‘)
    if value<0 or value>100:
        raise ValueError(‘score must between 0~100!‘)
    self._score = value

s = Student()

s.score = 60

print(s.score)

s.score = 999

print(s.score)

7、多进程和多线程

进程:是资源分配的最小单位,创建和销毁开销较大;

线程:是CPU调度的最小单位,开销小,切换速度快;

操作系统将CPU时间片分配给多个线程,每个线程在指定放到时间片内完成。操作系统不断从一个线程切换到另一个线程执行,宏观上看就好像是多个线程一起执行。

Python中由于全局锁 (GIL) 的存在导致,同一时间只有一个获得GIL的线程在跑,其他线程则处于等待状态,这导致了多线程只是在做分时切换,并不能利用多核。

多线程与多进程的区别:(1)多进程中同一个变量各自有一份拷贝在每个进程中,互不影响;(2)多线程中,所有变量都由所有线程共享,任何一个变量都可被任何一个线程修改。线程之间共享数据的最大危险在于多个线程同时更改一个变量,把内容改乱。

from multiprocessing import Pool #多进程

from multiprocessing.dummpy import Pool #多线程

8、类变量和实例变量

普通的变量(非类的变量),在被赋值后即变量存在。类的变量在class里def外,通过变量名能被赋值,在def里通过类对象可被赋值

class Apple(object):

name = ‘apple‘

p1 = Apple()

p2 = Apple()

p1.name = ‘orange‘

print(p1.name)

print(p2.name)

9、装饰器

装饰器是一个工厂函数,接受一个函数作为参数,然后返回一个新函数,其闭包中包含被装饰的函数。有了装饰器,可以提取大量函数中与本身功能无关的类似代码 ( 这块在Flask中用于定义路由的@app.route,就是一个很好的例子),达到代码重用的目的。可应用于插入日志、性能测试、事务处理等方面。

def deco(func):

def warpper(*args, **kwargs):

print(‘start‘)

func(*args, **kwargs)

print(‘end‘)

return warpper

@deco

def myfunc(parameter):

print("run with %s" % parameter)

myfunc("something")

时间: 2024-10-09 09:43:30

Python面试指南的相关文章

python面试题目

问题一:以下的代码的输出将是什么? 说出你的答案并解释. class Parent(object): x = 1 class Child1(Parent): pass class Child2(Parent): pass print Parent.x, Child1.x, Child2.x Child1.x = 2 print Parent.x, Child1.x, Child2.x Parent.x = 3 print Parent.x, Child1.x, Child2.x 答案是 1 1

Python线程指南(转)

1. 线程基础 1.1. 线程状态 线程有5种状态,状态转换的过程如下图所示: 1.2. 线程同步(锁) 多线程的优势在于可以同时运行多个任务(至少感觉起来是这样).但是当线程需要共享数据时,可能存在数据不同步的问题.考虑这样一种情况:一个列表里所有元素都是0,线程"set"从后向前把所有元素改成1,而线程"print"负责从前往后读取列表并打印.那么,可能线程"set"开始改的时候,线程"print"便来打印列表了,输出就成

Python正则表达式指南(转)

1. 正则表达式基础 1.1. 简单介绍 正则表达式并不是Python的一部分.正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可能不如str自带的方法,但功能十分强大.得益于这一点,在提供了正则表达式的语言里,正则表达式的语法都是一样的,区别只在于不同的编程语言实现支持的语法数量不同:但不用担心,不被支持的语法通常是不常用的部分.如果已经在其他语言里使用过正则表达式,只需要简单看一看就可以上手了. 下图展示了使用正则表达式进行匹配的流程:  正则表达式的大

Python 自省指南(原文http://www.ibm.com/developerworks/cn/linux/l-pyint/#ibm-pcon)

Python 自省指南 如何监视您的 Python 对象 自省揭示了关于程序对象的有用信息.Python 是动态的面向对象的编程语言,提供了很棒的自省支持.本文展示了该语言的许多能力,从最基本形式的帮助到较为高级形式的调查. 什么是自省? 在日常生活中,自省(introspection)是一种自我检查行为.自省是指对某人自身思想.情绪.动机和行为的检查.伟大的哲学家苏格拉底将生命中的大部分时间用于自我检查,并鼓励他的雅典朋友们也这样做.他甚至对自己作出了这样的要求:“未经自省的生命不值得存在.”

2015Java面试指南(一)

? 前言 2015年可以说是Java程序员的"大年",随着2014年11月乌镇互联网的闭幕,互联网行业是真的迎来了春天.2015年大量的创业型公司的兴起,对Java中高级职位的需求几乎可以用抢人的程度,跳槽人员的薪资普通在30%-50%的涨幅(一方面是因为市场需求.另一方面企业也在努力打破好多年员工待遇倒挂现象,即新入职员工的工资总比老员工高),更高的也不罕见,这是近几年来不曾出现过的. 同时2015年也是Java20岁的生日,Java一路走来,打破了多次"将死"的

10个Python面试常问的问题

概述 Python是个非常受欢迎的编程语言,随着近些年机器学习.云计算等技术的发展,Python的职位需求越来越高.下面我收集了10个Python面试官经常问的问题,供大家参考学习. 类继承 有如下的一段代码: class A(object): def show(self): print 'base show' class B(A): def show(self): print 'derived show' obj = B() obj.show() 如何调用类A的show方法了. 方法如下: o

8个Python面试必考的题目,小编也被坑过 ToT

写在前面 小编学习Python已经三年多了,现在稳定在一家公司快一年了,回想起来一年以前的面试经历真的有点胆战心惊啊! 因为面试题目一不小心就会被坑啊~ 你经历过绝望么? 当你被Python面试题目坑到的时候内心真的一万个草泥马徘徊在心中啊o(╥﹏╥)o 下面小编就分享一些小编亲身经历过的一些Python神坑面试题哦~ 干货来了 1.下面这段代码的输出结果是什么?请解释. def extendList(val, list=[]): list.append(val) return list lis

Python面试简介及并行并发

今天的分享内容大体如下: 一. 面试 1. 什么是面试 2. 优秀的面试 二. Python综述 1. Python设计哲学及版本变迁 2. Python发展现状及其他语言使用场景 3. GIL 4. 内存管理和垃圾回收 5. 面试示例 三.并发并行 1. 进程 2. 线程 3. 协程 4. 并发编程 一. 面试 什么是面试 面:当面/面谈/面聊, 试:考试,当前社会上各大企业和公司招人环节中最重要的一道流程关卡:目前面试已经衍生了多种操作形式:直面.电面.视频面.在线coding: 一轮面试的

Python面试综合--DB相关

Python面试综合--DB相关 关系型数据库:MySQL,Oracle,Postgrel, MariaDB, SQL Server等 优点 易用性:都是使用表结构,格式一致,支持sql语言 支持复杂查询:多表连表查询 缺点 读写性能较差,海量数据时瓶颈出现 灵活度不高 高并发情况下硬盘IO出现瓶颈 非关系型数据库(Not Only SQL):Redis,Memcached, MongoDB, Hbase等 优点 格式灵活 扩展性高 速度快 成本低 MySQL 存储引擎 详见: MyISAM I