Python |《a byte of Python》筆記


layout: "post"
tags: 筆記 Python 教程 入門
categories: program


第 5 章 基礎(chǔ)

5.3 字符串

  • 單引號(hào)、雙引號(hào)作用相同
  • 三引號(hào)(''' 或 """)以指示一個(gè)多行的字符串
  • 行末的單獨(dú)一個(gè)反斜杠表示字符串在下一行繼續(xù)
  • 自然字符串:通過給字符串加上前綴r或R來(lái)指定,例如r"Newlines are indicated\n"
  • Unicode字符串:在字符串前加上前綴u或U,文件含有非英語(yǔ)語(yǔ)言的文本時(shí)
  • format 方法 一個(gè)字符串能使用確定的格式,隨后,可以調(diào)用 format 方法來(lái)代替這些格式,參數(shù)要與 format 方法的參數(shù)保持一致。
  • 一些str類的用法,用點(diǎn)號(hào)使用。。startwith 方法是用來(lái)測(cè)試字符串是否以給定字符串開始。in 操作符用來(lái)檢驗(yàn)一個(gè)給定字符串是否為另一個(gè)字符串的一部分。?nd 方法用來(lái)找出給定字符串在另一個(gè)字符串中的位置,或者返回 -1 以表示找不到子字符串。str 類也有以一個(gè)作為分隔符的字符串 join 序列的項(xiàng)目的整潔的方法
age = 25
name = 'Swaroop'
print('{0} is {1} years old'.format(name, age)) # sg.1 {i}和.format(X_i),i從零起
print('Why is {0} playing with that python?'.format(name))

print('{0:.5}'.format(1/3))  # sg.2 用:和.5保留5位小數(shù),點(diǎn)號(hào)

print('{0:_^11}'.format('hello'))  # sg.3 用下劃線填充

print('{name} wrote {book}'.format(name='Swaroop', book='A Byte of Python'))  # sg.4 直接在format中賦值

5.17 邏輯行和物理行

物理行是你在編寫程序時(shí)所看見的。邏輯行是 Python 看見的單個(gè)語(yǔ)句。 Python 假定每個(gè)物理行對(duì)應(yīng)一個(gè)邏輯行。

在一個(gè)物理行中使用多于一個(gè)邏輯行,那么你需要使用分號(hào)(;)來(lái)特別地標(biāo)明這種用法。分號(hào)表示一個(gè)邏輯行/語(yǔ)句的結(jié)束。

作者建議避免使用分號(hào),使代碼更易讀

5.18 縮進(jìn)

保持一致

對(duì)象

Python把在程序中用到的任何東西都稱為對(duì)象 。這是從廣義上說(shuō)的。因此我們不會(huì)說(shuō)“某某東西 ”,我們說(shuō)“某個(gè)對(duì)象 ”。

第 6 章 操作符和表達(dá)式

數(shù)學(xué)和邏輯運(yùn)算,見6.2和6.3 的表,不述

第 7 章 控制流

7.2 if

使用冒號(hào)和縮進(jìn)
if:
elif:
else:

number = 23
guess = int(input('Enter an integer : '))

if guess == number:
    print('Congratulations, you guessed it.') # New block starts here
    print('(but you do not win any prizes!)') # New block ends here
elif guess < number:
    print('No, it is a little higher than that') # Another block  # You can do whatever you want in a block ...
else:
    print('No, it is a little lower than that')  # you must have guess > number to reach here
print('Done')  # This last statement is always executed, after the if statement is executed

7.3 while

只要在一個(gè)條件為真的情況下, while 語(yǔ)句允許你重復(fù)執(zhí)行一塊語(yǔ)句。 while 語(yǔ)句是所謂循環(huán)語(yǔ)句的一個(gè)例子。 while 語(yǔ)句有一個(gè)可選的 else 從句。

number = 23
running = True

while running:
    guess = int(input('Enter an integer : '))

    if guess == number:
        print('Congratulations, you guessed it.')
        running = False  #this causes the while loop to stop
    elif guess < number:
        print('No, it is a little higher than that')
    else:
        print('No, it is a little lower than that')
else:
    print("the while loop is over.")
    # Do anything else you want to do here    

print('Done')  

7.4 for

for..in 是另外一個(gè)循環(huán)語(yǔ)句,它在一序列的對(duì)象上迭代,即逐一使用序列中的每個(gè)項(xiàng)目。

else 部分是可選的。如果包含 else ,它總是在 for 循環(huán)結(jié)束后執(zhí)行一次,除非遇到 break 語(yǔ)句。

for i in range ( 1 , 5 ):
    print (i)
else :
    print ( 'The for loop is over' )

第 8 章 函數(shù)

8.1 定義函數(shù)

函數(shù)用關(guān)鍵字 def 來(lái)定義。def 關(guān)鍵字后跟一個(gè)函數(shù)的標(biāo)識(shí)符名稱,然后跟一對(duì)圓括號(hào)。圓括號(hào)之中可以包括一些變量名,該行以冒號(hào)結(jié)尾。接下來(lái)是一塊語(yǔ)句,它們是函數(shù)體。可以在任何地方定義他們

def sayHello():
    print ('hello, world')

sayHello()

8.3 局部變量、全局變量、非局部變量

global 語(yǔ)句
nonlocal 語(yǔ)句

8.6 默認(rèn)參數(shù)值

可以在函數(shù)定義的形參名后加上賦值運(yùn)算符(=)和默認(rèn)值,從而給形參指定默認(rèn)參數(shù)值。

注意,默認(rèn)參數(shù)值應(yīng)該是一個(gè)參數(shù)。更加準(zhǔn)確的說(shuō),默認(rèn)參數(shù)值應(yīng)該是不可變的

只有在形參表末尾的那些參數(shù)可以有默認(rèn)參數(shù)值,即你不能在聲明函數(shù)形參的時(shí)候,先聲明有默認(rèn)值的形參而后聲明沒有默認(rèn)值的形參。這是因?yàn)橘x給形參的值是根據(jù)位置而賦值的。例如,def
func(a, b=5) 是有效的,但是 def func (a=5, b) 是無(wú)效的。

def say(message, times = 1):
    print(message * times)

say('Hello')
say('World', 5)

8.7 關(guān)鍵參數(shù)

如果你的某個(gè)函數(shù)有許多參數(shù),調(diào)用時(shí)可以直接通過命名來(lái)為這些參數(shù)賦值 —— 這被稱作關(guān)鍵參數(shù) —— 我們使用名字(關(guān)鍵字)而不是位置(我們前面所一直使用的方法)來(lái)給函數(shù)指定實(shí)參。

def func(a, b=5, c=10):
    print('a is', a, 'and b is', b, 'and c is', c)

func(1,2,3)是一般調(diào)用,而用func( c= 3, a = 1)則是關(guān)鍵參數(shù)方法,這里順序不再重要。

8.8 VarArgs 參數(shù)

有時(shí),你或許想定義一個(gè)能獲取任意個(gè)數(shù)參數(shù)的函數(shù),這可通過使用 * 號(hào)來(lái)實(shí)現(xiàn)。

一個(gè)表明這是一個(gè)列表,兩個(gè)*表明是字典。以下這個(gè)例子中,10被傳入第一個(gè)參數(shù)initial,1,2,3被視為列表(1,2,3)傳入第二個(gè)參數(shù)numbers, vegetables=50, fruits=100被視為字典傳入第三個(gè)參數(shù)

def total(initial=5, *numbers, **keywords):
    count = initial
    for number in numbers:
        count += number
    for key in keywords:
        count += keywords[key]
    return count

print(total(10, 1, 2, 3, vegetables=50, fruits=100))

8.9 Keyword-only 參數(shù)(不明)

8.11 DocStrings

我理解為一個(gè)程序的說(shuō)明文件,可以很容易的通過fun.__doc__來(lái)查看。 help(fun)調(diào)用的也是這個(gè)文件。

在函數(shù)的第一個(gè)邏輯行的字符串是這個(gè)函數(shù)的文檔字符串,DocStrings 也適用于模塊和類。

慣例是一個(gè)多行字符串,它的首行以大寫字母開始,句號(hào)結(jié)尾。第
二行是空行,從第三行開始是詳細(xì)的描述。強(qiáng)烈建議你在你的函數(shù)中使用文檔字符串時(shí)遵循這個(gè)慣例。

def printMax(x, y):
    '''Prints the maximum of two numbers.

    The two values must be integers.'''
    x = int(x) # convert to integers, if possible
    y = int(y)

    if x > y:
        print(x, 'is maximum')
    else:
        print(y, 'is maximum')

printMax(3, 5)
print(printMax.__doc__)

8.12 注解

函數(shù)有另外一個(gè)高級(jí)特性叫做注解,這是一個(gè)獲取每個(gè)參數(shù)和返回值附加信息的漂亮的方式。由于 Python 語(yǔ)言本身不以任何方式解釋這些注解(也即函數(shù)功能留給第三方庫(kù)以他們想要的方式去解釋),在我們的討論中就跳過這一特性。如果你對(duì)閱讀注解感興趣,請(qǐng)看 Python Enhancement Proposal No. 3107 。

第 9 章 模塊

  • 使用import 導(dǎo)入模塊,之后以mod.fun的方式調(diào)用模塊中的函數(shù)
  • 也可以用from mod import fun 語(yǔ)句把函數(shù)調(diào)入,直接用fun調(diào)用函數(shù)。但是可能會(huì)引起名稱混亂。

9.5 創(chuàng)建自己的模塊

每個(gè) Python 程序也是一個(gè)模塊,只要具有.py 擴(kuò)展名

#!/usr/bin/python
# Filename: mymodule.py
def sayhi():
    print('Hi, this is mymodule speaking.')

__version__ = '0.1'
# End of mymodule.py

使用這個(gè)模塊只需要

import mymodule

mymodule.sayhi()
print ('Version', mymodule.__version__)

9.6 dir 函數(shù)

你可以使用內(nèi)建的 dir 函數(shù)來(lái)列出模塊定義的標(biāo)識(shí)符。標(biāo)識(shí)符有函數(shù)、類和變量。

當(dāng)你為 dir() 提供一個(gè)模塊名的時(shí)候,它返回模塊定義的名稱列表。如果不提供參數(shù),它返回當(dāng)前模塊中定義的名稱列表。

9.7 包

程序的層次。

包world
 |---子包asia
 |       |---模塊
 |       |---子包c(diǎn)hina
 |
 |---模塊
       |---函數(shù)
       |      |---變量
       |
       |---全局變量

變量通常在函數(shù)內(nèi)部運(yùn)行。函數(shù)和全局變量通常在模塊內(nèi)部運(yùn)行。如果你想自己組織模塊呢?那" 包" 就會(huì)進(jìn)入到你的視野中。包是模塊的文件夾,有一個(gè)特殊的 __init__.py 文件,用來(lái)表明這個(gè)文件夾是特殊的因?yàn)槠浒?Python 模塊。

第 10 章 數(shù)據(jù)結(jié)構(gòu)

10.2 列表

列表中的項(xiàng)目應(yīng)該包括在方括號(hào)中,每個(gè)項(xiàng)目之間用逗號(hào)分割。可以添加list.append('item')、刪除del list[i]或是搜索列表中的項(xiàng)目。因此列表是可變的。

10.4 元組

元組用來(lái)將多樣的對(duì)象集合到一起。它和列表十分類似,但不可變,即不能修改元組。元組通過圓括號(hào)中用逗號(hào)分割的項(xiàng)目定義。

含有 0 個(gè)或 1 個(gè)項(xiàng)目的元組:
一個(gè)空的元組由一對(duì)空的圓括號(hào)組成,如 myempty = ()。

含有單個(gè)元素的元組必須在第一個(gè)(唯一一個(gè))項(xiàng)目后跟一個(gè)逗號(hào),這樣 Python 才能區(qū)分元組和表達(dá)式中一個(gè)帶圓括號(hào)的對(duì)象。即如果你想要的是一個(gè)包含項(xiàng)目 2 的元組的時(shí)候,你應(yīng)該指明 singleton = (2 ,)。

10.5 字典

字典類似于你通過聯(lián)系人名字查找地址和聯(lián)系人詳細(xì)情況的地址簿,即,我們把鍵(名字)和值(詳細(xì)情況)聯(lián)系在一起。注意,鍵必須是唯一的,就像如果有兩個(gè)人恰巧同名的話,你無(wú)法找到正確的信息。

10.8 引用

當(dāng)你創(chuàng)建一個(gè)對(duì)象并給它賦一個(gè)變量的時(shí)候,這個(gè)變量?jī)H僅引用那個(gè)對(duì)象,而不是表示這個(gè)對(duì)象本身!也就是說(shuō),變量名指向你計(jì)算機(jī)中存儲(chǔ)那個(gè)對(duì)象的內(nèi)存。這被稱作名稱到對(duì)象的綁定。

例如,

list1 = [1,2,3,4]
list2 = list1[:]
del list1[0]

list1 = [1,2,3,4]
list2 = list1
del list1[0]

是不一樣的,如果執(zhí)行print('list1 is',list1); print('list2 is',list2)前者兩個(gè)list都改變了,但后者list2沒有變。

也就是說(shuō),如果你想要復(fù)制一個(gè)列表或者類似的序列或者其他復(fù)雜的對(duì)象(不是如整數(shù)那樣的簡(jiǎn)單對(duì)象),那么你必須使用切片操作符來(lái)取得拷貝。如果你只是想要使用另一個(gè)變量名,兩個(gè)名稱都引用同一個(gè)對(duì)象,那么如果你不小心的話,可能會(huì)引來(lái)各種麻煩。

第 12 章 面向?qū)ο缶幊?/h1>

12.1 簡(jiǎn)介

類和對(duì)象是面向?qū)ο缶幊痰膬蓚€(gè)主要方面。類創(chuàng)建一個(gè)新類型,而對(duì)象是這個(gè)類的實(shí)例。這類似于你有一個(gè) int 類型的變量,這存儲(chǔ)整數(shù)的變量是 int 類的實(shí)例(對(duì)象)。

對(duì)象可以使用普通的屬于對(duì)象的變量存儲(chǔ)數(shù)據(jù)。屬于一個(gè)對(duì)象或類的變量被稱為 。對(duì)象也可以使用屬于類的函數(shù)來(lái)具有功能。這樣的函數(shù)被稱為 類的方法。這些術(shù)語(yǔ)幫助我們把它們與孤立的函數(shù)和變量區(qū)分開來(lái)。域和方法可以合稱為 類的屬性

域有兩種類型 —— 屬于每個(gè)實(shí)例/類的對(duì)象或?qū)儆陬惐旧怼K鼈兎謩e被稱為實(shí)例變量和類變量。

類使用 class 關(guān)鍵字創(chuàng)建。類的域和方法被列在一個(gè)縮進(jìn)塊中。

12.2 self

類的方法與普通的函數(shù)只有一個(gè)特別的區(qū)別 —— 它們必須有一個(gè)額外的第一個(gè)參數(shù)名稱,但是在調(diào)用這個(gè)方法的時(shí)候你不為這個(gè)參數(shù)賦值,Python 會(huì)提供這個(gè)值。這個(gè)特別的變量指對(duì)象本身,按照慣例它的名稱是 self。

class Person:
    def sayHi(self):
        print('Hello, how are you?')

p = Person()
p.sayHi()

12.5 __init__ 方法

__init__方法在類的一個(gè)對(duì)象被建立時(shí),馬上運(yùn)行。這個(gè)方法可以用來(lái)對(duì)你的對(duì)象做一些你希望的初始化。注意,這個(gè)名稱的開始和結(jié)尾都是 雙下劃線

class Person:
    def __init__(self, name):
        self.name = name
    def sayHi(self):
        print('Hello, my name is',self.name)

p = Person('Ann')
p.sayHi()

這個(gè)例子中,__init__方法被定義為取一個(gè)參數(shù) name(以及普通的參數(shù) self)。這個(gè) __init__方法創(chuàng)建了一個(gè)新的域name(self.name),并被賦予了參數(shù)name的值。

沒有專門調(diào)用 __init__方法,只是在創(chuàng)建一個(gè)類的新實(shí)例的時(shí)
候,把參數(shù)包括在圓括號(hào)內(nèi)跟在類名后面,從而傳遞給__init__方法。這是這種方法的重要之處。

12.6 類和對(duì)象變量

數(shù)據(jù)是類和對(duì)象的名稱空間綁定的普通變量,即這些名稱只在這些類與對(duì)象的前提下有效。

有兩種類型的域 —— 類的變量和對(duì)象的變量,它們根據(jù)是類還是對(duì)象擁有這個(gè)變量而區(qū)分。

類的變量由一個(gè)類的所有對(duì)象(實(shí)例)共享使用。只有一個(gè)類變量的拷貝,所以當(dāng)某個(gè)對(duì)象對(duì)類的變量做了改動(dòng)的時(shí)候,這個(gè)改動(dòng)會(huì)反映到所有其他的實(shí)例上。

對(duì)象的變量由類的每個(gè)對(duì)象/實(shí)例擁有。因此每個(gè)對(duì)象有自己對(duì)這個(gè)域的一份拷貝,即它們不是共享的,在同一個(gè)類的不同實(shí)例中,雖然對(duì)象的變量有相同的名稱,但是是互不相關(guān)的。

class Robot:
    '''Represents a robot, with a name.

    you can add or delete robot'''
    population = 0
    def __init__(self,name):
        self.name = name        
        print('Robot',self.name,'is coming')  
        print('Hello! {0} is at your service'.format(self.name))
        Robot.population += 1

    def __del__(self):
        print('{0} is being destroyed!'.format(self.name))
        Robot.population -= 1

        if Robot.population == 0:
            print('{0} was the last one.'.format(self.name))
        else:
            print('There are {0} robots left'.format(Robot.population))

    def sayHi(self):
        print('Greetings, my master call me {0}.'.format(self.name))

    def howMany():
        print('We have {0:d} robots.'.format(Robot.population))

分別對(duì)應(yīng)著這樣幾個(gè)調(diào)用

rob1 = Robot('T-800')
del rob1
rob1.sayHi()
Robot.howMany()

12.7 繼承

面向?qū)ο蟮木幊處?lái)的主要好處之一是代碼的重用,實(shí)現(xiàn)這種重用的方法之一是通過繼承機(jī)制。繼承完全可以理解成類之間的類型和子類型關(guān)系。

例如,假設(shè)你想要寫一個(gè)程序來(lái)記錄學(xué)校之中的教師和學(xué)生情況。他們有共通屬性也有單獨(dú)屬性。可以創(chuàng)建一個(gè)共同的類稱為 SchoolMember 然后讓教師和學(xué)生的類繼承這個(gè)共同的類。即它們都是這個(gè)類型(類)的子類型,然后我們?cè)贋檫@些子類型添加專有的屬性。

在上述的場(chǎng)合中,SchoolMember 類被稱為基本類或超類。而 Teacher 和 Student類被稱為導(dǎo)出類或子類。

一個(gè)子類型在任何需要父類型的場(chǎng)合可以被替換成父類型,即對(duì)象可以被視作是父類的實(shí)例,這種現(xiàn)象被稱為多態(tài)現(xiàn)象。

以下是實(shí)例:

class SchoolMember:
    '''Represent any school member.'''
    def __init__(self,name,age):
        self.name = name
        self.age = age
        print ('Initialoze school member {0}'.format(self.name))
    def tell(self):
        print ('Name:"{0}",Age:"{1}"'.format(self.name,self.age),end ='')

class Teacher(SchoolMember):
    '''Repressent a teacher.'''
    def __init__(self,name,age,salary):
        SchoolMember.__init__(self,name,age)
        self.salary = salary
        print('(Initialized Teacher:{0})'.format(self.name))
    def tell(self):
        SchoolMember.tell(self)
        print ('Salary:"{0}"'.format(self.salary))

class Student(SchoolMember):
    '''Repressent a teacher.'''
    def __init__(self,name,age,grade):
        SchoolMember.__init__(self,name,age)
        self.grade = grade
        print('(Initialized Student:{0})'.format(self.name))
    def tell(self):
        SchoolMember.tell(self)
        print ('Grade:"{0}"'.format(self.grade))

可以運(yùn)行以下代碼查看效果

t = Teacher('Mrs.Shrividya',30,30000)
s = Student('Swaroop',25,75)
members = [t,s]
for member in members:
    member.tell()

第 13 章 輸入輸出

13.2 用戶輸入imput

something = input('Enter text:')

13.3 文件file類

創(chuàng)建一個(gè) ?le 類的對(duì)象來(lái)打開一個(gè)文件,分別使用 ?le 類的 read、readline 或 write 方法來(lái)恰當(dāng)?shù)刈x寫文件;用 close 方法來(lái)完成文件操作

os.read()會(huì)一次性讀入所有數(shù)據(jù)到內(nèi)存中,若文件太大很不方便。可以加入?yún)?shù)n,只讀入n個(gè)字符。也可以用os.readline()每次只讀一行。

os.open()默認(rèn)為'r'只讀,可選參數(shù)有'w','a'等等

最后一定要os.close()

13.4 pickle 模塊

Python 提供了一個(gè)叫做 pickle 的標(biāo)準(zhǔn)模塊,使用該模塊你可以將任意對(duì)象存儲(chǔ)在文件中,之后你又可以將其完整地取出來(lái)。這被稱為持久地存儲(chǔ)對(duì)象。

第 14 章 異常

try..except 語(yǔ)句

每個(gè) try 從句,至少都有一個(gè)相關(guān)聯(lián)的 except 從句。還可以讓 try..except 塊關(guān)聯(lián)上一個(gè) else 從句。當(dāng)沒有異常發(fā)生的時(shí)候,else 從句將被執(zhí)行。

try:
    text = input('Enter something --> ')
except EOFError:
    print('Why did you do an EOF on me?')
except KeyboardInterrupt:
    print('You cancelled the operation.')
else:
    print('You entered {0}'.format(text))

14.6 Try..Finally

在一個(gè) try 塊下,可以同時(shí)使用except 從句和 ?nally 塊。如果你要同時(shí)使用它們的話,需要把一個(gè)嵌入另外一個(gè)。

try:
    code
except:
    code
finally:
    code

14.7 with 語(yǔ)句

在 try 塊中獲得資源,隨后又在 ?nally 塊中釋放資源,這是一種常見的模式。今后,也有一種 with 語(yǔ)句能以清晰的方式完成這樣的功能。

with open("poem.txt") as f:
    for line in f:
        print(line,end='')

輸出與前面例子的輸出應(yīng)該一樣。這里的區(qū)別就是用 with 語(yǔ)句使用 open 函數(shù)—— 用 with open 就能使得在結(jié)束的時(shí)候自動(dòng)關(guān)閉文件。

在屏幕后面發(fā)生的事情就是 with 語(yǔ)句使用了一種協(xié)議。獲得了 open 語(yǔ)句返回的對(duì)象,就叫做’the?le’ 好了。

在啟動(dòng)代碼塊之前,在后臺(tái)總會(huì)調(diào)用 the?le.__enter__函數(shù),在代碼塊結(jié)束后又會(huì)調(diào)用 the?le.__exit__函數(shù)。

用 ?nally 塊寫的代碼應(yīng)該自行注意 __exit__方法。這就能幫助我們避免反復(fù)使用顯式的 try..?nally 語(yǔ)句。

第 15 章 標(biāo)準(zhǔn)庫(kù)

15.1 簡(jiǎn)介

Python 標(biāo)準(zhǔn)庫(kù)是隨 Python 附帶安裝的,它包含大量極其有用的模塊。熟悉Python 標(biāo)準(zhǔn)庫(kù)是十分重要的,因?yàn)槿绻闶煜み@些庫(kù)中的模塊,那么你的大多數(shù)問題都可以簡(jiǎn)單快捷地使用它們來(lái)解決。。你可以在 Python 附帶安裝的文檔的“l(fā)ibrary”一節(jié)中了解 Python 標(biāo)準(zhǔn)庫(kù)中所有模塊的完整內(nèi)容。

15.2 sys 模塊
sys 模塊包含了系統(tǒng)指定的函數(shù)功能。我們已經(jīng)看到 sys.argv 列表包含命令行參數(shù)。 version_info 元組,它能給出版本的信息

warnings模塊則能定義警告信息

import sys, warnings

if sys.version_info[0] < 3:
    warnings.warn("Need Python 3.0 for this program to run",RuntimeWarning)
else:
    print('Proceed as normal')

15.3 logging 模塊

得到一些調(diào)試信息或重要信息并將其存儲(chǔ)在某個(gè)地方,用來(lái)檢查你的程序程序運(yùn)行是否是你期望的那樣.

處理存儲(chǔ)在某處的這些信息可以用 logging 模塊來(lái)實(shí)現(xiàn)。

15.4 urllib 和 json 模塊

urllib 模塊,可以用來(lái)從 internet 上取來(lái)一些網(wǎng)頁(yè)。我們將使用 Yahoo!搜索引擎來(lái)得到搜索結(jié)果,它們能給出叫做 JSON 格
式的結(jié)果,我們就能很容易用在標(biāo)準(zhǔn)庫(kù)中內(nèi)建的模塊來(lái)解析。

第 16 章 更多內(nèi)容

16.2 傳送元組

在一個(gè)函數(shù)中返回兩個(gè)不同的值,只需要return (key1,key2)即可他們構(gòu)成了一個(gè)元組返回。

16.3 特殊方法

有一些如 __init____del__這樣的確定方法,對(duì)類來(lái)說(shuō)有重要意義。

特殊的方法用來(lái)模仿內(nèi)置類型的確定動(dòng)作。例如,如果你想對(duì)類使用 x[key] 角標(biāo)操作(就像你在列表和元組中那樣),那么你只需要實(shí)現(xiàn) __getitem__() 方法就可以了。

下面這個(gè)表中列出了一些有用的特殊方法。如果你想要知道所有的特殊方法,你可以在參考手冊(cè)(https://docs.python.org/dev/3.0/reference/datamodel.html#special-method-names)
中找到一個(gè)龐大的列表。

  • __init__(self, ...) : This method is called just before the newly created object is returned for usage.
  • __del__(self): Called just before the object is destroyed
  • __str__(self):Called when we use the print function or when str() is used.
  • __lt__(self, other):Called when the less than operator (<) is used. Similarly, there are special methods for all the operators (+, >, etc.)
  • __getitem__(self, key):Called when x[key] indexing operation is used.
  • __len__(self):Called when the built-in len() function is used for the sequence object.

16.5 Lambda 形式

lambda 語(yǔ)句被用來(lái)創(chuàng)建新的函數(shù)對(duì)象,并且在運(yùn)行時(shí)返回它們。

16.6 列表綜合

通過列表綜合,可以從一個(gè)已有的列表導(dǎo)出一個(gè)新的列表。例如,你有一個(gè)數(shù)的列表,而你想要得到一個(gè)對(duì)應(yīng)的列表,使其中所有大于 2 的數(shù)都是原來(lái)的 2 倍。對(duì)于這種應(yīng)用,列表綜合是最理想的方法。

listone = [2,3,4]
listtwo = [2*i for i in listone if i > 2]

16.8 exec 和 eval 語(yǔ)句

exec 語(yǔ)句用來(lái)執(zhí)行儲(chǔ)存在字符串或文件中的 Python 語(yǔ)句。例如,我們可以在運(yùn)行時(shí)生成一個(gè)包含 Python 代碼的字符串,然后使用 exec 語(yǔ)句執(zhí)行這些語(yǔ)句:exec('print("Hello World")')

eval 函數(shù)用來(lái)執(zhí)行存儲(chǔ)在字符串中的 Python 表達(dá)式。

16.9 assert 語(yǔ)句

assert 語(yǔ)句用來(lái)聲明某個(gè)條件是真的。例如,如果你非常確信某個(gè)你使用的列表中至少有一個(gè)元素,而你想要檢驗(yàn)這一點(diǎn),并且在它非真的時(shí)候引發(fā)一個(gè)錯(cuò)誤,那么assert 語(yǔ)句是應(yīng)用在這種情形下的理想語(yǔ)句。當(dāng) assert 語(yǔ)句失敗的時(shí)候,會(huì)引發(fā)一個(gè)AssertionError。
assert len(mylist) >= 1

16.10 repr 函數(shù)

repr 函數(shù)用來(lái)取得對(duì)象的規(guī)范字符串表示。注意,在大多數(shù)時(shí)候有 eval(repr(object))== object。

基本上,repr 函數(shù)用來(lái)獲取對(duì)象的可打印的表示形式。你可以通過定義類的__repr__ 方法來(lái)控制你的對(duì)象在被 repr 函數(shù)調(diào)用的時(shí)候返回的內(nèi)容。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 教程總綱:http://www.runoob.com/python/python-tutorial.html 進(jìn)階...
    健康哥哥閱讀 2,071評(píng)論 1 3
  • 要點(diǎn): 函數(shù)式編程:注意不是“函數(shù)編程”,多了一個(gè)“式” 模塊:如何使用模塊 面向?qū)ο缶幊蹋好嫦驅(qū)ο蟮母拍睢傩浴?..
    victorsungo閱讀 1,563評(píng)論 0 6
  • 前言 ||| 第二章 使用ArcPy編寫腳本 Python支持大部分在其他語(yǔ)言中出現(xiàn)的編程結(jié)構(gòu)。在本章內(nèi)容中,我們...
    muyan閱讀 90,206評(píng)論 10 55
  • 兩本不錯(cuò)的書: 《Python參考手冊(cè)》:對(duì)Python各個(gè)標(biāo)準(zhǔn)模塊,特性介紹的比較詳細(xì)。 《Python核心編程...
    靜熙老師哈哈哈閱讀 3,386評(píng)論 0 80
  • 大家好!鄙人雖不才,卻摩拳擦掌,躍躍欲試。回顧我們?cè)?jīng)走過的那段崢嶸歲月,點(diǎn)點(diǎn)滴滴猶憶心頭。世上本無(wú)后悔藥,大一的...
    大魚研習(xí)社閱讀 709評(píng)論 0 0