Python 入門:基本文法,python基本文法
對於多數從其他程式設計語言轉入Python的來說,或多或少會有些不習慣。如果沿用其他程式設計語言的文法來寫Python代碼,那麼碰壁是不可避免的了。
本文是基於我看了兩個小時的官方文檔(Python 2.7 : https://docs.python.org/2/tutorial/index.html , 至於我學習Python2.x的原因:工作需要),
從中提取的重要的細節,以避免再次踩坑。
先上一個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)
- 檔案頭
- 注釋
- 代碼塊,縮排
- 基礎資料型別 (Elementary Data Type)
- 控制語句
- if, elif, else
- loop : for, while
- 程式入口:main 函數
1、檔案頭
作為一個指令碼語言,檔案頭指定一些執行環境等,是很常見的事情。在shell中就很常見的。
那麼對於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不支援的,那麼需要指定檔案編碼。格式是:
#-*- coding: encoding -*-
2、注釋
python 的注釋:
多行注釋: 用成對的3個單引號或者3個雙引號組成 (例如當前位置) 單行注釋:使用#
3、代碼塊,縮排
代碼塊:從上面的Foo.py檔案中,很容易可以看出,代碼塊是以 冒號 : 開始的。不論是function定義,if,else,還是loop(for, while)
都是用 : 作為代碼塊的開始。不是用 { } 來包括代碼塊的。
縮排:Python的程式中,不是用 { } 來包括代碼塊的,用縮排來維持代碼塊的。不是不要寫 tab,用4個空格為縮排。
4、基礎資料型別 (Elementary Data Type)4.1 String4.2 Number4.3 Boolean
類似於JavaScript,Python的boolean也是多變的。
以下幾種情況是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__()的傳回值