面试算法题常用函数
a = input() 读取一行输入
a ,b = map(int,input().split()) 一行输入两个,空格分开
int(str,16), list() 直接转换数据类型,int可以直接把n进制字符转换为数字
ord(a):97 ord(A):65 chr(97):将对应的ASCLL码值转换为对应的字符
sqrt() 开根
迭代
数组,列表,字典,字符串等可迭代。int,单字符不可迭代。
一个实例化的类对象可否迭代?
一般的类是不可迭代的,如果要使一个类可迭代,需要在其内部定义好__iter__以及__next__方法,在循环类的过程中,先调用iter方法,然后调用next方法查询下一个数。
python的垃圾回收机制
以引用机制为主,标记-清除和分代收集(隔代回收为辅)
引用机制:对于一个字段,引用一次计数加一,引用失效技术减一,为0时回收改字段。
标记-清除:给所有对象打上标记,清除没有标记的对象
分代收集:分为老中青三代,青代满了开始清除,未清除的移到中代。
python的迭代器和生成器
迭代器:一个类不是可迭代的对象,在其中实现__iter__方法生成一个迭代器,然后后用__next__方法调用迭代对象。
生成器:本质上就是一个迭代器,不过不需要实现_iter__和__next__方法,只需要yield一个关键字。
python的装饰器是用来干嘛的
在原函数的基础上为其添加一个装饰器,在不改动源代码的情况下为其添加新的功能。
python中的元组和列表的区别
元组不可改变,元组的访问速度更快,当元组内只有一个元素的时候,逗号也不能省略
1、列表是动态的,属于可变序列,它的元素可以随时增加、修改或者删除,而元组是静态的,属于不可变序列,无法增加、删除、修改元素,除非整体替换。
2、列表可以使用append()、extend()、insert()、remove()和pop()等方法实现添加和修改列表元素,而元组则没有这几个方法,因为不能向元组中添加和修改元素。同样,也不能删除元素,可以整体替换。
3、列表可以使用切片访问和修改列表中的元素。元组也支持切片,但是它只支持通过切片访问元组中的元素,不支持修改。
4、元组比列表的访问和处理速度快。所以如果只需要对其中的元素进行访问,而不进行任何修改,建议使用元组而不使用列表。
5、因为列表可以修改,元组不可以修改,因此元组比列表具有更高的安全性。
6、列表不能作为字典的键,而元组可以。
7、存储方式不同:空列表 比空元组多占用16个字节。
python的集合
可以用set()函数来直接生成集合(不能用a={}之类的方式来定义)
相比于列表,集合是无需的,且其中无重复元素
set()会剔除原数据结构中的重复元素
python的多线程怎么写
Python中使用线程有两种方式:函数或者用类来包装线程对象。
- 用函数创建多线程
在Python3中,Python提供了一个内置模块 threading.Thread,可以很方便地让我们创建多线程。
调用thread模块中的start_new_thread()函数来产生新线程。语法如下:
thread.start_new_thread ( function, args[, kwargs] )
实例:来自菜鸟教程
import thread
import time
# 为线程定义一个函数
def print_time( threadName, delay):
count = 0
while count < 5:
time.sleep(delay)
count += 1
print "%s: %s" % ( threadName, time.ctime(time.time()) )
# 创建两个线程
try:
thread.start_new_thread( print_time, ("Thread-1", 2, ) )
thread.start_new_thread( print_time, ("Thread-2", 4, ) )
except:
print "Error: unable to start thread"
- 使用Thread类
使用Threading模块创建线程,直接从threading.Thread继承,然后重写__init__方法和run方法:
import threading
import time
exitFlag = 0
class myThread (threading.Thread): #继承父类threading.Thread
def __init__(self, threadID, name, counter):
threading.Thread.__init__(self)
self.threadID = threadID
self.name = name
self.counter = counter
def run(self): #把要执行的代码写到run函数里面 线程在创建后会直接运行run函数
print "Starting " + self.name
print_time(self.name, self.counter, 5)
print "Exiting " + self.name
def print_time(threadName, delay, counter):
while counter:
if exitFlag:
(threading.Thread).exit()
time.sleep(delay)
print "%s: %s" % (threadName, time.ctime(time.time()))
counter -= 1
# 创建新线程
thread1 = myThread(1, "Thread-1", 1)
thread2 = myThread(2, "Thread-2", 2)
# 开启线程
thread1.start()
thread2.start()
print "Exiting Main Thread"
每实例化一次thread即就是创建一个新线程