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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

简明python教程 --C++程序员的视角(二):函数及作用域

發(fā)布時間:2025/3/21 python 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 简明python教程 --C++程序员的视角(二):函数及作用域 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

函數(shù)通過def關(guān)鍵字定義。def關(guān)鍵字后跟一個函數(shù)的標(biāo)識符名稱,然后跟一對圓括號。圓括號之中可以包括一些變量名,該行以冒號結(jié)尾。接下來是一塊語句,它們是函數(shù)體。

函數(shù)的基本概念


1 位置:從左往右進行匹配(默認(rèn)方式)?
2 關(guān)鍵字參數(shù):通過參數(shù)名進行匹配
?? func(name = value)
3 默認(rèn)參數(shù):為沒有傳入值的參數(shù)定義參數(shù)值
?? def func(name = value)
4 打包參數(shù):(函數(shù))收集任意多參數(shù)位置參數(shù)def func(*name)或關(guān)鍵字參數(shù)def func(**name)?
5 解包參數(shù):(調(diào)用者)傳遞任意多(位置/關(guān)鍵字)參數(shù)位置參數(shù)func(*name)或關(guān)鍵字參數(shù)func(**name)?
在不能預(yù)測將要傳入?yún)?shù)的數(shù)目時,是很方便的,如min()

def是可執(zhí)行語句 在if語句、while循環(huán)中甚至是其他的def中嵌套是合法的?
if test:?
???? def func():???? ...?
else:?
???? def func():???? ...?
func()
def創(chuàng)建了一個函數(shù)對象,并將其賦值給一個變量名 函數(shù)對象可以賦值給其他的變量名,保存在列表中?
othername = func?
othername()
參數(shù)傳遞:通過將對象賦值給本地變量來實現(xiàn) 不可變參數(shù)是通過“值”進行傳遞?
可變參數(shù)是通過“指針”進行傳遞
模擬輸出參數(shù)(“通過引用進行調(diào)用”的參數(shù)傳遞) def multiple(x,y):...;return x,y;?
X,L = multiple(X,L)
避免可變參數(shù)的修改 如果不想要函數(shù)內(nèi)部在原處的修改影響傳遞給它的可變對象: 傳遞拷貝L = [1,2];changer(X,L[:]) 或者def changer(a,b): b = b[:];... 或者L = [1,2];changer(X,tuple(L))
參數(shù)匹配方式
函數(shù)可以通過lambda表達式創(chuàng)建 ?
yield語句 ?

?

作用域的基本概念


global并不是類型的聲明,而是命名空間的聲明?
全局變量在函數(shù)內(nèi)被賦值,必須經(jīng)過聲明?
global X;X += 1
或者import thismod;thismod.X += 1全局變量名在函數(shù)的內(nèi)部引用,可以不經(jīng)過聲明一個模塊文件一旦被導(dǎo)入了,其全局變量也就變成了這個模塊對象的一個屬性:導(dǎo)入者自動得到了全局變量的訪問權(quán)。但是別直接修改另一個文件中的變量。?
文件間進行通信的最好辦法是通過調(diào)用函數(shù),傳遞參數(shù),然后得到返回值。可以使用accessor函數(shù)管理這種變化。
# first.py
X = 99def setX(new)
??? global X
??? X = new
# second.py

函數(shù)內(nèi)部被賦值的變量名,默認(rèn)為本地變量 賦值操作:=語句,import語句,def語句,參數(shù)傳遞?
L.append(X)并不會將L劃分為本地變量,而L = X卻可以
global聲明了一個模塊級的變量并被賦值
委任一個單個模塊文件去定義所有的全局變量 全局變量的值取決于函數(shù)調(diào)用的順序,而函數(shù)自身是任意順序進行排列的,會引發(fā)問題,
最小化文件間變量的修改

?

函數(shù)定義


寫在文件中沒有問題:

?

不過在交互式中新手會。。。

?

函數(shù)形參


參數(shù)在函數(shù)定義的圓括號對內(nèi)指定,用逗號分割。

(雖然一直很想要這樣的字符串處理方式!但是作為一個C++程序員,不太習(xí)慣不打括號改打冒號,并且真心每次都很想打分號= =)

?

局部變量


在函數(shù)內(nèi)改變局部變量x的值的時候,在主塊中定義的x不受影響。結(jié)果:

?

使用global語句


如果你想要為一個定義在函數(shù)外的變量賦值,那么你就得告訴Python這個變量名不是局部的,而是?全局?的。我們使用global語句完成這一功能。沒有g(shù)lobal語句,是不可能為定義在函數(shù)外的變量賦值的。

使用global語句可以清楚地表明變量是在外面的塊定義的。結(jié)果:

可以使用同一個global語句指定多個全局變量。例如global x, y, z。

?

默認(rèn)參數(shù)值


可以在函數(shù)定義的形參名后加上賦值運算符(=)和默認(rèn)值,從而給形參指定默認(rèn)參數(shù)值。默認(rèn)參數(shù)值應(yīng)該是不可變的。

如果我們不提供一個值,那么默認(rèn)地,字符串將只被打印一遍。

?

?

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


如果你的某個函數(shù)有許多參數(shù),而你只想指定其中的一部分,那么你可以通過命名來為這些參數(shù)賦值——這被稱作?關(guān)鍵參數(shù)?——我們使用名字(關(guān)鍵字)而不是位置(我們前面所一直使用的方法)來給函數(shù)指定實參。

這樣做有兩個優(yōu)勢:

  • 由于我們不必擔(dān)心參數(shù)的順序,使用函數(shù)變得更加簡單了。
  • 假設(shè)其他參數(shù)都有默認(rèn)值,我們可以只給我們想要的那些參數(shù)賦值。
  • ?

    return語句


    注意,沒有返回值的return語句等價于return?NoneNone是Python中表示沒有任何東西的特殊類型。例如,如果一個變量的值為None,可以表示它沒有值。除非你提供你自己的return語句,每個函數(shù)都在結(jié)尾暗含有return None語句。

    通過運行print someFunc(),你可以明白這一點,函數(shù)someFunc沒有使用return語句,pass語句在Python中表示一個空的語句塊。

    ?

    DocStrings


    Python有一個很奇妙的特性,稱為?文檔字符串?,它通常被簡稱為?docstrings。DocStrings是一個重要的工具,由于它幫助你的程序文檔更加簡單易懂,你應(yīng)該盡量使用它。你甚至可以在程序運行的時候,從函數(shù)恢復(fù)文檔字符串!

    在函數(shù)的第一個邏輯行的字符串是這個函數(shù)的?文檔字符串?。注意,DocStrings也適用于模塊,我們會在后面相應(yīng)的章節(jié)學(xué)習(xí)它們。

    文檔字符串的慣例是一個多行字符串,它的首行以大寫字母開始,句號結(jié)尾。第二行是空行,從第三行開始是詳細的描述。?強烈建議你在你的函數(shù)中使用文檔字符串時遵循這個慣例。

    你可以使用__doc__(注意雙下劃線)調(diào)用printMax函數(shù)的文檔字符串屬性(屬于函數(shù)的名稱)。

    請記住Python把?每一樣?xùn)|西?都作為對象,包括這個函數(shù)。

    我們會在后面的類一章學(xué)習(xí)更多關(guān)于對象的知識。

    如果你已經(jīng)在Python中使用過help(),那么你已經(jīng)看到過DocStings的使用了!它所做的只是抓取函數(shù)的__doc__屬性,然后整潔地展示給你。

    你可以對上面這個函數(shù)嘗試一下——加上語句help(printMax):

    自動化工具也可以以同樣的方式從你的程序中提取文檔。因此,我?強烈建議?你對你所寫的任何正式函數(shù)編寫文檔字符串。隨你的Python發(fā)行版附帶的pydoc命令,與help()類似地使用DocStrings。

    from:?http://www.cnblogs.com/wei-li/archive/2012/03/24/2415728.html

    總結(jié)

    以上是生活随笔為你收集整理的简明python教程 --C++程序员的视角(二):函数及作用域的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。