01.Python邏輯控制流

Python邏輯控制流

所謂邏輯控制流仔拟,就是控制程序的邏輯行為衫樊,一步一步的流向,可以使用流程圖來表現(xiàn)這種行為的流動利花】瞥蓿控制流一般分成正常控制流和異吵词拢控制流臀栈,正常就是一切按預期的方向發(fā)展,異常就是控制流的突變挠乳。

*基于python 3.6.2 tutorial整理

python邏輯控制

  • 條件語句
  • 循環(huán)語句
  • 異橙ㄊ恚控制
  • function(可重用邏輯語句的封裝)

if條件

if statement :
    pass
elif stat:
    pass
elif stat:
    pass
else:
    pass

循環(huán)

for i in <iterable object>:
    pass
###
while stat:
    pass
#range()方法,產(chǎn)生數(shù)字序列
range(from,to,step)
range(10)  >> [0,1,2,3,4,5,6,7,8,9]
range(1,5) >> [1,2,3,4]
range(1,10,2)>>[1,3,5,7,9]

異乘铮控制

try:
    #do something dangerous
except Exception as e:
    # do something save
#<else>:
    pass
#<finally>: always execute this block
    pass

方法

  • 方法定義
# via https://docs.python.org/3/tutorial/controlflow.html#more-on-defining-functions  
def functionname(args):
    pass
def func(a:str) #指定參數(shù)類型
  • 方法參數(shù)
普通參數(shù)
    def func(a,b):
        pass
帶默認參數(shù)(也叫關鍵字參數(shù))盟蚣,調(diào)用時b可不傳
    def func(a,b=10):
        pass

可變參數(shù)--------

#a、b之后的參數(shù)由c接收卖怜,多個參數(shù)則c為list對象
    def func(a,b,*c):
        pass
# c接收多個dict形式的參數(shù)屎开,
    def func(a,b,**c):
        pass
# 可變參數(shù)應該是最后一個參數(shù),要么最后的是默認參數(shù)马靠。*args 和**args共存時奄抽,**在后面
    def concat(*args, sep="/"):
# Unpacking Argument Lists
    # 1.
    list(range(3, 6))            # normal call with separate arguments
    #[3, 4, 5]
    args = [3, 6]
    list(range(*args))            # call with arguments unpacked from a list
    # 2.
    def parrot(voltage, state='a stiff', action='voom')
    #unpacking map obejct to args
    d = {"voltage": "four million", "state": "bleedin' demised", "action": "VOOM"}
    parrot(**d)
 
####################################

error example:
    def func(a=10,b):
    
    def parrot(voltage, state='a stiff', action='voom', type='Norwegian Blue'):
        print("-- This parrot wouldn't", action, end=' ')
        print("if you put", voltage, "volts through it.")
        print("-- Lovely plumage, the", type)
        print("-- It's", state, "!")
    parrot()  # invalid :required argument missing
    parrot(voltage=5.0, 'dead')  #invalid: non-keyword argument after a keyword argument 
    parrot(voltage=5.0) # valid
    parrot(110, voltage=220)  # invalid:duplicate value for the same argument
    parrot(actor='John Cleese')  # invalid:unknown keyword argument
  • 參數(shù)傳遞

python的參數(shù)是對象傳遞,如果對象是不可變的(immutable)甩鳄,則傳遞的是字面量逞度,即為傳值;如果對象是可變的(mutable)妙啃,則傳遞的是引用第晰。

#for example

# mutable object => list object,immutable object str object
    def modify(li: list, s: str):
        s = "modify"
        li[0] = "modify"

    list0 = [1, 2, 3]
    str0 = "howareu"
    print(list0,str0) # [1, 2, 3] howareu
    modify(list0, str0)
    print(list0,str0) # ['modify', 2, 3] howareu

java中參數(shù)的傳遞,和python其實差不多,不可變的傳值茁瘦,可變的傳地址(地址值品抽,也是值),所以說java參數(shù)是傳值的甜熔。O'Reilly's Java in a Nutshell by David Flanagan (see Resources) puts it best: "java manipulates objects 'by reference,' but it passes object references to methods 'by value.'"這個value就是地址的value圆恤。

  • 方法內(nèi)變量查找

方法內(nèi)定義的變量,叫局部變量腔稀,或者叫本地變量(local variable)盆昙,其分配存儲在local symbol table中。當在方法內(nèi)引用一個變量的時候焊虏,變量的查找路徑是:local symbol table --->global symbol table--->build-in names.

所以淡喜,如果在方法內(nèi)定義了一個和外部(方法外)名字一樣的變量,就會遮蔽外部變量诵闭,當然不會修改炼团,只是遮蔽,使得方法內(nèi)只能看到這個local變量疏尿。

  • 變量的scope規(guī)則和namespace

namespace:a mapping from a name to object;是一種關系的映射瘟芝,類比文件的路徑,如果以一個文件為基準褥琐,則可以通過相對路徑和絕對路徑锌俱,去定位一個唯一的文件,這個路徑敌呈,就是一個namespace贸宏。和不同目錄下的同名文件之間沒有關聯(lián)類似,不同namespace的的變量磕洪,也是無關的吭练。

變量的scope,可以類比文件目錄的層次來理解褐鸥。namespace類比文件所在目錄的名字加上文件名线脚,scope則是這個文件的活動區(qū)域,作用空間叫榕,可見范圍浑侥。

如在主要一個多層次的目錄下:

/tmp/---
    ---dir01/
            ---a.py # namespace: /tmp/dir01/a.py | scope:/tmp/dir01/
            ---b.py # namespace: /tmp/dir01/b.py | scope:/tmp/dir01/
    ---diir02/  
            ---a.py # namespace: /tmp/dir02/a.py | scope:/tmp/dir02/
            ---b.py # namespace: /tmp/dir02/a.py | scope:/tmp/dir02/
    ---a.py         # namespace: /tmp/a.py       | scope:/tmp/
    ---b.py         # namespace: /tmp/a.py       | scope:/tmp/

在一個目錄下,只能看到目錄里面的文件晰绎,這個可見范圍寓落,可以理解成scope。越在外層荞下,越能被更多的視野掃描到伶选。

而改變一個變量(文件)的scope史飞,就是移動這個文件,python提供了兩個statement仰税,來修改變量的scope构资。

  1. nonlocal <var>
  2. global <var>
 * nonlocal:是把變量的作用域,綁定到外一層的scope中去陨簇,但不會是global吐绵;
 * global:則是綁定到global全局scope中去,讓所有的人都能看到它的身影河绽。
  • lambda表達式

lambda表達式可用來定義一個匿名函數(shù)己单。在python中有諸多限制,使用場景在于去代替只有一句語句的 function定義耙饰。不是很推薦使用纹笼。

    func = lambda x: x + 1
    print(func(1))
    
    def make_incrementor(n):
        return lambda x: x + n
    f = make_incrementor(42)
    f(0) # 42

The end.

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市苟跪,隨后出現(xiàn)的幾起案子廷痘,更是在濱河造成了極大的恐慌,老刑警劉巖削咆,帶你破解...
    沈念sama閱讀 217,734評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件牍疏,死亡現(xiàn)場離奇詭異蠢笋,居然都是意外死亡拨齐,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評論 3 394
  • 文/潘曉璐 我一進店門昨寞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來瞻惋,“玉大人,你說我怎么就攤上這事援岩〖呃牵” “怎么了?”我有些...
    開封第一講書人閱讀 164,133評論 0 354
  • 文/不壞的土叔 我叫張陵享怀,是天一觀的道長羽峰。 經(jīng)常有香客問我,道長添瓷,這世上最難降的妖魔是什么梅屉? 我笑而不...
    開封第一講書人閱讀 58,532評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮鳞贷,結果婚禮上坯汤,老公的妹妹穿的比我還像新娘。我一直安慰自己搀愧,他們只是感情好惰聂,可當我...
    茶點故事閱讀 67,585評論 6 392
  • 文/花漫 我一把揭開白布疆偿。 她就那樣靜靜地躺著,像睡著了一般搓幌。 火紅的嫁衣襯著肌膚如雪杆故。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,462評論 1 302
  • 那天溉愁,我揣著相機與錄音反番,去河邊找鬼。 笑死叉钥,一個胖子當著我的面吹牛罢缸,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播投队,決...
    沈念sama閱讀 40,262評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼枫疆,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了敷鸦?” 一聲冷哼從身側響起息楔,我...
    開封第一講書人閱讀 39,153評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎扒披,沒想到半個月后值依,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,587評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡碟案,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,792評論 3 336
  • 正文 我和宋清朗相戀三年愿险,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片价说。...
    茶點故事閱讀 39,919評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡辆亏,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出鳖目,到底是詐尸還是另有隱情扮叨,我是刑警寧澤,帶...
    沈念sama閱讀 35,635評論 5 345
  • 正文 年R本政府宣布领迈,位于F島的核電站彻磁,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏狸捅。R本人自食惡果不足惜衷蜓,卻給世界環(huán)境...
    茶點故事閱讀 41,237評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望薪贫。 院中可真熱鬧恍箭,春花似錦、人聲如沸瞧省。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至交洗,卻和暖如春骑科,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背构拳。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評論 1 269
  • 我被黑心中介騙來泰國打工咆爽, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人置森。 一個月前我還...
    沈念sama閱讀 48,048評論 3 370
  • 正文 我出身青樓斗埂,卻偏偏與公主長得像,于是被迫代替她去往敵國和親凫海。 傳聞我的和親對象是個殘疾皇子呛凶,可洞房花燭夜當晚...
    茶點故事閱讀 44,864評論 2 354

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn)行贪,斷路器漾稀,智...
    卡卡羅2017閱讀 134,656評論 18 139
  • 《ilua》速成開發(fā)手冊3.0 官方用戶交流:iApp開發(fā)交流(1) 239547050iApp開發(fā)交流(2) 1...
    葉染柒丶閱讀 10,735評論 0 11
  • Spring Boot 參考指南 介紹 轉載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,810評論 6 342
  • 寫在前面 本篇文章是《The Python Tutorial》(3.6.1),第九章建瘫,類的譯文崭捍。 9. Class...
    理查德成閱讀 749評論 0 8
  • 中華瑰寶, 詩詞歌賦啰脚, 唐宋文風繪景色殷蛇。 七律五言四六句。 婉約優(yōu)雅醉煞人拣播。 春兩江南晾咪, 田園牧歌收擦, 字數(shù)隨少意境...
    王王建國閱讀 377評論 0 0