天天看點

第二章 Python的基本文法2.1 檔案類型2.2 Python的編碼規範2.3 變量和常量2.4 資料類型2.5 運算符與表達式

第二章 Python的基本文法

  • 2.1 檔案類型
    • 2.1.1 源代碼
    • 2.1.2 位元組代碼
    • 2.1.3 優化代碼
  • 2.2 Python的編碼規範
    • 2.2.1 命名規則
      • 1.變量名、包名、子產品名
      • 2.類名、對象名
      • 3.函數名
    • 2.2.2 代碼縮進與冒号
    • 2.2.3 子產品導入的規範
    • 2.2.4 使用空行分隔代碼
    • 2.2.5 正确的注釋
    • 2.2.6 語句的分隔
  • 2.3 變量和常量
    • 2.3.1 變量的命名
    • 2.3.2 變量的指派
    • 2.3.3 局部變量
    • 2.3.4全局變量
    • 2.3.5 常量
  • 2.4 資料類型
    • 2.4.1 數字
    • 2.4.2 字元串
  • 2.5 運算符與表達式
    • 2.5.1 算術運算符和算數表達式
    • 2.5.2 關系運算符和關系表達式
    • 2.5.3 邏輯運算符和邏輯表達式

2.1 檔案類型

2.1.1 源代碼

源代碼的擴充名以py結尾,可在控制台下運作。Python 語言寫的程式不需要編譯成二進制代碼,可以直接運作源代碼。

2.1.2 位元組代碼

Python 源檔案編譯後生成 pyc 字尾的檔案, pyc 是編譯過的位元組檔案,這種檔案不能使用文本 編輯工具打開或修改。

pyc 檔案是與平台無關的,是以 Python 的程式可以運作在 Windows、 UNIX、 Linux 等作業系統上。 py檔案直接運作後即可得到 pyc 類型的檔案,或通過腳本生成該類型的檔案。

2.1.3 優化代碼

擴充名為 pyo 的檔案是優化過的據檔案, pyo 類型的檔案需要用指令行工具生成。 pyo 檔案也不能使用文本編輯工具打開或修改。

2.2 Python的編碼規範

2.2.1 命名規則

1.變量名、包名、子產品名

# Filename:ruleModule.py

  _rule = "rule information" 
           

【代碼說明】:1.第 1 行代碼聲明子產品的名稱,子產品名采用小寫。 也可以不指定子產品名,以 py字尾的檔案就是一個子產品。子產品名就是檔案名。

2.第 3 行代碼定義了一個全局變量_rule。

2.類名、對象名

類名首字母采用大寫,對象名采用小寫。類的屬性和方法名以對象作為字首。類的私有變量、私有方法以兩個下劃線作為字首。

class Student:  # 定義名為Sudent的類,類名首字母大寫
     __name = ""  # 定義一個私有執行個體變量,變量名前有兩個下劃線
     def __init__(self,name):
        self.__name = name
      def getname(self):  # 定義一個公有方法,方法名首字母小寫,其後每個單詞字首母大寫
          return self.__name   
           

3.函數名

函數名通常采用小寫,并用下劃線或單詞首字母大寫增加名稱的可讀性,導入的函數以子產品名作字首。

2.2.2 代碼縮進與冒号

Python 對代碼縮進要求非常嚴格,使用冒号和代碼縮進區分代碼之間的層次。如果程式中不采用代碼縮進的編碼風格,将抛出一個IndentationError。在編碼時建議采用4空格縮進,不建議Tab

2.2.3 子產品導入的規範

子產品是類或函數的集合,用于處理一類問題,如果需要在程式中調用标準庫或其他第三方庫的類,需要先使用 import 或 from…import … 語句導入相關的子產品。

  1. import 語句
# 規範導入方式
  import sys  # 使用import語句導入sys子產品

  print(sys.path)  # 輸出Pyhton環境下的查找的路徑的集合
  print(sys.argv)  # sys.argv是存儲輸入參數的清單,預設情況下,argv是自帶的參數是檔案名。
           

輸出結果如下:

  1. from…import… 語句

    使用 from …import… 語句導入與使用 import 語句導入有所不同,差別是前者隻導人子產品中的一部分内容,并在目前的命名空間中建立導人對象的引用; 而後者在目前程式的命名空間中建立導入子產品的引用,進而可以使用“ sys .path ”的方式調用 sys 子產品中的内容。

# 不規範導入方式
  from sys import path
  from sys import argv
 
  print(path)
  print(argv)
           

【代碼說明】:第 5,6 行代碼直接調用 path, argv 清單的内容,沒有子產品名的限定,但這種寫法不夠規範。如果程式比較複雜,導人了很多子產品,閱讀程式的人并不了解 path、 argv 來自哪個子產品。而通過 sys.path 、 sys. argv 的寫法可以清楚地知道 path 、argv 來自 sys 子產品。

2.2.4 使用空行分隔代碼

函數之間或類的方法之間用空行分隔,表示一段新的代碼的開始。類和函數入口之間也用一行空行分隔,突出函數入口的開始。

空行與代碼縮進不同,空行并不是Python文法的一部分。書寫時不插入空行,Python解釋器運作也不會出錯,但是空行的作用在于分隔兩端不同功能或含義的代碼,便于日後代碼的維護或重構。

class A:
     def funX(self):
         print("funY()")
							# 插入空行
     def funY(self):
         print("funY()")
           

2.2.5 正确的注釋

如果隻對一行代碼注釋,使用“ #”加若幹空格開始,後面是注釋的内容。如果對一段代碼進行注釋,也使用“#”,段落之間以一個“#”行分隔。 Python 會忽略“#”行的内容,跳過“#”行執行後面的内容。

# note - show Python ’ s note 
 # Copyright (C) 2008 bigmarten 
 # 
 # This program is free software. you can redistribute it and/or modify 
 # it under the terms of the GNU General Public License as published by 
 # the Free Software Foundation 
 # 
 ################################################# 
 # 
 # Version is 1 O 
 # 
 # Its contents are calculate payment 
           

2.2.6 語句的分隔

Python中的分号可以省略,主要通過換行來識别語句的結束。

# 下面兩句話是等價的
  print("hello world!")
  print("hello world!");
           

如果要在一行中書寫多個語句,就必須使用分号分隔了,否則python無法識别語句之間的間隔。

# 使用分号分隔語句
  x = 1; y = 1; z = 1
           

Python支援多行寫一條語句,Python使用“\”作為換行符,在實踐中,一條語句寫在多行也是很常見的,例如SQL語句

sql = "select id,name"\
        "from dept"\
        "where name = 'A'"
   print(sql) 
           

輸出結果:

2.3 變量和常量

變量是計算機記憶體中的一塊區域,變量可以存儲任何值,而且值可以改變。常量是一塊隻讀的記憶體區域,常量一旦初始化就不能修改。

2.3.1 變量的命名

變量由字母、數字或下劃線組成。變量的第 1 個字元必須是字母或下劃線,其他字元可以由字母、數字或下劃線組成。例如:

var_1 = 1  
  _var2 = 2
           

2.3.2 變量的指派

Python中的變量不需要聲明,變量的指派操作即是變量聲明和定義的過程。每個變量在記憶體中建立,都包括變量的辨別、名稱和資料這些資訊。

例如:

x =1

第二章 Python的基本文法2.1 檔案類型2.2 Python的編碼規範2.3 變量和常量2.4 資料類型2.5 運算符與表達式

Python 中一次新的指派,将建立一個新的變量。即使變量的名稱相同,變量的辨別并不相同。

# 一次新的指派操作将建立一個新的變量
  x = 1
  print(id(x))
  x = 2
  print(id(x))

           

第3行輸出代碼:

11229424

第5行輸出代碼:

11229412

Python 支援對一些變量同時指派的操作,例如:

# 給多個變量指派
  a = (1,2,3)  # 定義序列a
  (x,y,z) = a  # 把序列a的值分别賦給x,y,z
  print("x=", x) 
  print("y=", y)
  print("z=", z)
           

2.3.3 局部變量

局部變量是隻能在函數或代碼段内使用的變量。函數或代碼段一旦結束,局部變量的生命周期也就結束。局部變量的作用範圍隻在其被建立的函數内有效。

Python建立的變量就是一個對象,Python會管理變量的生命周期。

Python對變量的回收采用的是垃圾回收機制。

2.3.4全局變量

全局變量是能夠被不同的函數、類或檔案共享的變量,在函數之外定義的變量都可以稱為全局變量。全局變量可以被檔案内部的任何函數和外部檔案通路。

全局變量通常在檔案的開始處定義,并且使用關鍵字global引用全局變量。

例如:

_a = 1
  _b = 2

  def add():
      global _a
      _a = 3
      return "_a+_b=", _a+_b

  print(add()) 
           

避免使用全局變量。

2.3.5 常量

Python沒有提供定義常量的關鍵字,但可自定義。

class _const:  # 定義常量類一const
     class ConstError(TypeError): pass  # 繼承自TypeError
     def __setattr__(self,name,value): 
        if self.__dict__.has_key(name):  # 如果_diet_中不包含對應的key則抛出錯誤 
           raise self.ConstError,"Can't rebind const (%s )"%name 
        self.__diet__[name] = value 
  import sys 
  sys.modules[__name__] =_const ()  # 将const注冊進sys.modules的全局dict中

           

調用const

import const  # 導入子產品
  const.magic = 23  # 定義常量
  const.magic = 33  # 修改常量,抛出異常
           

異常:

2.4 資料類型

Python 有幾種内置的資料類型一一數字、字元串、元組、清單和字典。

2.4.1 數字

Python3 的數字類型分為整型、浮點型、布爾型、分數類型、複數類型。使用 Python 編寫程式時,不需要聲明變量的類型。由 Python 内置的基本資料類型來管理變量,在程式的背景實作數值與類型的關聯,以及類型轉換等操作。

2.4.2 字元串

在 Python 中有 3 種表示字元串的方式一一單引号、雙引号、三引号,單引号和雙引号的作用是一樣的,三引号中可以輸入單引号、雙引号或換行等字元。

2.5 運算符與表達式

2.5.1 算術運算符和算數表達式

求幂:x**y

除法運算"/"的結果不會取整,例如1/2結果為0.5

Python的算術表達式具有結合性和優先性。

2.5.2 關系運算符和關系表達式

<、<=、>、>= 4 個運算符的優先級别相等,= =、!=的優先級别相等。而<、<=、>、>= 的優先級别大于 !=、= =的優先級别。例如: a>=b=c 等價于(a>=b)=c。

關系運算符的優先級低于算術運算符。

2.5.3 邏輯運算符和邏輯表達式

與或非 and or not

邏輯非的優先級大于邏輯與和邏輯或的優先級,而邏輯與和邏輯或的優先級相等。邏輯運算符的優先級低于關系運算符,必須先計算關系運算符,然後再計算邏輯運算符。

例如:

先執行 1<=2 的關系運算表達式,再執行表達式 1>1+2,最後執行 or 運算。

輸出結果: