日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

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

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

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

函數的基本概念


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

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

?

作用域的基本概念


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

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

?

函數定義


寫在文件中沒有問題:

?

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

?

函數形參


參數在函數定義的圓括號對內指定,用逗號分割。

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

?

局部變量


在函數內改變局部變量x的值的時候,在主塊中定義的x不受影響。結果:

?

使用global語句


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

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

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

?

默認參數值


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

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

?

?

關鍵參數


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

這樣做有兩個優勢:

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

    return語句


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

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

    ?

    DocStrings


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

    在函數的第一個邏輯行的字符串是這個函數的?文檔字符串?。注意,DocStrings也適用于模塊,我們會在后面相應的章節學習它們。

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

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

    請記住Python把?每一樣東西?都作為對象,包括這個函數。

    我們會在后面的類一章學習更多關于對象的知識。

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

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

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

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

    總結

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

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