Python面试常见习题

1、逻辑运算常见习题举例:
print(1 or 2 and 3 or 4)
print(2 > 1 or 1 and 3 < 2)

 答案:

  2、编码知识

1 1
2 True
View Code

ASCII的作用:

1 ASCII 是二进制与英文大小写字母,标点符号,特殊符号的对应表,共8位,最左边一位为0是预留位。
View Code

 打印出列表里的所有元素:

l1 = [1,2,3,'name',[2,3,'age'],7]
for i in l1:
    if type(i) == list:
        for j in i:
            print(j)
    else:
        print(i)
View Code

 3、a=1,b=2,用一行代码将a、b的值互换?

#将a和b的值互换:
a = 1
b = 2
a,b = b,a
print(a,b)

4、dict.fromkeys的用法

#dict.fromkeys的用法
#例子1
dic = dict.fromkeys([1,2,3],[])
print(dic)     #{1: [], 2: [], 3: []}
dic[2].append('alex')   #{1: ['alex'], 2: ['alex'], 3: ['alex']}
print(dic)
#例子二
dic1 = dict.fromkeys(['Q','w'],['a','b'])
print(dic1)   #{'Q': ['a', 'b'], 'w': ['a', 'b']}
dic1['w'].append('d')
print(dic1)   #{'Q': ['a', 'b', 'd'], 'w': ['a', 'b', 'd']}

5、浅copy和深copy

浅copy的引入:

引入浅copy
#只是第一层的列表变化
l1 = [1,2,3]
l2 = l1[:]
l1.append(123)
print(l1)    #[1, 2, 3, 123]
print(l2)    #[1, 2, 3]
#第二层列表改变
l3 = [1,[2,3],4]
l4 = l3[:]    #实质上是浅copy
l3[1].append(666)
print(l3)    #[1, [2, 3, 666], 4]
print(l4)    #[1, [2, 3, 666], 4]

 浅copy:

#浅copy
#对于浅copy来说,第一层都是独立的内存地址,从第二层开始都是指向同一个内存地址,一变全都变。
l5 = [9,8,[7,6],5]
l6 = l5.copy()
l5[2].append(888)
print(l5,id(l5),id(l5[2]))  #[9, 8, [7, 6, 888], 5] 31820816 31820856
print(l6,id(l6),id(l6[2])) #[9, 8, [7, 6, 888], 5] 31819336 31820856

 深copy:#深copy

#对于深copy来说,无论多少层,在内存中,都是两个独立的内存地址。
import copy
l7 = [9,8,[7,6],5]
l8 = copy.deepcopy(l7)
l7[2].append(888)
print(l7,id(l7),id(l7[2])) #[9, 8, [7, 6, 888], 5] 41955896 41955816
print(l8,id(l8),id(l8[2])) #[9, 8, [7, 6], 5] 41957976 41957936
 

 6、列表去除重复元素:

 可以用两种方法实现,用算法去做,也可以先将列表转换成字典在转换回来。利用字典的元素是不重复的特性。

 list = [1,2,3,4,4,5,6,6,6,7]

set1 = set(list)

list = list(set1)

print(list)

 7、三元运算法则

#三元运算法则
def max(x,y):
    z = x if x > y else y
    return z
ret = max(100,200)
print(ret)      #200

 8、globals和locals

globals返回的是当前模块的全局变量

locals返回的是局部变量,locals返回的是当前所在最小命名空间的局部变量的“拷贝”,返回的变量都是原有变量的拷贝。

 9、形式参数的动态参数

#当默认参数是可变数据类型时,
#第一次调用函数和第二次调用函数用的是同一个l1列表
def func(name,l1 = [ ]):
    l1.append(name)
    print(l1,id(l1))
    return(l1,id(l1))
print(func('小明'))
print(func('小芳'))

  答案:

形式参数动态参数

 10、闭包

怎样判断闭包和闭包的好处。

闭包函数:内部函数包含对外部作用域而非全剧作用域变量的引用,该内部函数称为闭包函数,函数内部定义的函数称为内部函数。

def func():
    name = 'eva'
    def inner():
        print(name)
    return inner
f = func()
f()

 闭包函数的用处:Python内部有一个机制,当遇到闭包函数时,他会在内存中开启一个内存空间,不会关闭。

怎样判断闭包函数:判断闭包函数的方法__closure__

#怎样判断闭包函数:
def wrapper():
    def inner():
        name = '小明'
        print(name)
    print(inner.__closure__)  # 打印出来的值是None,就不是闭包函数
    inner()
wrapper()

  

 

 

 


posted @ 2018-01-24 15:54  三师弟悟净  阅读(275)  评论(0编辑  收藏  举报