目錄
目錄
  1. 冒泡排序原理
  2. 装饰器原理
    (1). 装饰器的写法和使用
    (2). 装饰器的原理
    (3). 装饰器的总结
  3. 带参数的装饰器
  3.  装饰器的嵌套
   <1>. 第一层装饰器的简化(outer装饰器)
    
    <2>. 第二层装饰器简化(outer0装饰器)
    <3>. 装饰器嵌套攻击额,我们可以发现一层装饰器其实就是把原函数嵌套进另一个函数中间,因此我们只需要一层一层的剥开嵌套就可以了。

python系列4

Jun 23, 2017 pm 04:29 PM
python 系列

目錄

  • 遞迴演算法解析

  • 冒泡排序解析

  • 裝飾程式解析

#1遞歸

  1. 遞歸的定義
    遞歸(Recursion),又成為遞回,在數學與計算機科學中,是指在函數的定義中使用函數自身的方法。遞歸一詞也較長地用於描述以自相似方法重複事物的過程。

F0 = 0F1 = 1
登入後複製

  2. 遞歸的原理

    (1). 範例:

 defth == 5= a1 += defth + 1== recursion(1, 0, 1(ret)
登入後複製

 

  以下這幅圖為整個函數的執行過程,紅色的代表一層一層的往裡面嵌套,綠色的代表函數的返回值一層一層的外面返還。其實遞歸就是這個原理,透過一個函數的執行流在再次進入此函數,當通過一個條件返回一個值之後,一層一層的按照剛剛的執行流再次返回回去,最後得到返回值,但是遞歸的時候要注意兩點:

  1. 他的條件,必須要使他的遞歸在某個條件內可以返回一個值,否則就會一直遞歸,直到電腦資源耗盡(Python預設有遞歸的次數限制)

  2. 傳回值,在裡面的遞歸函數一般要給他一定的回傳值,否則在最後一次返還遞歸的時候會得不到想要的值。

   

二. 冒泡排序

  1. 冒泡排序原理

    冒泡排序就是一種簡單的排序演算法。他重複的走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。

冒泡排序算法的运作如下:
  1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
  2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。
  3. 针对所有的元素重复以上的步骤,除了最后一个。
  4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较
登入後複製
###    交換資料的原理 ######    借助一個外圍的變數先保存原來的值,然後再去透過指向位址的轉換來進行交換資料。注意:當temp指向了a, 然後a再指向b的時候,temp本身的指向是沒有發生改變的,就如下圖,a指向了b,但是temp依然指向的是a的地址,所以他還是66# #####
a = 66b = 88temp = a 
a = b 
b = temp
登入後複製
######  #########    冒泡排序的原理######  ######### ######」泡排序範例######
 1 # -*- coding:utf-8 -*- 2 # zhou 3 # 2017/6/17 4 list = [0, 88, 99, 33, 22, 11, 1] 5 for j in range(1, len(list)): 6     for i in range(len(list) - j): 7         # 如果第一个数据大, 则交换数据, 否则, 不做改变 8         if list[i] > list[i + 1]: 9             temp = list[i]10             list[i] = list[i + 1]11             list[i + 1] = temp12 print(list)
登入後複製
######三. 裝飾器######  1. 裝飾器定義######     裝飾器是什麼?簡單來說就是在不改變原始函數程式碼的基礎上,對程式碼的一種微妙的擴展,以使得其功能進一步增強的函數。裝飾器就是一個函數,一個載入在其他函數之上的函數,######    以下我們先來了解幾個概念:######    <1>. 函數執行流##### #      由以上面的可知,函數的執行流應該是從上到下的,也就是說,程式碼先把第一個test1載入到記憶體中,然後從新開闢一塊記憶體來存放第二個test1。 ######      這裡應該是第一個test1的指向改到了890673481792這裡。 ######
def test1():print('日本人.')print(id(test1))def test1():print('中国人.')print(id(test1))
test1()

执行结果:890673481656
890673481792中国人.
登入後複製
######    <2>.  函數作為變數######      由以下結果可以看出來,函數名其實就是一個變數,可以用來傳遞的變數。 ############      注意:函數作為變數的時候不能加括號,必須只是函數名稱############
(=<function test1 at 0x000000E2D403C7B8>
<function test1 at 0x000000E2D403C7B8>
登入後複製
######    .  函數巢狀######      這裡定義了三個函數,test1,test2,test3, 3裡面嵌套了1, 1裡面又嵌套了2,從他的結果中想必你也會看出來函數的執行流。 ######
def test1():print('我是',end='')def test2():print('中国人.')
    test2()def test3():
    test1()print('Hello, China.')
test3()

结果:
我是中国人.
Hello, China.
登入後複製
###

  2. 装饰器原理

    (1). 装饰器的写法和使用

      <1>. 装饰器也是一个函数

      <2>. 使用装饰器的格式: 在一个函数前面加上:@装饰器的名字

    (2). 装饰器的原理

      <1>. 把test1函数当做一个变量传入outer中

          func = test1

      <2>. 把装饰器嵌套的一个函数inner赋值给test1

          test1 = inner

      <3>. 当执行test1函数的时候,就等于执行了inner函数,因此在最后的那个test1()命令其实执行的就是inner,因此先输出(你是哪国人)

      <4>. 按照执行流执行到func函数的时候,其实执行的就是原来的test1函数,因此接着输出(我是中国人),并把它的返回值返回给了ret

      <5>. 当原来的test1函数执行完了之后,继续执行inner里面的命令,因此输出了(Oh,hh, I love China.)

    (3). 装饰器的总结

      由上面的执行流可以看出来,其实装饰器把之前的函数当做参数传递进去,然后创建了另一个函数用来在原来的函数之前或者之后加上所需要的功能。

(=((
登入後複製

 

  3. 带参数的装饰器

    为了装饰器的高可用,一般都会采用下面的方式,也就是无论所用的函数是多少个参数,这个装饰器都可以使用

    Python内部会自动的分配他的参数。

# -*- coding:utf-8 -*-# zhou# 2017/6/17def outer(func):def inner(a, *args, **kwargs):print('你是哪国人?')
        ret = func(a, *args, **kwargs)print('Oh, hh, I love China.')return inner

@outerdef test1(a, *args, **kwargs):print('我是中国人.')

test1(1)
登入後複製

  3.  装饰器的嵌套

   <1>. 第一层装饰器的简化(outer装饰器)

    

    

    <2>. 第二层装饰器简化(outer0装饰器)

    

    <3>. 装饰器嵌套攻击额,我们可以发现一层装饰器其实就是把原函数嵌套进另一个函数中间,因此我们只需要一层一层的剥开嵌套就可以了。

# -*- coding:utf-8 -*-# zhou# 2017/6/17def outer0(func):def inner():print('Hello, Kitty.')
        ret = func()print('我是日本人.')return innerdef outer(func):def inner():print('你是哪国人?')
        ret = func()print('你呢?')return inner
@outer0
@outerdef test1():print('我是中国人.')

test1()

结果Hello, Kitty.
你是哪国人?
我是中国人.
你呢?
我是日本人.
登入後複製

 

 

  

 

以上是python系列4的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1665
14
CakePHP 教程
1423
52
Laravel 教程
1321
25
PHP教程
1269
29
C# 教程
1249
24
PHP和Python:解釋了不同的範例 PHP和Python:解釋了不同的範例 Apr 18, 2025 am 12:26 AM

PHP主要是過程式編程,但也支持面向對象編程(OOP);Python支持多種範式,包括OOP、函數式和過程式編程。 PHP適合web開發,Python適用於多種應用,如數據分析和機器學習。

在PHP和Python之間進行選擇:指南 在PHP和Python之間進行選擇:指南 Apr 18, 2025 am 12:24 AM

PHP適合網頁開發和快速原型開發,Python適用於數據科學和機器學習。 1.PHP用於動態網頁開發,語法簡單,適合快速開發。 2.Python語法簡潔,適用於多領域,庫生態系統強大。

sublime怎麼運行代碼python sublime怎麼運行代碼python Apr 16, 2025 am 08:48 AM

在 Sublime Text 中運行 Python 代碼,需先安裝 Python 插件,再創建 .py 文件並編寫代碼,最後按 Ctrl B 運行代碼,輸出會在控制台中顯示。

PHP和Python:深入了解他們的歷史 PHP和Python:深入了解他們的歷史 Apr 18, 2025 am 12:25 AM

PHP起源於1994年,由RasmusLerdorf開發,最初用於跟踪網站訪問者,逐漸演變為服務器端腳本語言,廣泛應用於網頁開發。 Python由GuidovanRossum於1980年代末開發,1991年首次發布,強調代碼可讀性和簡潔性,適用於科學計算、數據分析等領域。

Python vs. JavaScript:學習曲線和易用性 Python vs. JavaScript:學習曲線和易用性 Apr 16, 2025 am 12:12 AM

Python更適合初學者,學習曲線平緩,語法簡潔;JavaScript適合前端開發,學習曲線較陡,語法靈活。 1.Python語法直觀,適用於數據科學和後端開發。 2.JavaScript靈活,廣泛用於前端和服務器端編程。

Golang vs. Python:性能和可伸縮性 Golang vs. Python:性能和可伸縮性 Apr 19, 2025 am 12:18 AM

Golang在性能和可擴展性方面優於Python。 1)Golang的編譯型特性和高效並發模型使其在高並發場景下表現出色。 2)Python作為解釋型語言,執行速度較慢,但通過工具如Cython可優化性能。

vscode在哪寫代碼 vscode在哪寫代碼 Apr 15, 2025 pm 09:54 PM

在 Visual Studio Code(VSCode)中編寫代碼簡單易行,只需安裝 VSCode、創建項目、選擇語言、創建文件、編寫代碼、保存並運行即可。 VSCode 的優點包括跨平台、免費開源、強大功能、擴展豐富,以及輕量快速。

notepad 怎麼運行python notepad 怎麼運行python Apr 16, 2025 pm 07:33 PM

在 Notepad 中運行 Python 代碼需要安裝 Python 可執行文件和 NppExec 插件。安裝 Python 並為其添加 PATH 後,在 NppExec 插件中配置命令為“python”、參數為“{CURRENT_DIRECTORY}{FILE_NAME}”,即可在 Notepad 中通過快捷鍵“F6”運行 Python 代碼。

See all articles