進階函數

一、函數對象

函數是第一類對象:函數名指向的值可以被當做參數傳遞

1.函數名可以被傳遞

def func():print('func')f = func  # 函數名可以當做變量名
print(f)  # f指向的也是函數func指向函數體代碼的內存地址

?

2.函數名可以被當做參數傳遞給其他參數

def func():print('from func')def index(args):print(args)args()  # from funcprint('from index')
index(func)  #把func這個函數名傳遞給args,打印出來的結果為:<function func at 0x0000028A85681F28>#from index

?

3.函數名可以被當作函數的返回值

def index():print('index')def func():print('func')return index
res = func()  # func
print(res)  # 函數名的內存地址:<function index at 0x000001E573521F28>
res()  # 返回值:index

?

4.函數名可以被當作容器類型的參數

def func():print('func')  # func
print(func())  # None
l = [1,2,func,func()]  # func  
print(l)  # [1,2,<function func at 0x000001F7D79899D8>,None

?

?

二、函數嵌套

1.函數嵌套的調用

在函數內部調用其他函數
可以將復雜的邏輯簡單化

# def max2(x,y):
#     if x > y:
#         return x
#     else:
#         return y# def max3(x,y,z):
#     res1=max2(x,y)  # 先比較x和y的值
#     res2=max2(res1,z)  # 較大的值與z進行比較
#     return res2  # 返回較大的值
# print(max3(7,8,9))

2.函數嵌套的定義

def outer():x = 1print('outer')def inner():print('inner')# print(inner)return innerres = outer()  # outer
print(res)  # <function outer.<locals>.inner at 0x000001F19F822AE8>
res()  # inner

?

三、名稱空間

存放的是變量名與變量值的內存地址的綁定關系的地方

想要訪問一個變量的值,必須先去名稱空間拿到對應的名字,才能夠訪問變量的值

1.名稱空間的分類

1》內置名稱空間:python解釋器提前給你定義好的名字(已經存放在內置名稱空間),如len,max

2》全局名稱空間:文件級別的代碼(if for while 無論嵌套多少層,它們內部所創建的名字都是全局名稱空間)

3》局部名稱空間:函數體內創建的名字都屬于局部名稱空間

?

2.生命周期

內部名稱空間:只要python解釋器已啟動立馬創建,關閉python解釋器的時候內置名稱空間自動銷毀

全局名稱空間:只要右鍵運行py文件會自動創建,py文件程序運行結束自動銷毀

局部名稱空間:函數調用的時候自動創建,函數指向結束立即銷毀(動態創建動態銷毀)

?

3.名字查找的順序

1》站在全局的角度:全局>內置

2》站在局部的角度:局部>全局>內置

x = 1
def f1():x = 2def f2():x = 3def f3():x = 4def f4:x = 5print(x)f4()f3()f2()
f1()#當需要調用f1的時候,會站在f4的局部去取值,如果f4沒值就會取f3的值,按照局部>全局>內置這個順序去取值

注意:

函數在定義階段查找名字的順序就已經固定了 不會因為函數的調用位置變化

?

?

四、作用域

1.全局作用域

? ? ? ? ? ? ? ? ? ? 全局有效:內置名稱空間? 全局名稱空間

2.局部作用域

? ? ? ? ? ? ? ? ? ?局部有效 : 局部名稱空間

3.glolal

在局部修改全局的變量,如果需要修改多個,用逗號隔開

x = 1def func():x = 2
func()
print(x)  # 1#首先,調用函數func在全局名稱空間,所以要站在全局名稱空間這個角度去看,就不需要考慮
#局部名稱空間了,全局有 x = 1 這個數,所以打印結果就為1#如果就要將打印結果變為局部 x = 2這個數呢?該怎么操作?
x = 1def func():global x  # 在局部修改全局的變量x = 2
func()
print(x)  # 2

?

4.nonlocal

在局部修改局部的變量,如果想修改多個,用逗號隔開

def func():x = 1def index():nonlocal x  # 局部修改局部x = 2index()print(x)
func()  # 2

?

轉載于:https://www.cnblogs.com/xiongying4/p/11165234.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/248533.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/248533.shtml
英文地址,請注明出處:http://en.pswp.cn/news/248533.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

vue腳手架基礎API全面講解【內附多個案例】

vscode-插件補充 vue文件代碼高亮插件-vscode中安裝 代碼提示插件-vscode中安裝 知識點自測 想學會今天的內容, 先測測這幾個會不會 表達式, 變量是什么 new的作用和含義 實例化對象 什么是對象上的, 屬性和方法 對象的賦值和取值 this的指向 npm/yarn是什么, package.json干…

mysql 和 sqlserver sql差異比較

mysql:select * from table_name limit 100,200;--取出從100到200的數據 獲取時間&#xff1a;mysql:now() mysql tinyint&#xff08;0,1&#xff09; → bit float &#xff08;decimal(19,4)&#xff09;→ moneytext → ntextvarchar →nvarchar 轉載于:https://www.cnblo…

Vue 過濾器、計算屬性、偵聽器 圖解版 一目了然

文章目錄本篇學習目標1. vue基礎1.0_vue基礎 v-for更新監測1.1_vue基礎_v-for就地更新1.2_vue基礎_虛擬dom1.3_vue基礎_diff算法情況1: 根元素變了, 刪除重建情況2: 根元素沒變, 屬性改變, 元素復用, 更新屬性1.4_vue基礎_diff算法-key情況3: 根元素沒變, 子元素沒變, 元素內容…

linux shell命令行選項與參數用法詳解

問題描述&#xff1a;在linux shell中如何處理tail -n 10 access.log這樣的命令行選項&#xff1f;在bash中&#xff0c;可以用以下三種方式來處理命令行參數&#xff0c;每種方式都有自己的應用場景。1&#xff0c;直接處理&#xff0c;依次對$1,$2,...,$n進行解析&#xff0c…

Vue自定義指令原來這么簡單

本篇學習目標 能夠了解組件進階知識能夠掌握自定義指令創建和使用能夠完成tabbar案例的開發 1. 組件進階 1.0 組件進階 - 動態組件 目標: 多個組件使用同一個掛載點&#xff0c;并動態切換&#xff0c;這就是動態組件 需求: 完成一個注冊功能頁面, 2個按鈕切換, 一個填寫注冊…

重載(overload)與重寫(override)的區別

overload&#xff08;重載&#xff09;:在同一個類中&#xff0c;方法名相同&#xff0c;參數列表不相同。與返回值類型無關。 override&#xff08;重寫&#xff09;:存在同一個類中&#xff0c;或者父子接口中&#xff0c;方法名相同個&#xff0c;參數列表相同。遵循“兩同兩…

python學習,day3:函數式編程,*arge,**kwargs

對于不固定長度的參數&#xff0c;需要使用*arge&#xff0c;**kwargs來調用&#xff0c;區別是*arge是轉換為元組&#xff0c;而kwargs轉化為字典 # codingutf-8 # Author: RyAn Bi def test(*args): #參數組print(args)test(1,2,4,6,7,8) #方式1 test(*[1,2,4,5,6]) #方式2 #…

那些被人忽略的Vue導航知識

本篇學習目標 能夠了解單頁面應用概念和優缺點能夠掌握vue-router路由系統使用能夠掌握鏈接導航和編程式導航用法能夠掌握路由嵌套和路由守衛能夠掌握vant組件庫基礎使用 1. vue路由簡介和基礎使用 1.0 什么是路由 目標: 設備和ip的映射關系 目標: 接口和服務的映射關系 目…

passwd命令

-n 在這幾天你不能更改密碼&#xff01; -x 在n<時間<x在這段時間內你必須修改密碼&#xff01; -w 當距離x日期還有w天的時候開始提醒你改密碼&#xff01; -i 密碼過期i天之后&#xff0c;此密碼停用&#xff0c;你也就無法用此密碼登陸這個用戶了。注意是密碼過期之后…

一文帶你吃透Vue生命周期(結合案例通俗易懂)

文章目錄本篇學習目標1. vue生命周期1.0_人的-生命周期1.1_鉤子函數1.2_初始化階段1.3_掛載階段1.4_更新階段1.5_銷毀階段2. axios2.0_axios基本使用2.1_axios基本使用-獲取數據2.2_axios基本使用-傳參2.3_axios基本使用-發布書籍2.4_axios基本使用-全局配置3. nextTick和nextT…

[SCOI2012]滑雪 (最小生成樹 Kruskal)

題目描述 a180285非常喜歡滑雪。他來到一座雪山&#xff0c;這里分布著M條供滑行的軌道和N個軌道之間的交點&#xff08;同時也是景點&#xff09;&#xff0c;而且每個景點都有一編號i(1≤i≤N)和一高度Hi?。a180285能從景點ii滑到景點j當且僅當存在一條i和j之間的邊&#xf…

來學習ansibie(1)

# ansible 批量在遠程主機上執行命令 python2.7編寫 ## 安裝 第一步:下載epel源 shellwget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo 第二步:安裝 shellyum install -y ansible ## ansible 命令格式 shellUsage: ansible <host-pattern&g…

CQYZOJ P1392 拔河問題

題目\(1\) Description 一個學校舉行拔河比賽&#xff0c;所有的人被分成了兩組&#xff0c;每個人必須&#xff08;且只能夠&#xff09;在其中的一組&#xff0c;且兩個組內的所有人體重加起來盡可能地接近. Input 第\(1\)行是一個\(n\)&#xff0c;表示參加拔河比賽的總人數…

靈活的Vue組件——原來這么簡單

本篇學習目標 能夠理解vue組件概念和作用能夠掌握封裝組件能力能夠使用組件之間通信能夠完成todo案例 1. vue組件 1.0_為什么用組件 以前做過一個折疊面板 需求: 現在想要多個收起展開的部分 方案1: 復制代碼 代碼重復 冗余不利于維護 案例用less寫的樣式, 所以下載 ya…

FOI冬令營 Day 3

目錄 T1、簽到題&#xff08;sort&#xff09;傳送門 Code T2、送分題&#xff08;queue&#xff09;傳送門 Code T3、簡單題&#xff08;game&#xff09;傳送門 Code 咕咕咕T1、簽到題&#xff08;sort&#xff09; 傳送門 原題&#xff1a;LOJ 2767 Code //2019/2/14 //50…

委托事件觀察者模式

委托的默認返回類型&#xff1a;void 聲明委托的關鍵字&#xff1a;delegate 多播委托&#xff1a;將多個方法綁定到一個委托變量 在調用方法時 可以執行綁定的方法 委托的描述&#xff1a; 委托是一個類 定義了方法的類型 可以將方法當做另一個方法進行傳遞 委托并不等同于方法…

贏在CSDN——名利兼收

文章目錄&#x1f30a; 相識CSDN&#x1f30a; 益于CSDN流量將成為你我的亮點我的專欄收益到賬啦學習會員助你拿捏專欄更多曝光自己的機會CSDN問答為你準備的零花錢&#x1f30a; 忠于CSDN&#x1f30a; 相識CSDN 小編自注冊CSDN至今兩年有余&#xff0c;記得初衷也僅僅是為了…

124angular1實現無限表單(僅供自己看)

//將本行的內容對象作為參數&#xff0c;傳給點擊函數&#xff0c;點擊函數向后臺發送請求&#xff0c;把獲取的返回值作為內容對象的一個屬性。 (function (angular) {angular.module(myModule, []).directive(treeModel, [$compile, function ($compile) {return {restrict: …

了解 Vue SSR 這一篇足以

文章目錄1 - 什么是服務器端渲染&#xff1f;1.1 新建server文件夾1.2 生成一個node項目1.3 安裝express1.4 服務端渲染小案例1.5 運行查看效果1.6 打開瀏覽器1.7 右鍵查看源代碼2 - 什么是客戶端渲染&#xff1f;2.1 新建client文件夾2.2 生成一個vue項目2.3 安裝依賴并啟動2.…

3 數組中的重復數字

題目描述 在一個長度為 n 的數組里的所有數字都在 0 到 n-1 的范圍內。數組中某些數字是重復的&#xff0c;但不知道有幾個數字是重復的&#xff0c;也不知道每個數字重復幾次。請找出數組中任意一個重復的數字。 Input: {2, 3, 1, 0, 2, 5}Output: 2 思路 給出了長度為n且數組…