Python(十二) Pythonic與Python雜記

1、導言

 

2、用字典映射代替switch case語句
 
# 字典代替 switch 語句

# switch ()
# {
#   case 0 :
#     dayName= 'a';
#     break;
#   case 1 :
#     dayName= 'b';
#     break;
#   case 2 :
#     dayName= 'c';
#     break;
#     ...
#   default :
#     dayName= 'none';
#     break;
# }
def get_a():
    return 'a'
    
def get_b():
    return 'b'

def get_c():
    return 'c'

def get_default():
    return 'none'

day=2
switcher = {
    0:get_a,
    1:get_b,
    2:get_c
    }

day_name=switcher.get(day, get_default)()
print(day_name)

day_name=switcher.get(6, get_default)()
print(day_name)

結果:
c
none

 

3、列表推導式
 
# 列表推導式(根據一個列表推到一個新的列表)list set dict 均可以被推導

a = [1,2,3,4,5,6,7,8]

b = [i**3 for i in a]
print(b) # [1, 8, 27, 64, 125, 216, 343, 512]

b = [i**3 for i in a if i>=5]
print(b) # [125, 216, 343, 512]

list =[y for x in range(5) for y in range(2)]
print(list) # [0, 1, 0, 1, 0, 1, 0, 1, 0, 1]
a = {1,2,3,4,5,6,7,8}

b = {i**3 for i in a}
print(b) # {64, 1, 512, 8, 343, 216, 27, 125}
4、字典如何編寫列表推導式
students = {
    '一號':100,
    '二號':90,
    '三號':80
}

b = [key for key, value in students.items()]
print(b) # ['一號', '二號', '三號']

b = {value:key for key, value in students.items()}
print(b) # {100: '一號', 90: '二號', 80: '三號'}

b = (key for key, value in students.items())
print(b) # <generator object <genexpr> at 0x00000187AB059410>
for x in b:
    print(x) 

# 一號
# 二號
# 三號

 

5、 iterator與generator

 

6、 None
# None  空 不等於 空字符串 空列表 0 False

a = ''
b = False
c = []

print(a==None)
print(b==None)
print(c==None)
print(type(None))

# False
# False
# False
# <class 'NoneType'>

判斷空
a=[] /func() / ''

if a:

if not a:

 

7、對象存在並不必定是True
None 等於 False
class Test():
    def __len__(self):
        return 0

t = Test()
print(bool(t)) # False

class Test1():
    pass
    
t = Test1()
print(bool(t)) # True

 

8、__len__與__bool__內置方法
class Test():
    def __len__(self):
        return 8
    # def __bool__(self):
    #     return 0

print(len(Test())) # 8
print(bool(Test())) # True
 
class Test():
    def __len__(self):
        print('len func')
        return 8
    def __bool__(self):
        print('bool func')
        return False

print(bool(Test())) 

# bool func
# False
相關文章
相關標籤/搜索