python基础面试题
数据类型8种
1、整型
2、浮点型
3、布尔类型
4、元组
5、列表
6、字典
7、集合
8、字符串
可变类型和不可变类型
可变类型:列表、集合、字典
不可变类型:整型、浮点型、元组、布尔型、字符串
字典和json数据的区别
json的key只能是字符串,python的dict可以是任何可hash对象(hashtable type);
json的key可以是有序、重复的;dict的key不可以重复。
json的value只能是字符串、浮点数、布尔值或者null,或者它们构成的数组或者对象。
json任意key存在默认值undefined,dict默认没有默认值;
json访问方式可以是[],也可以是.,遍历方式分in、of;dict的value仅可以下标访问。
json的字符串强制双引号,dict字符串可以单引号、双引号;
dict可以嵌套tuple,json里只有数组。
json:true、false、null
python:True、False、None
json中文必须是unicode编码,如"\u6211".
json的类型是字符串,字典的类型是字典。
字符串内置方法
列表内置方法
list.append() # 在list 末尾增加一个元素
list.insert(n,'4')# 在指定位置添加元素,如果指定的下标不存在,那么就是在末尾添加
list1.extend(list2) # 将list2中的元素加在list1上面
list.count(XX) # 查看XX元素在这个列表里的个数,如果XX元素不存在,那么返回0
list.index(xx) # 查看XX元素的下标,如果有多个下标,返回第一个,如果找不存在的元素会报错
list.pop() # 删除列表最后一个元素
list.pop() # 删除下标对应的元素,如果该下标超出该列表的最大下标则报错
list.remove(xx) # 删除list 里面的一个元素,有多个相同的元素,删除第一个
字典内置方法
d.get('key') # 通过key获取值 如果没有key对应的值,则返回None
d.keys() # 获取所有的key值
d.values() # 获取所有的values值
for k,v in d.items(): #遍历字典
print(k,v)
d.pop('key') # 删除字典对应的 key 以及 key对应的value
d.popitem() # 删除字典最后一个 key 以及 key 对应的 value
del d['key'] # 删除字典
d.clear() # 清空字典
排序
- 通过字典的key进行排序
dic = {'a': 31, 'bc': 5, 'c':3, 'asd':4, 'aa':74, 'd':0}
dict= sorted(dic.items(), key=lambda d:d[0]) # d[0]表示字典的键
print(dict)
- 通过字典的value进行排序
dic = {'a':31, 'bc':5, 'c':3, 'asd':4, 'aa':74, 'd':0}
dict = sorted(dic.items(), key=lambda d:d[1], reverse = True)
print(dict)
- 列表进行排序
a.sort()
函数
def A(a, b=[]):
print(id(b))
b.append(a)
print(b)
A(1) # [1]
A(2) # [1, 2]
A(1, []) # [1]
A(3) # [1, 2, 3]
类
魔法方法
1. __init__
2. __new__
3. __str__
4. __del__
注意
类对象不能调用实例方法
实例对象能调用类方法
两者都可以调用静态方法
异常
try:
#这里是可能出现异常的 代码
raise # 异常 抛出
except:
# 出现异常执行以下代码
else:
# 没有出现异常执行以下代码
finally:
# 不管是否出现异常都执行以下代码
多线程
import threading
import time
g_num = 0
def work1(num):
global g_num
for i in range(num):
g_num += 1
print("----in work1, g_num is %d---"%g_num)
def work2(num):
global g_num
for i in range(num):
g_num += 1
print("----in work2, g_num is %d---"%g_num)
print("---线程创建之前g_num is %d---"%g_num)
t1 = threading.Thread(target=work1, args=(100,))
t1.start()
t2 = threading.Thread(target=work2, args=(100,))
t2.start()
while len(threading.enumerate()) != 1:
time.sleep(1)
print("2个线程对同一个全局变量操作之后的最终结果是:%s" % g_num)
互斥锁
# 创建锁
mutex = threading.Lock()
# 锁定
mutex.acquire()
# 释放
mutex.release()
多进程
协程
生成器
定义:这种一边循环一边计算的机制,称为生成器
class FibIterator(object):
"""斐波那契数列迭代器"""
def __init__(self):
# num1用来保存前前一个数,初始值为数列中的第一个数1
self.num1 = 1
# num2用来保存前一个数,初始值为数列中的第二个数1
self.num2 = 1
def __next__(self):
"""被next()函数调用来获取下一个数"""
temp_num = self.num1
self.num1, self.num2 = self.num2, self.num1+self.num2
return temp_num
def __iter__(self):
"""迭代器的__iter__返回自身即可"""
return self
fib = FibIterator()
# 因为fib是迭代器所以不必使用iter()函数,直接使用next()函数即可
print(next(fib))
闭包
定义:在函数中可以(嵌套)定义另一个函数时,如果内部的函数引用了外部的函数的变量,则可能产生闭包。闭包可以用来在一个函数与一组“私有”变量之间创建关联关系。在给定函数被多次调用的过程中,这些私有变量能够保持其持久性
def make_printer(msg): # 可以认为是 外部函数
def printer(): # 可以认为是 内部函数
print(msg)
return printer # 返回的内部函数的引用
printer = make_printer('Good!')
printer()
装饰器
定义:在不修改原有函数代码的前提下, 在函数前或者函数后增加新的功能
def check_login(func):
def inner():
func()
return inner
@check_login
def f1():
print('f1')
迭代器
定义: 一个实现了__iter__方法和__next__方法的对象,就是迭代器
from collections.abc import Iterable
class MyList(object):
def __init__(self):
self.container = []
def add(self, item):
self.container.append(item)
def __iter__(self):
pass
mylist = MyList()
mylist.add(11)
mylist.add(22)
mylist.add(33)
print("mylist是否是可以迭代对象", isinstance(mylist, Iterable))
for temp in mylist:
print(temp)
垃圾回收:垃圾回收是以引用计数为主,分代收集为辅。
分代收集
在Python中,采用分代收集的方法。把对象分为三代,一开始,对象在创建的时候,放在一代中,如果在一次一代的垃圾检查中,该对象存活下来,就会被放到二代中,同理在一次二代的垃圾检查中,该对象存活下来,就会被放到三代中。
json和dict对比
- json的key只能是字符串,python的dict可以是任何可hash对象(hashtable type);
- json的key可以是有序、重复的;dict的key不可以重复。
- json的value只能是字符串、浮点数、布尔值或者null,或者它们构成的数组或者对象。
- json任意key存在默认值undefined,dict默认没有默认值;
- json访问方式可以是[],也可以是.,遍历方式分in、of;dict的value仅可以下标访问。
- json的字符串强制双引号,dict字符串可以单引号、双引号;
7.dict可以嵌套tuple,json里只有数组。 - json中文必须是unicode编码,如"\u6211".
- json的类型是字符串,字典的类型是字典。

浙公网安备 33010602011771号