Python基礎及進階內容持續更新中!歡迎小伙伴們一起關注學習!
本篇文章和大家分享Python開發中超實用的語言小特性!助你在開發中用最少的代碼做出最秀的操作!!!
目錄
寫在前面
一、索引和切片相關操作
1、索引
2、切片
二、賦值相關操作
1、連續賦值
2、拆包
3、賦值中的 or 關鍵字
三、控制陳述句相關操作
1、if 三元運算式
2、for else 陳述句
3、while else 陳述句
4、try except else 陳述句
四、類相關操作
1、類屬性 / 物件屬性動態系結
2、@property
3、自定義例外
五、函式相關操作
1、函式引數型別標注
2、函式回傳值型別標注
寫在前面
Hello,你好呀,我是灰小猿,一個超會寫bug的程式猿!
哈哈,沒錯就是我,我又來寫“bug”了!近期和大家分享了幾篇有關Python基礎入門和進階的文章,幫助了很多小伙伴了解和學習到了很多的Python的知識和技術,在這里再和大家來一個傳送門,有想學習的小伙伴可以去看一下,相信對你的Python學習是很不錯的,強烈推薦收藏“常見報錯及其解決”這一篇,之后遇到bug你會來感謝我的!
同時最近也一直在和大家分享更多的Python技術,感興趣的小伙伴可以關注我一起學習!
Python入門及進階:
【全網力薦】堪稱最易學的Python基礎入門教程
萬字長文爆肝Python基礎入門【第二彈、超詳細資料型別總結】
諾,你們要的Python進階來咯!【函式、類進階必備】
周末加班想摸魚?不如來點Python進階干貨呀!【超詳細迭代器、生成器、裝飾器使用教程】
常見報錯及解決:
全網最值得收藏的Python常見報錯及其解決方案,再也不用擔心遇到BUG了!
了解過了Python的基本入門和進階,接下來我就和大家分享一下,在Python開發中經常會用到的一些語言小技巧,幫助你在開發學習程序中節省更多的時間精力和代碼量!用最短的時間寫出最秀的操作!

一、索引和切片相關操作
1、索引
序列(串列、元組、字串)的索引可以為負值,此時將按逆序從序列中的取元素,
>>> chars = [‘a’, ‘b’, ‘c’, ‘d’, ‘e’]
>>> chars[-1]
‘e’
>>> chars[-2]
‘d’
>>> chars[-5]
‘a’
索引 -1 表示最后一個元素,
2、切片
之前介紹過切片的用法,使用它可以從序列中取出一個子序列,切片以索引區間 [起始索引:結束索引] 來表示,注意這是一個左閉右開區間,如:
>>> chars = [‘a’, ‘b’, ‘c’, ‘d’, ‘e’]
>>> chars[1:3]
[‘b’, ‘c’]
如果起始索引為 0,則可以省略起始索引,如下:
>>> chars = [‘a’, ‘b’, ‘c’, ‘d’, ‘e’]
>>> chars[:3]
[‘a’, ‘b’, ‘c’]
如果結束索引等于序列長度,則可以省略結束索引,此時相當于從起始索引一直取到最后一個元素,如下:
>>> chars = [‘a’, ‘b’, ‘c’, ‘d’, ‘e’]
>>> chars[3:]
[‘d’, ‘e’]
也可以既省略起始索引也省略結束索引,那么將取整個序列:
>>> chars = [‘a’, ‘b’, ‘c’, ‘d’, ‘e’]
>>> chars[:]
[‘a’, ‘b’, ‘c’, ‘d’, ‘e’]
起始索引和結束索引可以為負值:
>>> chars = [‘a’, ‘b’, ‘c’, ‘d’, ‘e’]
>>> chars[1:-2]
[‘b’, ‘c’]
>>> chars[-3:-1]
[‘c’, ‘d’]
切片中可以指定步長,用第三個引數表示,步長表示索引的間隔,如 [0:5:2] 表示從索引 0 至 5,每隔 2 個索引取一次值,
>>> chars = [‘a’, ‘b’, ‘c’, ‘d’, ‘e’]
>>> chars[0:5:2]
[‘a’, ‘c’, ‘e’]
步長也可以為負值,使用如下方式即可翻轉一個序列:
>>> chars = [‘a’, ‘b’, ‘c’, ‘d’, ‘e’]
>>> chars[::-1]
[‘e’, ‘d’, ‘c’, ‘b’, ‘a’]
二、賦值相關操作
1、連續賦值
Python 允許連續賦值操作,如:
a = b = c = 1
其等效于:
c = 1
b = c
a = b
也就是說,連續賦值時,從右至左依次被賦值,
2、拆包
多個變數和多個值可以用一個賦值符號(=)做到同時賦值,賦值時,將根據位置關系,將 = 右側的值分別賦值給左側的變數,如:
a, b = 1, 2
>>> a
1
>>> b
2
它等效于:
a, b = (1, 2)
它將元祖中的每個元素拆解出來,然后分別賦值給前面的變數,這種操作叫作拆包.
類似的,串列、字串、字典也可以被拆包,
>>> a, b = [1, 2]
>>> a
1
>>> b
2
>>> a, b = ‘12’
>>> a
’1’
>>> b
’2’
>>> a, b = {1: ‘a’, 2: ‘b’} # 注意字典拆包時拆出來的是每個鍵
>>> a
1
>>> b
2
拆包時,= 右側的序列的長度需要與左側的變數個數相同,如果不相同,可以使用 *變數 的形式一次接收多個元素,
a, *b = (1, 2, 3, 4)
>>> a
1
>>> b
[2, 3, 4]
*a, b = (1, 2, 3, 4)
>>> a
[1, 2, 3]
>>> b
4
a, *b, c = (1, 2, 3, 4)
>>> a
1
>>> b
[2, 3]
>>> c
4
可以看到,元組中多出來的元素被整合為了一個串列,
擴展:
交換兩個變數的值,可以簡單地使用
a, b = b, a
3、賦值中的 or 關鍵字
or 關鍵字一般用在 if 陳述句中,表達多個條件間的或操作,
or 也常被用在賦值中,如:
x = a or b
它表達的是,如果 bool(a) 為 True,則將 a 賦值給 x,否則將 b 賦值給 x,
>>> x = ‘ab’ or 3
>>> x
’ab’
>>> x = ‘’ or 3
>>> x
3

三、控制陳述句相關操作
1、if 三元運算式
假如我們要計算一個數的絕對值,可以使用 if else 陳述句來表達:
if x > 0:
result = x
else:
result = -x
這有一種簡化的寫法—— if else 三元運算式,只需要一行代碼:
result = x if x > 0 else -x
>>> x = -15
>>> x if x > 0 else -x
15
if 三元運算式的讀法有點不符合閱讀習慣,它是從陳述句中間的 if 條件開始讀,若條件滿足,則獲得左邊的值 x,若條件不滿足,則獲得 else 下的值 -x,
2、for else 陳述句
for 回圈大家都很了解了,但是你可能還不知道,for 回圈后面可以接一個 else 陳述句,如下:
for i in range(5):
print(i)
else:
print('所有項被迭代使用')
>>> for i in range(5):
… print(i)
… else:
… print(‘所有項被迭代’)
…
0
1
2
3
4
所有項被迭代
可以看到,如果 for 回圈中所有的項被迭代,則會繼續執行 else 陳述句中的代碼,
但 else 中的代碼總是被執行嗎?也不是的,只有在 for 回圈沒有被 break 時,才會執行后續 else 中的代碼,
for i in range(5):
if i == 3:
break
print(i)
else:
print('所有項被迭代使用')
>>> for i in range(5):
… if i == 3:
… break
… print(i)
… else:
… print(‘所有項被迭代使用’)
…
0
1
2
可以看到,一旦 for 回圈被 break,后續的 else 陳述句將不被執行,
3、while else 陳述句
與 for else 陳述句類似,while 陳述句后也可以接 else 陳述句,如下:
i = 0
while i < 5:
print(i)
i += 1
else:
print('這是 else 陳述句')
>>> i = 0
>>> while i < 5:
… print(i)
… i += 1
… else:
… print(‘這是 else 陳述句’)
…
0
1
2
3
4
這是 else 陳述句
同樣的,一旦 while 回圈被 break,則后續的 else 陳述句將不被執行,
4、try except else 陳述句
try except 陳述句的后面同樣可以接 else 陳述句:
try:
pass
except:
print('有例外發生,不執行 else 陳述句')
else:
print('沒有例外發生,執行 else 陳述句')
如果 try 下有例外拋出,則不執行 else 陳述句,如果沒有例外拋出,則執行 else 陳述句,
>>> try:
… pass
… except:
… print(‘有例外發生,不執行 else 陳述句’)
… else:
… print(‘沒有例外發生,執行 else 陳述句’)
…
沒有例外發生,執行 else 陳述句
>>> try:
… raise Exception
… except:
… print(‘有例外發生,不執行 else 陳述句’)
… else:
… print(‘沒有例外發生,執行 else 陳述句’)
…
有例外發生,不執行 else 陳述句
四、類相關操作
1、類屬性 / 物件屬性動態系結
之前我們在使用類屬性或物件屬性時,屬性是在定義類的時候一起被定義的,另外我們也可以在運行時動態地給類或物件添加屬性,
如:
>>> class A:
… pass
…
>>> A.apple = ‘apple’
>>> A.apple
’apple’>>> a = A()
>>> a.banana = ‘banana’
>>> a.banana
’banana’
只要向一個不存在的屬性賦值,便會創建出這個屬性,
2、@property
裝飾器 @property 可以將類中的方法轉換為屬性,如:
class A:
@property
def apple(self):
return 'apple'
>>> a = A()
>>> a.apple
’apple’
被 @property 裝飾的方法,可以像屬性一樣被使用,但是有一個限制,這個屬性是只讀的,不能被修改,如果修改將會報錯,如下:
>>> a.apple = 'banana’
Traceback (most recent call last):
File “”, line 1, in
AttributeError: can’t set attribute
有沒有什么辦法讓這個屬性可以被修改呢,也就是變成可寫的?有的,但需要再添加一個方法:
class A:
@property
def apple(self):
return self._apple
@apple.setter
def apple(self, value):
self._apple = value
>>> a = A()
>>> a.apple = ‘banana’
>>> a.apple
’banana’
我們首先對第一個 apple() 方法使用了 @property 裝飾器,這樣 apple 也就變成了一個只讀屬性,與此同時這會自動生成出一個新的裝飾器 @apple.setter,使用這個裝飾器來裝飾第二個 apple() 方法后,apple 屬性就變成可寫的了,
這里的關鍵是,用 @property 裝飾一個方法,會自動生成名為 @方法名.setter 的裝飾器,
3、自定義例外
Python 中內置有很多例外,當我們需要使用例外時,從中挑選出合適的例外即可,但有些時候,可能需要根據業務場景自定義自己的例外,
自定義例外的方式很簡單,只需要定義一個類,這個類繼承自 Exception 類或其子類即可,如:
class FileParseException(Exception):
pass

五、函式相關操作
Python 是動態型別,在寫 Python 代碼的時候,不需要直接指明資料型別,但這有時也會帶來閱讀和 IDE(或其它工具)靜態分析上的障礙,
針對這個問題,我們可以考慮為函式的加上引數型別標注,以及回傳值型別標注,
1、函式引數型別標注
函式引數型別標注的寫法如下,在每個引數的后面加上冒號(:)并標明型別:
def say_hello(name: str):
print(name, ', hello!')
上述便指明了引數 name 為 str 型別,
Python 并不會根據標注對引數作型別校驗,這只是為了方便閱讀和 IDE 靜態分析,
2、函式回傳值型別標注
函式的回傳值型別標注如下,在引數串列的后面加上右箭頭(->)并標明型別:
def say_hello(name) -> str:
print(name, ', hello!')
同樣的,Python 并不會根據標注對回傳值作型別校驗,只是方便閱讀和 IDE 靜態分析,
OK,關于常見的Python語言特性使用小技巧就和大家先分享這些,大家有疑問或者補充的話,歡迎在評論區留言!
持續為大家分享更多優質干貨中...感興趣的小伙伴記得關注一起學習呀!
灰小猿陪你一起進步!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/280707.html
標籤:python

