1. 程式人生 > >python基礎注意點(一)

python基礎注意點(一)

Python使用\事項多行語句

String[0:-1]是第一個到倒數第二個

一行顯示多條語句的話,語句之間使用分號(;)分割

if elif else

Print函式預設換行,在函式裡寫end=””就不會換行了

不可變資料(3 個):Number(數字)、String(字串)、Tuple(元組);

可變資料(3 個):List(列表)、Dictionary(字典)、Set(集合)。

a, b, c, d = 20, 5.5, True, 4+3j

<class 'int'> <class 'float'> <class 'bool'> <class 'complex'>

type()不會認為子類是一種父類型別。

isinstance()會認為子類是一種父類型別。

Python3 中,把 True 和 False 定義成關鍵字了,但它們的值還是 1 和 0,它們可以和數字相加。

del語句刪除一些物件引用

>>>5 + 4  # 加法

9

>>> 4.3 - 2 # 減法

2.3

>>> 3 * 7  # 乘法

21

>>> 2 / 4  # 除法,得到一個浮點數

0.5

>>> 2 // 4 # 除法,得到一個整數

0

>>> 17 % 3 # 取餘

2

>>> 2 ** 5 # 乘方

32

元組(tuple)與列表類似,不同之處在於元組的元素不能修改。元組寫在小括號 () 裡,元素之間用逗號隔開

雖然tuple的元素不可改變,但它可以包含可變的物件,比如list列表。

構造包含 0 個或 1 個元素的元組比較特殊,所以有一些額外的語法規則:

tup1 = ()    # 空元組

tup2 = (20,) # 一個元素,需要在元素後新增逗號

集合(set)是一個無序不重複元素的序列。

基本功能是進行成員關係測試和刪除重複元素。

可以使用大括號 { } 或者 set() 函式建立集合,注意:建立一個空集合必須用 set() 而不是 { },因為 { } 是用來建立一個空字典

字典是一種對映型別,字典用"{ }"標識,它是一個無序的鍵(key) : 值(value)對集合。

鍵(key)必須使用不可變型別。

在同一個字典中,鍵(key)必須是唯一的。

print (tinydict.keys())   # 輸出所有鍵

print (tinydict.values()) # 輸出所有值

in 如果在指定的序列中找到值返回 True,否則返回 False。 x 在 y 序列中 , 如果 x 在 y 序列中返回 True。

not in 如果在指定的序列中沒有找到值返回 True,否則返回 False。 x 不在 y 序列中 , 如果 x 不在 y 序列中返回 True。

is 與 == 區別:

is 用於判斷兩個變數引用物件是否為同一個, == 用於判斷引用變數的值是否int(x) 將x轉換為一個整數。

float(x) 將x轉換到一個浮點數。

complex(x) 將x轉換到一個複數,實數部分為 x,虛數部分為 0。

complex(x, y) 將 x 和 y 轉換到一個複數,實數部分為 x,虛數部分為 y。x 和 y 是數字表達式相等。

在互動模式中,最後被輸出的表示式結果被賦值給變數 _

abs(x) 返回數字的絕對值,如abs(-10) 返回 10

ceil(x) 返回數字的上入整數,如math.ceil(4.1) 返回 5

cmp(x, y)

如果 x < y 返回 -1, 如果 x == y 返回 0, 如果 x > y 返回 1。 Python 3 已廢棄 。使用 使用 (x>y)-(x<y) 替換。

exp(x) 返回e的x次冪(ex),如math.exp(1) 返回2.718281828459045

fabs(x) 返回數字的絕對值,如math.fabs(-10) 返回10.0

floor(x) 返回數字的下舍整數,如math.floor(4.9)返回 4

log(x) 如math.log(math.e)返回1.0,math.log(100,10)返回2.0

log10(x) 返回以10為基數的x的對數,如math.log10(100)返回 2.0

max(x1, x2,...) 返回給定引數的最大值,引數可以為序列。

min(x1, x2,...) 返回給定引數的最小值,引數可以為序列。

modf(x) 返回x的整數部分與小數部分,兩部分的數值符號與x相同,整數部分以浮點型表示。

pow(x, y) x**y 運算後的值。

round(x [,n]) 返回浮點數x的四捨五入值,如給出n值,則代表舍入到小數點後的位數。

sqrt(x) 返回數字x的平方根。

choice(seq) 從序列的元素中隨機挑選一個元素,比如random.choice(range(10)),從0到9中隨機挑選一個整數。

randrange ([start,] stop [,step]) 從指定範圍內,按指定基數遞增的集合中獲取一個隨機數,基數預設值為1

random() 隨機生成下一個實數,它在[0,1)範圍內。

seed([x]) 改變隨機數生成器的種子seed。如果你不瞭解其原理,你不必特別去設定seed,Python會幫你選擇seed。

shuffle(lst) 將序列的所有元素隨機排序

uniform(x, y) 隨機生成下一個實數,它在[x,y]範圍內。

python三引號允許一個字串跨多行,字串中可以包含換行符、製表符以及其他特殊字元。

在Python3中,所有的字串都是Unicode字串

可以使用 del 語句來刪除列表的的元素

不允許同一個鍵出現兩次。建立時如果同一個鍵被賦值兩次,後一個值會被記住,鍵必須不可變,所以可以用數字,字串或元組充當,而用列表就不行,

>>>thisset = set(("Google", "Runoob", "Taobao")) 

>>> thisset.update({1,3}) 

>>> print(thisset) {1, 3, 'Google', 'Taobao', 'Runoob'}

>>> thisset.update([1,4],[5,6]) 

>>> print(thisset) {1, 3, 4, 5, 6, 'Google', 'Taobao', 'Runoob'}

還有一個方法也是移除集合中的元素,且如果元素不存在,不會發生錯誤。格式如下所示:

s.discard( x )

設定隨機刪除集合中的一個元素,語法格式如下:

s.pop()

s.update( {"字串"} ) 將字串新增到集合中。

s.update( "字串" ) 將字串拆分單個字元後,然後再一個個新增到集合中,有重複的會忽略

在 while … else 在條件語句為 false 時執行 else 的語句塊:

Python for迴圈可以遍歷任何序列的專案,如一個列表或者一個字串。

for迴圈的一般格式如下:

for <variable> in <sequence>:

    <statements>

else:

<statements>

for i in range(5):

...     print(i)

...

0

1

2

3

4

break 語句可以跳出 for 和 while 的迴圈體。如果你從 for 或 while 迴圈中終止,任何對應的迴圈 else 塊將不執行。

continue語句被用來告訴Python跳過當前迴圈塊中的剩餘語句,然後繼續進行下一輪迴圈。

迴圈語句可以有 else 子句,它在窮盡列表(以for迴圈)或條件變為 false (以while迴圈)導致迴圈終止時被執行,但迴圈被break終止時不執行。

Python pass是空語句,是為了保持程式結構的完整性。

迭代器有兩個基本的方法:iter() 和 next()。

t = iter(list)    # 建立迭代器物件

print (next(it))   # 輸出迭代器的下一個元素

在 Python 中,使用了 yield 的函式被稱為生成器(generator)。

跟普通函式不同的是,生成器是一個返回迭代器的函式,只能用於迭代操作,更簡單點理解生成器就是一個迭代器。

在呼叫生成器執行的過程中,每次遇到 yield 時函式會暫停並儲存當前所有的執行資訊,返回 yield 的值, 並在下一次執行 next() 方法時從當前位置繼續執行。

呼叫一個生成器函式,返回的是一個迭代器物件。

import sys

 

def fibonacci(n): # 生成器函式 - 斐波那契

    a, b, counter = 0, 1, 0

    while True:

        if (counter > n):

            return

        yield a

        a, b = b, a + b

        counter += 1

f = fibonacci(10) # f 是一個迭代器,由生成器返回生成

 

while True:

    try:

        print (next(f), end=" ")

    except StopIteration:

        sys.exit()

0 1 1 2 3 5 8 13 21 34 55

 

不可變型別:類似 c++ 的值傳遞,如 整數、字串、元組。如fun(a),傳遞的只是a的值,沒有影響a物件本身。比如在 fun(a)內部修改 a 的值,只是修改另一個複製的物件,不會影響 a 本身。

 

可變型別:類似 c++ 的引用傳遞,如 列表,字典。如 fun(la),則是將 la 真正的傳過去,修改後fun外部的la也會受影響

你可能需要一個函式能處理比當初宣告時更多的引數。這些引數叫做不定長引數,和上述 2 種引數不同,宣告時不會命名。基本語法如下:

def functionname([formal_args,] *var_args_tuple ):

   "函式_文件字串"

   function_suite

   return [expression]

加了星號 * 的引數會以元組(tuple)的形式匯入,存放所有未命名的變數引數。

 

如果單獨出現星號 * 後的引數必須用關鍵字傳入。

python 使用 lambda 來建立匿名函式。

所謂匿名,意即不再使用 def 語句這樣標準的形式定義一個函式。

lambda 只是一個表示式,函式體比 def 簡單很多。

lambda的主體是一個表示式,而不是一個程式碼塊。僅僅能在lambda表示式中封裝有限的邏輯進去。

lambda 函式擁有自己的名稱空間,且不能訪問自己引數列表之外或全域性名稱空間裡的引數。

雖然lambda函式看起來只能寫一行,卻不等同於C或C++的行內函數,後者的目的是呼叫小函式時不佔用棧記憶體從而增加執行效率。

語法

lambda 函式的語法只包含一個語句,如下:

lambda [arg1 [,arg2,.....argn]]:expression

Python 中,程式的變數並不是在哪個位置都可以訪問的,訪問許可權決定於這個變數是在哪裡賦值的。

變數的作用域決定了在哪一部分程式可以訪問哪個特定的變數名稱。Python的作用域一共有4種,分別是:

L (Local) 區域性作用域

E (Enclosing) 閉包函式外的函式中

G (Global) 全域性作用域

B (Built-in) 內建作用域

以 L –> E –> G –>B 的規則查詢,即:在區域性找不到,便會去區域性外的區域性找(例如閉包),再找不到就會去全域性找,再者去內建中找。

當內部作用域想修改外部作用域的變數時,就要用到global和nonlocal關鍵字了。

如果要修改巢狀作用域(enclosing 作用域,外層非全域性作用域)中的變數則需要 nonlocal 關鍵字了