python基礎教程系列1-基礎語法

      最近在學習python,主要經過廖雪峯的python教程入門,看看本身可以花多少時間最快入門。經過寫博客梳理本身的知識點,強化本身的記憶。總的學習思路是,快速學習一遍教程,而後作一些算法題目實踐,再而後就找幾個小項目練手。html

     python是解釋性語言,沒有編譯運行,直接運行獲得結果,運行過程當中逐行翻譯獲得二進制文件,慢!不會獲得exe這種文件。python

  • 安裝運行python

    廖雪峯學習的python版本是python3.7 .在ubuntu 16.04版本中,系統默認安裝 了python 2.7和3.5版本,所以參考資料安裝python3.7。默認同時安裝python編輯器cPython。算法

    打開終端後,輸入python啓動python進入Python交互模型,而後輸入exit()退出python交互模式。ubuntu

   用文本編輯器寫Python程序,而後保存爲後綴爲.py的文件,就能夠用Python直接運行這個程序了。瀏覽器

 運行python.py程序有兩種方法:服務器

  1)python xxx.py網絡

  2)在xxx.py文件裏面最前面加上數據結構

#!/usr/bin/env python3
而後經過命令給python程序執行權限
chmod a+x hello.py

 而後能夠執行經過./xxx.py直接運行程序了。app

  • 輸入input(),輸出print()
name = input()
print('hello',name)
  • 縮進組織程序結構

      Python使用縮進來組織代碼塊,請務必遵照約定俗成的習慣,堅持使用4個空格的縮進。以#開頭的語句是註釋,註釋是給人看的,能夠是任意內容,解釋器會忽略掉註釋。其餘每一行都是一個語句,當語句以冒號:結尾時,縮進的語句視爲代碼塊。編輯器

# print absolute value of an integer:
a = 100
if a >= 0:
    print(a)
else:
    print(-a)
  • 數據類型

    字符串是使用‘’ 、「」引發來的文本,若是字符串內部既包含'又包含"怎麼辦?能夠用轉義字符\來標識,Python容許用'''...'''的格式表示多行內容。

    空值使用None表示。

    python是動態語言,聲明一個變量不須要指定數據類型,能夠隨便賦予不一樣的數據類型。

a = 123 # a是整數
print(a)
a = 'ABC' # a變爲字符串
print(a)

  所有大寫的變量名字表示常量。

數據類型轉換

Python內置的經常使用函數還包括數據類型轉換函數,好比int()函數能夠把其餘數據類型轉換爲整數:

>>> int('123') 123
>>> int(12.34) 12
>>> float('12.34') 12.34
>>> str(1.23) '1.23'
>>> str(100) '100'
>>> bool(1) True >>> bool('') False

 

  • 字符編碼(這塊常常忘記,記住UTF-8)

     ASCII編碼和Unicode編碼的區別:ASCII編碼是1個字節,而Unicode編碼一般是2個字節。對於英文用Unicode編碼比ASCII編碼須要多一倍的存儲空間,在存儲和傳輸上就十分不划算。因此,本着節約的精神,又出現了把Unicode編碼轉化爲「可變長編碼」的UTF-8編碼。UTF-8編碼把一個Unicode字符根據不一樣的數字大小編碼成1-6個字節,經常使用的英文字母被編碼成1個字節,漢字一般是3個字節,只有很生僻的字符纔會被編碼成4-6個字節。若是你要傳輸的文本包含大量英文字符,用UTF-8編碼就能節省空間,其實UTF-8包含了ASCII編碼。

    在計算機內存中,統一使用Unicode編碼,當須要保存到硬盤或者須要傳輸的時候,就轉換爲UTF-8編碼。

    用記事本編輯的時候,從文件讀取的UTF-8字符被轉換爲Unicode字符到內存裏,編輯完成後,保存的時候再把Unicode轉換爲UTF-8保存到文件。

   瀏覽網頁的時候,服務器會把動態生成的Unicode內容轉換爲UTF-8再傳輸到瀏覽器:

  •   Python的字符串

    Python3的字符串使用Unicode編碼,使用ord()編碼,chr()進行解碼。以Unicode表示的str經過encode()方法能夠編碼爲指定的bytes:

>>> 'ABC'.encode('ascii')
b'ABC'
>>> '中文'.encode('utf-8')
b'\xe4\xb8\xad\xe6\x96\x87'

  若是咱們從網絡或磁盤上讀取了字節流,那麼讀到的數據就是bytes。要把bytes變爲str,就須要用decode()方法:

>>> b'ABC'.decode('ascii')
'ABC'
>>> b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8')
'中文'

  要計算str包含多少個字符,能夠用len()函數:len('hello'), len()函數計算的是str的字符數,若是換成byteslen()函數就計算字節數:len(b'ABC')。

因爲Python源代碼也是一個文本文件,因此,當你的源代碼中包含中文的時候,在保存源代碼時,就須要務必指定保存爲UTF-8編碼。當Python解釋器讀取源代碼時,爲了讓它按UTF-8編碼讀取,咱們一般在文件開頭寫上這兩行:

#!/usr/bin/env python3 # -*- coding: utf-8 -*-

第一行註釋是爲了告訴Linux/OS X系統,這是一個Python可執行程序,Windows系統會忽略這個註釋;

第二行註釋是爲了告訴Python解釋器,按照UTF-8編碼讀取源代碼,不然,你在源代碼中寫的中文輸出可能會有亂碼。

申明瞭UTF-8編碼並不意味着你的.py文件就是UTF-8編碼的,必須而且要確保文本編輯器正在使用UTF-8 without BOM編碼。

  • 格式化輸出

%運算符就是用來格式化字符串的。在字符串內部,%s表示用字符串替換,%d表示用整數替換,有幾個%?佔位符,後面就跟幾個變量或者值,順序要對應好。若是隻有一個%?,括號能夠省略。不須要像c語言同樣在中間隔開前面輸出和%之間的內容。要加引號。

>>> 'Hello, %s' % 'world'
'Hello, world'
>>> 'Hi, %s, you have $%d.' % ('Michael', 1000000) 'Hi, Michael, you have $1000000.'
print('%2d-%02d' % (3, 1)) print('%.2f' % 3.1415926)

字符串裏面的%是一個普通字符怎麼辦?這個時候就須要轉義,用%%來表示一個%。

name = ['d','z'] for x in name: print('%s' %(x))#要加引號
  • 條件判斷和循環
if <條件判斷1>: <執行1>
elif <條件判斷2>: <執行2>
elif <條件判斷3>: <執行3>
else: <執行4>
age = 20
if age >= 6: print('teenager') elif age >= 18: print('adult') else: print('kid')

for循環:for x in ...循環就是把每一個元素代入變量x,而後執行縮進塊的語句。

names = ['Michael', 'Bob', 'Tracy'] for name in names: print(name)

while循環:

sum = 0 n = 99
while n > 0: sum = sum + n n = n - 2
print(sum)
  • 數據結構

順序存儲數據結構:

list列表:可變大小的有序表,類比vector,使用[ ]表示。len()得到list的大小。使用索引訪問元素,第一個是0,最後一個可使用-1進行訪問。裏面的元素類型能夠不一樣。

經常使用函數操做:append,insert,pop,pop(i)

>>> classmates.append('Adam') >>> classmates ['Michael', 'Bob', 'Tracy', 'Adam'] #在指定位置插入元素
>>> classmates.insert(1, 'Jack') >>> classmates ['Michael', 'Jack', 'Bob', 'Tracy', 'Adam'] #彈出末尾元素
>>> classmates.pop() 'Adam'
>>> classmates ['Michael', 'Jack', 'Bob', 'Tracy'] #彈出制定位置元素
>>> classmates.pop(1) 'Jack'
>>> classmates ['Michael', 'Bob', 'Tracy'] #替換某個元素
>>> classmates[1] = 'Sarah'
>>> classmates ['Michael', 'Sarah', 'Tracy']

tuple / ˈtʌpəl/元組:使用( )表示。定義好以後就不能改變其中的元素和元組的大小了。只有1個元素的tuple定義時必須加一個逗號,裏面的元素加入一個list,就能夠改變tuple中list中的元素。

>>> t = ('a', 'b', ['A', 'B']) >>> t[2][0] = 'X'
>>> t[2][1] = 'Y'
>>> t ('a', 'b', ['X', 'Y'])

關係型數據結構:

dict字典:使用{ }表示。dict全稱dictionary,在其餘語言中也稱爲map,使用鍵-值(key-value)存儲,具備極快的查找速度。因爲一個key只能對應一個value,因此,屢次對一個key放入value,後面的值會把前面的值沖掉:

>>> d = {'Michael': 95, 'Bob': 75, 'Tracy': 85} >>> d['Michael'] 95

把數據放入dict的方法,除了初始化時指定外,還能夠經過key放入,記住key不能更改!因此list不能做爲dict的key。

>>> d['Adam'] = 67
>>> d['Adam'] 67

判斷key是否存在dictionary的方法有兩種:

1)經過in判斷key是否存在:

>>> 'Thomas' in d False

2)經過dict提供的get()方法,若是key不存在,能夠返回None,或者本身指定的value:

>>> d.get('Thomas')#None不顯示
>>> d.get('Thomas', -1) -1

要刪除一個key,用pop(key)方法,對應的value也會從dict中刪除:

>>> d.pop('Bob') 75
>>> d {'Michael': 95, 'Tracy': 85}

set:只存key,不存value,key不能重複。

要建立一個set,須要提供一個list做爲輸入集合:

>>> s = set([1, 2, 3]) >>> s {1, 2, 3}

經過add(key)方法能夠添加元素到set中

經過remove(key)方法能夠刪除元素:

>>> s.add(4) >>> s {1, 2, 3, 4} >>> s.remove(4) >>> s {1, 2, 3} >>> a = ['c', 'b', 'a'] >>> a.sort() >>> a ['a', 'b', 'c']

對於不變對象來講,調用對象自身的任意方法,也不會改變該對象自身的內容。相反,這些方法會建立新的對象並返回,這樣,就保證了不可變對象自己永遠是不可變的。

>>> a = 'abc'
>>> a.replace('a', 'A') 'Abc'
>>> a 'abc'
  • 函數

     能夠到Python官網上查看文檔,也可使用help()查看制定函數的幫助。

   函數名其實就是指向一個函數對象的引用,徹底能夠把函數名賦給一個變量,至關於給這個函數起了一個「別名」:

  定義函數:在Python中,定義一個函數要使用def語句,依次寫出函數名、括號、括號中的參數和冒號:,而後,在縮進塊中編寫函數體,函數的返回值用return語句返回。

def my_abs(x): if x >= 0: return x else: return -x

空函數:若是想定義一個什麼事也不作的空函數,能夠用pass語句:

def nop(): pass

pass語句什麼都不作,那有什麼用?實際上pass能夠用來做爲佔位符,好比如今還沒想好怎麼寫函數的代碼,就能夠先放一個pass,讓代碼能運行起來。缺乏了pass,代碼運行就會有語法錯誤。

返回多個值,其實就是一個tuple元組:

import math def move(x, y, step, angle=0): nx = x + step * math.cos(angle) ny = y - step * math.sin(angle) return nx, ny

 默認參數要放在參數表的後面,賦值的時候,默認參數必須指向不變對象。若是指向可變對象,就會以下所示:

def add_end(L=[]): L.append('END') return L >>> add_end() ['END'] >>> add_end() ['END', 'END']

默認參數是[],可是函數彷佛每次都「記住了」上次添加了'END'後的list。

緣由解釋以下:

Python函數在定義的時候,默認參數L的值就被計算出來了,即[],由於默認參數L也是一個變量,它指向對象[],每次調用該函數,若是改變了L的內容,則下次調用時,默認參數的內容就變了,再也不是函數定義時的[]了。

要改成指向不變對象None:

def add_end(L=None): if L is None: L = [] L.append('END') return L

可變參數

def calc(numbers): sum = 0 for n in numbers: sum = sum + n * n return sum #調用的時候須要組裝一個list/tuple
>>> calc([1, 2, 3]) 14

#將函數參數改爲可變參數形式
def calc(*numbers): sum = 0 for n in numbers: sum = sum + n * n return sum >>> calc(1, 2, 3) 14

Python容許你在list或tuple前面加一個*號,把list或tuple的元素變成可變參數傳進去:

>>> nums = [1, 2, 3] >>> calc(*nums) 14

可變參數適用於函數參數不肯定的時候

相關文章
相關標籤/搜索