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对比

  1. json的key只能是字符串,python的dict可以是任何可hash对象(hashtable type);
  2. json的key可以是有序、重复的;dict的key不可以重复。
  3. json的value只能是字符串、浮点数、布尔值或者null,或者它们构成的数组或者对象。
  4. json任意key存在默认值undefined,dict默认没有默认值;
  5. json访问方式可以是[],也可以是.,遍历方式分in、of;dict的value仅可以下标访问。
  6. json的字符串强制双引号,dict字符串可以单引号、双引号;
    7.dict可以嵌套tuple,json里只有数组。
  7. json中文必须是unicode编码,如"\u6211".
  8. json的类型是字符串,字典的类型是字典。
posted @ 2020-12-15 14:47  萌新_python  阅读(223)  评论(0)    收藏  举报