更多課程 選擇中心

Python培訓
美國上市教育機構

400-111-8989

Python培訓

聽說這些Python知識,很少有人知道!

  • 發布:Python編程時光
  • 來源:AI科技大本營
  • 時間:2019-04-18 16:55

我們專注于Python編程,當我們的眼球、大腦被Python中的熱點知識所吸引時,這些可能被你忽略了......

默認參數最好不為可變對象

函數的參數分三種

可變參數

默認參數

關鍵字參數

今天要說的是,傳遞默認參數時,新手很容易踩雷的一個坑。

先來看一個示例

def func(item, item_list=[]):
    item_list.append(item)
    print(item_list)

func('iphone')
func('xiaomi', item_list=['oppo','vivo'])
func('huawei')

在這里,你可以暫停一下,思考一下會輸出什么?

思考過后,你的答案是否和下面的一致呢?

['iphone']
['oppo', 'vivo', 'xiaomi']
['iphone', 'huawei']

如果是,那你可以跳過這部分內容,如果不是,請接著往下看,這里來分析一下。

Python 中的 def 語句在每次執行的時候都初始化一個函數對象,這個函數對象就是我們要調用的函數,可以把它當成一個一般的對象,只不過這個對象擁有一個可執行的方法和部分屬性。

對于參數中提供了初始值的參數,由于 Python 中的函數參數傳遞的是對象,也可以認為是傳地址,在第一次初始化 def 的時候,會先生成這個可變對象的內存地址,然后將這個默認參數 item_list 會與這個內存地址綁定。

在后面的函數調用中,如果調用方指定了新的默認值,就會將原來的默認值覆蓋。如果調用方沒有指定新的默認值,那就會使用原來的默認值。

聽說這些Python知識,很少有人知道!

訪問類中的私有方法

大家都知道,類中可供直接調用的方法,只有公有方法(protected類型的方法也可以,但是不建議)。也就是說,類的私有方法是無法直接調用的。

這里先看一下例子:

class Kls():
    def public(self):
        print('Hello public world!')

    def __private(self):
        print('Hello private world!')

    def call_private(self):
        self.__private()

ins = Kls()

# 調用公有方法,沒問題
ins.public()

# 直接調用私有方法,不行
ins.__private()

# 但你可以通過內部公有方法,進行代理
ins.call_private()

既然都是方法,那我們真的沒有方法可以直接調用嗎?

當然有啦,只是建議你千萬不要這樣弄,這里只是普及,讓你了解一下。

# 調用私有方法,以下兩種等價
ins._Kls__private()
ins.call_private()

時有時無的切片異常

這是個簡單例子:

my_list = [1, 2, 3, 4, 5]
print(my_list[5])

執行一下,和我們預期的一樣,會拋出索引異常。

Traceback (most recent call last):
  File "F:/Python Script/test.py", line 2, in <module>
    print(my_list[5])
IndexError: list index out of range

但是今天要說的肯定不是這個,而是一個你可能會不知道的冷知識。

來看看,如下這種寫法就不會報索引異常,執行my_list[5:],會返回一個新list:[]。

my_list = [1, 2, 3]
print(my_list[5:])

哪些情況下不需要續行符

在寫代碼時,為了代碼的可讀性,代碼的排版是尤為重要的。

為了實現高可讀性的代碼,我們常常使用到的就是續行符 \。

>>> a = 'talk is cheap,'\
...     'show me the code.'
>>>
>>> print(a)
talk is cheap,show me the code.

那有哪些情況下,是不需要寫續行符的呢?

經過總結,在這些符號中間的代碼換行可以省略掉續行符:[],(),{}

>>> my_list=[1,2,3,
...          4,5,6]

>>> my_tuple=(1,2,3,
...           4,5,6)

>>> my_dict={"name": "MING",
...          "gender": "male"}

另外還有,在多行文本注釋中 ''' ,續行符也是可以不寫的。

>>> text = '''talk is cheap,
...           show me the code'''

上面只舉了一些簡單的例子。

但你要學會舉一反三。一樣的,在以下這些場景也同樣適用

類,和函數的定義。

列表推導式,字典推導式,集合推導式,生成器表達式。

Py2 也可以使用 print()

我相信應該有不少人,思維定式,覺得只有 Py3 才可以使用 print(),而 Py2 只能使用print ''。

今天,小明要為 Py2 正名一次。

在Python 2.6之前,只支持

print "hello"

在Python 2.6和2.7中,可以支持如下三種

print "hello"
print("hello")
print ("hello")

在Python3.x中,可以支持如下兩種

print("hello")
print ("hello")

感謝您的閱讀,以上就是為大家分享的Python中少有人知的知識點,你學到了嗎?更多Python知識盡在達內Python培訓機構官網,敬請關注!

免責聲明:內容和圖片源自網絡,版權歸原作者所有,如有侵犯您的原創版權請告知,我們將盡快刪除相關內容。

預約申請免費試聽課

填寫下面表單即可預約申請免費試聽!怕錢不夠?可就業掙錢后再付學費! 怕學不會?助教全程陪讀,隨時解惑!擔心就業?一地學習,可全國推薦就業!

上一篇:這六個Python字典操作你知道嗎?
下一篇:Python的高級特征及用法(部分)

如何運用Python編程處理大數據?用Python編程處理大數據的技巧是什么?

Python面向對象編程的知識點都在這了!

Python的高級特征及用法(部分)

聽說這些Python知識,很少有人知道!

選擇城市和中心
黑龍江省

吉林省

河北省

湖南省

貴州省

云南省

廣西省

海南省

4438全国大成网人网站