1、python基本語法
1、@staticmethod 和 @classmethod
python中有三種方法,例項方法、類方法(@classmethod)、靜態方法(@staticmethod)。
類方法的第乙個引數是cls,表示該類的乙個例項,靜態方法基本上和乙個全域性函式相同
class a(object):
def foo(self, x):
print("executing foo(%s,%s)" % (self, x))
print('self:', self)
@classmethod
def class_foo(cls, x):
print("executing class_foo(%s,%s)" % (cls, x))
print('cls:', cls)
@staticmethod
def static_foo(x):
print("executing static_foo(%s)" % x)
a = a()
print(a.foo(1))
print(a.class_foo(1))
print(a.static_foo(1))
2、迭代器和生成器
迭代器:是訪問集合元素的一種方式,從集合的第乙個元素開始訪問,直到所有元素被訪問結束。其優點是不需要事先準備好整個迭代過程中的所有元素,僅在迭代到某個元素時才開始計算該元素。適合遍歷比較巨大的集合。iter():方法返回迭代器本身, next():方法用於返回容器中下乙個元素或資料。
生成器:帶有yield的函式不再是乙個普通函式,而是乙個生成器。當函式被呼叫時,返回乙個生成器物件。不像一般函式在生成值後退出,生成器函式在生成值後會自動掛起並暫停他們的執行狀態。
'''迭代器'''
print('for x in iter([1, 2, 3, 4, 5])?
for x in iter([1, 2, 3, 4, 5]):
print(x)
'''生成器'''
def myyield(n):
while n>0:
print("開始生成...?
yield n
print("完成一次...?
n -= 1
for i in myyield(4):
print("遍歷得到的值:",i)
3、閉包
閉包可以實現先將乙個引數傳遞給乙個函式,而並不立即執行,以達到延遲求值的目的。滿足以下三個條件:必須有乙個內嵌函式;內嵌函式必須引用外部函式中變數;外部函式返回值必須是內嵌函式。
def delay_fun(x, y):
def caculator():
return x+y
return caculator
print('返回乙個求和的函式,並不求和')
msum = delay_fun(3,4)
print('呼叫並求和:')
print(msum())
4、*args 和 **kwargs
這兩個是python中的可變引數,用於接受引數的傳遞。args表示任何多個無名引數,它是乙個元組,**kwargs表示關鍵字引數,它是乙個字典。同時使用args和kwargs時,必須*args在kwargs之前。
5、鴨子型別:
在鴨子型別中,關注的不是物件的型別本身,而是他是如何使用的。例如,在不使用鴨子型別的語言中,我們可以編寫乙個函式,它接受乙個型別為鴨的物件,並呼叫它的走和叫方法。在使用鴨子型別的語言中,這樣的乙個函式可以接受乙個任意型別的物件,並呼叫它的走和叫方法。
class duck():
def walk(self):
print('i am duck,i can walk...')
def swim(self):
print('i am duck,i can swim...')
def call(self):
print('i am duck,i can call...')
duck1=duck()
duck1.walk()
# i am duck,i can walk...
duck1.call() # i am duck,i can call...
6、@property 和 @setter
@property負責把乙個方法變成屬性呼叫。在對例項操作時,不暴露介面,而是通過getter和setter方法實現。
class student(object):
@property
def score(self):
return self._score
@score.setter
def score(self, value):
if not isinstance(value, int):
raise valueerror('score must be an intager')
if value<0 or value>100:
raise valueerror('score must between 0~100!')
self._score = value
s = student()
s.score = 60
print(s.score)
s.score = 999
print(s.score)
7、多程序和多執行緒
程序:是資源分配的最小單位,建立和銷毀開銷較大;
執行緒:是cpu排程的最小單位,開銷小,切換速度快;
作業系統將cpu時間片分配給多個執行緒,每個執行緒在指定放到時間片內完成。作業系統不斷從乙個執行緒切換到另乙個執行緒執行,巨集觀上看就好像是多個執行緒一起執行。
python中由於全域性鎖 (gil) 的存在導致,同一時間只有乙個獲得gil的執行緒在跑,其他執行緒則處於等待狀態,這導致了多執行緒只是在做分時切換,並不能利用多核。
多執行緒與多程序的區別:(1)多程序中同乙個變數各自有乙份拷貝在每個程序中,互不影響;(2)多執行緒中,所有變數都由所有執行緒共享,任何乙個變數都可被任何乙個執行緒修改。執行緒之間共享資料的最大危險在於多個執行緒同時更改乙個變數,把內容改亂。
from multiprocessing import pool #多程序
from multiprocessing.dummpy import pool #多執行緒
8、類變數和例項變數
普通的變數(非類的變數),在被賦值後即變數存在。類的變數在class裡def外,通過變數名能被賦值,在def裡通過類物件可被賦值
p1.name = 'orange'
print(p1.name)
print(p2.name)
9、裝飾器
def deco(func):
def warpper(args, **kwargs):
print('start')
func(args, **kwargs)
print('end')
return warpper
@deco
def myfunc(parameter):
print("run with %s" % parameter)
myfunc("something")
java面試指南
一 設計模式中的單例模式是什麼,有幾種實現方式。參考 1.單例模式特點 a 單例類只能有乙個例項。b 單例類必須自己建立自己的唯一例項。c 單例類必須給所有其他物件提供這一例項。2.常用寫法 a 懶漢式 執行緒不安全 解決方法 1 加同步synchronized 2 雙重檢查鎖定 判斷例項是否為空,...
集合面試指南
hashmap中的key可以是任何物件或資料型別嗎 hashtable是執行緒安全的麼 concurrenthashmap 執行緒安全嗎,concurrenthashmap如何保證 執行緒安全?假設我們現在 hashtable 的容量為 5,已經存在了 5,5 13,13 16,16 17,17 2...
Python面試通關指南及獨家自學秘籍
雖說年年都在喊網際網路寒冬,最難就業季,但是今年確實有點不一樣,年前年後一波又一波網際網路公司宣布 人員調整,結構優化 這是往年沒發生過的。是不是面試機會就少了很多呢?不是的。搜尋招聘 我們可以發現,一些發展迅猛的大廠和很多不差錢的小而美的網際網路公司依舊積極招聘開發人才。python 這幾年大火,...