每日一问:

1 python中id、is、=、== 分别是比较什么的?
id 查看内存地址,is是比较内存地址是不是相同,=是赋值,==比较的是变量的值



2 说说python的小数据池(了解即可,面试偶尔会问到)。
python中数字。在一定规则范围内,如果同时定义多个相同值的数字类型或字符串类型变量,他们会共用一个内存地址。可以用 is 验证。
数字:范围在 -5~256
小数据池的目的是节省内存空间。


1 alist = [{'name':'alex', 'age':20}, {'name':'luffy', 'age':2}, {'name':'egon', 'age':30}, {'name':'peiqi', 'age':30}, ]
根据alist中的age由大到小进行排序
解法1:
alist.sort(key=lambda x: x['age'], reverse=True)
解法2:
import operator
alist.sort(key=operator.itemgetter('age'), reverse=True)



在python当中如何获取命令行参数?
知识点python的sys模块
import sys
sys.argv # 接收用户输入的命令行参数


int 的使用
num = int('111', 2)
print(num)
# 会报错吗?会请说出理由,不会请给出结果

输出的是7 。不会报错, 因为int 接收两个参数, 第二个参数是进制的意思, 范围在 2-32。

111  会 被当作2进制的数, 转换成十进制的 7



python2中有range和xrange,这两个有什么区别?

py2 中的range 会一次性将数据全部创建出来, xrange 则是一个生成器 会在调用的时候才会输出值 不会一次性创建太多的数据。


如果模块是被导入的__name__的值是什么,如果是被执行的__name__的值又是什么?
请给出答案,时间方便可以可以说明解题过程

------被导入的时候  __name__ 的值是。这个模块的文件名。 被执行时 __name__ == "__main__"



2 请用python实现99乘法表。

for i in range(1, 10):
    for j in range(1, i+1):
        print("%d * %d = %d" % (i, j, i*j), end="   ")
    print()

multi_table = ["%d * %d = %d" % (j, i, i * j) for i in range(1, 10) for j in range(1, i+1)]


 1 文件操作中f = open(filename, mode, code),执行写入f.write('hello world'),请问hello world 是写进了文件还是只是存在内存当中?如何使写的内容主动存储到文件中。
f.write时间内容写到计算机的内存中
存储到文件:
    f.close()# 文件关闭,会自动将内容从内存存储到文件中
    f.flush()# 主动将内容从内存存储到文件中
2 如何调整文件中的指针?
    f.seek()
3 说下truncate的作用。
    如果指定了 size 则从size处往后都截断清除,不指定size从指针处往后都截断


 1 给出最后print的结果
    def multipliers():
    return [lambda x : i * x for i in range(4)]
    print([m(2) for m in multipliers()])

[6,6,6,6]

lambda  不会保存变量的值。 他使用的是 i 变量的一个引用。    i 变量再循环完成之后,指向了 3.  所以 lambda 中的 i  都是 3.   打印时 3*2  都是6.



2 下面代码的执行结果是什么?
num = 5
def func():
    num = 10
    print('func', num)

def func2():
    print('func2', num)
func()    # 10
func2()    # 5



3 以下代码的执行效率怎么样,会不会慢,慢在哪?
def func(num):
    s = 'first'
    for i in range(num):
        s += 'luffy'
    return s

会慢! 因为使用的是 + 拼接字符串。 因为字符串是不可变类型。所以每次拼接都会去申请新的内存空间 来存放新的值。从而导致变慢。


1 一行代码实现1-100的求和,一行代码实现1-100奇数求和,一行代码实现1-100偶数求和。

sum(range(1, 101)),sum(range(1, 101, 2)),sum(range(2, 101, 2))



2 字符串的拼接可以使用+和join完成,两者有什么区别?

字符串属于不可变数据类型,每执行一次+都会申请一块新的内存地址,因此用+号连接的时候,会有多次的内存申请和复制,

而使用join在连接字符串的时候,会先计算需要多大的内存存放结果,然后一次性的申请所需呀的内存,字符串拼接的时候建议使用join



3 python的自省是指的什么?

python的自省是指在程序执行的过程中,能够知道对象的类型。(自动的判断)


1 什么是闭包函数,闭包函数满足什么样的条件?请写一个常见的闭包函数。

闭包函数本质就是函数的嵌套和高阶函数。
1)必须嵌套函数
2)内嵌函数必须引用一个定义在闭合范围内(外部函数里)的变量——内部函数引用外部变量
3)外部函数必须返回内嵌函数——必须返回那个内部函数



2 什么是递归函数?在递归函数的使用中要注意什么地方?

递归函数就是自己调用自己。

注意:

1. 递归函数需要明确的有一个 结束的条件。否则就会无限递归 从而超出python最大的递归深度。(sys 模块可修改递归深度,默认是1000)

2. 每次进入一层递归,问题的规模都应该比上一层有所减小。

3. 递归效率不高。 只用于特别的地方。



3 请用递归函数实现10的阶乘:10*9*8*7....*1


def factorial(num):
    if num <= 1:
        return 1
    return num * factorial(num-1)

 1 在不改变列表中数据排列结构的前提下,找出以下列表中最接近最大值和最小值的平均值 的数  li = [-100,1,3,2,7,6,120,121,140,23,411,99,243,33,85,56]

li = [-100, 1, 3, 2, 7, 6, 120, 121, 140, 23, 411, 99, 243, 33, 85, 56]
mid = (max(li) + min(li)) / 2
res = abs(li[0] - mid)

result = None
for i in li:
    curr_min = abs(i - mid)
    if curr_min < res:
        res = curr_min
        result = i
print(result)


2 写一个configparser模块的应用小示例



3 利用random模块写一个6位的随机验证码,验证码内包含字母、数字(随机出现)

s = string.ascii_lowercase + string.digits

print(random.sample(s, 6))

1 以下代码执行的结果,如果出现错误请说明错误原因。

def calc(a, b, c, d=1, e=2):
  return (a+b)*(c-d)+e

print(calc(1, 2, 3, 4, 5))
print(calc(1, 2, 3))
print(calc(1, 2))
print(calc(1, 2, 3, e=4))
print(calc(e=4,c=5, a=2, b=3))
print(calc(1, 2, 3, d=5, 4))

2 re模块中,search、match、findall的作用分别是什么?

search  的作用是,找到字符串中符合匹配模式的, 第一个匹配项。 然后就返回结果,不在继续匹配。

match  的作用是, 从字符的开始进行匹配,  如果有符合匹配模式的匹配项就返回,否则就返回 None

findall  的作用是, 从字符串中找到所有的符合匹配模式的匹配项,饭后保存到列表中返回,  否则返回 None


1 python的内置模块有哪些?【不少于10个】。



2 logging模块的作用,以及使用场景,写一个简单的日志模块。可以在其他模块中调用。



3 以下代码执行的结果,并说明理由。

def func(a):
  print(a)
  print(b)
  b=9    # 如果这一行注释了会发生什么?为什么?
b = 6 func(3)

1 subprocess模块的作用是什么?如何使用subprocess执行查看/bin/目录下的存在我文件或者目录



2 一下代码执行的结果是什么?

li = [ [ ] ] * 5
print(li) # output?
li[0].append(10)
print(li) # output?
li[1].append(20)
print(li) # output?
li.append(30)
print(li) # output?


3 用户输入一个时期格式:2019-07-26返回是一年中的第几天?


1 什么是面向对象?相比较于函数编程,面向对象有什么优点?



2 什么是类、属性、方法、实例(对象)、实例化?



3 面向对象的特点是什么?


1 python为类内置的特殊属性,假设类名为People,说一下下面这些特殊属性的作用。
People.__dict__
People.__module__
People.__doc__



2 python的类中有哪两种属性,分别是什么?不同的属性分别是属于谁?



3 编写一个学生类,产生一堆学生对象,要求有一个计数器【属性】,统计一共实例了多少对象。

Class Student(object):
  count = 0 # 计数器 def __init__(self,):
    Student.count += 1

# 未完成   以后再说


1 类的属性和对象属性有什么区别?

类属性 在类定义的阶段就会, 添加到类的名称空间中。  并且是所有对象共享的。  (如果没有进行私有化的话)。

  对象属性是类中  函数自己的名称空间中的属性, 只有对象才可以访问到。  类本身无法进行访问。



2 类和对象在内存中是如何保存的?



3 什么是绑定到对象的方法、绑定到类的方法、非绑定方法,这些方法有什么特点?

@classmethod  绑定到类的方法。 类进行访问时,可自动传值。


1 python中的经典类和新式类有什么区别?

在python 2中,加不加括号,都是表示经典的类,而如果括号里指明继承object,则为新式类。

python 3中,不管加不加括号,不管指不指明继承object,都是新式类。 新式类和经典类最大的不同也在这里,  新式类必须要有一个继承。

经典类和新式类的区别就在于,一个是深度优先查, 一个是 广度优先的查询。

经典类遵循深度优先的法则进行,属性和方法的查询。  新式类 遵循广度优先的法则进行属性和方法的查询。

 可以使用   类名.mro()  来查看,当前这个类的(Method resolution Order) 方法解析顺序。



2 以下代码经典类和新式类的继承顺序是什么?
class A(object):
def test(self):
print('from A')

class B(A):
def test(self):
print('from B')

class C(A):
def test(self):
print('from C')

class D(B):
def test(self):
print('from D')

class E(C):
def test(self):
print('from E')

class F(D,E):
# def test(self):
# print('from F')
pass



3 在面向对象中如何把属性变成私有属性?私有属性的意义是什么?


1 Python中staticmethod,和classmethod的作用是什么?



2 以下代码有何问题,应该如何纠正?@property的作用是什么?
class Dog(object):
 
   def __init__(self,name):
       self.name = name
 
   @property
   def eat(self):
       print(" %s is eating" %self.name)
 
d = Dog("dog")
d.eat()


1 在元类中控制把自定义类的数据属性都编程大写。



2 在类中,参数self是否可以替换成其他的变量?



3 __slots__属性的作用是什么?


1 以下代码的运行结果?
class Dog:
    __slots__ = ('name')
    
    def __init__(self, name):
        self.name = name
        
    def test(self):
        print('预先定义的test方法')

d = Dog('Snoopy')
d.age = 5



2 enumerate函数的用法如下,请用python实现enumerrate函数。
li = ['a', 'b', 'c', 'd']
for index, item in enumerate(li):
print(index, item)
输出结果:
0 a
1 b
2 c
3 d


1 在python中in操作 对于list, set, tuple, dict 效率如何?简要说明下。



2 模仿王者荣耀定义两个英雄类
要求:
英雄需要有昵称、攻击力、生命值等属性;
实例化出两个英雄对象;
英雄之间可以互殴,被殴打的一方掉血


1 python中异常处理的作用是什么?什么是万能异常?如何在一段代码上加万能异常?



2 以下代码执行的结果,报错请说明原因?
class Func:
    def __init__(self, name):
        self.name = name

    def name(self):
        print("hello world!")

f = Func('alex')
ret = hasattr(f, 'name')
print(ret)
fun = getattr(f, 'name')
fun()


1 如何让类多次实例化的时候只有一个实例?

1 如何让类多次实例化的时候只有一个实例?
一个类多次实例化只获得一个实例,这是一种设计模式(单例)。
单例模式保证了在程序的不同位置都 可以且仅可以取到同一个对象实例 :如果实例不存在,会创建一个实例;如果已存在就会返回这个实例。因为单例是一个类,所以你也可以为其提供相应的操作方法,以便于对这个实例进行管理。
简单的装饰器版本,进攻参考
def singleton(cls):
    _instance = {}
    def inner(*args, **kwargs):
        if cls not in _instance:
            _instance[cls] = cls(*args, **kwargs)
        return _instance[cls]
    return inner
    
@singleton
class Cls(object):
    def __init__(self):
        pass
cls1 = Cls()
cls2 = Cls()
print(id(cls1) == id(cls2))



2 用两个队列实现一个栈。
后进先出:后放进去先拿出来。

class Stock:
    def __init__(self):
        self.queueA=[]
        self.queueB=[]
    def push(self, node):
        self.queueA.append(node)
    def pop(self):
        if len(self.queueA)==0:
            return None
        while len(self.queueA)!=1:
            self.queueB.append(self.queueA.pop(0))
        self.queueA,self.queueB=self.queueB,self.queueA #交换是为了下一次的pop
        return self.queueB.pop()
测试一下是否成功实现了栈
if __name__=='__main__':
    times=5
    testList=list(range(times))
    testStock=Stock()
    for i in range(times):
        testStock.push(testList[i])
    print(testList)
    for i in range(times):
        print(testStock.pop(),',',end='')  


1 什么是计算机网络?计算机网络的作用是什么?



2 OSI七层模型分别是什么,请简要说明每一层的作用?


原文地址:https://www.cnblogs.com/chengege/p/11134255.html