Python高階語法

2021-08-28 17:38:45 字數 3634 閱讀 9865

最近重新看了網上的python教程,補充學習了一些之前用的較少的用法

字典

注意字典中 key 是亂序的,也就是說和插入 的順序是不一致的。如果想要使用順序一致的字典,請使用 collections 模組 中的 ordereddict 物件

迭代器

python 中的 for 句法實際上實現了設計模式中的迭代器模式 ,所以我們自己也可以按照迭代器的要求自己生成迭代器物件,以便在 for 語句中使用。 只要類中實現了 __iter__ 和 next 函式,那麼物件就可以在 for 語句中使用。 現在建立 fibonacci 迭代器物件

# define a fib class

class fib(object):

def __init__(self, max):

self.max = max

self.n, self.a, self.b = 0, 0, 1

def __iter__(self):

return self

def __next__(self):

if self.n < self.max:

r = self.b

self.a, self.b = self.b, self.a + self.b

self.n = self.n + 1

return r

raise stopiteration()

# using fib object

for i in fib(5):

print(i)

生成器

除了使用迭代器以外,python 使用 yield 關鍵字也能實現類似迭代的效果,yield 語句每次 執行時,立即返回結果給上層呼叫者,而當前的狀態仍然保留,以便迭代器下一次迴圈呼叫。這樣做的 好處是在於節約硬體資源,在需要的時候才會執行,並且每次只執行一次

def fib(max):

a, b = 0, 1

while max:

r = b

a, b = b, a+b

max -= 1

yield r

# using generator

for i in fib(5):

print(i)

對字串的判斷

str為字串

關於python的指標

python沒有指標,但它也可以傳引用

淺拷貝和深拷貝

淺拷貝時,python只是拷貝了最外圍的物件本身,內部的元素都只是拷貝了乙個引用而已

深拷貝時,deepcopy對外圍和內部元素都進行了拷貝物件本身,而不是物件的引用

import copy

a = [1,2,3]

print(id(a))

b = [1,2,3] # or b = a

print(id(b))

c = copy.copy(a)

print(id(c))

d = copy.deepcopy(a)

print(id(d))

其他**如下

#平方運算

a = 3**2

print(a)

#range的間隔跳躍以及不換行輸出(自定義結尾)

for i in range(0,10,2):

print(i,end=' ')

a = input("\ngive me an interger: ")

# 判斷輸入 通過elif來多重判斷

if (a.isdigit()):

a = int(a)

if (a > 0):

print(">0")

elif (a < 0):

print("<0")

else:

print("0")

else:

print("no number!")

# 在函式裡面使用全域性變數

a = 10

def change():

global a

a = a-1

change()

print(a)

# 讀寫檔案

my_file = open('my_file.txt','w') #預設使用相對路徑,w會覆蓋之前的所有資料

text = "i am here"

my_file.write(text)

my_file.close()

my_file.write("\nthis is my second line")

my_file.close()

my_file = open('my_file.txt','r') #r->read

content = my_file.read()

print(content)

# 逐行讀取

for line in my_file.readlines():

print(line,end='')

# tuple list 之間的轉換

alist = [1,2,3,4,99]

atuple = ()

atuple = tuple(alist)

print(atuple)

alist2 =

alist2 = list(atuple)

print(alist2)

# 以下的remove和pop是等價的

alist.remove(99)

# alist.pop(4)

print(alist)

alist.sort(reverse=true)

print(alist)

import time

print("time now is "+str(time.localtime().tm_hour)+":"+str(time.localtime().tm_min)) #這樣就可以print 當地時間了

try:

file=open('eeee.txt','r+')

except exception as e:

print(e)

response = input('do you want to create a new file:')

if response=='y':

file=open('eeee.txt','w')

else:

pass

else:

file.write('ssss')

file.close()

a=[1,2,3]

b=[4,5,6]

ab=zip(a,b)

print(list(ab)) #需要加list來視覺化這個功能

for i,j in zip(a,b):

print(i/2,j*2)

fun= lambda x,y:x+y

x=int(input('x=')) #這裡要定義int整數,否則會預設為字串

y=int(input('y='))

print(fun(x,y))

Python高階語法

函式式 程式設計概念 要了解什麼是函式式程式設計 什麼是函式 這兩者的區別 高階函式的特點 能接收函式作為引數 注意 map 是 python 內建的高階函式,它接收乙個函式 f和乙個list,並通過把函式 f 依次作用在 list 的每個元素上,得到乙個新的 list 並返回。reduce 函式也...

Python高階語法 函式

所謂函式就是乙個 塊,函式是組織好的,可重複使用的,用來實現單一,或相關聯功能的 段。二.匿名函式 三.map函式 四.reduce函式 五.filter函式 六.sort函式 七.幾種函式的舉例 def 函式名 引數 函式體 任何傳入引數和自變數必須放在圓括號中間,圓括號之間可以用於定義引數 傳的...

python 高階語法和除錯

zip 把兩個可迭代的內容生成乙個可迭代的tuple元素型別組成的內容 l1 1,2,3,4,5 l2 11,22,33,44,55 z zip l1,l2 print type z print z for i in z print i l1 dd ff zz l2 12,13,14 z zip l...