python之——最入門的python基礎知識學習

一、Python介紹

    Python是一種解釋型、面向對象、動態數據類型的高級程序設計語言,Python由Guido van Rossum於1989年底發明,第一個公開發行版發行於1991年,像Perl語言一樣, Python 源代碼同樣遵循 GPL(GNU General Public License)協議。
    ython的3.0版本,常被稱爲Python 3000,或簡稱Py3k,相對於Python的早期版本,這是一個較大的升級,爲了不帶入過多的累贅,Python 3.0在設計的時候沒有考慮向下兼容。

Python安裝:

下載Python安裝程序:
https://www.python.org/ftp/python/2.7.14/python-2.7.14rc1.amd64.msi
在下載python的時候,一定要下載對應自己系統的版本

Pip

和yum、apt-get一樣,自動從服務器中安裝python庫
在linux系統中自帶了python,但是沒有pip程序,ubuntu可以使用sudo apt install python-pip或python3-pip(yum install pip)

編輯器

sublime text
pycharm

中文亂碼解決

python腳本亂碼,在python腳本最前面加上

#coding:utf-8

調整windows命令行亂碼

chcp 65001

二、標識縮進

註釋

python中單行註釋採用 # 開頭
python 中多行註釋使用三個單引號(''')或三個雙引號(""")
在編寫python程序的時候,最好編寫註釋,方便修改代碼,排錯

標識(變量)

標識(變量)命名規則

1.在 Python 裏,標識符由字母、數字、下劃線組成
2.在 Python 中,所有標識符可以包括英文、數字以及下劃線(_),但不能以數字開頭
3.Python 中的標識符是區分大小寫的
4.以下劃線開頭的標識符是有特殊意義的。以單下劃線開頭 _foo 的代表不能直接訪問的類屬性,需通過類提供的接口進行訪問,不能用 from xxx import * 而導入
5.以雙下劃線開頭的 __foo 代表類的私有成員;以雙下劃線開頭和結尾的 __foo__ 代表 Python 裏特殊方法專用的標識,如 __init__() 代表類的構造函數

6.命名時不能與保留標識符重名

Python保留標識符:
and  exec  not  assert  finally  or  break  for  pass  class  from  print  continue  global  raise  def  if  return  del  import  elif  in  while  else  is  with  except  lambda  yield

標識縮進

學習 Python 與其他語言最大的區別就是,Python 的代碼塊不使用大括號 {} 來控制類,函數以及其他邏輯判斷,python 最具特色的就是用縮進(空格)來寫模塊,縮進的空白數量是可變的,但是所有代碼塊語句必須包含相同的縮進空白數量,這個必須嚴格執行。
Python語句中一般以新行作爲爲語句的結束符,但是我們可以使用斜槓(\)將一行的語句分爲多行顯示
Python可以在同一行中使用多條語句,語句之間使用分號(;)分割,不同行不需要寫分號

三、輸入輸出

輸出

print
        輸出內容
print,
        輸出內容並且不換行
print type()
        輸出數據類型

輸入

raw_input
        python中使用此函數接收命令行輸入的內容(交互)

四、數據類型

numbers(數字)

Int(有符號整型)
a=100
float(浮點型)
b=1.29
long(長整型[也可以代表八進制和十六進制])
c=111111111111111111111111
complex(複數)
d=1+2j

string(字符串)

定義

單行:str="sadasd"

多行:
str1='''
12
34
'''

下標

    從左到右索引默認0開始的,最大範圍是字符串長度少1
    從右到左索引默認-1開始的,最大範圍是字符串開頭

切片

    通過變量名字來進行數據切割(取出字符串的數值)
    print str[0:3:2]
    第一個數是從哪個下標開始,第二個數是在哪個下標結束,第三個數是步長(隔幾個數取一個)

增刪改查

增(拼接字符串)
使用+進行拼接
注意:無法拼接不同類型,比如字符串和數字,需要使用str函數將數字強制轉換爲字符串,或者使用格式化

del , 推薦使用切片操作


    .前的str爲字符串名
    str.strip()
        去除兩邊空格,如果指定字符就是去除指定字符
    str.lstrip()
        去除左邊的空格,如果指定字符就是去除指定字符
    str.rstrip()
        去除右邊的空格,如果指定字符就是去除指定字符


    .前的str爲字符串名
    str.find()
        從開頭查找到字符串的下標,找到返回第一次出現的位置,沒找到返回-1
    str.rfind()
        從結尾查找到字符串的下標,找到返回第一次出現的位置(從開頭數),沒找到返回-1

轉義符

格式化

特定格式符格式化

Python 支持格式化字符串的輸出,儘管這樣可能會用到非常複雜的表達式,但最基本的用法是將一個值插入到一個有字符串格式符%s的字符串中

格式化符號:
            

使用:

插入單個
        print "薩達薩達%s" %"阿達"
插入多個
        print "這是%s%d" %(str4,555)
可使用變量,也可直接輸入

format()格式化函數格式化

Python2.6開始,新增了一種格式化字符串的函數str.format(), 它增強了字符串格式化的功能,基本語法是通過(}和:來代替以前的%,format函數可以接受不限個參數,位置可以不按順序。

使用:
1.不設置指定位置,按默認順序
    print "阿達外網{}{}".format("22","asdas")
2.指定位置(0開始)
     print "阿達外網{1}{0}".format("22","asdas")
可使用變量,也可直接輸入

list(列表)

介紹

 List(列表) 是 Python 中使用最頻繁的數據類型
列表可以完成大多數集合類的數據結構實現,它支持字符,數字,字符串甚至可以包含列表(即嵌套)。
列表用 [ ] 標識,是 python 最通用的複合數據類型

a = ['fff', 2434, ['erwr', 242 ] ]

切片

截取從第一個指定位置到另一指定位置中間的值

sublist = list1[0:3]
print sublist

截取指定位置的值

print list1[2]

列表增刪改查

增:
append()
在list1後面追加元素

list1.append(1)
print list1

insert()
在list1指定位置後追加元素

list1.insert(1,'b')
print list1

extend()
在list1後面追加另一個一個數組

list2=[5,5]
list1.extend(list2)
print list1

刪:
del list1[]
刪除指定位置的值

del list1[0]
print list1

list1.pop()
刪除最後一個值

list1.pop()
print list1

list1.remove()
刪除第一個指定的值

list1.remove(1)
print list1

改:=
直接對應位置賦值

list1[2]=10
print list1


in
判斷元素是否在列表內

print 9 in list1
print 2 in list1

tuple(元組)

介紹

元組是另一個數據類型,類似於List(列表),元組用"()"標識,內部元素用逗號隔開,但是元組不能二次賦值,相當於只讀列表
除了修改數據,其他使用同列表list

dictionary(字典)

介紹

字典(dictionary)是除列表以外python之中最靈活的內置數據結構類型,列表是有序的對象結合,字典是無序的對象集合。
兩者之間的區別在於:字典當中的元素是通過鍵來存取的,而不是通過偏移存取
字典用"{ }"標識,字典由索引(key)和它對應的值value組成

dict = {"name":"lp","age":"24"}

字典鍵要求
不允許同一個鍵出現兩次。創建時如果同一個鍵被賦值兩次,後一個值會被記住
鍵必須不可變,所以可以用數字,字符串或元組充當,所以用列表就不行

增加值

dict = {"name":"lp","age":"24"}
dict["a"]="bbb"

五、運算符

算術運算符

以下假設變量: a=10, b=20:
    +
        兩個對象相加
        a+b輸出結果30
    -
        得到負數或是一個數減去另一個數
        a- b輸出結果-10
    *
        兩個數相乘或是返回一個被重複若千次的字符串
        a* b輸出結果200
    /
        x除以y
        b/a輸出結果2
    %
        返回除法的餘數
        b%a輸出結果0
    **
        返回x的y次冪
        a**b爲10的20次方,輸出結果1000000000000000000
    //
        取整除-返回商的整數部分
        9//2輸出結果4 , 9.0//2.0 輸出結果4.0

比較運算符

以下假設變量a爲10,變量b爲20:
    ==
        等於-比較對象是否相等
        (a == b)返回False
    !=
        不等於-比較兩個對象是否不相等
        (a != b)返回true
    <>
        不等於-比較兩個對象是否不相等
        (a <> b)返回true, 這個運算符類似!=
    >
        大於-返回x是否大於y
        (a> b)返回False
    <
        小於-返回x是否小於y。所有比較運算符返回1表示真,返回0表示假。這分別與特殊的變量True和False等價。注意,這些變量名的大寫。
        (a < b)返回true
    >=
        大於等於-返回x是否大於等於y
        (a>= b)返回False
    <=
        小於等於-返回x是否小於等於y
        (a <= b)返回true

賦值運算符

以下假設變量a爲10,變量b爲20:
    =
        簡單的賦值運算符
        c=a+b將a+ b的運算結果賦值爲C
    ==
        C +=a等效於C=C+ a
        加法賦值運算符
    _=
        減法賦值運算符
        c-=a等效於c=c-a
    *=
        乘法賦值運算符
        C*=a等效於c=C*a
    /=
        除法賦;值運算符
        c/=a等效於C=C/ a
    %=
        取模賦值運算符
        C%=a等效於C=C%a
    **=
        冪賦值運算符
        C**=a等效於c=C**a
    //=
        取整除賦值運算符
        c//=a等效於C=C// a

位運算符

    &
        按位與運算符:參與運算的兩個值,如果兩個相應位都爲1,則該位的結果爲1,否則爲0 
        (a & b)輸出結果12,二進制解釋: 0000 1100
    |
        按位或運算符:只要對應的二個二進位有一個爲1時,結果位就爲1
        (a | b)輸出結果61,二進制解釋: 0011 1101
    ^
        按位異或運算符:當兩對應的二進位相異時,結果爲1
        (a ^ b)輸出結果49,二進制解釋: 0011 0001
    ~
        按位取反運算符:對數據的每個二進制位取反,即把1變爲0,把0變爲1,~x 類似於-x-1
        (~a ) 輸出結果-61,二進制解釋: 1100 0011,在一個有符號二進制數的補碼形式。
    <<
        左移動運算符:運算數的各二進位全部左移若干位,由"<<"右邊的 數指定移動的位數,高位丟棄,低位補0。
        a << 2輸出結果240,二進制解釋: 1111 0000
    >>
        右移動運算符:把">>"左邊的運算數的各二進位全部右移若干位,">>"右邊的數指定移動的位數
        a >> 2輸出結果15,二進制解釋: 0000 1111

邏輯運算符

以下假設變量a爲10,變量b爲20:
    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

六、流程控制

條件語句

Python條件語句是通過一條或多條語句的執行結果(True或者False)來決定執行的代碼塊

用法

if 判斷條件:
    執行語句……
elif 判斷條件:
    執行語句……
else:
    執行語句……

循環語句

程序在一般情況下是按順序執行的,編程語言提供了各種控制結構,允許更復雜的執行路徑,循環語句允許我們執行一個語句或語句組多次

While循環

while 語句用於循環執行程序,即在某條件下,循環執行某段程序,以處理需要重複處理的相同任務。

用法

基本
while 判斷條件:
    執行語句……
python中while可以和else一起使用
while 判斷條件:
    執行語句……
else:
    執行語句……

for循環

Python for循環可以遍歷任何序列的項目,如一個列表,一個字符串或者一個元組,字典

用法

for x in range(1,100,2):
    print x

注:range(1,100,2)  1到100,隔2取一個數(可隨意替換爲列表,字符串等)

循環控制

continue是跳過本次循環,繼續下一個循環
pass是python中一個特殊的功能,pass是空語句,是爲了保持程序結構的完整性(佔位)

for x in range(1,99):
    pass

break語句用來終止循環語句,即循環條件沒有False條件或者序列還沒被完全遞歸完,也會停止執行循環語句。break語句用在while和for循環中

七、函數

介紹

函數是組織好的,可重複使用的,用來實現單一,或相關聯功能的代碼段,能提高應用的模塊性和代碼的重複利用率
Python裏提供了許多內建函數,比如print(),並且我們也可以自己創建函數,也就是用戶自定義函數

自定義函數

定義規則

函數代碼塊以 def 關鍵詞開頭,後接函數標識符名稱和圓括號()
任何傳入參數和自變量必須放在圓括號中間,圓括號之間可以用於定義參數
函數的第一行語句可以選擇性地使用文檔字符串—用於存放函數說明
函數內容以冒號起始,並且縮進
return [表達式] 結束函數,選擇性地返回一個值給調用方,不帶表達式的return相當於返回 None

調用

直接輸入函數名加參數進行調用

def cj(num1,num2):
    '''功能:兩個數相乘'''
    return num1*num2
print cj(2,3)

參數

必備參數
    函數裏定義的參數個數就是調用時必須輸入的必備參數(個數一致)

關鍵字參數
    在傳參時按定義時的參數名來指定參數的值
    注意一但開始使用這種方式定義參數,後面的參數都必須使用此方式

默認參數
    定義函數時,直接將參數定義一個默認值,此時如果不指定此參數,參數就是默認值,如果指定就是指定的值
    注意如果定義了默認參數,那麼之後的參數都必須是默認參數

不定長參數
    使用*加參數,此時參數的個數不定,用戶可隨意輸入,輸入後值存儲在以此參數名命名的元組中
    注意,不定長參數可與其他參數混用,需要將其他參數寫到前面

lambda函數

python使用lambda來創建匿名函數(單行函數)

介紹

    lambda只是一個表達式, 函數體比def簡單很多。
    lambda的主體是一個表達式, 而不是一個代碼塊, 僅僅能在lambda表達式中封裝有限的邏輯進去
    lambda函數擁有自己的命名空間,且不能訪問自有參數列表之外或全局命名空間裏的參數
    雖然lambda函數看起來只能寫 一行,卻不等同於C或C++的內聯函數,後者的目的是調用小函數時不佔用棧內存從而增加運行效率

語法

lambda函數的語法只包含一個語句,如下:

sum=lambda x,y:x+y
print sum(1,2)

八、類

面向對象技術簡介

    類(Class): 用來描述具有相同的屬性和方法的對象的集合,它定義了該集合中每個對象所共有的屬性和方法,對象是類的實例
    類變量: 類變量在整個實例化的對象中是公用的,類變量定義在類中且在函數體之外,類變量通常不作爲實例變量使用
    數據成員: 類變量或者實例變量盱處理類及其實例對象的相關的數據
    方法重寫: 如果從父類繼承的方法不能滿足子類的需求,可以對其進行改寫,這個過程叫方法的覆蓋(override) ,也稱爲方法的重寫
    實例變量:定義在方法中的變量,只作用於當前實例的類
    繼承:即一個派生類(derived class) 繼承基類(base class) 的字段和方法,繼承也允許把一個派生類的對象作爲一個基類對象對待
    實例化: 創建一個類的實例,類的具體對象
    方法: 類中定義的函數
    對象: 通過類定義的數據結構實例,對象包括兩個數據成員(類變量和實例變量)和方法

創建與調用

使用class語句來創建一個新類,class之 後爲類的名稱並以冒號結尾

#coding:utf-8
class lei:
    name=None;age=None      #定義屬性爲空
    def info(self):                       #定義方法,類裏方法第一個參數必須是self,傳參時從第二個開始
        '''打印一個人的屬性'''
        print self.name,"-",self.age        #使用self調用屬性
P1=lei()                                 #定義對象
P1.name="xr";P1.age=25     #給P1定義屬性
P1.info()                                #調用類裏的info方法

構造函數

在給對象定義屬性時可以使用構造函數def __init__(self):一次定義

使用

#coding:utf-8
class lei:
    name=None;age=None      #定義屬性爲空
    def __init__(self,name,age):
        self.name=name
        self.age=age
    def info(self):              #定義方法,類裏方法必須有self參數
        '''打印一個人的屬性'''
        print self.name,"-",self.age     #使用self調用屬性
P1=lei("lpxr","20")         #定義對象並對屬性賦值
P1.info()                         #調用類裏的info方法

繼承

面向對象的編程帶來的主要好處之一是代碼的重用,實現這種重用的方法之一是通過繼承機制,繼承完全可以理解成類之間的類型和子類型關係。

在python中繼承中的一些特點:

在繼承中基類的構造(__init__()方法) 不會被自動調用,它需要在其派生類的構造中親自專門調用。

在調用基類的方法時,需要加上基類的類名前綴,且需要帶上self參數變量。區別於在類中調用普通函數時並不需要帶上self參數
Python總是首先查找對應類型的方法,如果它不能在派生類中找到對應的方法,它纔開始到基類中逐個查找(先在本類中查找調用的方法,找不到纔去基類中找)

繼承後可以新加方法,也可以對原方法進行重寫,直接對繼承過來的方法重新定義即可重寫

語法:(xzq2繼承xzq)

class xzq2(xzq):

例子:

#coding:utf-8
class xzq:
    """下載器,需要有下載方法和數據儲存方法"""
    data=[]
    def xz(self,url):
        """數據下載方法"""
        #通過url將數據儲存在內存中
        result=url
        self.data.append(result)
    def cc(self):
        """數據儲存方法"""
        print self.data,"已存儲"
d1 = xzq()
d1.xz("www.baudu.com")
d1.cc()

class xzq2 (xzq):
    def xz(self,url):
        '''新下載器'''
        print "新的下載方法"
        result=url
        self.data.append(result)
d2=xzq2()
d2.xz("iii")
d2.cc()

九、文件操作

文件打開

python中使用 open 函數來打開文件,打開後纔可以執行讀寫等操作

file = open ("文件路徑","模式")

模式:

r:以只讀方式打開文件,文件的指針將會放在文件的開頭,這是默認模式。
rb:以二進制格式打開一個文件用於只讀。 文件指針將會放在文件的開頭。這是默認模式。
r+:打開一個文件用於讀寫。文件指針將會放在文件的開頭。
rb+:以二進制格式打開一個文件用於讀寫。文件指針將會放在文件的開頭。
w:打開一個文件只用於寫入。如果該文件已存在則將其覆蓋。如果該文件不存在,創建新文件。
wb:以二進制格式打開一個文件只用於寫入。如果該文件已存在則將其覆蓋。如果該文件不存在,創建新文件。
w+:打開個文件用於讀寫。如果該文件已存在則將其覆蓋。如果該文件不存在,創建新文件。
wb+:以二進制格式打開一個文件用於讀寫。如果該文件已存在則將其覆蓋。如果該文件不存在,創建新文件。
a:打開一-個文件用於追加。如果該文件已存在,文件指針將會放在文件的結尾。也就是說,新的內容將會被寫入到已有內容之後。如果該文件不存在,創建新文件進行寫入。
ab:以二進制格式打開一個文件用於追加。如果該文件已存在,文件指針將會放在文件的結尾。也就是說,新的內容將會被寫入到已有內容之後。如果該文件不存在,創建新文件進行寫入。
a+:打開一一個文件用於讀寫。如果該文件已存在,文件指針將會放在文件的結尾。文件打開時會是追加模式。如果該文件不存在,創建新文件用於讀寫。
ab+:以二進制格式打開一個文件用於追加。如果該文件已存在,文件指針將會放在文件的結尾。如果該文件不存在,創建新文件用於讀寫。

文件讀取

首先打開文件,file爲打開的文件的句柄

file.read([size])

從文件讀取指定的字節數,如果未給定或爲負則讀取所有

file.readline([size])

讀取整行,包括 "\n" 字符,寫一次讀一行,加上逗號就沒有換行符

結合循環讀取所有

while 1:
    str=file.readline().strip()
    if str:
        print str
    else:
        break

file.readlines([sizehint])

讀取所有行並以列表形式返回

文件寫入

首先打開文件,file爲打開的文件的句柄

file.write("\n內容")

將字符串寫入文件,沒有返回值

十、異常處理

異常

異常即是一個事件,該事件會在程序執行過程中發生,影響了程序的正常執行

一般情況下,在Python無法正常處理程序時就會發生一個異常,異常是Python對象,表示一個錯誤,當Python腳本發生異常時我們需要捕獲處理它,否則程序會終止執行

異常處理

捕捉異常可以使用try/except語句,try/except語句用來檢測try語句塊中的錯誤,從而讓except語句捕獲異常信息並處理。

如果不想在異常發生時結束你的程序,只需在try裏捕獲它,讓之後的程序繼續執行

使用

#coding:utf-8
try:
    file=open("1.txt","r")
    file.write(54)
except:
    print "文件打印失敗"
print 555

針對不同類型異常進行分別處理

例如對IOError類型和NameError類型的異常進行分別處理

#coding:utf-8
try:
    file=open("1.txt","r")
    print 1 / 0
    print sd
    file.write(54)
except IOError:
    print "IOError:文件打印失敗"
except NameError:
    print "NameError:語法錯誤"
except:
    print "其他錯誤等待處理"
print 555

python模塊

介紹

    Python模塊(Module). 是一個Python 文件,以.py結尾,包含了Python 對象定義和Python語句
    模塊讓你能夠有邏輯地組織你的Python 代碼段
    把相關的代碼分配到一個模塊裏能讓你的代碼更好用,更易懂
    模塊能定義函數,類和變量,模塊裏也能包含可執行的代碼

urllib/urllib2

提供了一系列用於操作UPL的功能

re

正則表達式模塊

beautiful soup

數據提取模塊

threading

多線程模塊

threadpool

線程池模塊

socket

套接字模塊

............具體使用模塊編寫腳本的方法見本人其他文章

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章