Python基礎筆記

2017/8/22 週二 晴

Linux在搭建好Python環境後的第一個hello world!

命令窗口

1.python

>>>2.print("hello world!")

2017/8/23 週三 颱風

python命令的種類(按需安裝):

python,ipython,python3,ipython3,功能一致,但有各自的特性,例如python(默認爲python2)命令不能自動補全代碼,而ipython可以自動補全代碼

執行Python的3種方式

1.命令窗口輸入python,在出現>>>後開始寫代碼,多用於測試

2.建一個XXX.py文件,寫上代碼,然後命令行python XXX.py,實際開發中最常使用

3.建一個XXX.py文件,寫上代碼,在文件開頭加上#!/usr/bin/python(python命令的所在位置的絕對路徑),在命令行./XXX.python

Python註釋:

單行註釋:#開頭
多行註釋:'''三個單引號'''

解決代碼中出現中文問題

文件開頭加上#coding=utf-8,等號兩邊沒有空格,這中文問題出現於python2,而python3能夠很好的識別中文,不加也可以

變量

#名字 = 值
age = 18 #數值
print(age)
name="hello" #字符串
name='world' #字符串

確定變量的類型

print(type(name))
str #字符串類型

注意點

print “heiil” #python可以正常運行,Python3不可以正常執行
print (“hhh”) #python2,3都可以正常執行

標識符和關鍵字

關鍵字不可做變量名

查看關鍵字列表

ipython3
import keyword #獲取keyword工具箱
keyword.kwlist  #使用keyword工具箱的kwlist功能

2017/8/24 週四 颱風

輸出

print("dd")
\t #tab
\n #換行

name="Hello"
name2="World"
age=18
print(name+name2) #HelloWorld
print(name+age) #運行出錯,類型不匹配

格式化輸出,與C類似
print("%d歲"%age) #18歲   沒有逗號分隔,但使用了%來分隔
heigh=173
print("%d歲%d釐米"%(age,height)) #18歲170釐米

查看方法文檔

help(方法名)
dir(方法名)

輸入

在python3:

name=input("請輸入:")
print("%s"%name)

在python2:

#原樣輸入
name = raw_input("請輸入:")
print("%s"%name)
#會自動計算表達式,如輸入:3+4,最終會打印出:7
name = raw_input("請輸入:")
print("%s"%name)

特別的運算符

// #相除取整數:5//2=2.0
** #取冪次方: 5**2=25

= 的特殊使用,交換兩個變量的值
A=10
B=5
A,B=B,A
此時:
    A=5
    B=10

字符串轉int

a=int("10")

num = int(input("請輸入一個數字:"))

if判斷語句

if 條件:
    事情

a=10
if a>5:
    print("a>5")
else:
    print("a<=5")

2017/8/25 週五 晴

邏輯運算符

and:相當於Java的&&

or:相當於Java的||

not :相當於Java的!

elif

相當於else if

if 嵌套

if
    if
        if
        else

產生隨機數

import random
random.randint(int begin,int end) #產生begin-end的隨機數包含begin和end在內

while循環

while 條件:
    語句體

字符串

"雙引號裏的內容"

'單引號裏的內容'

for循環

for 臨時變量 in 集合:
    循環體

切片

name = "abcdefg"
# name[0]=a
# name[0,4] = abcd 取出來的是下標0~3,不包括4的元素
    #可以這樣理解,從0下標開始取,取4個元素
獲取全部元素
name[0:]
name[:]
name[::]
#name[起始位置:結束位置:步長]
#name[::-1] 逆序
name="abcdef"
#name[-1]=f
#name[0:-1]=abcde

獲取字符串的長度

len(name)

字符串常見操作

find

a = "hello world"
#a.+tab 提示可操作函數
a.find("hello")
>>0 #返回找到的下標
a.find("python")
>>-1 #找不到返回-1

rfind

從右邊開始找,其餘與find用法一致

index

與find類似,區別是找不到的不會返回-1,而是拋出異常

count

str.count("py")
str.count("py",begin,len)

replace

str2 = str.replace("py","aa") #替換所有
str2 = str.replace("py","aa",1) #替換一次

split

str.split(",") #根據逗號來切割爲一個數組

startswith

str.startswith("a") #以"a"開頭?是:返回True,否則返回False

endswith

str.endswith("a")

知識擴展

True-->非0: -100,1,123
False-->0

lower

str2= str.lower() #轉小寫

upper

str2= str.upper() #轉大寫

ljust

str.ljust(50)向左對齊

rjust

str.ljust(50)向右對齊

center

str.center(50) #居中顯示

lstrip

str.lstrip(" ") #去除左邊的空格

rstrip

str.rstrip("a") #去除右邊的字符a

strip

str.strip(" ")#去除兩邊的空格

parttition

str.parttition(str2) #分隔成3個部分

rpartition

從右邊開始找

splitlines

安照行分隔,根據換行符進行分隔

isalpha

是否都是字母

isdigit

是否都是數字

isalnum

是否字母或數字

join

str3 = str.join(str2) #字符串拼接

列表

list = ["ad",12,0.16]

列表的操作

append #添加一個元素,若添加一個列表,或直接將列表作爲一個整體插進去

extend #添加一個元素,若元素爲一個列表,會將該列表的每一個元素插進去

insert(1,a) #在下標1處插入

修改數據
list[0] = "ss"

是否在裏面
"aa" in list 返回True或False
"aa" not in list

count

list.count("aa") #第幾個,從1開始

index

下標

del

根據下標刪
del list[1]

pop

刪最後一個

remove
根據值刪

排序

list.sort()#從小到大排序

list.reverse()#逆排序

list.sort(reverse=True) #逆排序

列表的嵌套

list2 = ["aa","55"]
list.append(list2)
aa=[["aa","nn"],[11,22]]

元組

元組的元素不能修改

aa=("aa","bb",123)

若元組只有一個值時

aa=(3.14,)#加個","來定義

字典

{key:value,key:value} #看上去真TMD像json

info = {"a":123,"b":"lll"}
#info["a"] = 123
不允許有兩個相同的key,若在定義時有兩個相同的可以則後面一個會覆蓋前一個

info["aa"] #若aa不存在會報錯
info.get("aa")#不報錯
info.get("aa",123)#指定默認值123

字典的操作

改:

info["aa"]=456

增:

info["bb"]=456

刪:

del info["aa"]
del info #刪除整個變量(字典)
info.clear() #刪除字典的所有的數據

查:

info.len()#長度
info.keys()#所有的key
info.values()#所有的value
info.items()#所有的key-value

字典的遍歷

for a in info.keys()
    #鍵

for a in info.values()
    #值

for a in info.items()
    #(key,value)

for key,val in info.items()
    #key,val命名隨意

2017/8/26 週六 昨晚打了兩次plane

函數

定義

def 函數名():
    代碼

調用

函數名()

函數的文檔說明

def 函數名()
    "說明"
    代碼
    '''
    說明
    '''

函數的參數

def 函數名(參數1,參數2...參數n)
    代碼

函數的返回值

def 函數名()
    代碼
    return 100
    return 200

只會返回第一個return

函數的嵌套

函數調用函數

def b()
    print("in b")

def a() 
    b()
    print("in a")

局部變量

在函數裏定義的變量,形式參數

全局變量

在函數外定義的變量

在函數裏不可以直接修改全局變量的值,
可以在函數裏進行聲明後再去修改,否則拋異常
函數裏聲明: global 變量名:不可變變量需要添加,可變的可以不加

通過列表,字典,元組(若return a,b等用逗號隔開默認是元組)把多個數據返回

對於元組:a,b=(1,2) #分別將1,2賦值給a,b

函數的默認參數:

def 函數名(參數a,c=30)
    代碼

默認值只能從右至左設置


def aa(a,b,c=5,e=6)
    #...

aa(1,2,e=7) #給e傳,不給c傳
若指定參數名,則順訊名可以隨意
aa(b=5,a=100)

不定長參數

def aa(a,b,*args,**kwargs)
    #...

args爲元組,kwargs爲字典,默認傳遞args,指定名字時傳遞個kwargs,名字爲key
aa(1,2,3,4,mn=1,mm=2)
#a=1,b=2,args=(3,4),kwargs={"mn":1,"mm":2}

參數傳遞:解包

list = [1,2,3] #解包後:1,2,3
info={"a":1,"b":2} #解包後:a=1,b=2
aa(1,2,*list,**info)

引用

A=4
B=A
id(A)
id(B)

函數傳遞引用

1.類型
    1.1操作

不可變類型:地址沒有改變
    操作使其地址發生改變

可變類型
    a=a+a #地址改變
    a+=a #地址沒有改變

函數遞歸

函數自身調用自身
def a():
    ...
    a()
    ...

匿名函數

aaa = lambda a,b:a+b #a,b爲傳遞的參數,相當於把a+b返回,函數裏面不可以有print等

可以當做參數傳遞

排序字典

info.sort(key=lambda x:x["age"],reverse=True) #根據字典的key字段來進行降序排序

文件

打開

f = open("1.txt",r) #r, w, a

關閉

f.close

讀取文件

f.read()
f.read(5) #讀五個字節
f.readlines()#按行讀取

寫文件

f.write("kkkk") #返回成功寫進的字節數

文件定位

f.tell() #返回當前位置
f.seek(offset,a) #a=0:文件頭,1:當前位置,2:文件末尾,python3對offset爲負數不支持了

os

import os

os.rename(“aa”,”bb”) #將”aa”改名爲”bb”

os.remove(“aa”) #刪除文件

os.getcwd() #獲取當前路徑

os.chdir(“../”) #修改當前默認路徑

os.listdir() #把當前路徑的文件名打印出來

os.rmdir(“a/”) #刪除文件夾

2017/8/27 週日 又來了一個颱風

面向對象

定義

class Cat:
    #屬性
    #方法
    def eat(self):
        #...

使用

cat01 = Cat()   
cat01.eat()

添加屬性

對象名.新的屬性名 = 值

獲取屬性

1.對象.屬性
2.對象的方法裏的第一個形參self.屬性

初始化方法

__init__(self) #左邊兩個下劃線,右邊兩個下劃線,
相當於構造方法,可接受參數
__init__(self,a,b)

str(self) #相當於Java的tostring方法

for裏使用else

for a in list:
    #...
else:
    #如果list裏沒有任何都系則執行這裏

2017/8/28 週一 陰

私有屬性: __name #前面兩個下劃線,不能直接訪問,同意通過方法來設置以及返回

私有方法: __method

析構函數:del

銷燬對象時調用

繼承

單繼承
class Father(object): #等價於 class Father:o是小寫
    #...

class Son(Father):
    #...
重寫方法
與C,Cpp,Java一樣,在子類定義一個從父類繼承的方法
調用父類被重寫的方法
super().method()

2017/8/29 週二 晴

多繼承

class A(B,C):

查看調用的先後順序

print(A.__mro__)

多態

def aa(A a):

類屬性

在類裏定義num:
class A:
    num=0

訪問:
    使用對象訪問:若其與實列對象屬性的名字相同則會回去實列屬性
    cat.num
    使用類名來訪問:Cat.num

實例屬性

def __init__(self):
    self.age=0

實例方法

def aa(self):
    #....

類方法

@classmethod
def aa(cls,name):

調用:對象.方法名()   類名.方法名()

靜態方法

@staticmethod
def AA():

調用:對象.方法名()   類名.方法名()

注意

實例方法與實例屬性不能通過類名來調用

單例模式

通過重寫方法:def __new__(cls)

2017/8/30 週三 晴

異常

try:
    #...
except: #捕獲所有異常
    #...

try:
    #...
except 異常類: #捕獲指定的異常
    #...

捕獲多個異常

except a1:
except a2:

或者

except a1,a2: #python2

except (a1,a2): #python

打印異常信息

except a1 as result:

except (a1,a2) as result:

else

try:
except:
else:#沒有捕獲任何異常時執行

finally

try:
except:
else:
finally: #最後一定會執行

異常的傳遞

拋給調用者

拋出自定義異常

繼承Exception類

raise 異常類 #相當於Java 的throw

except 裏 raise

把捕獲的異常原封不動的拋出

模塊

使用import來導入
自定義模塊
建立py文件
name
直接運行py:值爲:__main__
通過導入模塊運行:值爲:模塊名
from 模塊 import 內容
把模塊的指定內容導入進來

from random import 函數1,函數2 

把模塊的所有內容導入 from random import *
定位模塊
import sys
sys.path.insert(0,"文件夾")    
all
是一個列表,代表了 from 模塊 import * 所導入的內容

在文件夾裏建:__init__.py文件

傳參數

import sys
sys.argv #接收參數,列表來存儲

列表推導式

a = [x for x in range(1,101)] #生成了有1~10數字的一個列表

a = [x for in range(1,100) id x%2==0] #生成偶數

a = [(x,y) for x in range(1,4) for y in range(1,3)] #[(1,1),(1,2),(2,1),(2,2),(3,1),(3,2)]

set

不可以有相同的元素

a = [11,22,33,44,33,22,11]
b = set(a) #b=(11,22,33,44)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章