面試題(一)


1、現有兩元祖  (('a'),('b'),('c'),('d') ) ,請使用Python中的匿名函數生成列表 [ {'a':'c',{'c':'d'}]

答案:v = list(map(lambda x,y:{x:y},data[0:2],data[2:4]))
data = (('a'),('b'),('c'),('d') )
v = list(map(lambda x,y:{x:y},data[0:2],data[2:4]))
data[0:2] = ('a'),('b')
data[2:4] = ('c'),('d')
匿名函數 傳進去  參數(x,y)  返回 {x:y}
map(func,iterable) # 對於iterable 依次 傳遞給 func ,返回的是可迭代對象
答案
2、看代碼 寫結果
def multipliters():
    return [lambda x:i * x for i in range(4)]

print([m(2) for m in multipliters()])

 

# 第一種是 將生成器對象生成的匿名函數轉化成列表 ,匿名函數使用的是相同的內存空間。
# 轉換成列表后,循環結束,命名空間里的i都為3
def multipliters():
    return [lambda x:i * x for i in range(4)]

print([m(2) for m in multipliters()])

# 以下是依次返回 生成器生成的每個匿名函數,每次調用i都在變化
def multipliters2():
    return (lambda x: i*x for i in range(4))
print([m(2) for m in multipliters2()])
答案

 

3、  1 or 2   和   1 and 2 分別輸出什么?

 

# 1     2  
# 0 "" [] {} set() None False 放入判斷表達式都為假
# or 或  and 與
# 整個式子 不斷去向右查看,直到能確定為真就停下來
答案

 

4、看代碼 寫結果

value = "B" and "A" or "C" 
print(value)
# A
# 整個式子 不斷去向右查看,直到能確定為真就停下來
答案

 

5、看代碼寫結果

v1 = [i % 2 for i in range(10)]
v2 = (i % 2 for i in range(10))
print(v1,v2)

 

# v1 = [i % 2 for i in range(10)] 為列表生成式
# v2 = (i % 2 for i in range(10)) 為<generator object <genexpr> at 0x00E4F990>為生成式
答案

 

6、看代碼,寫結果

def extendList(val,li=[]):
    li.append(val)
    return li
list1 = extendList(10)
list2 = extendList(123,[])
list3 = extendList('a')

print(list1)
print(list2)
print(list3)

 

# [10, 'a']
# [123]
# [10, 'a']
# 參數變量在編譯會生成,而且只會生成一次,其內存地址的指向不發生變化
# 所以會有默認的 []
# 1、3都會使用默認的 編譯生成同一個[]
# 2 新生成一個 [] 
答案

 

7、下面代碼誰報錯?

v1 = {}
v2 = {3:5}
v3 = {[11,23]:5}
v4 = {(11,23):5}
v3錯誤,字典元素的鍵不能為可變對象
答案

8、輸出以下結果

for i in range(5,0,1):
    print(i)
# range(起始元素,結束元素(不包含),每次的變化)
# 5 每次加1,啥時候能加到0,O(∩_∩)O哈哈~
答案

9、請說出range和xrange的區別

 

# from collections import Iterable,Iterator
# Iterable 可迭代對象
# Iterator 迭代器 
# print(isinstance(xrange(10),Iterator))
# print(isinstance(xrange(10),Iterable))

# python2 中 range(start, stop[, step]) 和 range(stop) 會生成-> range object,,返回是列表,是可迭代對象,全部放在內存里
# python2 中 xrange(start, stop[, step]) 和 range(stop)會生成-> xrange object,返回是可迭代對象,每次調用時才會生成

# python3 沒有xrange,只有range,也是可迭代對象,每次調用時才會生成
答案

 

10、請將 "1,2,3",變成 ["1","2","3"]

 

"1,2,3".split(',')
答案

 

11、一行代碼生成 [1,4,9,16,25,36,49,64,81,100]

 

[i*i for i in range(11)]
答案

 

12、一行生成 9 * 9乘法表

 

[ x                              for x in range(1,10)]

[ x*y for y in range(1,x+1)]

[ ([ x*y for y in range(1,x+1)]) for x in range(1,10)]

[ ([ '{}*{} = {}'.format(x,y,x*y) for y in range(1,x+1)]) for x in range(1,10)]

'\n'.join([ str(x) for x in range(1,10)])

print('\n'.join([ ' '.join( [ '{}*{} = {}'.format(x,y,x*y) for y in range(1,x+1)] ) for x in range(1,10)]) )
答案

 

13、map(str,[1,2,3,4,5,6,7,8,9])輸出什么?Python2 和Python3輸出的結果一樣嗎?

 

print(isinstance(map(str,[1,2,3,4,5,6,7,8,9]),Iterable))
print(isinstance(map(str,[1,2,3,4,5,6,7,8,9]),Iterator))
# python 3 <map object at 0x00D359F0> 是 Iterator
# python 2 ['1', '2', '3', '4', '5', '6', '7', '8', '9'] ,是可迭代對象,但不是Iterator
答案

 

14、Django如何在Model保存前做一定的固定操作,比如寫一條日志

 

利用Django的Model的Signal Dispatcher, 通過django.db.models.signals.pre_save()方法,在事件發生前,發射觸發信號,這一切都被調度中的receiver方法深藏功與名的保存了。
信號的處理一般都寫在Model中,舉個例子:
import logging
from django.db import models
from django.db.models.signals import pre_save
from django.dispatch import receiver
 
class Order(models.Model):
    # ...
 
logger = logging.getLogger(__name__)
 
@receiver(pre_save, sender=Order)
def pre_save_handler(sender, **kwargs):
 
    # 我們可以在Order這個Model保存之前盡情調戲了:)
    logger.debug("{},{}".format(sender, **kwargs))
答案

參考:http://python.jobbole.com/81871/

15、1,2,3,4,5能組成多少個互不相同的無重復的三位數

5 * 4 * 3
答案

 

 

 

答案:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM