標籤:return 關鍵字 false python程式 ISE 字元替換 定義 split def
python的起源?
解譯器和編譯器區別?
編譯型語言和解釋型語言的區別?
第一個python程式
每行只能寫一條代碼語句
每行代碼前邊不能加空格
python2.0的解譯器不支援中文
python3.0 支援中文
怎樣互動式執行python程式? Python python3
python 中怎樣表示次方? **
pycharm的安裝? 直接解壓就可以使用,把它移動到opt目錄方便其他人使用
0.環境的搭建
1.輸出字串
print("hello haha")
命令後跟執行的py檔案來運行指令碼
python2
python3
互動模式(命令列輸入以下命令會進入互動模式)
ipython2
ipython3
2.注釋
單行注釋
#
多行注釋
‘‘‘
print("hello world")
print("hello world")
print("*", end="")
‘‘‘
3.定義變數(不需要定義類型 Python會自動判斷))
score = 100
變數類型
Number(數字)
int 整數, python2 整型區分 int 和 long python3中只有int
float 浮點數,
bool 布爾型
String(字串)
List(列表)
Tuple(元組)
Sets(集合)
Dictionary(字典)
4.輸入語句
high = input("請輸入你的身高:")
注意:python3把輸入的所有東西當成字串給變數
python2把你輸入的東西當做代碼執行如name當做變數
python2中用raw_input("ddd")達到相同效果
5.預留位置的使用
age = 18
print("age變數裡的值是%d"%age)
name = "東哥"
print("名字是:%s"%name)
6.python2 和python3 的中文處理
python3支援中文
python2中如果注釋或者代碼中有中文的話那麼執行的時候會報錯
解決辦法:在代碼開頭加上
#_*_ coding:utf-8 _*_ (推薦)
#coding=utf-8
7.判斷文法:
if name<18:
代碼1
代碼2
pass 代表此處有代碼只是暫時空著
else:
代碼4
代碼5
代碼6
注意代碼前有四個空格的代碼受if--else 節制,
代碼6由於沒有空格所以無論條件符合與否他都會執行。
8.輸入類型轉換
age = input()擷取使用者輸入的值都是字串的如果需要把
它變為其他類型,例如int型,可以這樣做
age = input()
age_num=int(age)
age_num = int(input("請輸入你的年齡:"))
9.一次輸出多個值
print("姓名是:%s, 年齡是:%d,地址是:%s"%(name, age, addr))
10.特殊運算子
5/2=2.5
7//2=3 取商
7%2=1 取餘
“ABC”*2
輸出:ABCABC
2**3=8 冪
比較子
<,>,<=,>=,!=
邏輯運算子
and, or,
vi 檔案名稱 +11 編輯11 行
not 代表條件的否定
if not (a>0 and a<=50):
print("在0到50之間....")
11.if-elif用法
sex = input("請輸入你的性別:")
if sex == "男":
print("你是男性,可以留鬍子....")
elif sex == "女":
print("你是女性,可以留長頭髮....")
#elif sex == "中性":
else:
print("你是第3中 性別,想幹啥就幹啥.....")
12.while用法
while i<=100:
print("%d"%i)#print(i)
i = i+1
13.if-else 的嵌套
#先判斷是否有車票
if ticket==1:
print("通過了車票的檢測,進入到了車站,接下來要安檢了")
#判斷刀的長度是否合法
if knifeLenght<=10:
print("通過了安檢,進入到了候車廳")
print("馬上就要見到TA了,很開心.....")
else:
print("安檢沒有通過,等待公安處理....")
else:
print("兄弟 你還沒有買票了,先去買票 才能進站....")
14.while嵌套
i=1
#用來控制行數(列印矩形)
while i<=5:
#用來控制每一行中的列數
j = 1
while j<=5:
print("*", end="")
#j = j+1#c語言中向讓j加上1的方式: j++; ++j; j+=1; j=j+1;
j+=1
print("")
i = i+1
print("*", end="") print語句列印完預設換行,後加end可以讓其不換行
15.複合賦值運算子
a+=1------------>j=j+1
a-=1,a*=1,a/=1,a%=1,a//=1
獲得一個0-2的隨機數
computer = random.randint(0,2)
break用來跳出迴圈
continue用來跳過本次迴圈
while迴圈嵌套中的break的作用範圍:只作用於最近的while
16.字串在記憶體中的儲存方式
一個位元組儲存最大值255
數字110可以用一個位元組儲存
“110”必須用四個位元組每個字元佔一個位元組末尾加“\0”python中可以不算
str(110)可以數字轉成字串
len(變數)可以看變數所佔的位元組數
17.組成字串的兩種方式
一、+號 兩邊是字串則組合的是字串,兩邊有一個是數字組合的是數字
二、 f = "====%s===="%(a+b)
18.下標和切片
name="abcdefghijk" 字串中的字母已經被標號了從0開始
name[2]則可以取出c
name[-1]可以取出k
切片(取一片)
name[2:6]會取出cde(包頭不包尾)
name[2:-1]從第三個取到倒數第二個
name[2:]取到末尾
name[2:-1:2]跳著取,即最後一個代表步長cegi
name[::-1] 把字串逆序
19.字串常見操作
mystr="dajsi AAADFE JFIEIWEJIJojeei "
mystr.斷行符號可以查看到所有字串操作(互動模式)
mystr.find("AA") 會返回6即第一個字母的下標,找不到返回-1
mystr.rfind("AA") 從後往前找第一個
mystr.index("aa") 找到返回下標,找不到返回異常異常異常!!!
mystr.rindex("aa") 找到返回下標,找不到返回異常異常異常!!!
mystr.count("aa",start=0,end=len(mystr)) 返回字元出現的個數
mystr.replace("a","A",1,) 把字串中的a替換為A,第三個參數為替換幾個此處第一個a被替換
mystr.split(" ") 參數為按什麼切,什麼都不加預設按空格和/t全切掉
mystr.splitline()按行切割/n
mystr.capitallize() 第一個單字首大寫
mystr.title()每個單字首大寫
mystr.startwith("a")是不是以什麼開頭 傳回值true或flase
mystr.endwith(".txt") 是不是以什麼結尾的
mystr.lower() 轉換小寫
mystr.upper() 轉換大寫
mystr.ljust(50)靠左對齊
mystr.rjust(50)靠右對齊
mystr.centet(50)置中對齊
mystr.lstrip()清除左邊空格
mystr.rstrip()清除右邊空格
mystr.strip()清除左右空格
mystr.partition(“AAA”)從左找AAA分割
mystr.isalpha()是字母返回true
mystr.isdigit()是數字返回true
mystr.isalnum()既有字母又有數字返回true
mystr.isspace()判斷是否是純空格
“=”.jone(liebiao)把列表的元素用=串連
20.列表
定義
name = ["老王","老李","老杜",3.14],可以儲存多種資料類型
操作(增刪改查)
增:name.append("悟空") 在結尾添加
name.insert(0,八戒) 在下標為0的位置添加
name1.extend(name2) 合并兩個列表,
name1+name2 合并兩個列表,
刪:name.pop() 刪最後一個元素
name.remove("老李") 根據內容刪除,從前往後找只刪除一個
del name[3]
改:name[0] = "清晨" 修改指定下標元素
查:"老趙" in name 判斷老趙是否在name列表裡
"老趙" not in name
21.字典
定義:
infor = {"名字":"佔山","QQ":"十七","鍵3":"值3"}
列表裡可以嵌套字典
name=[{"名字":"佔山"}{"QQ":"十七"}{"名字":"山東"}]
name[“名字”] 取出所有名字
字典操作
增: infor[age1]=18
刪:del infor["name"]
改:infor[名字]=“ss”
查:infor["QQ"] 沒有報異常
infor.get("QQ") 沒有不報異常
22.for-else的應用
for v in V
pass
else
pass
23.列表的extend和append
a=[1,2]
b=[22,11]
a.extend(b)--->[1,2,22,11]
a.append(b)--->[1,2,[22,11]]
24.字典常見操作
info={"名字":"佔山","QQ":"十七","鍵3":"值3"}
len(info) 測得是索引值對的長度
python2中
info.keys()擷取字典中所有的鍵,返回的是列表
info.value()擷取字典中的所有值,傳回值為列表
Python3中返回的是對象
info.keys() 傳回值為----->dict_keys([mame,age])
info.items() 擷取鍵和值得元組封裝在列表裡 列表放到元組裡
dict_keys([("mame","la"),("age",12)])
拆包
24.元組
定義:a=(1,2,3)
元組和列表類似但是元組是不可以修改的,但可以使用串連符
type(a)=tuple;
刪除元組:
del a
元組的拆包:
a=(1,2,3)
d,b,c = a--->d=1;b=2;c=3
tuple(列表)可以把元群組轉換為列表
注意;如果只有一個值(1,)才叫元組
25.函數的定義
sublime小技巧選中ctrl+d可以多行編輯ctrl+--> 直接 跳到行尾
定義函數
def 變數名():
代碼一
代碼二
函數調用
變數名()
多個函數定義後可以隨意調用,與定義順序無關
定義帶參數的函數
def 變數名(a,b)
語句一
語句二
帶有範傳回值得函數
def 變數名(a,b)
語句一
語句二
c=22
return c
帶有多個return傳回值的函數
文法無錯,但只會返回第一個值其他return不會執行,因為函數結束了
但可以把多個值封裝到元組,列表中可以返回。
四種函數:
無參無返回,無參有傳回值,有參有傳回值,有參數無傳回值
函數的嵌套調用
def print_line():
print("-"*50)
def print_5_line():
i = 0
while i<5:
print_line()
i+=1
print_5_line()
26.局部變數和全域變數
局部變數
在函數裡定義的變數,只在本函數內起作用,稱作局部變數
全域變數
在函數定義或調用之前定義的變數
局部變數與全域變數的區別
#定義一個全域變數,wendu
wendu = 0
def get_wendu():
#如果wendu這個變數已經在全域變數的位置定義了,此時還想在函數中對這個全域變數進行修改的話
#那麼 僅僅是 wendu=一個值 這還不夠,,,此時wendu這個變數是一個局部變數,僅僅是和全域變數的名字
#相同罷了
#wendu = 33
#使用global用來對一個全域變數的聲明,那麼這個函數中的wendu=33就不是定義一個局部變數,而是
#對全域變數進行修改
global wendu
wendu = 33
def print_wendu():
print("溫度是%d"%wendu)
get_wendu()
print_wendu()
注意:
全域變數必須放在函數調用之前,
全域變數命名建議加首碼避免和局部變數相同
函數文檔說明
help(print)可以查看函數文檔說明
函數第一行添加如下格式可以添加文檔說明
"""顯示所有的名片資訊"""
列表和字典可以在函數中當做全域變數不用加globle
return 14,13 返回的是元組(14,13)
27.預設參數
def test(a,d,b=22,c=33):
print(a)
print(b)
print(c)
print(d)
test(d=11,a=22,c=44)
test(11,22,33)
不定長參數
def sum_2_nums(a,b,*args):
print("-"*30)
print(a)
print(b)
print(args)
result = a+b
for num in args:
result+=num
print("result=%d"%result)
sum_2_nums(11,22,33,44,55,66,77)
sum_2_nums(11,22,33)
sum_2_nums(11,22)
#sum_2_nums(11)#錯誤,因為 形參中 至少要2個實參
def test(a,b,c=33,*args,**kwargs):#在定義的時候 *,**用來表示後面的變數有特殊功能
print(a)
print(b)
print(c)
print(args)
print(kwargs)
#test(11,22,33,44,55,66,77,task=99,done=89)
A = (44,55,66)
B = {"name":"laowang","age":18}
test(11,22,33,A,B) 輸出和下邊一行不一樣
test(11,22,33,*A,**B)#在實參中*,**表示對元祖/字典進行拆包
test(name="dd")多餘的參數儲存到元組中*args,索引值對儲存到**kwargs中
28.引用
id(變數) 可以得到變數儲存的地址
a = 100
b = a 把a的地址給b而不是給a的值這叫引用
注意:如果變數引用丟失,python會自動清理。
29.可變類型,不可變類型
字串是不可變類型
只有列表和字典可變
可變類型不可以當KEY值原因和Hash演算法有關
30.num=[1,2,66,33,55]排序
num.sort() 預設從小到大排序
num.sort(reverse=true)從大到小排序
對字典排序
num.reservice() 逆序infors = [{"name":"laowang","age":10},{"name":"xiaoming","age":20},{"name":"banzhang","age":10}]
infors.sort(key=lambda x:x[‘age‘])
31.匿名函數
test2 = lambda a,b:a+b
result2 = test2(11,22)#調用匿名函數
eval的用法:可以在python3中把輸入的東西,由字串變成其他的函數,正數等。
#python2中的方式
#func_new = input("請輸入一個匿名函數:")
#python3中的方式
func_new = input("請輸入一個匿名函數:")
func_new = eval(func_new)
32.交換兩個變數的方式
a = 4
b = 5
#第1種
#c = 0
#c = a
#a = b
#b = c
#第2種
#a = a+b
#b = a-b
#a = a-b
#第3種(python專屬)
a,b = b,a
print("a=%d,b=%d"%(a,b))
33.python中不存在值傳遞,全是引用
#a = 100
a = [100]
def test(num):
#num+=num# +=表示 num指向誰就對誰進行修改,如果num指向[100],那麼就變為[100,100]
#如果num 指向100,因為100是不可變類型,所以不能修改,所以num=num+num
num = num+num#===>[100] + [100] ====>[100,100] 注意只要是num=xxx一定是num指向了一個新的地方
print(num)
test(a)
print(a)
34.檔案
寫入
f = open("xxx.txt","w")
f.write("hahaha")
f.close()
讀取
f = open("xxx.txt","r")
content = f.read()
print(content)
f.close()
f.read(num) 每次讀num個位元組
f.readline()每次讀一行,返回字串
f.readlines()每次讀一行,封裝到列表裡,返回列表
檔案名稱處理
#test.py -----> test[複件].py
#new_file_name = "[複件]"+old_file_name
position = old_file_name.rfind(".")
new_file_name = old_file_name[:position] + "[複件]" + old_file_name[position:]
35.檔案的定位讀寫
f = open("a.txt","r")
f.seek(a,b)
a表示跳過的位元組數 正數往右調,負數往左調,python3不支援負數
b有三個值 0 檔案開頭
1 檔案當前位置
2 檔案末尾
import os
os.rename("舊檔案名稱","新檔案名稱")
os.remove("檔案名稱")
os.mkdir()
os.rmdir()
os.getcwd()
os.chdir()
os.listdir()
36.定義一個類
class Cat:
#屬性
#方法
def eat(self):
print("貓在吃魚....")
def drink(self):
print("貓正在喝kele.....")
建立一個對象
tom = Cat()
調用對象方法
tom.eat()
給對象添加屬性
tom.name = "湯姆"
tom.age = 40
對象的屬性的擷取
print("%s的年齡是:%d"%(self.name, self.age))
定義個方法,把上邊的語句放入方法中
37.self的用法
#方法
def eat(self):
print("貓在吃魚....")
定義方法時傳入self代表調用對象,類似java中的this
但是self不是關鍵字可以用其他任何字元替換
38. __init__的用法
#初始化對象
def __init__(self, new_name, new_age):
self.name = new_name
self.age = new_age
lanmao = Cat("藍貓", 10)
39.建立對象的方法
建立對象
python自動調用init方法
返回對象引用給變數
40.__str__的用法(類似java中的toString())
def __str__(self):
return "%s的年齡是:%d"%(self.name, self.age)
print(tom)
41.隱藏屬性
可以在類中不定義屬性,而在外邊進行屬性的添加
42.#私人方法
def __send_msg(self):
print("------正在傳送簡訊------")
43.__del__用法
def __del__(self):
print("-----英雄over------")
#如果在程式結束時,有些對象還存在,那麼python解譯器會
自動調用它們的__del__方法來完成清理工作
44.測對象引用計數方式
import sys
sys.getrefcount(對象)返回的是引用計數個數
45.繼承
#父類
class Animal:
def eat(self):
print("-----吃----")
#子類(在子類名字後加小括弧傳入父類)
class Cat(Animal):
#擴充父類功能
def catch(self):
print("----抓老鼠----")
#重寫父類功能
def eat(self):
print("-----吃啊啊啊啊----")
調用被重寫的方法
#第1種調用被重寫的父類的方法
#Dog.bark(self)
#第2種
super().bark()
私人方法,私人屬性,在繼承中的表現
私人的東西不會被子類繼承
46.多繼承
所有的類都繼承object類
#新式類在括弧裡寫上object類,python3推薦
#經典類不用寫,但預設繼承
class Base(object):
def test(self):
print("----Base")
class A(Base):
def test1(self):
print("-----test1")
class B(Base):
def test2(self):
print("-----test2")
class C(A,B):
pass
注意點:
如果一個類繼承了多個有一樣方法名的類時
print(C.__mro__)可以查看類的方法調用順序,如果找到了就停止搜尋,
47.類屬性和執行個體屬性
類也是一個對象,類屬性屬於類對象,多個執行個體對象共用類屬性
class Game(object):
#類屬性
num = 0
#執行個體方法
def __init__(self):
#執行個體屬性
self.name = "laowang"
#類方法
@classmethod
def add_num(cls):
cls.num = 100
#靜態方法
@staticmethod
def print_menu():
print("----------------------")
print(" 穿越火線V11.1")
print(" 1. 開始遊戲")
print(" 2. 結束遊戲")
print("----------------------")
game = Game()
#Game.add_num()#可以通過類的名字調用類方法
game.add_num()#還可以通過這個類建立出來的對象 去調用這個類方法
print(Game.num)
#Game.print_menu()#通過類 去調用靜態方法
game.print_menu()#通過執行個體對象 去調用靜態方法
修改類屬性Game.num=1
區別:類方法和靜態方法都要去傳入參數
靜態方法不傳參數
48.__new__的用法
#子類重寫了new方法則必須調用父類的new方法,否則建立失敗
#
class Dog(object):
def __new__(cls):#cls此時是Dog指向的那個類對象
#print(id(cls))
print("----new方法-----")
return object.__new__(cls)
#print(id(Dog))
xtq = Dog()
49.單例模式
class Dog(object):
__instance = None
def __new__(cls):
if cls.__instance == None:
cls.__instance = object.__new__(cls)
return cls.__instance
else:
#return 上一次建立的對象的引用
return cls.__instance
50.只初始化一次
class Dog(object):
__instance = None
__init_flag = False
def __new__(cls, name):
if cls.__instance == None:
cls.__instance = object.__new__(cls)
return cls.__instance
else:
#return 上一次建立的對象的引用
return cls.__instance
def __init__(self, name):
if Dog.__init_flag == False:
self.name = name
Dog.__init_flag = True
51.異常處理
#coding=utf-8
try:
num = input("xxx:")
int(num)
#11/0
#open("xxx.txt")
#print(num)
print("-----1----")
except (NameError,FileNotFoundError):
print("捕獲多個異常用元組....")
print("如果捕獲到異常後做的 處理....")
except Exception as ret:
print("如果用了Exception,那麼意味著只要上面的except沒有捕獲到異常,這個except一定會捕獲到")
print(ret)
else:
print("沒有異常才會執行的功能")
finally:
print("------無論如何都執行-----")
print("-----2----")
52.拋出出自訂異常
定義異常類
class Networkerror(RuntimeError):
def __init__(self, arg):
self.args = arg
拋出自訂異常
try:
raise Networkerror("Bad hostname")
except Networkerror,e:
print e.args
53.模組
一個具有很多功能的集合,是一個py檔案
模組的匯入
import random
import xxxxxxxxxxxxxx as ss 給模組取個別名
random.__file__ 會得到該模組存放路徑
調用模組內容
random.xxx()
from sendmsg import test1
test1()
安裝模組
sodo pip install pygame
sodo pip3 install pygame
自訂模組魔板
def test1():
pass
def test1():
pass
def main():
#測試代碼
pass
if __name__==‘__main__‘:
main()
54.__all__的作用
#如果匯入這個模組的方式是 from 模組名 import * ,那麼僅僅會匯入__all__的列表中包含的名字
__all__ = ["test1","Test"]
def test1():
print("----test-1-----")
def test2():
print("----test-2-----")
num = 100
class Test(object):
pass
55.包
把好多py檔案放在一個檔案夾中,如果在晚間夾中建立一個__init__.py
則python會把它當成一個包處理。
編輯這個檔案添加
__all__ = ["aaa"]
aaa模組可以使用
其他模組沒在檔案中引用不可以使用
56.模組的發布與安裝
http://blog.csdn.net/qq_29648129/article/details/74852428
57.給程式傳參
import sys
sys.argv是一個接收參數的列表
sys.argv[0] 代表的是程式名
sys.argv[1] 代表的是第一個參數
range(10)返回一個列表0-9
range(10,18)返回一個10-17的列表
range(10,18,3)3代表步伐,即跳著取值
range在py2中有風險,佔用大量記憶體可能不用
py3中沒有這個問題,因為py3什麼時候用空間什麼時候產生給你
58.列表產生式
a = [i for i in range(1,18)]
結果產生一個1到17的列表
第一個i可以替換替換成什麼列表元素就是什麼
a = [i for i in range(1,18) if i%2=0]
a = [(i,j)for i in range(3) for i in range(3)]
結果 :[(0,0),(0,1),(1,0),(1,1),(2,0),(2,1)]
59.集合
f={d,k,d,d,}
f.set(a)把a列錶轉成集合
list(f) 把f轉為列表
集合操作 add pop remove ...
python 基礎文法