天天看點

這就是我學習python的理由,入門教程1小時帶你學會它

  比起java來,這就是我學習python的理由,Python入門教程 超詳細1小時帶你學會它

  本文适合有經驗的程式員盡快進入Python世界.特别地,如果你掌握Java和Javascript,不用1小時你就可以用Python快速流暢地寫有用的Python程式。

  為什麼使用Python

  假設我們有這麼一項任務:簡單測試區域網路中的電腦是否連通.這些電腦的ip範圍從192.168.0.101到192.168.0.200.

  思路:用shell程式設計.(Linux通常是bash而Windows是批處理腳本).例如,在Windows上用ping ip 的指令依次測試各個機器并得到控制台輸出.由于ping通的時候控制台文本通常是"Reply from ... " 而不通的時候文本是"time out ... " ,是以,在結果中進行字元串查找,即可知道該機器是否連通.

  實作:Java代碼如下:

  String cmd="cmd.exe ping ";

  String ipprefix="192.168.10.";

  int begin=101;

  int end=200;

  Process p=null;

  for(int i=begin;i

  p=Runtime.getRuntime().exec(cmd+i);

  String line=null;

  BufferedReader reader=new BufferedReader(new InputStreamReader(p.getInputStream()));

  while((line=reader.readLine()) !=null)

  {

  //Handling line , may logs it.

  }

  reader.close();

  p.destroy();

  這段代碼運作得很好,問題是為了運作這段代碼,你還需要做一些額外的工作.這些額外的工作包括:

  編寫一個類檔案編寫一個main方法将之編譯成位元組代碼由于位元組代碼不能直接運作,你需要再寫個小小的bat或者bash腳本來運作.

  當然,用C/C++同樣能完成這項工作.但C/C++不是跨平台語言.在這個足夠簡單的例子中也許看不出C/C++和Java實作的差別,但在一些更為複雜的場景,比如要将連通與否的資訊記錄到網絡資料庫.由于Linux和Windows的網絡接口實作方式不同,你不得不寫兩個函數的版本.用Java就沒有這樣的顧慮.

  在這裡說一句,小編是一名python開發工程師,這裡有我自己整理的整套python學習資料和路線,想要這些資料的都可以關注小編,并私信“07”領取。

  同樣的工作用Python實作如下:、

  import subprocess

  cmd="cmd.exe"

  begin=101

  end=200

  while begin

  p=subprocess.Popen(cmd,shell=True,stdout=subprocess.PIPE,

  stdin=subprocess.PIPE,

  stderr=subprocess.PIPE)

  p.stdin.write("ping 192.168.1."+str(begin)+"

  ")

  p.stdin.close()

  p.wait()

  print "execution result: %s"%p.stdout.read()

  對比Java,Python的實作更為簡潔,你編寫的時間更快.你不需要寫main函數,并且這個程式儲存之後可以直接運作.另外,和Java一樣,Python也是跨平台的.

  有經驗的C/Java程式員可能會争論說用C/Java寫會比Python寫得快.這個觀點見仁見智.我的想法是當你同時掌握Java和Python之後,你會發現用Python寫這類程式的速度會比Java快上許多.例如操作本地檔案時你僅需要一行代碼而不需要Java的許多流包裝類.各種語言有其天然的适合的應用範圍.用Python處理一些簡短程式類似與作業系統的互動程式設計工作最省時省力。

  Python應用場合

  足夠簡單的任務,例如一些shell程式設計.如果你喜歡用Python設計大型商業網站或者設計複雜的遊戲,悉聽尊便

  2 快速入門2.1 Hello world

  安裝完Python之後(我本機的版本是2.5.4),打開IDLE(Python GUI) , 該程式是Python語言解釋器,你寫的語句能夠立即運作.我們寫下一句著名的程式語句:

  print "Hello,world!"

  并按回車.你就能看到這句被K&R引入到程式世界的名言.

  在解釋器中選擇"File"--"New Window" 或快捷鍵 Ctrl+N , 打開一個新的編輯器.寫下如下語句:

  raw_input("Press enter key to close this window");

  儲存為a.py檔案.按F5,你就可以看到程式的運作結果了.這是Python的第二種運作方式.

  找到你儲存的a.py檔案,輕按兩下.也可以看到程式結果.Python的程式能夠直接運作,對比Java,這是一個優勢

  2.2 國際化支援

  我們換一種方式來問候世界.建立一個編輯器并寫如下代碼:

  print "歡迎來到奧運中國!"

  在你儲存代碼的時候,Python會提示你是否改變檔案的字元集,結果如下:

  # -- coding: cp936 --

  将該字元集改為我們更熟悉的形式:

  # -- coding: GBK --

  print "歡迎來到奧運中國!" # 使用中文的例子

  raw_input("Press enter key to close this window");2.3 友善易用的電腦

  用微軟附帶的電腦來計數實在太麻煩了.打開Python解釋器,直接進行計算:

  a=100.0

  b=201.1

  c=2343

  print (a+b+c)/c2.4 字元串,ASCII和UNICODE

  可以如下列印出預定義輸出格式的字元串:

  print """

  Usage: thingy [OPTIONS]

  -h Display this usage message

  -H hostname Hostname to connect to

  """

  字元串是怎麼通路的?請看這個例子:

  word="abcdefg"

  a=word[2]

  print "a is: "+a

  b=word[1:3]

  print "b is: "+b # index 1 and 2 elements of word.

  c=word[:2]

  print "c is: "+c # index 0 and 1 elements of word.

  d=word[0:]

  print "d is: "+d # All elements of word.

  e=word[:2]+word[2:]

  print "e is: "+e # All elements of word.

  f=word[-1]

  print "f is: "+f # The last elements of word.

  g=word[-4:-2]

  print "g is: "+g # index 3 and 4 elements of word.

  h=word[-2:]

  print "h is: "+h # The last two elements.

  i=word[:-2]

  print "i is: "+i # Everything except the last two characters

  l=len(word)

  print "Length of word is: "+ str(l)

  請注意

買二手手機号

ASCII和UNICODE字元串的差別:

  print "Input your Chinese name:"

  s=raw_input("Press enter to be continued");

  print "Your name is : "+s;

  l=len(s)

  print "Length of your Chinese name in asc codes is:"+str(l);

  a=unicode(s,"GBK")

  l=len(a)

  print "I'm sorry we should use unicode char!Characters number of your Chinese \

  name in unicode is:"+str(l);2.5 使用List

  類似Java裡的List,這是一種友善易用的資料類型:

  word=['a','b','c','d','e','f','g']

  print "b is: "

  print b # index 1 and 2 elements of word.

  print "c is: "

  print c # index 0 and 1 elements of word.

  print "d is: "

  print d # All elements of word.

  print "e is: "

  print e # All elements of word.

  print "f is: "

  print f # The last elements of word.

  print "g is: "

  print g # index 3 and 4 elements of word.

  print "h is: "

  print h # The last two elements.

  print "i is: "

  print i # Everything except the last two characters

  print "Adds new element"

  word.append('h')

  print word

  2.6 條件和循環語句

  # Multi-way decision

  x=int(raw_input("Please enter an integer:"))

  if x<0:

  x=0

  print "Negative changed to zero"

  elif x==0:

  print "Zero"

  else:

  print "More"

  # Loops List

  a=['cat', 'window', 'defenestrate']

  for x in a:

  print x, len(x)

  2.7 如何定義函數

  # Define and invoke function.

  def sum(a,b):

  return a+b

  func=sum

  r=func(5,6)

  print r

  # Defines function with default argument

  def add(a,b=2):

  r=add(1)

  r=add(1,5)

  并且,介紹一個友善好用的函數:

  # The range() function

  a=range(5,10)

  print a

  a=range(-2,-7)

  a=range(-7,-2)

  a=range(-2,-11,-3) # The 3rd parameter stands for step

  2.8 檔案I/O

  spath="D:/download/baa.txt"

  f=open(spath,"w") # Opens file for writing.Creates this file doesn't exist.

  f.write("First line 1.

  f.writelines("First line 2.")

  f.close()

  f=open(spath,"r") # Opens file for reading

  for line in f:

  print line

  2.9 異常處理

  s=raw_input("Input your age:")

  if s=="":

  raise Exception("Input must no be empty.")

  try:

  i=int(s)

  except ValueError:

  print "Could not convert data to an integer."

  except:

  print "Unknown exception!"

  else: # It is useful for code that must be executed if the try clause does not raise an exception

  print "You are %d"% i," years old"

  finally: # Clean up action

  print "Goodbye!"

  2.10 類和繼承

  class Base:

  def __init__(self):

  self.data=[]

  def add(self, x):

  self.data.append(x)

  def addtwice(self, x):

  self.add(x)

  # Child extends Base

  class Child(Base):

  def plus(self,a,b):

  oChild=Child()

  oChild.add("str1")

  print oChild.data

  print oChild(2,3)2.11 包機制

  每一個.py檔案稱為一個module,module之間可以互相導入.請參看以下例子:

  # a.py

  def add_func(a,b):

  # b.py

  from a import add_func # Also can be : import a

  print "Import add_func from module a"

  print "Result of 1 plus 2 is: "

  print add_func(1,2) # If using"import a" , then here should be "a.add_func"

  module可以定義在包裡面.Python定義包的方式稍微有點古怪,假設我們有一個parent檔案夾,該檔案夾有一個child子檔案夾.child中有一個module a.py . 如何讓Python知道這個檔案層次結構?很簡單,每個目錄都放一個名為_init_.py 的檔案.該檔案内容可以為空.這個層次結構如下所示:

  parent

  --__init_.py

  --child

  -- __init_.py

  --a.py

  b.py

  那麼Python如何找到我們定義的module?在标準包sys中,path屬性記錄了Python的包路徑.你可以将之列印出來:

  import sys

  print sys.path

  通常我們可以将module的包路徑放到環境變量PYTHONPATH中,該環境變量會自動添加到sys.path屬性.另一種友善的方法是程式設計中直接指定我們的module路徑到sys.path 中:

  sys.path.append('D:\download')

  from parent.child.a import add_func

  print add_func(1,2)總結

  你會發現這個教程相當的簡單.許多Python特性在代碼中以隐含方式提出,這些特性包括:Python不需要顯式聲明資料類型,關鍵字說明,字元串函數的解釋等等.我認為一個熟練的程式員應該對這些概念相當了解,這樣在你擠出寶貴的一小時閱讀這篇短短的教程之後,你能夠通過已有知識的遷移類比盡快熟悉Python,然後盡快能用它開始程式設計.

  當然,1小時學會Python頗有嘩衆取寵之嫌.确切地說,程式設計語言包括文法和标準庫.文法相當于國術招式,而标準庫應用實踐經驗則類似于内功,需要長期鍛煉.Python學習了Java的長處,提供了大量極友善易用的标準庫供程式員"拿來主義".(這也是Python成功的原因),在開篇我們看到了Python如何調用Windows cmd的例子,以後我會盡量寫上各标準庫的用法和一些應用技巧,讓大家真正掌握Python.

  但不管怎樣,至少你現在會用Python代替繁瑣的批處理寫程式了.希望那些真的能在一小時内讀完本文并開始使用Python的程式員會喜歡這篇小文章,謝謝!

  最後多說一句,小編是一名python開發工程師,這裡有我自己整理的整套python學習資料和路線,想要這些資料的都可以關注小編,并私信“07”領取。