來自一名java開發人員的python學習(基礎語法)

交互式運行

可以不用寫文件,直接CLI執行以下命令

python

就可以繼續如同cli界面運行,及時反饋

下劃線

以下劃線開頭的標識符是有特殊意義的。以單下劃線開頭 _foo 的代表不能直接訪問的類屬性,需通過類提供的接口進行訪問,不能用 from xxx import * 而導入。

以雙下劃線開頭的 foo 代表類的私有成員,以雙下劃線開頭和結尾的__foo 代表 Python 裏特殊方法專用的標識,如 init() 代表類的構造函數。

縮進

爲了避免各種系統帶來閱讀上的差異,使用空格代替tab,一般採用4個

引號

  • 單引號
  • 雙引號
  • 三個單引號

變量賦值

a = b = c = 1
a, b, c = 1, 2, "john"

pass

Python pass 是空語句,是爲了保持程序結構的完整性。
pass 不做任何事情,一般用做佔位語句。

#!/usr/bin/python
# -*- coding: UTF-8 -*- 
 
# 輸出 Python 的每個字母
for letter in 'Python':
   if letter == 'h':
      pass
      print '這是 pass 塊'
   print '當前字母 :', letter
 
print "Good bye!"

執行後結果如下

當前字母 : P
當前字母 : y
當前字母 : t
這是 pass 塊
當前字母 : h
當前字母 : o
當前字母 : n
Good bye!

注意h還是被打印了,這說明pass和continue是不一樣的,pylthon本身也是有continue的

list

數據類型

python的列表中數據類型可以不一樣,這點和java.util.List更像,和[]倒是不一樣


list1 = ['physics', 'chemistry', 1997, 2000]
list2 = [1, 2, 3, 4, 5 ]
list3 = ["a", "b", "c", "d"]

元組

元組相當於只讀的list

運算

** 冪 - 返回x的y次冪 a**b 爲10的20次方, 輸出結果 100000000000000000000

取整除

// 取整除 - 返回商的整數部分(向下取整)

>>> 9//2
4
>>> -9//2
-5

邏輯運算符

and x and y 布爾"與" - 如果 x 爲 False,x and y 返回 False,否則它返回 y 的計算值。 (a and b) 返回 20。
or x or y 布爾"或" - 如果 x 是非 0,它返回 x 的值,否則它返回 y 的計算值。 (a or b) 返回 10。
not not x 布爾"非" - 如果 x 爲 True,返回 False 。如果 x 爲 False,它返回 True。 not(a and b) 返回 False
注意python使用的是單詞而不是符號來進行邏輯運算

成員運算符

in 如果在指定的序列中找到值返回 True,否則返回 False。 x 在 y 序列中 , 如果 x 在 y 序列中返回 True。
not in 如果在指定的序列中沒有找到值返回 True,否則返回 False。 x 不在 y 序列中 , 如果 x 不在 y 序列中返回 True

is is 是判斷兩個標識符是不是引用自一個對象 x is y, 類似 id(x) == id(y) , 如果引用的是同一個對象則返回 True,否則返回 False
is not is not 是判斷兩個標識符是不是引用自不同對象 x is not y , 類似 id(a) != id(b)。如果引用的不是同一個對象則返回結果 True,否則返回 False。

控制語句

if & while

這個和java類似,只是用後接冒號代替了用括號括起來

for

var

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
for letter in 'Python':     # 第一個實例
   print '當前字母 :', letter
 
fruits = ['banana', 'apple',  'mango']
for fruit in fruits:        # 第二個實例
   print '當前水果 :', fruit
 
print "Good bye!"

這種foreach的方式在java中稱爲增強的for循環

index

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
fruits = ['banana', 'apple',  'mango']
for index in range(len(fruits)):
   print '當前水果 :', fruits[index]
 
print "Good bye!"

這種是通過下標來取數據

else

常規使用

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
for num in range(10,20):  # 迭代 10 到 20 之間的數字
   for i in range(2,num): # 根據因子迭代
      if num%i == 0:      # 確定第一個因子
         j=num/i          # 計算第二個因子
         print '%d 等於 %d * %d' % (num,i,j)
         break            # 跳出當前循環
   else:                  # 循環的 else 部分
      print num, '是一個質數'

注意這裏的else是和break搭配使用的,對於一個for(這裏是裏面的那個),只會觸發一個.由於break一般是配合if使用,所以這裏也可以看作是那個ifelse,這個結論大致正確,更詳盡的研究參見python中else的研究

函數

def

return

關鍵字參數

使用關鍵字參數時參數順序可以任意

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
#可寫函數說明
def printinfo( name, age ):
   "打印任何傳入的字符串"
   print "Name: ", name
   print "Age ", age
   return
 
#調用printinfo函數
printinfo( age=50, name="miki" )

默認參數

不定長參數

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
# 可寫函數說明
def printinfo( arg1, *vartuple ):
   "打印任何傳入的參數"
   print "輸出: "
   print arg1
   for var in vartuple:
      print var
   return
 
# 調用printinfo 函數
printinfo( 10 )
printinfo( 70, 60, 50 )

匿名函數

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
# 可寫函數說明
sum = lambda arg1, arg2: arg1 + arg2
 
# 調用sum函數
print "相加後的值爲 : ", sum( 10, 20 )
print "相加後的值爲 : ", sum( 20, 20 )

全局變量和局部變量

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
total = 0 # 這是一個全局變量
# 可寫函數說明
def sum( arg1, arg2 ):
   #返回2個參數的和."
   total = arg1 + arg2 # total在這裏是局部變量.
   print "函數內是局部變量 : ", total
   return total
 
#調用sum函數
sum( 10, 20 )
print "函數外是全局變量 : ", total

調用結果如下

函數內是局部變量 :  30
函數外是全局變量 :  0

注意全局變量並未改變
如果想使用全局變量需要使用globe來聲明

total = 0  # 這是一個全局變量

# 可寫函數說明
def sum(arg1, arg2):
    global total
    print(total)
    total = 3
    return total


# 調用sum函數
sum(10, 20)
print("函數外是全局變量 : ", total)

注意變量要先聲明後使用,這意味着上面的語句中globe不能在print語句下面,並且global total=3是不合法的

異常

捕獲異常

大致格式如下

try:
<語句>        #運行別的代碼
except <名字><語句>        #如果在try部份引發了'name'異常
except <名字><數據>:
<語句>        #如果引發了'name'異常,獲得附加的數據
else:
<語句> 

當然,也支持finally

try:
<語句>
finally:
<語句>    #退出try時總會執行

拋出異常

raise [Exception [, args [, traceback]]]

定義異常

異常應該是典型的繼承自Exception類,通過直接或間接的方式。以下爲與RuntimeError相關的實例,實例中創建了一個類,基類爲RuntimeError,用於在異常觸發時輸出更多的信息。在try語句塊中,用戶自定義的異常後執行except塊語句,變量 e 是用於創建Networkerror類的實例。

class Networkerror(RuntimeError):
    def __init__(self, arg):
        self.args = arg

在你定義以上類後,你可以觸發該異常,如下所示:

try:
    raise Networkerror("Bad hostname")
except Networkerror,e:
    print e.args
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章