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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

python的函数式编程_Python函数式编程-概念理解,python

發(fā)布時(shí)間:2025/3/19 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python的函数式编程_Python函数式编程-概念理解,python 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

函數(shù)式編程-高級(jí)

一、函數(shù)的參數(shù)類型

1. 不可變類型參數(shù)

不可變類型參數(shù)有:整數(shù),字典,字符串

傳遞不可變類型參數(shù),不會(huì)影響參數(shù)本身。

代碼:

a = 100

print(f"函數(shù)外邊a的id值----->{id(a)}")

print(f"a的值為{a}")

def func(b):

# a和b的id值相同

print(f"函數(shù)參數(shù)傳遞過來的id值----->{id(b)}")

print(f"b的值為:")

# 修改b的值

b = 200

print(f"修改后b的id----->{id(b)}")

print(f"修改后b的值為:")

func(a)

print(f"b值修改后,a的id值----->{id(a)}")

print(f"b值修改后,a的值:{a}")

結(jié)果:

函數(shù)外邊a的id值----->140729229159920

a的值為100

函數(shù)參數(shù)傳遞過來的id值----->140729229159920

b的值為:100

修改后b的id----->140729229163120

修改后b的值為:200

b值修改后,a的id值----->140729229159920

b值修改后,a的值:100

2. 可變類型參數(shù)

可變類型參數(shù)有:列表、字典

傳遞可變類型參數(shù),如果直接重新賦值,那么也不會(huì)影響參數(shù)本身,如果直接在原對(duì)象基礎(chǔ)上進(jìn)行

修改會(huì)影響。

代碼:

list_outer = [1, 2, 3]

print("list_outer的值和id值:", list_outer, id(list_outer))

def func(list_inner):

print("list_inner的值和id:", list_inner, id(list_inner))

list_inner.append(4)

print("修改后list_inner的值和id:", list_inner, id(list_inner))

func(list_outer)

print("修改后list_outer的值和id值:", list_outer, id(list_outer))

結(jié)果:

list_outer的值和id值: [1, 2, 3] 1615815397768

list_inner的值和id: [1, 2, 3] 1615815397768

修改后list_inner的值和id: [1, 2, 3, 4] 1615815397768

修改后list_outer的值和id值: [1, 2, 3, 4] 1615815397768

二、命名空間

1. 概念

命名空間指的是保存程序中變量名和值的字典。字典的key是變量的名稱,value是變量的值。

如:{“name”: “zr”, “age”:18}

2. 分類

局部命名空間:記錄函數(shù)的變量。包括函數(shù)的參數(shù)和函數(shù)內(nèi)定義的變量。

全局命名空間:記錄模塊(一個(gè).py文件)的變量。包括函數(shù)、類、其他導(dǎo)入的模塊。

內(nèi)置命名空間:記錄解釋器內(nèi)置的變量。任何模塊都可訪問它,包括內(nèi)置的函數(shù)和異常。

3. 訪問命名空間

locals():訪問局部命名空間:根據(jù)調(diào)用的位置有關(guān)系

globals():訪問全局命名空間:與調(diào)用位置無關(guān)

def func1(name, age):

"""命名空間的訪問"""

num = 10

loc = locals() # 局部命名空間

print(loc) # {'name': 'tom', 'age': 18, 'num': 10}

func1("tom", 18)

glo = globals()# 全局命名空間

print(glo)

"""

{'__name__': '__main__', '__doc__': None, '__package__': None,

'__loader__': <_frozen_importlib_external.sourcefileloader object at>,

'__spec__': None, '__annotations__': {}, '__builtins__': ,

'__cached__': None, 'func1': , 'glo': {...}}

"""

4. 命名空間的加載順序

First:內(nèi)置命名空間(程序運(yùn)行前加載)

Second:全局命名空間(程序運(yùn)行時(shí)加載)

Third:局部命名空間(程序運(yùn)行中,函數(shù)被調(diào)用時(shí)才加載,當(dāng)函數(shù)返回結(jié)果或拋出異常時(shí),被刪除。每個(gè)遞歸調(diào)用的函數(shù)都有自己的命名空間。)

5. 命名空間的查找順序

局部命名空間 -------> 全局命名空間 --------> 內(nèi)置命名空間

三、作用域,局部變量,全局變量

1. 概念

作用域:變量在程序中的可應(yīng)用范圍。

局部變量:在函數(shù)中定義的變量,只在函數(shù)內(nèi)部生效。

全局變量:在程序一開始定義的變量,在整個(gè)程序中起作用。

2. 作用域的分類

Local(函數(shù)內(nèi)部):局部作用域

Enclosing(嵌套函數(shù)的外層函數(shù)內(nèi)部):嵌套作用域(閉包)

Global(模塊全局):全局作用域

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

注意:

在Python中,模塊(module),類(class)、函數(shù)(def、lambda)會(huì)產(chǎn)生新的作用域。而其他代碼塊不會(huì),也就是說,類似分支語句、循環(huán)語句、異常捕捉等的變量是可以全局使用的。

3.全局變量和局部變量

全局變量是不可變數(shù)據(jù)類型,函數(shù)無法修改全局變量的值。

全局變量是可變數(shù)據(jù)類型,函數(shù)可以修改全局變量的值。

name = "zs" # 全局變量

def func(arg1):

name = "ls" # 局部變量

age = arg1

print(name) # zs

func(23)

# print(age) # 報(bào)錯(cuò) NameError: name 'age' is not defined

四、global 和 nonlocal關(guān)鍵字

1. global

global關(guān)鍵字可以將局部變量變成一個(gè)全局變量。

格式: global 變量名

n = 20

def func():

global n # 將n聲明為全局變量

n = n+1

print(n) # 21

func()

print(n) # 21

2. nonlocal

nonlocal關(guān)鍵字可以修改外層(非全局)變量。

注意:必須得是嵌套函數(shù),nonlocal才會(huì)生效。

格式: nonlocal 變量名

def func():

age = 20

def inner():

# global age # 函數(shù)外無age變量,聲明為全局變量會(huì)錯(cuò)誤

nonlocal age # 將內(nèi)層變量age聲明為外層age

age = age + 1

print(age) # 21

inner()

print(age) # 21

func()

總結(jié)

以上是生活随笔為你收集整理的python的函数式编程_Python函数式编程-概念理解,python的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

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