Python 入門:基本語法

對於多數從其餘編程語言轉入Python的來講,或多或少會有些不習慣。若是沿用其餘編程語言的語法來寫Python代碼,那麼碰壁是不可避免的了。html

本文是基於我看了兩個小時的官方文檔(Python 2.7 : https://docs.python.org/2/tutorial/index.html , 至於我學習Python2.x的緣由:工做須要),python

從中提取的重要的細節,以免再次踩坑。shell

 

先上一個Python文件(Foo.py):編程

#!python
# -*- coding: utf-8 -*-

'''
python 的註釋:
    多行註釋: 用成對的3個單引號或者3個雙引號組成 (例如當前位置)
    單行註釋:使用#
'''

# 定義一個foo函數,用於把指定msg打印 count次
"""
    params:
        count: int, 打印的次數
        msg: string,消息內容
        useFor:屢次打印時,是否採用for loop。
    raise:
        ValueError : 當count<0時拋出
"""
def foo(count=1, msg='Hello'+' '+ "Foo", useFor=1):
    if count < 0 :
        raise ValueError('count < 0')
    if useFor : # 0,1 能夠用做bool斷定
        print("print use for, count = " + bytes(count) +" :")
        for i in range(count):    # range(N),會生成一個從0到N的list,剛好能夠用做索引
            print(msg+' '+bytes(i))
    else:
        print("print use while, count = " + bytes(count)+" :")
        i = 0
        while i < count:
            print(msg+" "+bytes(i))
            i+=1    # python中不支持 i++的寫法,支持 i+= 的寫法


if __name__ == '__main__' : 
    print('main in Foo.py')
    foo(2,useFor=1)
    foo(useFor=0, count=3);
    foo(-1)
    

 

 

一、文件頭

做爲一個腳本語言,文件頭指定一些執行環境等,是很常見的事情。在shell中就很常見的。app

那麼對於Python腳本,也有一樣的內容:編程語言

1.1 指定解釋器

腳本語言,很常見的配置:函數

#!/bin/sh           shell腳本
#!/usr/bin/perl     perl腳本
#!/usr/bin/python   python腳本
#!/usr/bin/python3  python3腳本
#!/usr/bin/python2  python2腳本

而有時不太清楚腳本解釋器的具體全路徑名;或者開發環境與運行環境的安裝路徑不一樣。爲了保證兼容性,也能夠寫做:
#!/usr/bin/env python3
這樣運行時會自動搜索腳本解釋器的絕對路徑。

1.2 指定文件編碼

py文件的默認編碼是ASCII,上面的腳本中不少都是ASCII不支持的,那麼須要指定文件編碼。格式是:oop

#-*- coding: encoding -*-

 

二、註釋

 python 的註釋:學習

    多行註釋: 用成對的3個單引號或者3個雙引號組成 (例如當前位置)
    單行註釋:使用#

三、代碼塊,縮進

代碼塊:從上面的Foo.py文件中,很容易能夠看出,代碼塊是以 冒號 : 開始的。不管是function定義,if,else,仍是loop(for, while)測試

都是用 : 做爲代碼塊的開始。不是用 { } 來包括代碼塊的。

縮進:Python的程序中,不是用 { } 來包括代碼塊的,用縮進來維持代碼塊的。不要寫 tab,用4個空格爲縮進。

 

四、基本數據類型

4.1 String

Python中的字符串與JavaScript中的字符串同樣,既可使用單引號,也可使用雙引號。

不會像Shell那樣具有轉義。若是須要對字符轉義,使用 \ ,若是你不想要 字符串內部的 \ 表明轉義,那須要在第一個引號前加上 r 。例如:

#!python
#-*- coding: utf-8 -*-

'''
Python String,
1)表示字符串:用單引號或者雙引號。他們是等價的,不存在取值轉義等問題
2)字符串內的\表示轉義
3)若是不但願字符串內的\表示轉義,須要在字符串前加上 r 。
4)斷定兩個字符串是否相等,相似於JavaScript,用 == 便可 
5)兩個字符串拼接,使用 + 便可
6)String 與 Number 拼接,不能直接使用 +
'''
def testString(): a = 'aaa' b = "aaa" print(a==b) print(a==b) c = "\n" d = r"\n" print(c) print(d) print(c == d) if __name__ == '__main__' : print('current module name is "' + __name__+'"') testString()

 

4.2 Number

 

#!python
#-*- coding: utf-8 -*-

'''
Python String,
1)對於數字,Python與JavaScript仍然是相似的,沒有那麼多的限制
2)能夠在數字上直接進行 + - * / 運算
3)String 與 Number 拼接,不能直接使用 +
'''
def testNumber():
    a = 1    # int 
    b = 1.0 # float
    c = 1.1
    print(a==b)
    print(b<c)
    print(a + (b - c * 3) / 2 )
    d = "1"
    print(a == d)
    print(bytes(1)+d)

 

4.3 Boolean

相似於JavaScript,Python的boolean也是多變的。

True, False 分別表示真、假

如下幾種狀況是false:
1.None
2.False
3.任何類型的數字0,包括0,0.0,0L,0j
4.空的序列(sequence)或者映射(mapping)類型對象
5.對於用戶自定義類型的對象,若是其類定義了__nonzero__() 或者 __len__()特殊方法而且返回False或者0

對於最後一條規則,有幾點須要說明:
1.若是類沒有定義這兩個方法中的任何一個,則這種類型的對象真值測試時老是爲True
2.若是類同時定義了__nonzero__() 和 __len__(),只會參考__nonzero__()的返回值

 

如下幾種狀況是false:1.None2.False3.任何類型的數字0,包括0,0.0,0L,0j4.空的序列(sequence)或者映射(mapping)類型對象5.對於用戶自定義類型的對象,若是其類定義了__nonzero__() 或者 __len__()特殊方法而且返回False或者0
對於最後一條規則,有幾點須要說明:1.若是類沒有定義這兩個方法中的任何一個,則這種類型的對象真值測試時老是爲True2.若是類同時定義了__nonzero__() 和 __len__(),只會參考__nonzero__()的返回值

 

def testBoolean():
    a = True
    b = False
    print(a!=b)
    if(3):
        print("3 is True")

if __name__ == '__main__' : 
    print('current module name is "' + __name__+'"')
    testBoolean()

 

五、 變量

Python中的變量,能夠分爲 local variable, global variable。

1)local variable 的做用與在一個代碼塊內部

2)global variable 的做用與在一個Python的module (一個 py文件) 內。它屬於模塊對象的。若是 A module 中定義了 一個global 變量 a, B module import 了 A, B仍然不能直接使用 A模塊的global 變量 a(例如不能 print a),而應該經過 A.a來使用。

聲明 global 變量須要使用 global 關鍵字,且有兩步,先聲明後賦值。

聲明local 變量,不須要額外的關鍵字。

#!python
#-*- coding: utf-8 -*-

'''
全局變量
'''
global moduleName
moduleName = __name__

a = 1
def printModuleName():
    print(a+1)
    print(__name__)
    print(moduleName)

'''
if __name__ == '__main__' : 
    print('current module name is "' + __name__+'"')
'''

printModuleName()
print(a)

 

六、異常捕獲與處理

Java中的try ... catch .. finally,在Python中也有相似的處理機制:try ... except ... else ... finally ...

 

七、參數 * 與 **

在Python中,可變參數用 *表示,本質是有個tuple。 keyworld參數用 **表示

相關文章
相關標籤/搜索