python 面试题
''' ip = "192.168.12.79"中每个十进制数转换成二进制,并连接起来生成一个新的字符串 ''' ip = "192.168.12.79" ip_lst = ip.split(".") result = [] for item in ip_lst: result.append(format(bin(int(item))[2:], ">08")) print(".".join(result))
11000000.10101000.00001100.01001111
''' ip = "192.168.12.79"中每个十进制数转换成二进制,并连接起来转换为十进制数 ''' ip = "192.168.12.79" ip_lst = ip.split(".") result = [] for item in ip_lst: result.append(format(bin(int(item))[2:], ">08")) print(int("".join(result), 2))
3232238671
'''猜猜执行的结果是什么''' def nums(): return [lambda x:x*i for i in range(4)] print([m(2) for m in nums()])
[6, 6, 6, 6]
'''猜猜执行的结果是什么'''
def nums(): return [lambda x, i=i:x*i for i in range(4)] [m(2) for m in nums()]
[0, 2, 4, 6]
'''写函数(考点:递归) 有一个数据结构如下所示,请编写一个函数从该结构中返回一个指定的字段和对应的值组成的字典,如果指定字段不存在,则跳过该字段 ''' data = { "time": "2016-08-05", "some_id": "ID123456", "grp1": {"fld1": 1, "fld2": 2}, "grp2": {"fld3": 0, "fld4": 0.4}, "fld6": 11, "fld7": 7, "fld46": 8 } def select(data, fields): global result for k, v in data.items(): if k in fields: result[k] = v if type(v) == dict: select(v, fields) return result sel = "fld1|fld7|fld29|grp2".split("|") # fld1|fld7|fld29|grp2 result = {} ret = select(data, sel) print(ret)
{'fld1': 1, 'grp2': {'fld3': 0, 'fld4': 0.4}, 'fld7': 7}
'''写函数(考点:递归) 有一个数据结构如下所示,请编写一个函数从该结构中返回一个指定的字段和对应的值组成的字典,如果指定字段不存在,则跳过该字段
比上面的方法要好,没有使用global ''' data = { "time": "2016-08-05", "some_id": "ID123456", "grp1": {"fld1": 1, "fld2": 2}, "grp2": {"fld3": 0, "fld4": 0.4}, "fld6": 11, "fld7": 7, "fld46": 8 } def select(fields): result = {} def search(k, v): if isinstance(k, dict): for k1, v1 in data.items(): search(k1, v1) if k in fields: result[k] = v search(data, data) return result sel = "fld1|fld7|fld29|grp2".split("|") # fld1|fld7|fld29|grp2 ret = select(sel) print(ret)
{'fld1': 1, 'grp2': {'fld3': 0, 'fld4': 0.4}, 'fld7': 7}
'''猜猜执行的结果是什么''' def add(x, y): return x + y def test(): for i in range(4): yield i g = test() for n in [2, 10]: g = (add(n, i) for i in g) print(list(g))
[20, 21, 22, 23]
分析:
g = (add(n, i) for i in add(n, i) for i in g)
g = (add(10, i) for i in add(n ,i) for i in (i for i in range(4)))
g = (add(10, i) for i in add(10, i) for i in (0, 1, 2, 3))
g = (add(10, i) for i in (10, 11, 12, 13))
g = (20, 21, 22, 23)
'''[闭包+for循环]函数在何时被谁创建?猜猜最后打印结果''' info = [] def func(i): def inner(): print(i) return inner for item in range(10): info.append(func(item)) info[0]() info[1]() info[4]()
0 1 4
'''[函数+for循环]函数在何时被谁创建?猜猜最后打印结果''' info = [] def func(): print(item) for item in range(10): info.append(func) info[0]()
9
'''函数在何时被谁创建?猜猜最后打印结果''' info = [] def func(): print(item) for item in range(10): info.append(func) info[0]() print("info" in globals()) print("func" in globals()) print("item" in globals())
9 True True True
'''面试题,v最后的值为多少 v = 1 or 9 v2 = 0 or 9 or 8 v3 = 3 > 1 and 2 or 2 < 3 and 3 and 4 or 3 > 2 '''
v = 1 or 9 print(v)
1
v = 0 or 9 or 8 print(v)
9
v = 3 > 1 and 2 or 2 < 3 and 3 and 4 or 3 > 2 print(v)
2
'''考察知识点:and or 对于and: 如果第一个值的bool值为True,则值=第二个值 如果第一个值的bool值为False,则值=第一个值 对于or: 如果第一个值的bool值为True,则值=第一个值 如果第一个值的bool值为False,则值=第二个值 优先级:not and or '''