python 函式功能

2021-09-23 01:47:13 字數 4735 閱讀 4077

目錄

1.def方式——定義函式

1.1 定義乙個函式

1.1.1 語法 

1.2 函式呼叫

1.3 引數傳遞

2.匿名函式——使用 lambda 來建立

3. return語句

4.變數作用域

4.1全域性變數和區域性變數

任何傳入引數和自變數必須放在圓括號中間,圓括號之間可以用於定義引數。

函式的第一行語句可以選擇性地使用文件字串—用於存放函式說明。

函式內容以冒號起始,並且縮排。

return [表示式]結束函式,選擇性地返回乙個值給呼叫方。不帶表示式的return相當於返回 none。

def 函式名(引數列表):

函式體

可以通過另乙個函式呼叫執行,也可以直接從 python 命令提示符執行

以下是呼叫函式時可使用的正式引數型別:

1.3.1 必需引數——須以正確的順序傳入函式。呼叫時的數量必須和宣告時的一樣

呼叫printme()函式,你必須傳入乙個引數,不然會出現語法錯誤:

#!/usr/bin/python3

#可寫函式說明

def printme( str ):

"列印任何傳入的字串"

print (str)

return

#呼叫printme函式

printme()

以上例項輸出結果:

traceback (most recent call last):

file "test.py", line 10, in printme()

typeerror: printme() missing 1 required positional argument: 'str'

1.3.2 關鍵字引數——關鍵字引數和函式呼叫關係緊密,函式呼叫使用關鍵字引數來確定傳入的引數值

使用關鍵字引數允許函式呼叫時引數的順序與宣告時不一致,因為 python 直譯器能夠用引數名匹配引數值。

以下例項在函式 printme() 呼叫時使用引數名:

#可寫函式說明

def printinfo( name, age ):

"列印任何傳入的字串"

print ("名字: ", name)

print ("年齡: ", age)

return

#呼叫printinfo函式

printinfo( age=50, name="runoob" )

以上例項輸出結果:

名字: runoob

年齡: 50

1.3.3 預設引數——呼叫函式時,如果沒有傳遞引數,則會使用預設引數

以下例項中如果沒有傳入 age 引數,則使用預設值:

#可寫函式說明

def printinfo( name, age = 35 ):

"列印任何傳入的字串"

print ("名字: ", name)

print ("年齡: ", age)

return

#呼叫printinfo函式

printinfo( age=50, name="runoob" )

print ("------------------------")

printinfo( name="runoob" )

以上例項輸出結果:

名字: runoob

年齡: 50

------------------------

名字: runoob

年齡: 35

1.3.4 不定長引數——乙個函式能處理比當初宣告時更多的引數。這些引數叫做不定長引數,宣告時不會命名

1.3.4.1 加了星號 * 的引數會以元組(tuple)的形式匯入,存放所有未命名的變數引數。

基本語法如下:

def functionname([formal_args,] *var_args_tuple ):

"函式_文件字串"

function_suite

return [expression]

# 可寫函式說明

def printinfo( arg1, *vartuple ):

"列印任何傳入的引數"

print ("輸出: ")

print (arg1)

print (vartuple)

# 呼叫printinfo 函式

printinfo( 70, 60, 50 )

以上例項輸出結果:

輸出:

70(60, 50)

注意:如果在函式呼叫時沒有指定引數,它就是乙個空元組。我們也可以不向函式傳遞未命名的變數

宣告函式時,引數中星號 * 可以單獨出現,出現星號 * 後的引數必須用關鍵字傳入

>>> def f(a,b,*,c):

... return a+b+c

...

>>> f(1,2,3) # 報錯

traceback (most recent call last):

file "", line 1, in typeerror: f() takes 2 positional arguments but 3 were given

>>> f(1,2,c=3) # 正常

6>>>

1.3.4.2  加了兩個星號 ** 的引數會以字典的形式匯入

# 可寫函式說明

def printinfo( arg1, **vardict ):

"列印任何傳入的引數"

print ("輸出: ")

print (arg1)

print (vardict)

# 呼叫printinfo 函式

printinfo(1, a=2,b=3)

以上例項輸出結果:

輸出:

1

2.1 語法——lambda 函式的語法只包含乙個語句

lambda [arg1 [,arg2,.....argn]]:expression
# 可寫函式說明

sum = lambda arg1, arg2: arg1 + arg2

# 呼叫sum函式

print ("相加後的值為 : ", sum( 10, 20 ))

print ("相加後的值為 : ", sum( 20, 20

以上例項輸出結果:

相加後的值為 : 30

相加後的值為 : 40

return [表示式]語句用於退出函式,選擇性地向呼叫方返回乙個表示式。不帶引數值的return語句返回none。

——程式的變數並不是在哪個位置都可以訪問的,訪問許可權決定於這個變數是在**賦值的

python 中只有模組(module),類(class)以及函式(def、lambda)才會引入新的作用域,其它的**塊(如 if/elif/else/、try/except、for/while等)是不會引入新的作用域的,也就是說這些語句內定義的變數,外部也可以訪問

python的作用域一共有4種:

以 l –> e –> g –>b 的規則查詢,即:在區域性找不到,便會去區域性外的區域性找(例如閉包),再找不到就會去全域性找,再者去內建中找。

g_count = 0  # 全域性作用域

def outer():

o_count = 1 # 閉包函式外的函式中

def inner():

i_count = 2 # 區域性作用域

內建作用域是通過乙個名為 builtin 的標準模組來實現的,但是這個變數名自身並沒有放入內建作用域內,所以必須匯入這個檔案才能夠使用它。在python3.0中,可以使用以下的**來檢視到底預定義了哪些變數: 

import builtins

dir(builtins)

定義在函式內部的變數擁有乙個區域性作用域,定義在函式外的擁有全域性作用域。

區域性變數只能在其被宣告的函式內部訪問,而全域性變數可以在整個程式範圍內訪問。呼叫函式時,所有在函式內宣告的變數名稱都將被加入到作用域中

global 關鍵字 ——用於內部作用域修改外部作用域的變數

num = 1

def fun1():

global num # 需要使用 global 關鍵字宣告

print(num)

num = 123

print(num)

fun1()

print(num)

以上例項輸出結果:

1123

123

nonlocal 關鍵字——修改巢狀作用域(enclosing 作用域,外層非全域性作用域)中的變數

def outer():

num = 10

def inner():

nonlocal num # nonlocal關鍵字宣告

num = 100

print(num)

inner()

print(num)

outer()

以上例項輸出結果:

100100

Python常用功能函式

1.字串反轉 字串反轉 string 字串變數 staticmethod def str reverse string result string 1 return result 2.刪除首尾指定的字元 刪除首尾指定的字元 string 字串變數 rm 要刪除的字元,預設為空格 staticmeth...

Python內建函式功能彙總

1.abs 返回數字的絕對值 2.dict 建立乙個字典 3.help 返回物件幫助資訊 4.min 返回給定引數最小值 5.setattr 用於設定屬性值,該屬性不一定存在 6.all 用於判斷給定的引數中的所有元素是否都為true,如果是返回true,否則false 7.dir 返回模組的屬性列...

《python內建函式功能彙總》

python所有的內建函式 built in functions abs divmod input open staticmethod all enumerate int ord str any eval isinstance pow sum basestring execfile issubcla...