日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python学习笔记 ---第三章

發布時間:2023/12/2 python 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python学习笔记 ---第三章 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

函數

函數是代碼的一種抽象

函數說明
abs絕對值
max最大值
hex轉換為16進制

強制數據類型轉換

int('123')
123
int(12.35)
12
srt(100)
'100'
bool(1)
True

定義函數

定義一個函數,依次寫出函數名,括號中的參數和冒號: 最后return返回

def my_abs(x):
if x >=0:
return x
else
return -x
*空函數 定義一個空函數
def nop()
pass

*返回多個值

import math
def move(x, y, step, angle=0):
nx = x + step * math.cos(angle)
ny = y - step * math.sin(angle)
return nx, ny

然會同時獲得返回值

x, y = move(100, 100, 60, math.pi / 6)
print(x, y)
151.96152422706632 70.0

這只是一種假象,Python函數返回的仍然是單一值

r = move(100, 100, 60, math.pi / 6)
print(r)
(151.96152422706632, 70.0)
返回了一個tuple

*定義函數時,要確定函數名和參數個數,可以先對參數的數據類型進行檢查
函數體內部可以用return隨時返回函數結果,沒有執行完畢也沒有return語句時返回None
函數可以返回多個值,騎其實就是一個tuple

遞歸函數

*在函數內部調用自身就是遞歸函數

def fact(n):
if n == 1
return 1
return n * fact(n-1)

*遞歸要防止棧溢出,可以用尾遞歸優化防止溢出

def fact(n):
return fact_iter(n,1)
def fact_iter(num,product):
if num == 1:
return product
return fact_uter(num - 1,num*product)

return fact_iter(num - 1, num * product)僅返回遞歸函數本身,num - 1和num * product在函數調用前就會被計算,不影響函數調用。

使用遞歸函數的優點是邏輯簡單清晰,缺點是過深的調用會導致棧溢出。
針對尾遞歸優化的語言可以通過尾遞歸防止棧溢出。尾遞歸事實上和循環是等價的,沒有循環語句的編程語言只能通過尾遞歸實現循環。

高級函數

*切片
取出一個list中的部分元素

L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack']
L[0:3] #取出前三個元素,從0開始不包括3
['Michael', 'Sarah', 'Tracy']
L[-2] #倒序切片,從-1開始
['Bob', 'Jack']

建立一個0-99的數列

L = list(range(100))
L
[0,1,2,3,.....,99]

前十個,每兩個取一個
L[:10:2]
[0,2,4,6,8]
所有數,每隔5個取一個
L[::5]
[0,5,10,.....,95]

tuple也可以進行切片,結果仍是一個tuple
(0,1,2,3,4,5)
[:3]
(0,1,2)

字符串'XXX'也可以看做list,可以進行切片
'ABCDEFG'[:3]
'ABC'

迭代

一個list或tuple,我們可以通過for循環來遍歷這個list或tuple,這種遍歷我們稱為迭代(Iteration)。
Python中通過for ... in 進行迭代

d = {'a':1,'b':2,'c':3}
for key in d:
print(key) #迭代出key

for value in d.values() #迭代value
for k,v in d.items() #迭代value 和key

collection模塊中的lterable類型判斷對象是否可以迭代

from collections import Iterable
isinstance('abc', Iterable) # str是否可迭代
True

Python內置的enumerate函數可以把一個list變成索引-元素對,在for循環中同時迭代索引和元素本身

for i, value in enumerate(['A', 'B', 'C']):
print(i, value)
0 A
1 B
2 C
任何可迭代對象都可以作用于for循環,包括我們自定義的數據類型,只要符合迭代條件,就可以使用for循環

列表生成式

list(range(1, 11))
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] #生成1-10的list

生成[1x1, 2x2, 3x3, ..., 10x10]
1.循環

L = []
for x in range(1, 11):
L.append(x * x)
L
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

2.list

[x*x for x in range(1,11)]
[1,4,16,25, 36, 49, 64, 81, 100]

for循環后面還可以加上if判斷,這樣我們就可以篩選出僅偶數的平方

[x*x for x in range(1,11) if x%2 == 0]
[4,16,36,64,100]

兩層循環生成全排列

[m + n for m in 'ABC' n in 'XYZ']
['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']

列表生成式可使用兩個變量生成list

d = {'x':,'A','y':'B','z',:'C'}
[k + '=' + v for k,v in d.items()]
['y=B','x=A','z=C']

生成器

在Python中一邊循環一邊計算的機制,稱為生成器:generator
把列表生成器的[]改為()就建立了一個generator

L = [x * x for x in range(10)]
g = (x * x for x in range(10))
通過next() 獲得generator的下一個返回值
next(g)
0
next(g)
1
next(g)
4
然后加入for循環
g = (x * x for x in range(10))
for n in g:
print (n)
0
1
4
16

斐波拉契數列

def fib(max):
n,a,b =0,0,1
while n < max:
print(b)
a,b = b,a+b
n = n+1
return 'done'

轉載于:https://www.cnblogs.com/battleblock/p/4817451.html

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的Python学习笔记 ---第三章的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。