2017年度python面试题超纲20道(一)

这么冷的天 不困么

相关链接:

  过去的2017年中,在同性交友网站stackoverflow上又提了哪些超纲违规的问题呢?
      问题来源stackoverflow

What is python .. (“dot dot”) notation syntax?

Python的 .. (点 点) 是什么语法?

f = 1..__truediv__ # or 1..__div__ for python 2
print(f(8)) # prints 0.125 

  真的超纲了喂。..是什么鬼啊摔。真的不是问**args是什么语法么?那我们用python试试好了。

>>> f = 1.
>>> f
1.0
>>> f.__floordiv__
<method-wrapper '__floordiv__' of float object at 0x7f9fb4dc1a20>

  咦,你是不是有看出来什么了。再看一个例子。

>>> 1..__add__(2.)
3.0

  大家都看出来了吧,..本身并不是什么操作符更不是什么语法。其中,第一个点是浮点值的一部分第二个点是点操作符来访问对象属性和方法
  太简单,下一题。

Why is x**4.0 faster than x**4 in Python 3?

为什么在Python3中 x4.0 比 x4运行的快?

$ python -m timeit "for x in range(100):" " x**4.0"
  10000 loops, best of 3: 24.2 usec per loop

$ python -m timeit "for x in range(100):" " x**4"
  10000 loops, best of 3: 30.6 usec per loop

  我先解释下为什么会有这个问题,先不要讨论提问者的电脑怎么这么慢好么。我拿python2试了一下,结果是这样。

$ python -m timeit "for x in range(100):" " x**4.0"
  10000 loops, best of 3: 15.6 usec per loop

$ python -m timeit "for x in range(100):" " x**4"
  10000 loops, best of 3: 4.59 usec per loop

  可以明显看出python2中int型计算明显快于float。嗯...其实我已经回答完了不知道大家有没有发现。这个问题是由python2与python3差别引起的。
  先指出答案核心:python3的4是PyLongObject,pytohn2的4是int

  • pytohn3与python2中的float对象依然是那个原生类。
  • python3中的int对象实例化一个支持任意长度的成熟类,叫PyLongObject
  • python2中的整数分为int与long,比如:
# Python 2
type(4)  # <type 'int'>
type(4L) # <type 'long'>

  以上的区别导致python3中整数的运算更加繁琐复杂,因为你需要用PyLongObject对象的值来执行它的ob_digit阵数组。(参考:Understanding memory allocation for large integers in Python for more on PyLongObjects.)

Given a string of a million numbers (Pi for example), write a function/program that returns all repeating 3 digit numbers and number of repetition greater than 1

给定一个长度为100万的数字(比如π),写代码计算出所有连续的三个数字,且要求该连续的三个数字至少重复出现过一次。

# For example: if the string was: 123412345123456 then the function/program would return:

# 123 - 3 times
# 234 - 3 times
# 345 - 2 times

  提问的人最后还加了一句能不能实现时间复杂度为常数级解决方案?这很明显的面试题嘛,假如面试时候你遇到这个你会怎么回答?
  首先,在O(1)情况下无法处理任意大小的数据结构,在这种情况下,最好的希望是O(n),其中n是字符串的长度,也就是线性时间复杂度
  但是这里如果每次输入定长100w,从技术的角度来说实现O(1)是可行的(以为数据源定长嘛就相当于n=100w,这属于咬文嚼字了没意思),但是我相信这绝不会是这题重点。还是先给出python实现代码好了:

inpStr = '123412345123456'

# O(1) array creation.
freq = [0] * 1000

# O(n) string processing.
for val in [int(inpStr[pos:pos+3]) for pos in range(len(inpStr) - 2)]:
    freq[val] += 1

# O(1) output of relevant array values.
print ([(num, freq[num]) for num in range(1000) if freq[num] > 1])

  代码不复杂,相信大家都看的懂,我们继续讨论速度的问题。上述代码可见实现O(n)是没什么问题的,但是如果再提速呢?
  方法也有,运用归并思想,将输入值切片,多线程运行。像这样

# 123412345123456
# 拆成
    vv
123412  vv
    123451
        5123456

  运用归并的思想去解决问题,但问题来了,因为pytohn有GIL的存在,所以用python实现该思想可能成本很大。当然你可以用其他语言实现。我觉得面试时候给出python代码提出归并思想就比较好了。

Why in python 0, 0 == (0, 0) equals (0, False)

为什么在Python中表达式 0, 0 == (0, False) 的结果是 (0, False)

(0, 0) == 0, 0   # results in a two element tuple: (False, 0)
0, 0 == (0, 0)   # results in a two element tuple: (0, False)
(0, 0) == (0, 0) # results in a boolean True 
# But:
a = 0, 0
b = (0, 0)
a == b # results in a boolean True

  这题很简单啊,我换种写法,标明优先级大家就懂了。

(((0, 0) == 0), 0)   # results in a two element tuple: (False, 0)
(0, (0 == (0, 0)))   # results in a two element tuple: (0, False)
((0, 0) == (0, 0)) # results in a boolean True 
# ALSO:
a = 0, 0
b = (0, 0)
a == b # results in a boolean True

  逗号分隔符与相等运算符的优先级是不同的。

Does Python optimize away a variable that's only used as a return value?

Python会把一个只用做返回值的变量优化掉吗?

# Case 1:
def func():
    a = 42
    return a

# Case 2:
def func2():
    return 42

  这个问题非常有趣,我是从来没往这方面想过。我对其底层可能理解不多大家轻点喷,我把解决问题的过程帮大家写出来,大家可以看着思考一下:

# 用dis打印运行过程

from dis import dis
# Case 1:
dis(func)
  2           0 LOAD_CONST               1 (42)
              2 STORE_FAST               0 (a)

  3           4 LOAD_FAST                0 (a)
              6 RETURN_VALUE

# Case 2:
dis(func2)
  2           0 LOAD_CONST               1 (42)
              2 RETURN_VALUE

  可以明显的看出,问题的答案是没有优化,运行速度也是第二种快一丢丢,因为需要执行的命令更少。嗯...其他解释我就不太清楚了,我只能从这个层面回答解释。

  那...我们下期再见?
  喜欢的话可以关注、点赞、顺便看看前面文章,其实讲道理,我觉得前面写的大部分爬虫文章还挺好的。
  生活愉快下期见。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,198评论 4 359
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,663评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,985评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,673评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,994评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,399评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,717评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,407评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,112评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,371评论 2 241
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,891评论 1 256
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,255评论 2 250
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,881评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,010评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,764评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,412评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,299评论 2 260

推荐阅读更多精彩内容

  • 约莫还是当年。 他们将酒坛捧高,肩叠肩,肘搭肘,薄甲春衫都不需论,只并靠着。夜风里掺野露,陵光偏开脸想避避月色,高...
    沈怀书阅读 1,062评论 0 2
  • 他慢慢向叶语芊走过去。走过去的时候正好听见湘栎正在对叶语芊说着什么。 “第三种可能,就是他对你也...
    一只小萌狐w阅读 281评论 0 0
  • 想想为什么起这么一个昵称,应该是没有什么人知道其中的原因。 解读一下吧,因为烂木头是一根从心里开始烂的木头,从最里...
    一根烂木头阅读 348评论 3 2
  • 丁酉年六月初四辰时,余从校返家,适逢一寻人启事,读之有感,作此杂诗以抒怀。 艰难困苦总流去,儿孙满堂享乐时。 光阴...
    竖子小阅读 444评论 5 1