国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

看例子,學(xué) Python(三)

darkerXi / 2259人閱讀

摘要:看例子,學(xué)三看例子,學(xué)一看例子,學(xué)二包創(chuàng)建一個(gè)目錄,把挪到里面,再添加一個(gè)空文件便是一個(gè)包。對(duì)來(lái)說(shuō),對(duì)象由引用計(jì)數(shù)管理,計(jì)數(shù)為時(shí)對(duì)象會(huì)自動(dòng)銷毀。給定請(qǐng)問(wèn)看例子,學(xué)一看例子,學(xué)二

看例子,學(xué) Python(三)

看例子,學(xué) Python(一)
看例子,學(xué) Python(二)

創(chuàng)建一個(gè)目錄 myutil,把 mymath.py 挪到里面,再添加一個(gè)空文件 __init__.py

</>復(fù)制代碼

  1. myutil/
  2. __init__.py
  3. mymath.py

myutil 便是一個(gè)包(package)。

import

最直接的用法:

</>復(fù)制代碼

  1. >>> import myutil.mymath
  2. >>> myutil.mymath.fac(4)
  3. 24

缺點(diǎn)是調(diào)用 fac 時(shí)太長(zhǎng),包和模塊作為前綴都要寫(xiě)全。但是寫(xiě)成 import myutil.mymath.fac 也是不對(duì)的。
通過(guò) import 的語(yǔ)法(syntax):

</>復(fù)制代碼

  1. import <>.<>.<包|模塊>

可以看出:

最后一項(xiàng)(item)可以是包也可以是模塊,前面的必須是包;

最后一項(xiàng)不可以是類、函數(shù)或變量的定義。

根據(jù)語(yǔ)法來(lái)看,可以 import 一個(gè)包:

</>復(fù)制代碼

  1. >>> import myutil
  2. >>> help(myutil)
  3. ...

但是這樣并沒(méi)有什么實(shí)際用處,因?yàn)闊o(wú)法就此調(diào)用具體的函數(shù)(類、變量):

</>復(fù)制代碼

  1. >>> myutil.mymath.fac(4)
  2. Traceback (most recent call last):
  3. File "", line 1, in
  4. AttributeError: module "myutil" has no attribute "mymath"
from...import

如果要避免調(diào)用時(shí)帶著一串前綴,可以用 from...import

</>復(fù)制代碼

  1. >>> from myutil.mymath import fac
  2. >>> fac(4) # 不再需要前綴
  3. 24

一次 import 多個(gè)時(shí)以逗號(hào)分割:

</>復(fù)制代碼

  1. >>> from myutil.mymath import fib, fac

一次 import 所有:

</>復(fù)制代碼

  1. >>> from myutil.mymath import *

from...import... 避免了前綴,但是也污染了名字,使用時(shí)需權(quán)衡。

高階函數(shù)

高階函數(shù)(higher-order)就是操作或返回其它函數(shù)的函數(shù)。
下面是幾個(gè)經(jīng)典的高階函數(shù),其它稍微函數(shù)式一點(diǎn)的語(yǔ)言里一般也有。

reduce(規(guī)約)

reduce 重寫(xiě)階乘:

</>復(fù)制代碼

  1. import operator, functools
  2. def fac(n):
  3. return functools.reduce(operator.mul, range(1, n+1))

reduce 求和:

</>復(fù)制代碼

  1. def sum(n):
  2. return functools.reduce(operator.add, range(1, n+1))

Python 的 reduce 就相當(dāng)于 C++ 的 accumulate(C++17 已經(jīng)新增 reduce)。

</>復(fù)制代碼

  1. std::vector v{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
  2. int sum = std::accumulate(v.begin(), v.end(), 0); // 求和
  3. int product = std::accumulate(v.begin(), v.end(), 1, std::multiplies()); // 求積
map(映射)

</>復(fù)制代碼

  1. >>> list(map(bool, [None, 0, "", u"", list(), tuple(), dict(), set(), frozenset()]))
  2. [False, False, False, False, False, False, False, False, False]

None、0、空字符串、以及沒(méi)有元素的容器對(duì)象都可視為 False,反之為 True

filter(過(guò)濾)

</>復(fù)制代碼

  1. >>> list(filter(bool, [None, 0, "", 1]))
  2. [1]
數(shù)據(jù)模型 == vs. is

== 判斷值是否相等,is 判斷兩個(gè)變量是否為同一個(gè)對(duì)象。
這就好像 Java 里的 ==equals 一樣。
下面是一些例子:

</>復(fù)制代碼

  1. >>> a, b = 1, 1
  2. >>> a == b
  3. True
  4. >>> a is b
  5. True

a == b 比較好理解,a is b 是因?yàn)?Python 對(duì)整數(shù)做了優(yōu)化,ab 都指向同一個(gè)預(yù)先分配的對(duì)象(其值為 1)。
可以理解為 is 比較的是對(duì)象的內(nèi)存地址。
內(nèi)建函數(shù) id() 返回對(duì)象的唯一標(biāo)識(shí),可以理解為內(nèi)存地址。

</>復(fù)制代碼

  1. >>> id(a), id(b)
  2. (35169392, 35169392)

甚至可以拿到一個(gè)對(duì)象的引用計(jì)數(shù)(reference count):

</>復(fù)制代碼

  1. >>> import sys
  2. >>> sys.getrefcount(a)
  3. 99
  4. >>> sys.getrefcount(b)
  5. 99

引用計(jì)數(shù)為 99 有點(diǎn)意外,其實(shí)是因?yàn)楹芏嘌b載的內(nèi)建模塊都用到了整數(shù) 1。
不妨看看其它整數(shù)如何:

</>復(fù)制代碼

  1. >>> sys.getrefcount(0)
  2. 169
  3. >>> sys.getrefcount(255)
  4. 4

對(duì) Python 來(lái)說(shuō),變量只是名字,它的類型和值取決于它所綁定的對(duì)象。我們可以把 a b 綁定到其它對(duì)象:

</>復(fù)制代碼

  1. >>> a, b = "hello", "hello"
  2. >>> a is b
  3. True

同樣,a is b 是因?yàn)?Python 對(duì)字符串做了優(yōu)化。

值得一提的是,這種優(yōu)化(也即引用計(jì)數(shù))可能只針對(duì) CPython,對(duì)于 Python 的其它實(shí)現(xiàn)可能就不是這樣了。你的程序不該依賴于這些特定于解釋器的實(shí)現(xiàn)。

整數(shù)和字符串有一個(gè)共同點(diǎn),即它們都是不可變的(immutable),現(xiàn)在來(lái)看看可變對(duì)象,比如列表:

</>復(fù)制代碼

  1. >>> c, d = [a, b], [a, b]
  2. >>> c == d
  3. True
  4. >>> c is d
  5. False

可見(jiàn)雖然 cd 具有相等的值,但對(duì)象是不同的兩個(gè)。

這些就是 Python 的數(shù)據(jù)模型(Data Model),雖然不是全部。

對(duì)象

Python 的每一個(gè)對(duì)象(object)都有以下三個(gè)部分:

身份(identity)

類型(type)

值(value)

身份:

不可改變(unchangeable)(一旦對(duì)象創(chuàng)建了就不會(huì)改變)

對(duì)應(yīng)于內(nèi)存地址

通過(guò)操作符 is 進(jìn)行比較: a is b

函數(shù) id() 返回對(duì)象唯一的整形標(biāo)識(shí)(內(nèi)存地址)

類型:

不可改變(unchangeable)

函數(shù) type() 返回對(duì)象類型

值:

可變的(mutable):字典,列表

不可變的(immutable):數(shù)字,字符串,元組

最后,對(duì)象不會(huì)被顯式地銷毀(explicitly destroyed)。
對(duì) CPython 來(lái)說(shuō),對(duì)象由引用計(jì)數(shù)管理,計(jì)數(shù)為 0 時(shí)對(duì)象會(huì)自動(dòng)銷毀。

練習(xí)

最后留一道練習(xí)。

給定:

</>復(fù)制代碼

  1. >>> c = []
  2. >>> d = []
  3. >>> c is d
  4. False

請(qǐng)問(wèn):

</>復(fù)制代碼

  1. >>> e = f = []
  2. >>> e is f
  3. ???

看例子,學(xué) Python(一)
看例子,學(xué) Python(二)

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/38638.html

相關(guān)文章

  • 例子學(xué) Python(二)

    摘要:看例子,學(xué)二看例子,學(xué)一看例子,學(xué)三模塊文件定義了函數(shù)和,就是一個(gè)模塊。這個(gè)列表里的每個(gè)元素都是一個(gè)鍵值對(duì),由元組表示。指定的為,便以每個(gè)鍵值對(duì)元組下標(biāo)為的元素進(jìn)行排序。可將其它序列類型轉(zhuǎn)換成元組看例子,學(xué)一看例子,學(xué)三 看例子,學(xué) Python(二) 看例子,學(xué) Python(一)看例子,學(xué) Python(三) 模塊 文件 mymath.py 定義了函數(shù) fib 和 fac,myma...

    CoderDock 評(píng)論0 收藏0
  • 例子學(xué) Python(一)

    摘要:從開(kāi)始,通過(guò)一系列不同實(shí)現(xiàn),簡(jiǎn)單介紹字符串函數(shù)等概念。如果文檔字符串有多行,可以使用三重引號(hào)的字符串函數(shù)返回值只要是函數(shù),都有返回值,沒(méi)有明確指定返回值的,就返回。看例子,學(xué)二看例子,學(xué)三 看例子,學(xué) Python(一) 看例子,學(xué) Python(二)看例子,學(xué) Python(三) 很難說(shuō),這篇代碼比文字還多的文章,是否適合初學(xué)者。它源于個(gè)人筆記,涉及的多是簡(jiǎn)單核心的概念,也許需要一些...

    jackwang 評(píng)論0 收藏0
  • #yyds干貨盤(pán)點(diǎn)# 3. 無(wú)轉(zhuǎn)折不編程,滾雪球學(xué) Python

    摘要:在流程控制中,你將同步學(xué)到關(guān)系運(yùn)算符與邏輯運(yùn)算符。關(guān)系運(yùn)算符在中關(guān)系運(yùn)算符其實(shí)就是比大小的概念,所以要學(xué)習(xí)的就是大于小于等于等內(nèi)容。邏輯運(yùn)算符邏輯運(yùn)算符在中有個(gè),分別是。含有邏輯運(yùn)算符的式子,最終返回的結(jié)果也是布爾值。 滾雪球?qū)W Python,目標(biāo)就是讓 Python 學(xué)起來(lái)之后,越滾越大。三、無(wú)轉(zhuǎn)折不編程如果...

    xuexiangjys 評(píng)論0 收藏0
  • 學(xué)習(xí)Python想放棄,因?yàn)槟銢](méi)有培養(yǎng)自己的興趣!

    摘要:為啥你天天刷抖音一點(diǎn)都不煩,因?yàn)槟阌X(jué)得視頻好看你有興趣啊。比如我們說(shuō)你玩是不是要開(kāi)始搭建一個(gè)自己的網(wǎng)站,是不是可以自己寫(xiě)一個(gè)小的腳本來(lái)自動(dòng)發(fā)消息給你的女朋友等等,通過(guò)這樣的小例子來(lái)慢慢的培養(yǎng)自己的學(xué)習(xí)的興趣。學(xué)習(xí),切勿貪快貪多。 大家好,我是菜鳥(niǎo)哥! 周末啦,跟大家聊一下我們粉絲團(tuán)的情況...

    ideaa 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<