Python筆記
1. 文件類型
.py
- 最常見(jiàn)的類型
.pyc
該類型是.py文件編譯后的二進(jìn)制文件,運(yùn)行效率當(dāng)然比.py文件快啦
-
編譯的命令行如下:
python -O-m py_compile hello.py
.pyo
- 經(jīng)過(guò)優(yōu)化編譯的原文件,這個(gè)比.pyc效率更高
2. 變量
命名規(guī)則:
- 變量可以是數(shù)字,字母,下劃線組合,不能以數(shù)字開頭
簡(jiǎn)單理解:
- Python中的變量類似是一個(gè)標(biāo)簽,貼向內(nèi)存地址中的值,變量的重新賦值類似于標(biāo)簽移動(dòng)
3. 運(yùn)算符和表達(dá)式
賦值運(yùn)算符
= 等于,賦值
+= 加等
-= 減等
*= 乘等
/= 除等
% 求余等
算術(shù)運(yùn)算符
+ 加
- 減
* 乘
/ 除
// 整除法
% 求余數(shù)
/** 冪 例如: 3**2 表示3的2平方為9
關(guān)系運(yùn)算符
<
>
<=
>=
!=
==
邏輯運(yùn)算符
and 邏輯與
or 邏輯或
not 邏輯非
表達(dá)式概念
- 將不同的數(shù)據(jù)(包括變量,函數(shù))用運(yùn)算符用一定的規(guī)則連接起來(lái)的一種式子
4. 數(shù)據(jù)類型 (大部分計(jì)算機(jī)編程語(yǔ)言都有的定義,用一個(gè)盒子或者說(shuō)空間把數(shù)據(jù)裝起來(lái))
整型 int
a = 123
# type() 調(diào)用該函數(shù)可得到變量的數(shù)據(jù)類型
print(type(a))
輸出:
<type 'int'>
長(zhǎng)整型 long
b = 999999999999999999999
print(type(b))
c = 99L
print(type(c))
輸出:
<type 'long'>
<type 'long'>
浮點(diǎn)型 float
d = 13.0
print(type(d))
e = 5.0 / 2
print(type(e))
輸出:
<type 'float'>
<type 'float'>
復(fù)數(shù)類型 complex
f = 3.14j
print(type(f))
輸出
<type 'complex'>
字符串 str (序列類型數(shù)據(jù))
# ----單引號(hào) ''
str1 = 'hello world'
# ----雙引號(hào) ""
str2 = "hello world"
# ----注意嵌套使用,轉(zhuǎn)義字符
str3 = "hello i'm hebw"
str4 = "hello i'm \"hebw\""
# ----三引號(hào) """""" 可用于保存文字的格式,如下str5等同于str6
str5 = """Tom:
i'm hebw,nice to see you
ok , see you again."""
str6 = "Tom:\n\ti'm hebw,nice to see you\n\tok , see you again."
# 占位符的使用
def p(x, y):
print("%s : %s" % (x, y))
p(1, 2)
p(*t)
輸出:
1 : 2
元組 tuple (序列類型數(shù)據(jù))
-
定義:
通過(guò)圓括號(hào),中間用逗號(hào)分隔元素定義,元組和字符串一樣是不可變的# ----定義空元組 t0 = () # ----定義單元素元組 t1 = (1,) # ----元組的值無(wú)法改變,以下代碼將報(bào)錯(cuò)!!! t[1] = 31 報(bào)錯(cuò)!
概念:
發(fā)展出元組類型是有原因的,利用采用字符串儲(chǔ)存userinfo = "milo 30 male",通過(guò)這個(gè)字符串可以存儲(chǔ)一個(gè)人的信息,但是不太好操作,取出信息不能當(dāng)做一個(gè)整體,而是通過(guò)索引來(lái)進(jìn)行切片操作,因此誕生元組t = ('milo', 30, 'male')
列表 list (序列類型數(shù)據(jù))
-
定義:通過(guò)中括號(hào),中間用逗號(hào)分隔元素定義,列表中的值是可變的
# ----定義一個(gè)空列表 list2 = [] # ----定義一個(gè)元素的列表 list3 = [1]
-
添加元素:
list = [1, 2, 3] list.append(4) print(list) 輸出: [1, 2, 3, 4]
-
刪除元素:
# 按照元素刪除,刪除第一個(gè)出現(xiàn)的元素,其他元素不會(huì)刪除 list3 = [1, 2, 3, 4, 1] list3.remove(1) print(list3) 輸出: [2, 3, 4, 1] # 按照索引刪除 list3 = [1, 2, 3, 4, 1] del (list3[0]) print(list3) 輸出: [2, 3, 4, 1]
-
修改元素:
list3 = [1, 2, 3, 4, 1] list3[0] = 123456 print(list3) 輸出: [123456, 2, 3, 4, 1]
字典 dict
-
定義:通過(guò)花括號(hào),中間用逗號(hào)分隔元素定義.字典是Python中唯一的映射類型,無(wú)序性.
# 通過(guò){}創(chuàng)建 dic = {0: 0, 1: 1, 2: 2} # 通過(guò)工廠方法dict()生成字典 fdict = dict(['x', 1], ['y', 2]) # fromkeys(),字典中的元素具有相同的值,默認(rèn)為None,主要用于值一致的情況下 ddict = {}.fromkeys(('x', 'y'), -1) ddict2 = {}.fromkeys(('x', 'y')) print(ddict) print(ddict2) 輸出: {'y': -1, 'x': -1} {'y': None, 'x': None}
-
循環(huán)遍歷字典 (注意無(wú)序性!)
dic5 = {'name': 'hebw', 'age': 13, 'gender': 'male'} # 遍歷key for key in dic5: print(key) # 遍歷value for key in dic5: print(dic1[key]) 輸出: gender age name male 13 hebw # 同時(shí)遍歷key和value dict2 = {'a': 1, 'b': 2, 'c': 3} big = dict2.items() for k, v in big: print(k) print(v) 輸出: a 1 c 3 b 2
-
添加鍵值對(duì)
dic5 = {'name': 'hebw', 'age': 13, 'gender': 'male'} dic5['tel'] = '13100000000' print(dic5) 輸出: {'gender': 'male', 'age': 13, 'tel': '13100000000', 'name': 'hebw'}
-
刪除鍵值對(duì)
# del()刪除key對(duì)應(yīng)的鍵值對(duì) dic5 = {'gender': 'male', 'age': 13, 'tel': '13100000000', 'name': 'hebw'} del (dic5['tel']) # pop()刪除key對(duì)應(yīng)的鍵值對(duì),并且返回該值 dic5 = {'gender': 'male', 'age': 13, 'tel': '13100000000', 'name': 'hebw'} tel = dic5.pop("tel") print(dic5) print(tel)
-
修改值
dic5 = {'name': 'hebw', 'age': 13, 'gender': 'male'} dic5['name'] = 'HEBW' print(dic5) 輸出: dic5 = {'name': 'hebw', 'age': 13, 'gender': 'male'}
-
清空字典
dic5 = {'name': 'hebw', 'age': 13, 'gender': 'male'} dic5.clear()
-
判空
dic5 = {'name': 'hebw', 'age': 13, 'gender': 'male'} print("HEBW" in dic5) print("age" in dic5) 輸出: False True
-
刪除整個(gè)字典
dic5 = {'name': 'hebw', 'age': 13, 'gender': 'male'} del (dic5) print(dic5) 輸出: 會(huì)報(bào)錯(cuò),提示dic5未定義
-
根據(jù)key獲取value
# 如果存在則返回,不存在返回指定的值或none dic = {0: 0, 1: 1, 2: 2} print(dic.get(13)) print(dic.get(1, "error")) 輸出: None 1
-
獲取字典中鍵(key)的列表
dic = {0: 0, 1: 1, 2: 2} print(dic.keys()) 輸出: [0, 1, 2]
-
獲取字典中值(value)的列表
dic = {0: 0, 1: 1, 2: 2} print(dic.values()) 輸出: [0, 1, 2]
-
獲取鍵值對(duì)元組的列表
dic = {0: 0, 1: 1, 2: 2} print(dic.items()) 輸出: [(0, 0), (1, 1), (2, 2)]
序列類型基本操作
索引:
序列類型容器里的元素存在索引,第一個(gè)是從0開始往后遞增,
索引分正負(fù),如下:
s = abcde
a b c d e
0 1 2 3 4
-5-4-3-2-1
print(s[0] + s[1])
print(s[-1] + s[-2])
輸出:
ab
ed
切片:
顧名思義,截取序列數(shù)據(jù)中的一部分內(nèi)容
# ----切片 [開始:結(jié)束:間隔默認(rèn)為1,有調(diào)整切片方向的作用] 默認(rèn)從左向右切片
# ----切片 正索引
print(s[0:1])
print(s[:4])
print(s[2:])
print(s[2::2])
輸出:
a
abcd
cde
ce
# ----切片 負(fù)索引
print(s[-1])
print(s[-1:])
print(s[-1::-1])
print(s[-4:-1])
print(s[-1:-4:-1])
print(s[-2:-5:-1])
輸出:
e
e
edcba
bcd
edc
dcb
長(zhǎng)度:
str = 'abcde'
print(len(str))
輸出:
5
連接:
str = 'abcde'
str2 = '12345'
print(str + str2)
輸出:
abcde12345
重復(fù):
str2 = '12345'
print(str2 * 5)
輸出:
1234512345123451234512345
存在判斷:
str2 = '12345'
print('1' in str2)
輸出:
True
最大值:
str = 'abcde'
str2 = '12345'
print(max(str))
print(max(str2))
輸出:
e
5
最小值:
str = 'abcde'
str2 = '12345'
print(min(str))
print(min(str2))
輸出:
a
1
比較: 這個(gè)有點(diǎn)不懂?
str = 'abcde'
str2 = '12345'
print(cmp(str, str2))
print(cmp(str, str))
輸出:
1
0
遍歷
list = [1, 2, 3, 4, 5, 6, 7]
str = 'hello'
# 取出序列的值
for x in list:
print(x)
for x in str:
print(x)
輸出:
1
2
3
4
5
6
7
h
e
l
l
o
# 取出序列的索引
list = [1, 2, 3, 4, 5, 6, 7]
for x in range(len(list)):
print(x)
輸出:
0
1
2
3
4
5
6
流程控制語(yǔ)句
基本使用
# 兩種結(jié)果
a = 15
if a > 124:
print('a > 124')
print('True')
else:
print('a < 124')
print('False')
輸出:
a < 124
False
# 三種結(jié)果
a = 15
if a > 124:
print('a > 124')
print('ok')
elif a == 124:
print("a == 124")
else:
print('a < 124')
print('false')
邏輯值
True 表示非空的量
False 表示0 NONE 空的量等
循環(huán)控制語(yǔ)句
else
# 循環(huán)正常結(jié)束后調(diào)用
s = 'hello'
for k in s:
print(k)
else:
print("ending")
輸出:
h
e
l
l
o
ending
break
# 打斷此層的循環(huán)
for k in s:
print(k)
if k == 'l':
break;
else:
print("ending")
輸出:
h
e
l
continue
# 跳過(guò)循環(huán)的后續(xù)代碼塊
for k in s:
if k == 'l':
continue;
print(k)
else:
print("ending")
輸出:
h
e
o
ending
return
# 跳出循環(huán)結(jié)束函數(shù)返回?cái)?shù)值
def ret():
for x in 'hello':
print(x)
if x == 'e':
return 1
print('666')
else:
print('-----ending')
a = ret()
print(a)
輸出:
e
1
while循環(huán)
# 基本使用
x = ''
while x != 'q':
print(True)
x = input('請(qǐng)輸入q結(jié)束循環(huán):')
if not x:
break;
if x == 'c':
print('one more time~~c')
else:
print('ending')
函數(shù)
設(shè)置默認(rèn)參數(shù)
def fa(name="hebw", age=0):
print('name:%s' % name + ' age:%s' % age)
fa()
輸出:
name:hebw age:0
直接向函數(shù)傳入元組
# 類似這樣的函數(shù),形式參數(shù)類似一個(gè)元組
def f(x, y):
print x, y
# 這里有一個(gè)元組,如何把元組直接傳入方法內(nèi).分別當(dāng)做x,y
t = (1, 2)
# 這里使用這個(gè)方法來(lái)直接傳入一個(gè)元組 利用一個(gè)*號(hào)
f(*t)
直接向函數(shù)傳入字典
def fa(name="hebw", age=0):
print('name:%s' % name + ' age:%s' % age)
fa(**{'age': 123, 'name': 'hbwwww'})
輸出:
name:hbwwww age:123
冗余參數(shù)的接收
# 使用元組接收冗余參數(shù)
def f2(x, *args):
print(x)
print(args)
f2(2, 1)
輸出:
2
(1,)
# 使用字典接收冗余參數(shù)
def f3(x, **args):
print(x)
print(args)
f3(1)
f3(1, y=1)
輸出:
1
{}
1
{'y': 1}
lambda匿名函數(shù)
# 普通函數(shù)
def lam(x, y):
return x + y
a = lam(x=1, y=2)
b = lam(*(3, 7))
print(a)
print(b)
輸出:
3
10
# lambda函數(shù)
def l(x, y):
return x * y
g = lambda x, y: x * y
print(type(g))
print(id(g))
print(g)
print(g(2, 2))
輸出:
<type 'function'>
39222184
<function <lambda> at 0x0000000002567BA8>
4
# lambda用法舉例
l = range(1, 6)
def fa(x, y):
return x * y
a = reduce(fa, l)
c = reduce(lambda x, y: x * y, l)
print(a)
print(c)
輸出:
120
120
switch場(chǎng)景,python不存在switch關(guān)鍵字,可以使用字典替代
# 舉例 設(shè)計(jì)一個(gè)計(jì)算器
# 計(jì)算器
def add(x, y):
return x + y
def jian(x, y):
return x - y
def cheng(x, y):
return x * y
def chu(x, y):
return x / y
# 用if 和 else 寫的代碼
def operator(x, o, y):
if o == "+":
return add(x, y)
elif o == '-':
return jian(x, y)
elif o == '*':
return cheng(x, y)
elif o == '/':
return chu(x, y)
else:
pass
print(operator(6, '+', 6))
輸出:
12
# 用字典的方法
oper = {"+": lambda x, y: x + y, "-": lambda x, y: x - y, "*": lambda x, y: x * y,
'/': lambda x, y: x / y}
def fc(x, o, y):
print(oper.get(o)(x, y))
fc(12, '/', 2)
輸出:
6
# 總結(jié):
# {}.get('o')('1', '2')
# 前面的{}代表字典,利用get方法,獲取字典對(duì)應(yīng)的value,value可以是一個(gè)lambda方法,同時(shí)可以直接在后傳入方法的參數(shù)
內(nèi)置函數(shù)
abs() 返回?cái)?shù)字的絕對(duì)值
a = abs(-10111111)
print(a)
print(type(a))
輸出:
10111111
<type 'int'>
max()最大 min()最小
l = [1, 23, 4, 5, 6, 7, 8, 9, 0, 1, 3, 23, 2, 2, 31, 5, 7, 89, 34, 23, 'sd']
print(max(l))
print(min(l))
輸出:
sd
0
divmod() 返回包含兩個(gè)數(shù)字的商和余的元組
print(divmod(2, 5))
輸出:
(0,2)
pow(x, y[, z]) 函數(shù)是計(jì)算x的y次方臀叙,如果z在存在成翩,則再對(duì)結(jié)果進(jìn)行取模否淤,其結(jié)果等效于pow(x,y) %z
print(pow(2, 3, 4))
輸出:
0
round() 四舍五入
print(round(12.4))
輸出:
12.0
callable() 檢測(cè)函數(shù)是否可以被調(diào)用
print(callable(round))
輸出:
True
isinstance() 判斷對(duì)象是否屬于某類型
l2 = {1: 1, 2: 2}
print(isinstance(l2, tuple))
輸出:
False
cmp() 判斷兩個(gè)字符串是否一樣
print(cmp('1', '1'))
print(cmp('1', '2'))
print(cmp('2', '1'))
輸出:
0
-1
1
xrange()相比range(),就說(shuō)是效率高一點(diǎn),具體用處不明啊
類型轉(zhuǎn)換
print(type(int(123)))
print(type(long(123)))
print(type(float(123)))
print(type(tuple([1, 2])))
print(type(list((1,))))
print(type(str(1)))
輸出:
<type 'int'>
<type 'long'>
<type 'float'>
<type 'tuple'>
<type 'list'>
<type 'str'>