python中函數部分內容的解析

不言
發布: 2018-09-28 14:10:14
轉載
2190 人瀏覽過

這篇文章帶給大家的內容是關於python中函數部分內容的解析,有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。

在python中,變數沒有類型,一個物件的引用,類型屬於物件
變數的本質上是一個佔位符!通常用小寫字母命名變數。

一:語法

def 函數名稱(參數清單):
 函數體
(函數名稱命名一般以小寫字母單底線數字等組合)

#二:常用函數的型別

(1)帶參數的函數:參數須以正確的順序傳入函數

(2)預設參數函數:未傳遞參數,則會使用預設參數,預設參數不在最後,會報錯!

(3)關鍵字參數:函數呼叫使用關鍵字參數來決定傳入的參數值

(4)不定長參數:函數能處理比當初宣告時更多的參數,

①*args中所有的變數都會被包裝成一個元組存放所有未命名的變數
②**args中所有變數都會被包裝成一個字典

( 5)宣告函數時,參數中星號* 可以單獨出現,*之後的參數必須用關鍵字傳入

(6)匿名函數,使用lambda函數建立匿名函數

①lambda 只是一個表達式,函數體比def 簡單很多
②lambda的主體是一個表達式,而不是一個代碼塊
③函數擁有自己的命名空間,並且不能訪問自己參數列表之外或全域命名空間裡的參數。

三:python 函數的參數傳遞:

不可變型別:

類似 c 的值傳遞,如 int、string、tuple。
如fun(a),傳遞的只是a的值,沒有影響a物件本身。
例如在fun(a)內部修改a 的值,只是修改另一個複製的對象,不會影響a 本身.

可變類型:

類似c 的引用傳遞,如列表,字典。如fun(la),則是將la 真正的傳過去,修改後fun外部的la也會受影響

python中一切都是對象,嚴格意義我們不能說值傳遞還是引用傳遞,我們應該說傳不可變物件和傳輸可變物件

四:變數作用域

python 中的作用域一般有四種:

L (Local) 局部作用域
E (Enclosing) 閉包函數外的函數中
G (Global) 全域作用域
B (Built-in) 內建作用域

找出規則是L-> ;E->G->B

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

五:全域變數與局部變數

定義在函數內部的變數擁有一個局部作用域,定義在函數外的擁有全域作用域。

當內部作用域想要修改外部作用域的變數時,就要用到global和nonlocal關鍵字了。

(1)global用來修改全域變數的值

(2)nonlocal要修改嵌套作用域(enclosing 作用域,外層非全域作用域)中的變數則需要nonlocal 關鍵字了

六:函數呼叫中的技巧(重要)

函數名稱.__doc__取得函數的幫助文件

函數名稱可以作為另一個函數的形參

多個傳回值以元組的方式傳回

內部函數,不修改全域變數可以存取全域變數! !

內部函數,修改同名全域變量,則python會認為它是局部變數! !

七:關於命名

(1)檔名:全小寫,可以使用底線

(2)函數名稱:小寫,小駝峰原則

(3)變數名稱:全部小寫,底線連接

詳細的命名規則參考PEP8

八:幾個特殊的函數
    map
    reduce
    filter

# --------------------------------------------------------------------------#
# 函数的语法及调用
# --------------------------------------------------------------------------#


def func(func_name, number):        # 函数的定义
    """打印输入的任何字符串"""
    print(func_name, number)
    return 'Done'


func('func_1', 'faith')             # 函数的调用

# --------------------------------------------------------------------------#
# 不定长参数函数,封装成元组
# --------------------------------------------------------------------------#


def func_1(func_name, *number):
    """
    打印输入的任何字符串
    """
    print(type(number))
    print(func_name, number)
    return 'Done'


func_1('func_1', 1, 2, 2, 3)


def func_2(func_name, number):   #
    print(type(number))
    print(func_name, number)
    return 'Done'


func_2('func_2', (1, 2, 2, 3))


def func_3(func_name, *number):
    print(func_name)
    print(number[3])            # 根据元组index中一部分变量
    print(number[4])
    return 'Done'


func_3('func_3', 1, 2, 2, 3, 'aaa', 'abc')


# get out question: the number of index isn't known in most case!
# --------------------------------------------------------------------------#
# 不定长参数函数,封装成字典
# --------------------------------------------------------------------------#


def func_4(func_name, **number):  # 可变参数必须在函数参数的最后
    # print(type(number))
    print(func_name, number)
    return 'Done'


func_4('func_4', name='faith')

# --------------------------------------------------------------------------#
# 命名关键字函数
# --------------------------------------------------------------------------#


def func_5(a, x, c, *, china, uk):
    print('func_5:', china, uk)
    print(a, x, c)


func_5(1, 2, 3, china='bJ', uk='rs')    # 调用时必须加上关键字
# func_5(1, 2, 3, 'bJ', 'rs')

# --------------------------------------------------------------------------#
# 函数应用之-递归
# --------------------------------------------------------------------------#


def my_sum(i):
    if i < 0:
        raise ValueError    # 抛出错误
    elif i <= 1:
        return i
    else:
        return i + my_sum(i - 1)


print(my_sum(1.4))

# --------------------------------------------------------------------------#
# 传递不可变对象实例
# --------------------------------------------------------------------------#


def change_int(a):
    a = 10


b = 2
change_int(b)
print(b)         # 结果是2
# --------------------------------------------------------------------------#
# 传递可变对象实例
# --------------------------------------------------------------------------#


def change_me(mylist):
    mylist.append([1, 2, 3, 4])
    print("函数内取值: ", mylist)
    return


myList = [10, 20, 30]
change_me(myList)
print("函数外取值: ", myList)

# --------------------------------------------------------------------------#
# 函数内修改全局变量的值
# --------------------------------------------------------------------------#

money = 200  # 模块里面的全局变量


def add_money():
    global money
    money = money + 1
    return money


print("修改后的值money = ", add_money())


# --------------------------------------------------------------------------#
# 匿名函数
# --------------------------------------------------------------------------#
sum_1 = lambda arg1, arg2: arg1 + arg2

# 调用sum函数
print("相加后的值为 : ", sum_1(10, 20))
print("相加后的值为 : ", sum_1(20, 20))

# 单独编译一个文件时候输出结果
if __name__ == "__main__":
    pass
登入後複製

以上是python中函數部分內容的解析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:cnblogs.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板