十分鐘看懂python3語言特性
看了王垠的《如何掌握所有程序語言》,感觸甚深。如果說程序語言有其通用規律的話,那就是語言特性,也就是這些語言的通用概念。這些概念的具體語法的形式可能都不一樣,但是所內涵的功能是一致的,比如英語中的bird和漢語中鳥,其實指的都是同一種事物,關鍵是它們怎么運作的,而不是它們的形式是什么。
掌握語言特性,一開始要掌握最基本、最簡單的概念和用法,然后由簡單到復雜。不是讓你從頭到尾的學,而是先掌握框架,再逐漸豐富。
下面,嘗試寫出python的語言特性。
一、字符串和數
1.字符串
所有在單引號‘ ’、雙引號“ ”、三引號‘’‘ ’‘’和“”“ ”“”里面的單詞、句子和數字等都是字符串。其中三個引號可以換行。
‘good’
'''123
456'''
2.數字
數字不用加引號,包括整數,浮點數(帶小數點的數和科學計數法的數)和復數。
1
3.14156
10E-10
(1+2j)
二、變量
字符串、數、函數、數據結構、類、類的屬性等對象通過 = 賦值給變量。
a=55
b='good'
c=[1, 2, 3]
變量分為公共變量,特殊變量和私有變量.
1.公共變量。名稱前后不帶或_,可以正常使用。
2.特殊變量。名稱前后帶或_,一般在Python里有特殊用途,如
_main_
_name_
3.私有變量。名稱前帶或_,不應該被直接引用。
三、算術運算
1.加減乘除,大于小于等于,變成二進制位移,以及二進制求同求異。
2.優先級跟數學算術一樣。
3.字符串也可以進行算數運算
'abc'*3
四、數據結構
數據結構,Data Structures,就是儲存數據的容器。數據包括字符串和數等對象。
四種數據結構:
1.列表[list],可以增刪修改。
2.元組(tuple),不能修改。
3.字典,dict,格式如{key:value},可以增刪修改。
4.集合,{set },儲存key,不儲存value,可以增刪。
五、控制結構
1.if
如果...那么。
if ... :
代碼塊
elif ...:
代碼塊
else:
代碼塊
2.while
如果是TRUE,那么執行下面代碼。
while True:
代碼塊
3.for
for ....in 循環,可迭代出(就是一個個取出)列表、元組、字典和字符串等對象里的元素。
for n in [1,2,3]:
print(n)
4.break和continue
break和continue用在 if,while和for里面。
break是停止所有循環,continue是停止執行本次循環中continue下面的語句,繼續執行下個循環。
六、函數定義
python有內置函數和自定義函數。內置函數是python定義好的,知道名稱就可以直接使用,自定義函數就是用def去定義。
1.定義一個函數,def
def 函數名(參數):
代碼塊
return ...
-
參數類別
參數共有五種
def 函數名(位置參數,默認參數,*可變參數,**關鍵字參數,命名關鍵字參數):
代碼塊
return
(1)位置參數
放在函數名稱的( )里,且不帶*,也不在 *參數 后的參數。
舉例
def add(x):
return x*x
這個x就是位置參數
(2)默認參數
在函數名稱后面的( )里,給參數賦值的參數。
舉例
def add(n,k=2):
reutrn n+k
add(4) #只需要給n賦值即可
這里面的k就是默認參數。
(3)可變參數
可變參數,是指傳入參數的個數可以變化,從0到任意個參數,均可。
形式為
def 函數名稱(*可變參數):
代碼塊
舉例
def calc(*n):
sun=0
for x in n:
sum=sum+x
return sum
calc(1,2)
num=[1,2,3] #如果傳入的是個列表,則在列表名稱前面加上*
calc(*num)
num=(1,2,3)#如果傳入的是個元組,則在元組名稱前面加上*
calc(*num)
(4)關鍵字參數
關鍵字參數,是指參數名稱的個數,可變化,可以放一個參數名稱到任意個參數名稱。這些參數名稱會自動組成一個字典。
形式為
def 函數名稱(**關鍵字參數):
代碼塊
舉例
def add(**kw):
print(kw)
add(num1=1,num2=2) #必須寫成 參數名稱=對象 的形式。
#結果顯示如下
{'num1':1,'num2'=2}
(5)命名關鍵字參數
命名關鍵字參數限制關鍵字參數名稱的個數。有兩種形式
- 一種是在*后面的參數
def add(*,命名關鍵字參數名稱1,命名關鍵字參數名稱2)
舉例如下:
def add(*,flower,tree):
print(flower,tree)
add(flower='rose',tree='apple')
#結果顯示
rose apple
- 一種是在 *可變參數 后面的參數
def add(*可變參數,命名關鍵字參數)
舉例如下:
def add(*person,flower,tree):
print(person,flower,tree)
country=['China','America']
add(*country,flower='rose',tree='apple')
#結果顯示如下
('China', 'America') rose apple
七、函數調用
函數調用格式如下
(1)變量=函數名稱(參數 )
a=abs(-5) #abs是求絕對值的內置函數。
(2)變量=函數名稱
? 變量(參數)
a=abs
a(-5)
八、遞歸
遞歸就是函數的套用。就是函數里套用一個函數。
使用方法:
def 函數(參數):
? 代碼塊
? return 函數(參數)
舉例,求1+2+3+...+(n-1)+n的和
def fact(n):
if n==1:
return 1
return n*fact(n-1)
九、類型推導
1.推導式
推導式,英文名稱Comprehensions,又稱生成式。類型有三種,列表推導式,字典推導式和集合推導式,三種方式的語法結構都差不多。
[關于n的表達式 for n in collection if 條件]
舉例如下
[x+x for x in range(1,10)]
[n+n for n in range(1,20) if n%2==1]
{ key_expr: value_expr for value in collection if condition }
{ expr for value in collection if condition }
2.生成器
生成器,generator。可以實現一邊循環一遍計算,一次生成一個數。
生成器有兩種語法結構
(1)把列表生成式的[ ] 改成( )即可
舉例
g=(x+x for x in range(10))
next(g) #可以不斷成數字
for n in g: #可以全部打出來
print(n)
(2)把函數里的print 改成 yield即可。
舉例
def add(n):
yield n
next(add(5))
十、lambda函數
lambda,又稱匿名函數。語法結構為:
lambda x:表達式
舉例如下
a=lambda x:x*x
a(5)
十一、面向對象——class
類,即class,語法形式為
class 類名稱(父類名稱): #如果沒有父類名稱,就寫object
pass
參考: