真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

python高級(jí)函數(shù)大全,python中的高階函數(shù)

20201014-python高級(jí)函數(shù)作業(yè)

1、定義一個(gè)使用不定長(zhǎng)參數(shù)的函數(shù),并在函數(shù)中打印出參數(shù)及其類型,統(tǒng)計(jì)傳入?yún)?shù)的個(gè)數(shù)

專注于為中小企業(yè)提供網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)南寧免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了成百上千企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過(guò)網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。

def test(a,b,*args,c=10,**kwargs): ??

print("a=",a)

print("b=",b)

print("args=",args)

print("c=",c)

print("kwargs=",kwargs)

print("參數(shù)總長(zhǎng)度:",1+1+len(args)+1+len(kwargs))

test(1,2,3,4,5,m=4)

def test(a,b,c=10,*args,**kwargs): ? ?

print("a=",a)

print("b=",b)

print("args=",args)

print("c=",c)

print("kwargs=",kwargs)

print("參數(shù)總長(zhǎng)度:",1+1+len(args)+1+len(kwargs))

test(1,2,3,4,5,m=4)

2、定義一個(gè)函數(shù)max,接受的參數(shù)類型是數(shù)值,最終返回兩個(gè)數(shù)中的最大值

def max(num1,num2):

if num1num2:

return num1

else:

return num2

3、定義一個(gè)函數(shù)min,接受的參數(shù)類型是數(shù)值,最終返回兩個(gè)數(shù)中的最小值

def min(num1,num2):

if num1num2:

return num1

else:

return num2

4、分別定義加減乘除四個(gè)函數(shù)實(shí)現(xiàn)兩個(gè)數(shù)之間的加減乘除操作

# 加法

def add(a,b):

return a+b

# 減法

def sub(a,b):

return a-b

# 乘法

def mul(a,b):

return a*b

# 除法

def div(a,b):

if b==0:

return 0

else:

return a/b

5、分別定義加減乘除四個(gè)函數(shù),然后實(shí)現(xiàn)多個(gè)數(shù)之間的累加累減累除累乘操作,如[1,2,3,4,5],累加即是1+2+3+4+5,注意當(dāng)使用除法時(shí),應(yīng)判斷被除數(shù)不能為0

#累加

def add(a,b,*args):

s=a+b

for i in args:

s=s+i

return s

#累減

def sub(a,b,*args):

s=a-b

for i in args:

s=s-i

return s

#累乘

def mul(a,b,*args):

s=a*b

for i in args:

s=s*i

return s

#累除

def div(a,b,*args):

if b==0:

return a

else:

s=a/b

for i in args:

if i ==0:

continue

else:

s=a/b

return s

6、使用不定長(zhǎng)參數(shù)定義一個(gè)函數(shù)max_min,接受的參數(shù)類型是數(shù)值,最終返回這些數(shù)中的最大值和最小值——錯(cuò)題

def max_min(*args):

max=0

min=0

if len(args)==0:

return 0,0

elif len(args)==1:

return args[0],args[0]

else:

max=args[0]

min=args[0]

for i in args:

if maxi:

max=i

if mini:

min=i

return max,min

7、定義一個(gè)函數(shù),返回n的階乘的最后結(jié)果,并打印出如5階乘"5!=120”的效果——錯(cuò)題

def f(n):

s=1

for i in range(n):

s=s*(i+1)

print('%s!=%s' %(n,s))?

f(5)

8、定義一個(gè)函數(shù),返回由n(包含n)以內(nèi)的奇數(shù)或者偶數(shù)組成的列表,默認(rèn)返回全是奇數(shù)的列表

def?f(n,type='j'):

ls=[]

if?type=='j':

for?i?in?range(1,n+1):

if?i%2==1:

ls.append(i)

if?type=='o':

for?i?in?range(1,n+1):

if?i%2==0:

ls.append(i)

return?ls

9、定義一個(gè)函數(shù),打印出n以內(nèi)的所有的素?cái)?shù)(指在大于1的自然數(shù)中,除了1和它本身以外不再有其他因數(shù)的自然數(shù)。)——錯(cuò)題

def f(n):

ls=[2]

for i in range(3,n):

for j in range(2,i):

if i%j == 0:

break

else:

ls.append(i)

print(ls)

10、定義一個(gè)函數(shù),接受三個(gè)參數(shù),分別為字符串s、數(shù)值a1、數(shù)值a2,將字符串s從下標(biāo)a1開(kāi)始的a2個(gè)字符刪除,并把結(jié)果返回,a2默認(rèn)值為0——錯(cuò)題

def cut_str(s,a1,a2=0):

length = len(s)

if a1+1length or a2 == 0:

return s

else:

s1 = s[:a1]

s2 = s[a1+a2:]

return s1+s2

print(cut_str("hello",6,1))

11、請(qǐng)定義兩個(gè)函數(shù),一個(gè)函數(shù)畫正方形,一個(gè)函數(shù)畫三角形,并且可以從鍵盤輸入值來(lái)決定畫正方形還是畫三角形以及決定是否退出程序

我的答案:

import turtle

def z():

for i in range(4):

turtle.fd(20)

turtle.right(90)

def s():

for i in range(3):

turtle.fd(20)

turtle.right(120)

m=input('請(qǐng)輸入值,z畫正方形,s畫三角形,其它任意鍵退出程序:')

if m =='z':

z()

elif m=='s':

s()

else:

print('退出程序')

官方答案:

def square(n):

for i in range(n):

print("*"*n)

def triangle(n):

for i in range(n):

print("*"*(i+1))

12、定義函數(shù)findall,實(shí)現(xiàn)對(duì)字符串find方法的進(jìn)一步封裝,要求返回符合要求的所有位置的起始下標(biāo),如字符串"helloworldhellopythonhelloc++hellojava",需要找出里面所有的"hello"的位置,最后將返回一個(gè)元組(0,10,21,29),即將h的下標(biāo)全部返回出來(lái),而find方法只能返回第一個(gè)——沒(méi)懂

def findall(string, s):

ret = []

if s=='':

return ret

while True:

index = string.find(s)

if index != -1:

if len(ret)!=0:

ret.append(ret[-1]+index+len(s))

else:

ret.append(index)

string = string[index+len(s):]

else:

break

return ret

print(findall("abc-abc-abc-","-"))

Python 函數(shù)進(jìn)階-高階函數(shù)

高階函數(shù)就是能夠把函數(shù)當(dāng)成參數(shù)傳遞的函數(shù)就是高階函數(shù),換句話說(shuō)如果一個(gè)函數(shù)的參數(shù)是函數(shù),那么這個(gè)函數(shù)就是一個(gè)高階函數(shù)。

高階函數(shù)可以是你使用 def 關(guān)鍵字自定義的函數(shù),也有Python系統(tǒng)自帶的內(nèi)置高階函數(shù)。

我們下面的例子中,函數(shù) senior 的參數(shù)中有一個(gè)是函數(shù),那么senior就是一個(gè)高階函數(shù);函數(shù) tenfold 的參數(shù)不是函數(shù),所以tenfold就只是一個(gè)普通的函數(shù)。

function:函數(shù),可以是 自定義函數(shù) 或者是 內(nèi)置函數(shù);

iterable:可迭代對(duì)象,可迭代性數(shù)據(jù)。(容器類型數(shù)據(jù)和類容器類型數(shù)據(jù)、range對(duì)象、迭代器)

把可迭代對(duì)象中的數(shù)據(jù)一個(gè)一個(gè)拿出來(lái),然后放在到指定的函數(shù)中做處理,將處理之后的結(jié)果依次放入迭代器中,最后返回這個(gè)迭代器。

將列表中的元素轉(zhuǎn)成整型類型,然后返回出來(lái)。

列表中的每一個(gè)數(shù)依次乘 2的下標(biāo)索引+1 次方。使用自定義的函數(shù),配合實(shí)現(xiàn)功能。

參數(shù)的意義和map函數(shù)一樣

filter用于過(guò)濾數(shù)據(jù),將可迭代對(duì)象中的數(shù)據(jù)一個(gè)一個(gè)的放入函數(shù)中進(jìn)行處理,如果函數(shù)返回值為真,將數(shù)據(jù)保留;反之不保留,最好返回迭代器。

保留容器中的偶數(shù)

參數(shù)含義與map、filter一致。

計(jì)算數(shù)據(jù),將可迭代對(duì)象的中的前兩個(gè)值放在函數(shù)中做出運(yùn)算,得出結(jié)果在和第三個(gè)值放在函數(shù)中運(yùn)算得出結(jié)果,以此類推,直到所有的結(jié)果運(yùn)算完畢,返回最終的結(jié)果。

根據(jù)功能我們就應(yīng)該直到,reduce中的函數(shù)需要可以接收兩個(gè)參數(shù)才可以。

將列表中的數(shù)據(jù)元素組合成為一個(gè)數(shù),

iterable:可迭代對(duì)象;

key:指定函數(shù),默認(rèn)為空;

reverse:排序的方法,默認(rèn)為False,意為升序;

如果沒(méi)有指定函數(shù),就單純的將數(shù)據(jù)安札ASCII進(jìn)行排序;如果指定了函數(shù),就將數(shù)據(jù)放入函數(shù)中進(jìn)行運(yùn)算,根據(jù)數(shù)據(jù)的結(jié)果進(jìn)行排序,返回新的數(shù)據(jù),不會(huì)改變?cè)械臄?shù)據(jù)。

注意,如果指定了函數(shù),排序之后是根據(jù)數(shù)據(jù)的結(jié)果對(duì)原數(shù)據(jù)進(jìn)行排序,而不是排序計(jì)算之后的就結(jié)果數(shù)據(jù)。

將列表中的數(shù)據(jù)進(jìn)行排序。

還有一點(diǎn)就是 sorted 函數(shù)可以將數(shù)據(jù)放入函數(shù)中進(jìn)行處理,然后根據(jù)結(jié)果進(jìn)行排序。

既然有了列表的內(nèi)置函數(shù)sort,為什么我們還要使用sorted函數(shù)呢?

高階函數(shù)就是將函數(shù)作為參數(shù)的函數(shù)。

文章來(lái)自

python常用函數(shù)包有哪些?

一些python常用函數(shù)包:

1、Urllib3

Urllib3是一個(gè) Python 的 HTTP 客戶端,它擁有 Python 標(biāo)準(zhǔn)庫(kù)中缺少的許多功能:

線程安全

連接池

客戶端 SSL/TLS 驗(yàn)證

使用分段編碼上傳文件

用來(lái)重試請(qǐng)求和處理 HTTP 重定向的助手

支持 gzip 和 deflate 編碼

HTTP 和 SOCKS 的代理支持

2、Six

six 是一個(gè)是 Python 2 和 3 的兼容性庫(kù)。這個(gè)項(xiàng)目旨在支持可同時(shí)運(yùn)行在 Python 2 和 3 上的代碼庫(kù)。它提供了許多可簡(jiǎn)化 Python 2 和 3 之間語(yǔ)法差異的函數(shù)。

3、botocore、boto3、s3transfer、awscli

Botocore是 AWS 的底層接口。Botocore是 Boto3 庫(kù)(#22)的基礎(chǔ),后者讓你可以使用 Amazon S3 和 Amazon EC2 一類的服務(wù)。Botocore 還是 AWS-CLI 的基礎(chǔ),后者為 AWS 提供統(tǒng)一的命令行界面。

S3transfer(#7)是用于管理 Amazon S3 傳輸?shù)?Python 庫(kù)。它正在積極開(kāi)發(fā)中,其介紹頁(yè)面不推薦人們現(xiàn)在使用,或者至少等版本固定下來(lái)再用,因?yàn)槠?API 可能發(fā)生變化,在次要版本之間都可能更改。Boto3、AWS-CLI和其他許多項(xiàng)目都依賴s3transfer。

4、Pip

pip是“Pip Installs Packages”的首字母遞歸縮寫。

pip很容易使用。要安裝一個(gè)包只需pip install package name即可,而刪除包只需pip uninstall package name即可。

最大優(yōu)點(diǎn)之一是它可以獲取包列表,通常以requirements.txt文件的形式獲取。該文件能選擇包含所需版本的詳細(xì)規(guī)范。大多數(shù) Python 項(xiàng)目都包含這樣的文件。

如果結(jié)合使用pip與virtualenv(列表中的 #57),就可以創(chuàng)建可預(yù)測(cè)的隔離環(huán)境,同時(shí)不會(huì)干擾底層系統(tǒng),反之亦然。

5、Python-dateutil

python-dateutil模塊提供了對(duì)標(biāo)準(zhǔn)datetime模塊的強(qiáng)大擴(kuò)展。我的經(jīng)驗(yàn)是,常規(guī)的Python datetime缺少哪些功能,python-dateutil就能補(bǔ)足那一塊。

6、Requests

Requests建立在我們的 #1 庫(kù)——urllib3基礎(chǔ)上。它讓 Web 請(qǐng)求變得非常簡(jiǎn)單。相比urllib3來(lái)說(shuō),很多人更喜歡這個(gè)包。而且使用它的最終用戶可能也比urllib3更多。后者更偏底層,并且考慮到它對(duì)內(nèi)部的控制級(jí)別,它一般是作為其他項(xiàng)目的依賴項(xiàng)。

7、Certifi

近年來(lái),幾乎所有網(wǎng)站都轉(zhuǎn)向 SSL,你可以通過(guò)地址欄中的小鎖符號(hào)來(lái)識(shí)別它。加了小鎖意味著與該站點(diǎn)的通信是安全和加密的,能防止竊聽(tīng)行為。

8、Idna

根據(jù)其 PyPI 頁(yè)面,idna提供了“對(duì) RFC5891 中指定的應(yīng)用程序中國(guó)際化域名(IDNA)協(xié)議的支持?!?/p>

IDNA的核心是兩個(gè)函數(shù):ToASCII和ToUnicode。ToASCII會(huì)將國(guó)際 Unicode 域轉(zhuǎn)換為 ASCII 字符串。ToUnicode則逆轉(zhuǎn)該過(guò)程。在IDNA包中,這些函數(shù)稱為idna.encode()和idna.decode()

9、PyYAML

YAML是一種數(shù)據(jù)序列化格式。它的設(shè)計(jì)宗旨是讓人類和計(jì)算機(jī)都能很容易地閱讀代碼——人類很容易讀寫它的內(nèi)容,計(jì)算機(jī)也可以解析它。

PyYAML是 Python 的YAML解析器和發(fā)射器,這意味著它可以讀寫YAML。它會(huì)把任何 Python 對(duì)象寫成YAML:列表、字典,甚至是類實(shí)例都包括在內(nèi)。

10、Pyasn1

像上面的IDNA一樣,這個(gè)項(xiàng)目也非常有用:

ASN.1 類型和 DER/BER/CER 編碼(X.208)的純 Python 實(shí)現(xiàn)

所幸這個(gè)已有數(shù)十年歷史的標(biāo)準(zhǔn)有很多信息可用。ASN.1是 Abstract Syntax Notation One 的縮寫,它就像是數(shù)據(jù)序列化的教父。它來(lái)自電信行業(yè)。也許你知道協(xié)議緩沖區(qū)或 Apache Thrift?這就是它們的 1984 年版本。

11、Docutils

Docutils是一個(gè)模塊化系統(tǒng),用來(lái)將純文本文檔處理為很多有用的格式,例如 HTML、XML 和 LaTeX 等。Docutils能讀取reStructuredText格式的純文本文檔,這種格式是類似于 MarkDown 的易讀標(biāo)記語(yǔ)法。

12、Chardet

你可以用chardet模塊來(lái)檢測(cè)文件或數(shù)據(jù)流的字符集。比如說(shuō),需要分析大量隨機(jī)文本時(shí),這會(huì)很有用。但你也可以在處理遠(yuǎn)程下載的數(shù)據(jù),但不知道用的是什么字符集時(shí)使用它。

13、RSA

rsa包是一個(gè)純 Python 的 RSA 實(shí)現(xiàn)。它支持:

加密和解密

簽名和驗(yàn)證簽名

根據(jù) PKCS#1 1.5 版生成密鑰

它既可以用作 Python 庫(kù),也能在命令行中使用。

14、Jmespath

JMESPath,發(fā)音為“James path”,使 Python 中的 JSON 更容易使用。它允許你聲明性地指定如何從 JSON 文檔中提取元素。

15、Setuptools

它是用于創(chuàng)建 Python 包的工具。不過(guò),其文檔很糟糕。它沒(méi)有清晰描述它的用途,并且文檔中包含無(wú)效鏈接。最好的信息源是這個(gè)站點(diǎn),特別是這個(gè)創(chuàng)建 Python 包的指南。

16、Pytz

像dateutils一樣,這個(gè)庫(kù)可幫助你處理日期和時(shí)間。有時(shí)候,時(shí)區(qū)處理起來(lái)可能很麻煩。幸好有這樣的包,可以讓事情變得簡(jiǎn)單些。

17、Futures

從 Python 3.2 開(kāi)始,python 提供current.futures模塊,可幫助你實(shí)現(xiàn)異步執(zhí)行。futures 包是該庫(kù)適用于 Python 2 的 backport。它不適用于 Python3 用戶,因?yàn)?Python 3 原生提供了該模塊。

18、Colorama

使用 Colorama,你可以為終端添加一些顏色:

更多Python知識(shí)請(qǐng)關(guān)注Python自學(xué)網(wǎng)

Python之OS模塊操作有哪些?這18個(gè)高頻函數(shù)是重中之重,你會(huì)用?

案例一:新建一個(gè)txt文件并向文件中寫入數(shù)據(jù)。

代碼與結(jié)果如上圖所示。

案例:os.rename('kitty1.txt',''kitty2.txt')

2.1 輸出結(jié)果:將kitty1文件改為kitty2

2.2 文件解析說(shuō)明:文件重命名,將test1文件改為test2文件。

案例:os.remove('kitty2.txt')

3.1 輸出結(jié)果:kitty2.txt文件被刪除

3.2 解析說(shuō)明:刪除文件。

案例:os.mkdir('kitty')

4.1 輸出結(jié)果:創(chuàng)建一個(gè)文件夾名字為kitty

4.2 解析說(shuō)明:創(chuàng)建文件夾。

4.3 解析說(shuō)明:list.pop()就直接從list中的最末尾處刪除一個(gè)元素。

案例:os.rmdir('test')

5.1 輸出結(jié)果:刪除一個(gè)文件夾

5.3 解析說(shuō)明:刪除文件夾.

解析說(shuō)明:可以取代操作系統(tǒng)特定的路徑分割符

案例一:print(os.getcwd())

輸出結(jié)果:D:PythonProjectPython編程基礎(chǔ)

解析說(shuō)明:相當(dāng)于linux下的pwd,獲取當(dāng)前目錄。

案例一:os.chdir(os.getcwd()+os.sep+'kitty')

解析說(shuō)明:進(jìn)入到某個(gè)目錄下。

解析說(shuō)明:相當(dāng)于linux下的ls,顯示當(dāng)前目錄下的文件。

解析說(shuō)明:創(chuàng)建一個(gè)aa文件夾,再在里面創(chuàng)建一個(gè)bb文件夾。

解析說(shuō)明:刪除aa文件夾和aa文件夾中的bb文件夾。

解析說(shuō)明:判斷是否是個(gè)文件。

解析說(shuō)明:判斷是否是個(gè)文件夾。

解析說(shuō)明:判斷文件是否存在。

解析說(shuō)明:獲取文件大小。

解析說(shuō)明:返回文件的絕對(duì)路徑。

解析說(shuō)明:獲取文件的文件名,注意參數(shù)需要傳入絕對(duì)路徑。

解析說(shuō)明:獲取文件的所在目錄,注意參數(shù)需要傳入絕對(duì)路徑。

python函數(shù)高級(jí)

一、函數(shù)的定義

函數(shù)是指將一組語(yǔ)句的集合通過(guò)一個(gè)名字(函數(shù)名)封裝起來(lái),想要執(zhí)行這個(gè)函數(shù),只需要調(diào)用函數(shù)名即可

特性:

減少重復(fù)代碼

使程序變得可擴(kuò)展

使程序變得易維護(hù)

二、函數(shù)的參數(shù)

2.1、形參和實(shí)參數(shù)

形參,調(diào)用時(shí)才會(huì)存在的值

實(shí)慘,實(shí)際存在的值

2.2、默認(rèn)參數(shù)

定義:當(dāng)不輸入?yún)?shù)值會(huì)有一個(gè)默認(rèn)的值,默認(rèn)參數(shù)要放到最后

2.3、 關(guān)鍵參數(shù)

定義: 正常情況下,給函數(shù)傳參數(shù)要安裝順序,不想按順序可以用關(guān)鍵參數(shù),只需要指定參數(shù)名即可,(指定了參數(shù)名的就叫關(guān)鍵參數(shù)),但是要求是關(guān)鍵參數(shù)必須放在位置參數(shù)(以位置順序確定對(duì)應(yīng)的參數(shù))之后

2.4、非固定參數(shù)

定義: 如你的函數(shù)在傳入?yún)?shù)時(shí)不確定需要傳入多少個(gè)參數(shù),就可以使用非固定參數(shù)

# 通過(guò)元組形式傳遞

# 通過(guò)列表形式傳遞

# 字典形式(通過(guò)k,value的方式傳遞)

# 通過(guò)變量的方式傳遞

三、函數(shù)的返回值

作用:

返回函數(shù)執(zhí)行結(jié)果,如果沒(méi)有設(shè)置,默認(rèn)返回None

終止函數(shù)運(yùn)行,函數(shù)遇到return終止函數(shù)

四、變量的作用域

全局變量和局部變量

在函數(shù)中定義的變量叫局部變量,在程序中一開(kāi)始定義的變量叫全局變量

全局變量作用域整個(gè)程序,局部變量作用域是定義該變量的函數(shù)

當(dāng)全局變量與局部變量同名是,在定義局部變量的函數(shù)內(nèi),局部變量起作用,其他地方全局變量起作用

同級(jí)的局部變量不能互相調(diào)用

想要函數(shù)里邊的變量設(shè)置成全局變量,可用global進(jìn)行設(shè)置

五、特殊函數(shù)

5.1、嵌套函數(shù)

定義: 嵌套函數(shù)顧名思義就是在函數(shù)里邊再嵌套一層函數(shù)

提示 在嵌套函數(shù)里邊調(diào)用變量是從里往外依次調(diào)用,意思就是如果需要調(diào)用的變量在當(dāng)前層沒(méi)有就會(huì)去外層去調(diào)用,依次內(nèi)推

匿名函數(shù)

基于Lambda定義的函數(shù)格式為: lambda 參數(shù):函數(shù)體

參數(shù),支持任意參數(shù)。

匿名函數(shù)適用于簡(jiǎn)單的業(yè)務(wù)處理,可以快速并簡(jiǎn)單的創(chuàng)建函數(shù)。

# 與三元運(yùn)算結(jié)合

5.3、高階函數(shù)

定義:變量可以指向函數(shù),函數(shù)的參數(shù)可以接收變量,那么一個(gè)函數(shù)就可以接收另一個(gè)函數(shù)作為參數(shù),這種函數(shù)稱之為高階函數(shù) 只需要滿足一下任意一個(gè)條件,即是高階函數(shù)

接收一個(gè)或多個(gè)函數(shù)作為輸入

return返回另一個(gè)函數(shù)

5.4、遞歸函數(shù)

定義:一個(gè)函數(shù)可以調(diào)用其他函數(shù),如果一個(gè)函數(shù)調(diào)用自己本身,這個(gè)函數(shù)就稱為遞歸函數(shù)

在默認(rèn)情況下Python最多能遞歸1000次,(這樣設(shè)計(jì)師是為了防止被內(nèi)存被撐死)可以通過(guò)sys.setrecursionlimit(1500)進(jìn)行修改

遞歸實(shí)現(xiàn)過(guò)程是先一層一層的進(jìn),然后在一層一層的出來(lái)

必須有一個(gè)明確的條件結(jié)束,要不然就是一個(gè)死循環(huán)了

每次進(jìn)入更深層次,問(wèn)題規(guī)模都應(yīng)該有所減少

遞歸執(zhí)行效率不高,遞歸層次過(guò)多會(huì)導(dǎo)致站溢出

# 計(jì)算4的階乘 4x3x2x1

# 打印數(shù)字從1-100

5.5、閉包現(xiàn)象

定義:內(nèi)層函數(shù)調(diào)用外層函數(shù)的變量,并且內(nèi)存函數(shù)被返回到外邊去了

閉包的意義:返回的函數(shù)對(duì)象,不僅僅是一個(gè)函數(shù)對(duì)象,在該函數(shù)外還包裹了一層作用域,這使得,該函數(shù)無(wú)論在何處調(diào)用,優(yōu)先使用自己外層包裹的作用域

python 常用的系統(tǒng)函數(shù)有哪些

1.常用內(nèi)置函數(shù):(不用import就可以直接使用)

help(obj) 在線幫助, obj可是任何類型

callable(obj) 查看一個(gè)obj是不是可以像函數(shù)一樣調(diào)用

repr(obj) 得到obj的表示字符串,可以利用這個(gè)字符串eval重建該對(duì)象的一個(gè)拷貝

eval_r(str) 表示合法的python表達(dá)式,返回這個(gè)表達(dá)式

dir(obj) 查看obj的name space中可見(jiàn)的name

hasattr(obj,name) 查看一個(gè)obj的name space中是否有name

getattr(obj,name) 得到一個(gè)obj的name space中的一個(gè)name

setattr(obj,name,value) 為一個(gè)obj的name space中的一個(gè)name指向vale這個(gè)object

delattr(obj,name) 從obj的name space中刪除一個(gè)name

vars(obj) 返回一個(gè)object的name space。用dictionary表示

locals() 返回一個(gè)局部name space,用dictionary表示

globals() 返回一個(gè)全局name space,用dictionary表示

type(obj) 查看一個(gè)obj的類型

isinstance(obj,cls) 查看obj是不是cls的instance

issubclass(subcls,supcls) 查看subcls是不是supcls的子類

類型轉(zhuǎn)換函數(shù)

chr(i) 把一個(gè)ASCII數(shù)值,變成字符

ord(i) 把一個(gè)字符或者unicode字符,變成ASCII數(shù)值

oct(x) 把整數(shù)x變成八進(jìn)制表示的字符串

hex(x) 把整數(shù)x變成十六進(jìn)制表示的字符串

str(obj) 得到obj的字符串描述

list(seq) 把一個(gè)sequence轉(zhuǎn)換成一個(gè)list

tuple(seq) 把一個(gè)sequence轉(zhuǎn)換成一個(gè)tuple

dict(),dict(list) 轉(zhuǎn)換成一個(gè)dictionary

int(x) 轉(zhuǎn)換成一個(gè)integer

long(x) 轉(zhuǎn)換成一個(gè)long interger

float(x) 轉(zhuǎn)換成一個(gè)浮點(diǎn)數(shù)

complex(x) 轉(zhuǎn)換成復(fù)數(shù)

max(...) 求最大值

min(...) 求最小值

用于執(zhí)行程序的內(nèi)置函數(shù)

complie 如果一段代碼經(jīng)常要使用,那么先編譯,再運(yùn)行會(huì)更快。

2.和操作系統(tǒng)相關(guān)的調(diào)用

系統(tǒng)相關(guān)的信息模塊 import sys

sys.argv是一個(gè)list,包含所有的命令行參數(shù).

sys.stdout sys.stdin sys.stderr 分別表示標(biāo)準(zhǔn)輸入輸出,錯(cuò)誤輸出的文件對(duì)象.

sys.stdin.readline() 從標(biāo)準(zhǔn)輸入讀一行 sys.stdout.write("a") 屏幕輸出a

sys.exit(exit_code) 退出程序

sys.modules 是一個(gè)dictionary,表示系統(tǒng)中所有可用的module

sys.platform 得到運(yùn)行的操作系統(tǒng)環(huán)境

sys.path 是一個(gè)list,指明所有查找module,package的路徑.

操作系統(tǒng)相關(guān)的調(diào)用和操作 import os

os.environ 一個(gè)dictionary 包含環(huán)境變量的映射關(guān)系 os.environ["HOME"] 可以得到環(huán)境變量HOME的值

os.chdir(dir) 改變當(dāng)前目錄 os.chdir('d:\\outlook') 注意windows下用到轉(zhuǎn)義

os.getcwd() 得到當(dāng)前目錄

os.getegid() 得到有效組id os.getgid() 得到組id

os.getuid() 得到用戶id os.geteuid() 得到有效用戶id

os.setegid os.setegid() os.seteuid() os.setuid()

os.getgruops() 得到用戶組名稱列表

os.getlogin() 得到用戶登錄名稱

os.getenv 得到環(huán)境變量

os.putenv 設(shè)置環(huán)境變量

os.umask 設(shè)置umask

os.system(cmd) 利用系統(tǒng)調(diào)用,運(yùn)行cmd命令

操作舉例:

os.mkdir('/tmp/xx') os.system("echo 'hello' /tmp/xx/a.txt") os.listdir('/tmp/xx')

os.rename('/tmp/xx/a.txt','/tmp/xx/b.txt') os.remove('/tmp/xx/b.txt') os.rmdir('/tmp/xx')

用python編寫一個(gè)簡(jiǎn)單的shell

#!/usr/bin/python

import os, sys

cmd = sys.stdin.readline()

while cmd:

os.system(cmd)

cmd = sys.stdin.readline()

用os.path編寫平臺(tái)無(wú)關(guān)的程序

os.path.abspath("1.txt") == os.path.join(os.getcwd(), "1.txt")

os.path.split(os.getcwd()) 用于分開(kāi)一個(gè)目錄名稱中的目錄部分和文件名稱部分。

os.path.join(os.getcwd(), os.pardir, 'a', 'a.doc') 全成路徑名稱.

os.pardir 表示當(dāng)前平臺(tái)下上一級(jí)目錄的字符 ..

os.path.getctime("/root/1.txt") 返回1.txt的ctime(創(chuàng)建時(shí)間)時(shí)間戳

os.path.exists(os.getcwd()) 判斷文件是否存在

os.path.expanduser('~/dir') 把~擴(kuò)展成用戶根目錄

os.path.expandvars('$PATH') 擴(kuò)展環(huán)境變量PATH

os.path.isfile(os.getcwd()) 判斷是否是文件名,1是0否

os.path.isdir('c:\Python26\temp') 判斷是否是目錄,1是0否

os.path.islink('/home/huaying/111.sql') 是否是符號(hào)連接 windows下不可用

os.path.ismout(os.getcwd()) 是否是文件系統(tǒng)安裝點(diǎn) windows下不可用

os.path.samefile(os.getcwd(), '/home/huaying') 看看兩個(gè)文件名是不是指的是同一個(gè)文件

os.path.walk('/home/huaying', test_fun, "a.c")

遍歷/home/huaying下所有子目錄包括本目錄,對(duì)于每個(gè)目錄都會(huì)調(diào)用函數(shù)test_fun.

例:在某個(gè)目錄中,和他所有的子目錄中查找名稱是a.c的文件或目錄。

def test_fun(filename, dirname, names): //filename即是walk中的a.c dirname是訪問(wèn)的目錄名稱

if filename in names: //names是一個(gè)list,包含dirname目錄下的所有內(nèi)容

print os.path.join(dirname, filename)

os.path.walk('/home/huaying', test_fun, "a.c")

文件操作

打開(kāi)文件

f = open("filename", "r") r只讀 w寫 rw讀寫 rb讀二進(jìn)制 wb寫二進(jìn)制 w+寫追加

讀寫文件

f.write("a") f.write(str) 寫一字符串 f.writeline() f.readlines() 與下read類同

f.read() 全讀出來(lái) f.read(size) 表示從文件中讀取size個(gè)字符

f.readline() 讀一行,到文件結(jié)尾,返回空串. f.readlines() 讀取全部,返回一個(gè)list. list每個(gè)元素表示一行,包含"\n"\

f.tell() 返回當(dāng)前文件讀取位置

f.seek(off, where) 定位文件讀寫位置. off表示偏移量,正數(shù)向文件尾移動(dòng),負(fù)數(shù)表示向開(kāi)頭移動(dòng)。

where為0表示從開(kāi)始算起,1表示從當(dāng)前位置算,2表示從結(jié)尾算.

f.flush() 刷新緩存

關(guān)閉文件

f.close()

regular expression 正則表達(dá)式 import re

簡(jiǎn)單的regexp

p = re.compile("abc") if p.match("abc") : print "match"

上例中首先生成一個(gè)pattern(模式),如果和某個(gè)字符串匹配,就返回一個(gè)match object

除某些特殊字符metacharacter元字符,大多數(shù)字符都和自身匹配。

這些特殊字符是 。^ $ * + ? { [ ] \ | ( )

字符集合(用[]表示)

列出字符,如[abc]表示匹配a或b或c,大多數(shù)metacharacter在[]中只表示和本身匹配。例:

a = ".^$*+?{\\|()" 大多數(shù)metachar在[]中都和本身匹配,但"^[]\"不同

p = re.compile("["+a+"]")

for i in a:

if p.match(i):

print "[%s] is match" %i

else:

print "[%s] is not match" %i

在[]中包含[]本身,表示"["或者"]"匹配.用

表示.

^出現(xiàn)在[]的開(kāi)頭,表示取反.[^abc]表示除了a,b,c之外的所有字符。^沒(méi)有出現(xiàn)在開(kāi)頭,即于身身匹配。

-可表示范圍.[a-zA-Z]匹配任何一個(gè)英文字母。[0-9]匹配任何數(shù)字。

\在[]中的妙用。

\d [0-9]

\D [^0-9]

\s [ \t\n\r\f\v]

\S [^ \t\n\r\f\v]

\w [a-zA-Z0-9_]

\W [^a-zA-Z0-9_]

\t 表示和tab匹配, 其他的都和字符串的表示法一致

\x20 表示和十六進(jìn)制ascii 0x20匹配

有了\,可以在[]中表示任何字符。注:?jiǎn)为?dú)的一個(gè)"."如果沒(méi)有出現(xiàn)[]中,表示出了換行\(zhòng)n以外的匹配任何字符,類似[^\n].

regexp的重復(fù)

{m,n}表示出現(xiàn)m個(gè)以上(含m個(gè)),n個(gè)以下(含n個(gè)). 如ab{1,3}c和abc,abbc,abbbc匹配,不會(huì)與ac,abbbc匹配。

m是下界,n是上界。m省略表下界是0,n省略,表上界無(wú)限大。

*表示{,} +表示{1,} ?表示{0,1}

最大匹配和最小匹配 python都是最大匹配,如果要最小匹配,在*,+,?,{m,n}后面加一個(gè)?.

match object的end可以得到匹配的最后一個(gè)字符的位置。

re.compile("a*").match('aaaa').end() 4 最大匹配

re.compile("a*?").match('aaaa').end() 0 最小匹配

使用原始字符串

字符串表示方法中用\\表示字符\.大量使用影響可讀性。

解決方法:在字符串前面加一個(gè)r表示raw格式。

a = r"\a" print a 結(jié)果是\a

a = r"\"a" print a 結(jié)果是\"a

使用re模塊

先用re.compile得到一個(gè)RegexObject 表示一個(gè)regexp

后用pattern的match,search的方法,得到MatchObject

再用match object得到匹配的位置,匹配的字符串等信息

RegxObject常用函數(shù):

re.compile("a").match("abab") 如果abab的開(kāi)頭和re.compile("a")匹配,得到MatchObject

_sre.SRE_Match object at 0x81d43c8

print re.compile("a").match("bbab")

None 注:從str的開(kāi)頭開(kāi)始匹配

re.compile("a").search("abab") 在abab中搜索第一個(gè)和re_obj匹配的部分

_sre.SRE_Match object at 0x81d43c8

print re.compile("a").search("bbab")

_sre.SRE_Match object at 0x8184e18 和match()不同,不必從開(kāi)頭匹配

re_obj.findall(str) 返回str中搜索所有和re_obj匹配的部分.

返回一個(gè)tuple,其中元素是匹配的字符串.

MatchObject的常用函數(shù)

m.start() 返回起始位置,m.end()返回結(jié)束位置(不包含該位置的字符).

m.span() 返回一個(gè)tuple表示(m.start(), m.end())

m.pos(), m.endpos(), m.re(), m.string()

m.re().search(m.string(), m.pos(), m.endpos()) 會(huì)得到m本身

m.finditer()可以返回一個(gè)iterator,用來(lái)遍歷所有找到的MatchObject.

for m in re.compile("[ab]").finditer("tatbxaxb"):

print m.span()

高級(jí)regexp

| 表示聯(lián)合多個(gè)regexp. A B兩個(gè)regexp,A|B表示和A匹配或者跟B匹配.

^ 表示只匹配一行的開(kāi)始行首,^只有在開(kāi)頭才有此特殊意義。

$ 表示只匹配一行的結(jié)尾

\A 表示只匹配第一行字符串的開(kāi)頭 ^匹配每一行的行首

\Z 表示只匹配行一行字符串的結(jié)尾 $匹配第一行的行尾

\b 只匹配詞的邊界 例:\binfo\b 只會(huì)匹配"info" 不會(huì)匹配information

\B 表示匹配非單詞邊界

示例如下:

print re.compile(r"\binfo\b").match("info ") #使用raw格式 \b表示單詞邊界

_sre.SRE_Match object at 0x817aa98

print re.compile("\binfo\b").match("info ") #沒(méi)有使用raw \b表示退格符號(hào)

None

print re.compile("\binfo\b").match("\binfo\b ")

_sre.SRE_Match object at 0x8174948

分組(Group) 示例:re.compile("(a(b)c)d").match("abcd").groups() ('abc', 'b')

#!/usr/local/bin/python

import re

x = """

name: Charles

Address: BUPT

name: Ann

Address: BUPT

"""

#p = re.compile(r"^name:(.*)\n^Address:(.*)\n", re.M)

p = re.compile(r"^name:(?P.*)\n^Address:(?P.*)\n", re.M)

for m in p.finditer(x):

print m.span()

print "here is your friends list"

print "%s, %s"%m.groups()

Compile Flag

用re.compile得到RegxObject時(shí),可以有一些flag用來(lái)調(diào)整RegxObject的詳細(xì)特征.

DOTALL, S 讓.匹配任意字符,包括換行符\n

IGNORECASE, I 忽略大小寫

LOCALES, L 讓\w \W \b \B和當(dāng)前的locale一致

MULTILINE, M 多行模式,只影響^和$(參見(jiàn)上例)

VERBOSE, X verbose模式


當(dāng)前文章:python高級(jí)函數(shù)大全,python中的高階函數(shù)
網(wǎng)站路徑:http://weahome.cn/article/hccgoe.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部