python遞歸迭代_Python入門基礎知識點(python迭代器和遞歸)

函數名的使用:

函數名是一個變量, 但它是一個特殊的變量, 與括號配合可以執行函數的變量

函數名的內存地址:

deffunc():pass

print(func) #函數的內存地址

結果:

函數名可以賦值給其他變量:

deffunc():print(1)

a=func

a()

func()#函數名可以當做值賦值給變量

結果:1

1

函數名可以當做容器類的元素:

deffunc():print(1)deffunc2():print(2)

li=[func,func2]print(li) #函數名可以當做元素放到容器里

結果:[, ](打印的是函數的內存地址,列表里的函數可以加括號,打印的是函數執行的結果,及列表的返回的None)deffunc():print(1)deffunc2():print(2)

li=[func(),func2()]print(li) #函數名可以當做元素放到容器里

結果:1

2[None, None]

函數名可以當做函數的參數:

deffunc():print("吃了么")deffunc2(fn):print("我是1")

fn()#執行傳遞過來的fn

print("我是2")

func2(func)#把函數func當成參數傳遞給func2的參數fn.

結果: 我是1

吃了么

我是2

函數名可以作為函數的返回值

deffunc_1():print("這里是函數1")deffunc_2():print("這里是函數2")print("這里是函數3")returnfunc_2

fn=func_1()#執行函數1. 函數1返回的是函數2, 這時fn指向的就是上面函數2

fn() #執行func_2函數

結果:

這里是函數1

這里是函數3

這里是函數2

deffunc():defaa():print(2)returnNonereturn aa() #return None#func() # func() == None

print(func())

結果:2None

例題:

li =[]for i in range(3): #for循環三次,三次最終結果i=2

def func(x): #定義函數,形參為x

print(x*i) #打印形參與i(2)相乘的結果

li.append(func) #將func依此添加到li列表當中,循環三次,添加三個,

#此時,列表里的func雖然外表相同,定義的函數相同,但內存地址不一樣,存在三個內存地址

for func in li: #將列表里的函數循環出來

func(2) #依此執行func函數,實參數為2

結果:4

4

4此時我要想將結果打印為0,2,4,只需定義一個數即可

li=[]for i in range(3): #for循環三次,循環為 i =(0,1,2)

def func(x,y=i): #定義函數,形參為x,y=循環的 i 值

print(x*y) #打印形參與y(0,1,2)相乘的結果

li.append(func) #將func依此添加到li列表當中,循環三次,添加三個,

#此時,列表里的func雖然外表相同,定義的函數相同,但內存地址不一樣,存在三個內存地址

for func in li: #將列表里的函數循環出來

func(2) #依此執行func函數,實參數為2

閉包

什么是閉包? 閉包就是內層函數, 對外層函數(非全局)的變量的引用. 叫閉包

# 1.一個嵌套函數

# 2.在嵌套函數的內部函數使用外部(非全局的變量)

# 滿足以上兩條就是閉包

defwrapper():

a= 10

definner():print(a)print(inner.__closure__) #不是None 就是閉包

inner()

wrapper()

結果:

(,)10

將里邊的函數名當做參數返回給調用者

defouter():

name= "alex"

#內部函數

definner():print(name)returninner

fn= outer() #訪問外部函數, 獲取到內部函數的函數地址

fn() #訪問內部函數

結果:alex

例:

money = 10

#全局里存放會有污染和不安全的現象

defwrapper():

money= 10

definner(num):global money #從全局調用money

money +=numprint(money)returninner

wrapper()(100) #第二個括號是return的返回值inner的執行,實參為100

# python中閉包,會進行內存駐留, 普通函數執行完后就銷毀了

# 全局里存放會有污染和不安全的現象

# 面試必問,裝飾器 -- 裝飾器的本質就是閉包

# 閉包有個弊端:會出現內存泄漏

迭代器

可迭代對象有哪些:str list tuple dic set

可迭代對象:可以被for的就是可迭代對象

# Python 協議

# 具有.__iter__方法的就是可迭代對象

# a = 對象.__iter__ # 創建一個迭代器

# 具有__iter__和__next__就是一個迭代器

可以for循環的就有__iter__方法,包括range

.這里的__iter__是幫助我們獲取到對象的迭代器.我們使用迭代器中的__next__()來獲取到一個迭代器的元素

li = [1,2,3]

a= li.__iter__()print(a.__next__())print(a.__next__()) #一個一個取

print(a.__next__())

結果:1

2

3

我們使用while循環和迭代器來模擬for循環: 必須要會:

lst = [6,5,4]

l= lst.__iter__()while 1:try:

i= l.__next__()print(i)except StopIteration #當遇到報錯的時候,就break退出

break

# 迭代器特性:

# 惰性機制

# 不能從下向上走

# 一次性的,用完就沒了

小總結:

Iterable: 可迭代對象. 內部包含__iter__()函數

? Iterator: 迭代器. 內部包含__iter__() 同時包含__next__().

迭代器的特點:

? 1. 節省內存.

? 2. 惰性機制

? 3. 不能反復, 只能向下執行.

我們可以把要迭代的內容當成子彈. 然后呢. 獲取到迭代器__iter__(), 就把子彈都裝在彈夾中. 然后發射就是__next__()把每一個子彈(元素)打出來. 也就是說, for循環的時候.一開始的 時候是__iter__()來獲取迭代器. 后面每次獲取元素都是通過__next__()來完成的. 當程序遇到 StopIteration將結束循環.

遞歸:

# 1. 自己玩自己 (自己調用自己本身)

# 2. 玩的有限制 (有明確結束條件)

count =0deffunc():globalcount

count+= 1

print(count)if count == 4: #當count=4時,返回

returnfunc()#產生遞歸現象

func()

打印1到100

deffunc(n):

n+=1

print(n)if n == 100:returnfunc(n)

func(0)

例題:

deffunc(age):print(age) #最后打印4

deffunc1(age):print(age) #3

func(age+1) #執行func,實參數位4

deffunc2(age):print(age) #2

func1(age+1) #執行func1,實參數位3

func2(2)

打印結果:2

3

4

作業:

1.寫函數,傳入n個數,返回字典{‘max’:最大值,’min’:最小值}

例如:min_max(2,5,7,8,4) 返回:{‘max’:8,’min’:2}(此題用到max(),min()內置函數)2.寫函數,傳入一個參數n,返回n的階乘

例如:cal(7) 計算7*6*5*4*3*2*1

3.寫函數,返回一個撲克牌列表,里面有52項,每一項是一個元組

例如:[(‘紅心’,2),(‘草花’,2), …(‘黑桃’,‘A’)]4. 相關面試題(先從紙上寫好答案,然后在運行):def calc(a,b,c,d=1,e=2):return (a+b)*(c-d)+e

請分別寫出下列標號代碼的輸出結果,如果出錯請寫出Error。print(calc(1,2,3,4,5))_____

print(calc(1,2))____

print(calc(e=4,c=5,a=2,b=3))___

print(calc(1,2,3))_____

print(calc(1,2,3,e=4))____

print(calc(1,2,3,d=5,4))_____下面代碼打印的結果分別是_________,________,________.def extendList(val,list=[]):

list.append(val)returnlist

list1= extendList(10)

list2= extendList(123,[])

list3= extendList('a')print('list1=%s'%list1)print('list2=%s'%list2)print('list3=%s'%list3)5.寫代碼完成99乘法表.(升級題)1 * 1 = 1

2 * 1 = 2 2 * 2 = 4

3 * 1 = 3 3 * 2 = 6 3 * 3 = 9......9 * 1 = 9 9 * 2 = 18 9 * 3 = 27 9 * 4 = 36 9 * 5 = 45 9 * 6 = 54 9 * 7 = 63 9 * 8 = 72 9 * 9 = 81

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

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

相關文章

怎么調處vs2010的MSDN幫助文檔

如果裝的是vs2010專業版的話 直接按F1直接可調出在線的幫助 直接按F2可以調出本機版的 轉載于:https://www.cnblogs.com/fag888/p/5789159.html

redis的lrange_thinkphp5操作redis系列教程】列表類型之lRange,lGetRange

namespace app\admin\controller;use think\cache\driver\Redis;use think\Controller;use \think\Db;class Index extends Controller{//獲取redispublic function getRedis(){$redis new \Redis();$redis->connect(127.0.0.1,6379);$redis->auth(root); //redis密碼ec…

如何寫好博客

好的博客是用來解決問題的,每一篇文章都應該以如何解決問題為驅動力,而不是知識點的累加,比如說之前寫的[MVC]系列,均為知識點的堆積,沒有例子和代碼,也沒有說明問題,這樣的文章,基本…

云服務器建站原理_云服務器cvm與建站主機之間的區別

(文章來源:西部數碼)云服務器cvm與建站主機區別是什么?cvm的英文全拼是CloudVirtualMachine(云虛擬機),所以云服務器cvm是指虛擬云服務器,屬于云服務器產品中的一種。而建站主機一般多是指虛擬主機,是在服務器中劃分出…

Magento--判斷checkout中是否使用了coupon code

在checkout頁面中&#xff0c;如果想判斷顧客是否有使用coupon code&#xff0c;可以通過checkout session來進行判斷。以下代碼會返回checkout中使用的coupon code或者返回空&#xff08;當沒有使用coupon code時&#xff09; 1 <?php 2 3 $coupon_code Mage::getSingl…

啟動python內核時發生錯誤_啟動內核時出錯

我一直看到這個消息。在An error ocurred while starting the kernelTraceback (most recent call last):File "C:\Users\Excel\Anaconda3\lib\runpy.py", line 193, in _run_module_as_main"__main__", mod_spec)File "C:\Users\Excel\Anaconda3\lib…

Scala筆記

1、伴生對象 形如&#xff1a; 有一個類 class Test{ } 一個object和該類同名 object Test{ } object Test的作用類似于靜態類&#xff08;工具類&#xff09;&#xff0c;其中的所有成員都是靜態的&#xff0c;在object Test中可以直接訪問class Test的成員&#xff1b;…

maven找到mysql 連接池_在Tomcat6.0+MySQL5.0環境下配置和使用數據庫連接池

一&#xff0c;在Tomcat中配置連接池的JNDI首先到MySQL的網站上下載MySQL JDBC連接器放到%CATALINA_HOME%/lib目錄下&#xff0c;在%CATALINA_HOME%/conf目錄下找到context.xml&#xff0c;這個文件是全局的&#xff0c;如果想只對特定的應用使用可以編輯WEB-INF/context.xml文…

mysql將多個成績放在一排_mysql巧用連表查詢各科成績前三名

下列是各表的詳情&#xff0c;不想自己建表的同學可以直接copy code&#xff0c;數據隨意。創建表成績詳情表&#xff1a;CREATE TABLE score (id int(10) NOT NULL AUTO_INCREMENT,subject_id int(10) DEFAULT NULL,student_id int(10) DEFAULT NULL,score float DEFAULT NULL…

Oracle 跨庫 查詢 復制表數據 分布式查詢

方法一&#xff1a; 在眼下絕大部分數據庫有分布式查詢的須要。以下簡單的介紹怎樣在oracle中配置實現跨庫訪問。比方如今有2個數據庫服務器&#xff0c;安裝了2個數據庫。數據庫server A和B。如今來實如今A庫中訪問B的數據庫。 第一步、配置Aserver端的tnsnames.ora文件&#…

java 匹配mysql按鈕_使用Java在mysql查詢中設置匹配函數

我有以下在java中查詢(mysql)的摘錄&#xff1a;queryGeral.append("FROM product p, fabricante_product fp, fabricante f, extensao e, product_autor pa ").append(" WHERE ").append("a.nome like ? AND ").append("p.cod_material …

LeetCode Contains Duplicate (判斷重復元素)

題意&#xff1a; 如果所給序列的元素不是唯一的&#xff0c;則返回true&#xff0c;否則false。 思路&#xff1a; 哈希map解決。 1 class Solution {2 public:3 bool containsDuplicate(vector<int>& nums) {4 unordered_map<int,int> mapp;5 …

提高團隊代碼質量

近期看到一篇博客。大致的意思就是網管將原本混亂不堪的交換機整理整齊了&#xff0c;起初交換機是圖2那樣的&#xff0c;由于越來用的人越多&#xff0c;操作的人越來越多。終于成為了圖1那個樣子。這不禁讓我想到了項目中的代碼。原先在剛上線的時候談不上是完美的&#xff0…

webrender 查看是否開啟_想要體驗極致順滑的網頁加載體驗?手動開啟Firefox WebRender渲染引擎...

昨天我們提到火狐瀏覽器最新穩定版Mozilla Firefox v67 版將面向部分用戶開啟WebRender渲染引擎測試。據火狐瀏覽器團隊介紹當用戶開啟新的渲染引擎后 , 網頁加載幀率能夠從現有的 20FPS 直接提升到 60FPS。不過新的渲染引擎本身并不是用于加快網頁的加載速度&#xff0c;而是…

NOIP201307貨車運輸

試題描述A 國有n座城市&#xff0c;編號從1到n&#xff0c;城市之間有m條雙向道路。每一條道路對車輛都有重量限制&#xff0c;簡稱限重。現在有q輛貨車在運輸貨物&#xff0c;司機們想知道每輛車在不超過車輛限重的情況下&#xff0c;最多能運多重的貨物。輸入第一行有兩個用一…

knime如何連接mysql_knime怎么連接MySQL?

首先判斷一下網絡是否通&#xff1a;如果在局域網相同網段內那網絡是通的&#xff0c;不同網段間需要看是否有做隔離&#xff0c;如果沒有隔離&#xff0c;那就也是通的。測試方法可以用telnet 數據庫IP 數據庫端口號的方式探測一下 例如 telnet 192.168. 1.124 3306創建用戶&a…

Asp.net Vnext IValueProvider

概述 本文已經同步到《Asp.net Vnext 系列教程 》中] IValueProvider 根據ValueProvider獲取數據&#xff0c;在對數據進行綁定 代碼實現 private class CustomValueProvider : IValueProvider{//判斷否具有指定的前綴public Task<bool> ContainsPrefixAsync(string pref…

ECNUOJ 2615 會議安排

會議安排 Time Limit:1000MS Memory Limit:65536KBTotal Submit:451 Accepted:102 Description 科研人員與相關領域的國內外同行進行適時的接觸與充分的交流&#xff0c;對于促進提高他們的科研業務水平&#xff0c;并及時掌握科研動態是十分必要而且重要的。ECNU為了走在科技…

Kafka架構設計:分布式發布訂閱消息系統

【http://www.oschina.net/translate/kafka-design】&#xff08;較長&#xff1a;很詳細的講解&#xff09; 【我們為什么要搭建該系統】用作LinkedIn的活動流&#xff08;activity stream&#xff09;和運營數據處理管道&#xff08;pipeline&#xff09;的基礎。作為多種類型…

拼團php開發邏輯思維羅振宇_2019羅胖羅振宇跨年演講手動整理稿,看了兩遍

2019羅胖羅振宇跨年演講看了兩遍&#xff0c;手動整理文檔1.歲月不饒人&#xff0c;我們也沒饒了歲月2.你有你的計劃&#xff0c;原來這個世界另有計劃&#xff0c;既然這個世界另有計劃&#xff0c;我們就得重做計劃3.做事的人和不做事的人4.宏觀是我們必須忍受的&#xff0c;…