python入門與進階篇(八)之Pythonic與Python雜記

Javascript && Python發表於2018-10-07

用字典代替switch case語句

#用字典代替switch case語句

day=0

def get_Monday():
    # 函式裡還可以寫一些業務邏輯
    return 'Monday'

def get_Tuesday():
    return 'Tuesday'

def get_Wednesday():
    return 'Wednesday'

def get_default():
    return 'unknow'

switcher={
    0:get_Monday,   # value 可以為函式 也可以為具體的值 字串等
    1:get_Tuesday,
    2:get_Wednesday
}

# get(需要獲取的value的key,default的返回值)方法來模擬switch case 中default的情況
r=switcher.get(day,get_default)()
print(r)

 

列表推導式

# 列表推導式 可以代替map
a=[1,2,3,4,5]

# 有條件的推導 推薦使用列表推導式代替map 求立方
b=[i**3 for i in a if i>2]
# [27, 64, 125]
print(b)

#set 集合也可以被推導
c={1,2,3}
d={j**3 for j in c}
# {8, 1, 27}
print(d)

# 字典也可以列表推導式

student={
    '蕭炎':22,
    '蕭薰兒':18,
    '小藥仙':20
}

# 獲取字典key值 ['蕭炎', '蕭薰兒', '小藥仙']
b=[key for key,value in student.items()]
print(b)

# 顛倒字典key value  {22: '蕭炎', 18: '蕭薰兒', 20: '小藥仙'}
c={value:key for key,value in student.items()}
print(c)

#不推薦使用元組的形式  會返回可遍歷的generator <generator object <genexpr> at 0x0000000001DF92A0>
d=(key for key,value in student.items())
print(d)

#遍歷的generator
for i in d:
    print(i)  #蕭炎 蕭薰兒 小藥仙

 

None 空:

不等同於空字元、空列表、0、False

#None也是一個物件 表示不存在

#<class 'NoneType'>

print(type(None))

# False、''、[]、None返回False

判空操作  if a     if  not a

 

* 物件存在並不一定返回True

# 物件存在並不一定返回True
class Test():
    def __bool__(self):
        # 只能返回bool值
        return False
    def __len__(self):
        # 可返回int 和bool值
        return 2

# len()呼叫的是內建方法 __len__      
print( len(Test()))   #2

'''
 1.有__bool__()方法時 bool(Test())執行的是內建__bool__()
 2.無__bool__()方法且有__len__()方法時, bool(Test())執行的是內建__len__()
 3.無__bool__()方法且無__len__()方法時,bool(Test())返回True
'''
print( bool(Test()) ) #False 

 

相關文章