小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

《Python入門07》帶你了解python函數(shù)那點(diǎn)事兒

 首家i55ryzehof 2018-08-30

重磅知識(shí),第一時(shí)間送達(dá)

前言

在開始之前首先給大家道個(gè)歉,由于前段時(shí)間身邊發(fā)生了很多事,好久沒有更新了,對(duì)給大家?guī)淼牟环奖?,我想給大家說一聲對(duì)不起。以后小小白一定

定時(shí)更新,望大家監(jiān)督。

本文摘要

本文將繼續(xù)在《Python入門06》的基礎(chǔ)上給大家說一說python函數(shù)那點(diǎn)事~,主要包括:函數(shù)的定義、函數(shù)參數(shù)詳解、作用域等三個(gè)部分。

一、函數(shù)的定義

1、python為什么要定義函數(shù)

每個(gè)人都時(shí)很懶的,作為一個(gè)優(yōu)秀的程序猿,同樣再寫程序的時(shí)候也是,比如在某些場(chǎng)景下,需要多次計(jì)算一個(gè)等差數(shù)列,傳統(tǒng)的方法是,每到需要的地方就寫一個(gè)等差數(shù)列,如下所示,當(dāng)程序中出現(xiàn)的次數(shù)比較多的時(shí)候,程序中將出現(xiàn)很多的重復(fù)的代碼,即增加了我們的工作量,也降低了代碼的可讀性。

d=2

for i in range(10):

print(i+2)

那么為了能夠解決上面這個(gè)問題,就出現(xiàn)了自定義函數(shù)這一概念。有了函數(shù),你就可以根據(jù)名字直接調(diào)用它,給定輸入得到想要的輸出,免得自己重復(fù)去寫冗長(zhǎng)的代碼,而且這樣還可以增強(qiáng)代碼的可讀性。

2、怎么定義一個(gè)函數(shù)?

函數(shù)的定義主要是采用def關(guān)鍵字,例如要定義一個(gè)輸出hello word的函數(shù):

def helloword():

print(“helloword”)

當(dāng)你在程序中,直接寫helloword()的時(shí)候,當(dāng)程序執(zhí)行到這里的時(shí)候,你就會(huì)看到屏幕上會(huì)打印出來一行“hello word”。

二、函數(shù)參數(shù)詳解

1、什么是函數(shù)的參數(shù)?

在def語句中,位于函數(shù)名后面的變量通常稱為形參,而調(diào)用函數(shù)時(shí)提供的值稱為實(shí)參,但這里基本上不對(duì)此做嚴(yán)格的區(qū)分,大家懂的形參和實(shí)參的概念就可以了。

2、上面的函數(shù)也沒有輸入輸出啊,當(dāng)給入輸入需要輸出的時(shí)候怎么辦呢?

在定義函數(shù)的時(shí)候可以直接定義好輸出,然后再程序中采用return關(guān)鍵字給出輸出。例如,定義一個(gè)函數(shù),輸入為一個(gè)數(shù)字,輸出為這個(gè)數(shù)字的二位的數(shù)。

def doublex(n):

return2*n

根據(jù)上面函數(shù)的定義,在調(diào)用函數(shù)的時(shí)候,需要有一個(gè)參數(shù)來接收函數(shù)doublex計(jì)算得到的值:例如在實(shí)際程序中可以這么寫:

x=doublex(3)

print(x)

此時(shí)打印出來的數(shù)字就是:6

3、是不是所有的python函數(shù)都有返回值:

答案是確定的,當(dāng)你沒有告訴他們?cè)摲祷厥裁吹臅r(shí)候,那么它們將會(huì)返回None值。

重點(diǎn)提示:為了不讓這么默認(rèn)的行為帶來麻煩,如果你在if之類的語句有返回值,請(qǐng)務(wù)必保證其分支也有返回值,以免再調(diào)用者期望函數(shù)返回一個(gè)序列時(shí),不小心返回的時(shí)None。

4、什么是關(guān)鍵字參數(shù)?

我們前面使用的都是位置參數(shù),一個(gè)參數(shù)在什么位置,都有這個(gè)參數(shù)的意思,但是python還有另外一種參數(shù),那就是關(guān)鍵字參數(shù):即使用參數(shù)的名稱指定參數(shù)的數(shù)值,它主要的作用是有助于澄清各個(gè)參數(shù)的作用,這樣函數(shù)的調(diào)用不再像下面這樣怪異而神秘:

movetoxx(‘My file’,2,3)

可以像下面這樣做:

Movetoxx(file=’My file’,times=2,id=3)

上面這樣做雖然輸入量多了一些,但是每個(gè)參數(shù)的作用清晰明了,而且參數(shù)的順序錯(cuò)了也沒有關(guān)系。

5、什么是收集參數(shù)?

有時(shí)候,允許用戶提供任意數(shù)量的參數(shù)很有用。例如,每次只能存儲(chǔ)一個(gè)姓名。如果能夠像下面這樣同時(shí)存儲(chǔ)多個(gè)姓名就好了:

store(data, name1, name2,name3)

為此,應(yīng)允許用戶提供任意數(shù)量的姓名??梢赃@樣的函數(shù)定義:

def print_params(*params):

print(params)

這里好像只指定了一個(gè)參數(shù),但它前面有一個(gè)星號(hào)。這是什么意思呢?嘗試使用一個(gè)參數(shù)來調(diào)用這個(gè)函數(shù),看看結(jié)果如何。

print_params(1, 2, 3)

(1, 2, 3)

參數(shù)前面的星號(hào)將提供的所有值都放在一個(gè)元組中,也就是將這些值收集起來。

與賦值時(shí)一樣,帶星號(hào)的參數(shù)也可放在其他位置(而不是后),但不同的是,在這種情況 下你需要做些額外的工作:使用名稱來指定后續(xù)參數(shù)。

def in_the_middle(x, *y, z):

print(x, y, z)

in_the_middle(1, 2, 3, 4, 5, z=7)

1 (2, 3, 4, 5) 7

>>> in_the_middle(1, 2, 3, 4, 5, 7)

Traceback (most recent call last): File '', line 1, in TypeError: in_the_middle() missing 1 required keyword-only argument: 'z'

要收集關(guān)鍵字參數(shù),可使用兩個(gè)星號(hào)。

def print_params_3(**params):

print(params)

print_params_3(x=1, y=2, z=3)

{'z': 3, 'x': 1, 'y': 2}

如你所見,這樣得到的是一個(gè)字典而不是元組。

6、什么是分配參數(shù)?

前面介紹了如何將參數(shù)收集到元組和字典中,但用同樣的兩個(gè)運(yùn)算符(*和**)也可執(zhí)行相 反的操作。與收集參數(shù)相反的操作是什么呢?假設(shè)有如下函數(shù): def add(x, y):

return x + y

同時(shí)假設(shè)還有一個(gè)元組,其中包含兩個(gè)你要相加的數(shù)。 params = (1, 2) 這與前面執(zhí)行的操作差不多是相反的:不是收集參數(shù),而是分配參數(shù)。這是通過在調(diào)用函數(shù) (而不是定義函數(shù))時(shí)使用運(yùn)算符*實(shí)現(xiàn)的。

add(*params)

3

這種做法也可用于參數(shù)列表的一部分,條件是這部分位于參數(shù)列表末尾。通過使用運(yùn)算符**, 可將字典中的值分配給關(guān)鍵字參數(shù)。如果你像前面那樣定義了函數(shù)hello_3,就可像下面這樣做:

params = {'name': 'Sir Robin', 'greeting': 'Well met'}

hello_3(**params)

Well met, Sir Robin!

三、函數(shù)作用域

python變量的作用域大概分為以下四類:

L(local) 局部作用域

E(Enclosing) 閉包函數(shù)外的函數(shù)中

G(Global) 全局作用域

B(Built-in) 內(nèi)建作用域

遵循LEGB原則:以 L –> E –> G –>B 的規(guī)則查找,即:在局部找不到,便會(huì)去局部外的局部找(例如閉包),再找不到就會(huì)去全局找,再者去內(nèi)建中找。

在python中,模塊(module),類(class)、函數(shù)(def、lambda)會(huì)產(chǎn)生新的作用域,其他代碼塊是不會(huì)產(chǎn)生作用域的,也就是說,類似條件判斷(if…..else)、循環(huán)語句(for x in data)、異常捕捉(try…catch)等的變量是可以全局使用的

dataList = [1, 2, 3, 4]

for data in dataList:

a = 1 #for循環(huán)中的變量a

b = data + a

print(a) #在函數(shù)外也可視為全局變量使用

全局變量是指在函數(shù)外的變量,可以在程序全局使用,局部變量是指定義在函數(shù)內(nèi)的變量,只能在函數(shù)內(nèi)被聲明使用

若內(nèi)部作用域的想要修改外部作用域的變量,就要使用global關(guān)鍵字:參考一下代碼

1、未使用global關(guān)鍵字

a =1

defdemo():a =123print(a) demo() print(a)

運(yùn)行結(jié)果是1231

全局變量a的值還是1,沒有被改變

2、使用global關(guān)鍵字

a =1

defdemo():globala a =123print(a)

demo() print(a)運(yùn)行結(jié)果是123123

全局變量a的值被修改

3、nonlocal 關(guān)鍵字的使用方法和global關(guān)鍵字類似,修改嵌套作用域(enclosing 作用域,外層非全局作用域)中的變量。

defouter():num =10definner():nonlocalnum# nonlocal關(guān)鍵字聲明num =100print(num) inner() print(num) outer()運(yùn)行結(jié)果為

100

100

閉包函數(shù)外的變量num值被修改

參考文獻(xiàn):

[1]Beginning Python From Novice to Professional (Third Edition),

Magnus Lie Hetland.

希望上述內(nèi)容能夠幫助到正在學(xué)習(xí)的你~

重磅知識(shí),第一時(shí)間送達(dá)

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多