03 先了解一些python的基礎語法

2021-10-11 01:43:05 字數 4087 閱讀 2754

注意:

剛開始,縮排的語法可能讓你搞不清楚,何時縮排,何時回退,該縮排幾個空格。但多寫寫,多看看,很快就能掌握,並不再犯錯。python的縮排語法設計有別與其它所有的語言,是獨家特色,一直爭論很大,喜歡的非常喜歡,覺得簡潔明瞭,節省了不少功夫,而且強制**整齊。不喜歡的,覺得縮來縮去,頭都暈了,容易犯語法錯誤,並且不能使用規格化工具。

同一行寫多條語句:

前面我們說了,python一行通常就是一條語句,一條語句通常也不會超過一行。其實,從語法層面,python並沒有完全禁止在一行中使用多條語句,也可以使用分號實現多條語句在一行,比如:

import sys; x = 『多條語句』; sys.stdout.write(x + 『\n』)

上面這一行其實包含3條語句,用分號分隔了,但是強烈建議不要這麼做,這樣會導致**閱讀困難、維護耗時,容易出錯,老老實實地用三行來表示,不但更優雅,還增加了**行數,可以跟老闆說今天多寫了2行,_。

多行語句: 前面是多條語句在一行,但如果一條語句實在太長,也是可以占用多行的,可以使用反斜槓()來實現多行語句:

string=「i love this country,」\+「because it is very beautiful!」\+「how do you think about it?」 \+「do you like it too?」

在 , {}, 或 () 中的多行語句,可以不需要使用反斜槓(),直接回車,接著寫。例如:

result=subprocess**.popen(「ipconfig /all」, stdin=subprocess.pipe, stdout=subprocess.pipe, stderr=subprocess.pipe, shell=true, check=**true)

pep8建議:每一行的字元不超過79個。該換行時咱就換行!

pass語句是佔位語句,它什麼都不做,只是為了保證語法的正確性而寫。以下場景中,可以使用pass語句:

舉個栗子:

#我只想說明這個func函式需要三個引數,具體執行什麼並不重要

#但是函式體內如果什麼都沒有,會出現語法錯誤

#這個時候,pass就是最好的選擇。deffunc(a,b,c):pass

空白行、空白字元與**縮排不同,並不是python語法的一部分。空行或者空白字元會被當做空氣一樣的忽略。連續的空行或空白字元和單獨的空白行幾字元沒有區別。書寫時不插入空白行或空白字元,python直譯器執行也不會出錯。但是空白的作用在於分隔兩段不同功能或含義的**,便於日後**的維護或重構。

pep8對於空行留白有專門的建議。

函式之間或類的方法之間用空行分隔,表示一段新的**的開始。類和函式入口之間也用一行空行分隔,以突出函式入口的開始。

變數賦值的時候等號左右各給乙個空白。逗號後面跟乙個空白。

看下面的**,作為標準的**規範,在規定的地方留有規定的空白行和空白字元。

#!/usr/bin/env python # -- coding:utf-8 -- class foo: pass def func(a, b): pass ifname== 『main』: pass

後面的字串資料型別章節會有更深入的字串介紹。這裡作為乙個前期的知識鋪墊。

字串,表示一段連續的字元,可以是有意義的單詞、片語、語句,也可是無意義的字元組合。不在於它內部是由什麼組成的,而在於它是否被引號引起來的。

比如, abc可能是個變數,但是"abc"肯定是個字串!(再次強調,**的世界沒有中文標點,所有的符號型別都是英文半形!千萬不要搞錯了!)

在python中,被引號括起來的都是字串,這個引號可以是單引號,雙引號,甚至3引號。

python中單引號和雙引號的作用完全相同。但是注意:在其它語言中雙引號引起來的才是字串,單引號引起來的是字元!例如c。例如json!所以很多同學在做json格式轉換時,經常發生使用單引號,導致轉換失敗的問題。

使用三引號(』』'或""")可以指定乙個多行字串

轉義符 『\『,用來特殊轉義,例如\r\n,\。它可以將引號轉義為單純的引號,沒有任何作用的引號。

原生字串: 通過在字串前加r或r,如 r"this is a line with \n",表示這個字串裡的斜槓不需要轉義,等同於自身。因此,例子中的\n會顯示出來,並不是換行。

unicode字串:加字首u或u, 如 u"this is an unicode string"。

bytes型別:加字首b,如b」this is a bytes data」。但是s=b「哈哈」,這種是不行的!

字串是不可變型別。

字串會自動串聯,如「i" 「love" 「you"會被自動轉換為」i love you」。

這裡有些內容可能不好理解,沒有關係,往後接著看。

現在,我們已經開始寫一些簡單的python**和語句了,犯錯是免不了的,python給我們提供了很全面細緻的錯誤呼叫棧資訊,幫助我們查詢錯誤。以下面的**為例(我額外給包括空行在內的每一行新增了行號資訊):

def foo(s): 

return 10 / int(s)

def bar(s):

return foo(s)

def main():

bar('0')

main()

#執行**後,會彈出如下的錯誤: traceback (most recent call last): file "f:/python/pycharm/201705/1.py", line 10, in main() file "f:/python/pycharm/201705/1.py", line 8, in main bar('0') file "f:/python/pycharm/201705/1.py", line 5, in bar return foo(s) * 2 file "f:/python/pycharm/201705/1.py", line 2, in foo return 10 / int(s) zerodivisionerror: division by zero

​ 這些資訊就是錯誤提示。我們需要從上往下讀,英文看起來很複雜,其實很易懂。traceback…表示追蹤錯誤開始,說在某個位置的1.py檔案的第10行中的main這個函式出了問題。那麼問題出在哪呢?是1.py檔案中的第8行的bar函式呼叫出了問題,那麼出什麼問題呢?還沒找到根子,又說在第5行,第2行呼叫出了問題,然後最終發現是return 10 / int(s)這行語句的問題。問題是什麼,發生了除零錯誤!zerodivisionerror是乙個除零異常。到這裡,我們恍然大悟,我讓10除0了,所以出現錯誤了,那麼就知道怎麼改了。

​ 這些資訊就是錯誤提示。我們需要從上往下讀,英文看起來很複雜,其實很易懂。traceback…表示追蹤錯誤開始,說在某個位置的1.py檔案的第10行中的main這個函式出了問題。那麼問題出在哪呢?是1.py檔案中的第8行的bar函式呼叫出了問題,那麼出什麼問題呢?還沒找到根子,又說在第5行,第2行呼叫出了問題,然後最終發現是return 10 / int(s)這行語句的問題。問題是什麼,發生了除零錯誤!zerodivisionerror是乙個除零異常。到這裡,我們恍然大悟,我讓10除0了,所以出現錯誤了,那麼就知道怎麼改了。

​ 其實查詢錯誤,排除錯誤就是這麼簡單,只是需要你耐心的一行行地檢視錯誤呼叫棧,再根據最後的錯誤型別,就可以判斷錯誤的發生原因並修改錯誤,沒有想象中的那麼複雜。更不要直接將錯誤甩給別人或者老師!那種張嘴就是「我這裡出錯了,是什麼原因?」的提問方式,是最沒有水平的。

RabbitMQ RabbitMQ的一些基礎概念

工作中使用的是rabbitmq,需要對其進行熟悉。使用之前,弄清楚它是什麼東西,解決什麼問題。開發中,有一些任務並無須實時執行,比如 如上,儲存日誌表 傳送郵件等任務的實時性並不強,在系統繁忙時有可能阻塞,堵塞容易導致任務失敗。如果我們把它們放入佇列中,輪候執行,減低耦合的同時,是不是也緩解了系統壓...

了解一些概念

學習並了解些以下概念 paas paas是platform as a service的縮寫,意思是平台即服務。把伺服器平台作為一種服務提供的商業模式。通過網路進行程式提供的服務稱之為saas software as a service 而雲計算時代相應的伺服器平台或者開發環境作為服務進行提供就成為了...

python中關於print函式的一些基本用法

在剛剛接觸python程式語言的時候,覺得print函式是真個語言裡面最簡單的函式了,直到後來進行深入探索後發現了print函式裡有很多需要我們平時注意的地方 print 向直譯器輸出結果 首先print函式的基本結構 print var tuple,sep end n var tuple 稱為可變...