執(zhí)行過程
首先來說下python的執(zhí)行過程:
- python解釋器讀取源代碼到內(nèi)存中
- 解釋器進(jìn)行詞法語(yǔ)法檢測(cè)
- 解釋器將源代碼翻譯成字節(jié)碼
- 將字節(jié)碼交由python虛擬機(jī)執(zhí)行
Note:.pyc文件就是字節(jié)碼的文件存儲(chǔ)忱嘹。python解釋器會(huì)優(yōu)先執(zhí)行pyc文件嘱腥。如果源碼
文件修改時(shí)間較新,則會(huì)執(zhí)行源碼并重新生成pyc文件拘悦。
三元運(yùn)算
如果if條件表達(dá)式成立齿兔,變量A=值A(chǔ)。否則值A(chǔ)=值B
變量A = 值A(chǔ) if ... else 值B
運(yùn)算符
數(shù)學(xué)運(yùn)算符:
運(yùn)算符 | 描述 |
---|---|
+ | 加 |
- | 減 |
* | 乘 |
/ | 除 |
% | 求模-返回余數(shù) |
** | 冪-返回x的y次方 |
// | 取商的整數(shù)部分 |
比較運(yùn)算符:
運(yùn)算符 | 描述 |
---|---|
== | 等于,比較值 |
!= | 不等于 |
> |
大于 |
< | 小于 |
>= |
大于等于 |
<= | 小于等于 |
賦值運(yùn)算符:
運(yùn)算符 | 描述 |
---|---|
= | 賦值分苇,如 x = 10 |
+= | x += y 等同于 x = x + y |
-= | x -= y 等同于 x = x - y |
*= | x *= y 等同于 x = x * y |
/= | x /= y 等同于 x = x / y |
%= | x %= y 等同于 x = x % y |
**= | x **= y 等同于 x = x ** y |
//= | x //= y 等同于 x = x // y |
邏輯運(yùn)算符:
運(yùn)算符 | 描述 |
---|---|
and | 與 |
or | 或 |
not | 非 |
成員運(yùn)算符:
運(yùn)算符 | 描述 |
---|---|
in | 如果x是y的成員添诉,返回True |
not in | 如果x不是y的成員,返回True |
同一性運(yùn)算符:
運(yùn)算符 | 描述 |
---|---|
is | 判斷是否是同一個(gè)引用地址医寿,即id(x) 與 id(y) 是否相等 |
is not | 判斷是否不是同一個(gè)引用地址 |
注意:
這里容易和==
混淆栏赴。==
是判斷值相等。而is
是判斷
是否是指向同一個(gè)內(nèi)存地址
優(yōu)先級(jí):
編碼
為什么會(huì)有編碼問題靖秩?
因?yàn)橛?jì)算機(jī)最早只支持255個(gè)字符须眷,即ASCII編碼,只包括大小寫字母盆偿,數(shù)字還有一些符號(hào)柒爸,然后根本沒有考慮外國(guó)人。
后來很多國(guó)家都搞了自己使用的編碼事扭。然后混亂了捎稚!
后來,出來了萬國(guó)碼unicode求橄。它包含世上所有的字符今野,終結(jié)編碼混亂的局面。
再后來罐农,出來了utf-8.在兼顧編碼統(tǒng)一的情況下条霜,可以更加節(jié)省存儲(chǔ)成本。
再來說說Python:
因?yàn)閜ython2.x默認(rèn)使用了ASCII編碼涵亏。所以默認(rèn)打印中文亂碼宰睡。這里要顯示指定使用utf-8來存儲(chǔ)代碼。
# -*- coding: utf-8 -*-
編碼轉(zhuǎn)換:
python2.x: 首先要先將編碼轉(zhuǎn)換成unicode气筋,然后在轉(zhuǎn)換成gbk等
python3.x: 默認(rèn)使用unicode編碼拆内。所以在轉(zhuǎn)換編碼時(shí),直接轉(zhuǎn)換成gbk等編碼了宠默。
對(duì)象麸恍,對(duì)象,對(duì)象
結(jié)論:
- 一切皆對(duì)象
- 對(duì)象是由類創(chuàng)建的搀矫。
- 對(duì)象具有的功能都是從類里找的
x = 0 # x = int()
x = '' # x = str()
x = [] # x = list()
x = () # x = tuple()
x = {} # x = dict()
int內(nèi)部功能介紹
Note: 3.x中沒有l(wèi)ong類型抹沪。統(tǒng)一為int
常用方法:
-
__abs__
# 返回絕對(duì)值,可以直接調(diào)用abs() -
__add__
# 3+2的加號(hào)就是調(diào)用的這個(gè)方法 -
__bool__
# 返回True 或 False - bit_length() # 返回當(dāng)前數(shù)的最小位數(shù)(二進(jìn)制)
-
__divmod__
# 返回一個(gè)由商和余數(shù)組成的元組
In [160]: divmod(10,3)
Out[160]: (3, 1)
-
__eq__
# 判斷兩個(gè)數(shù)的值是否相等
In [161]: s = 19
In [162]: s.__eq__(20)
Out[162]: False
-
__float__
# 轉(zhuǎn)換成浮點(diǎn)型 -
__floordiv__
#只保留商的整數(shù)部分
In [170]: s
Out[170]: 19
In [171]: s.__floordiv__(3)
Out[171]: 6
In [172]: 19 / 3
Out[172]: 6.333333333333333
-
__or__
# 等同于a|b -
__pow__
#冪運(yùn)算 __rdivmod__
字符串
定義:使用一對(duì)單引號(hào)或一對(duì)雙引號(hào)括起來的一串字符瓤球。當(dāng)字符含有單引號(hào)或雙引號(hào)時(shí)融欧,需使用 \ 來轉(zhuǎn)義。
多行字符串:使用一對(duì)"""
或'''
來生成多行字符串卦羡。
轉(zhuǎn)換字符串:str()
聲明及使用:
聲明:
>>> my_str = 'hello world'
>>> print(my_str)
'hellow world'
字符串重復(fù):
>>> '123' * 2
'123123'
>>> ('abc' * 2) + '123'
'abcabc123'
字符串拼接:
使用 '+', 但是這種方式浪費(fèi)內(nèi)存蹬癌,效率也不高权她。推薦使用格式化字符串。
字符串格式化:
使用 %s
>>> print('Hello,%s.' %('wang'))
'hello,wang.'
遍歷字符串:
字符串是可迭代對(duì)象:
s = 'abcde'
for i in s:
print(i)
使用索引打印:
>>> s = 'abcde'
>>> s[0]
'a'
字符串切片:
>>> s = 'abcde'
>>> s[:2]
'ab'
>>> s[-2:]
'de'
字符串替換:
使用 replace()
>>> s = 'hello world'
>>> s.replace('world','hello')
字符串查找:
- S.index(sub[, start[, end]])
>>> s = 'abca'
>>> s.index('a')
0
>>> s.index('a',1)
3
- find()
- 和 index() 用法一樣. 但是在找不到時(shí)返回 -1逝薪,而 index() 找不到會(huì)報(bào)錯(cuò)
- rindex()
- 反向查找
>>> s = 'abca'
>>> s.rindex('a')
3
- rfind()
- 反向查找
字符串分割:
可以用split,rsplit方法隅要,通過相應(yīng)的規(guī)則來切割成生成列表對(duì)象
>>> s = 'a b c d e'
>>> s.split() # 默認(rèn)使用空格,可以指定其他
['a', 'b', 'c', 'd', 'e']
>>> s.split('b')
['a ', ' c d e']
>>> s.
S.splitlines([keepends]) #把S按照行分割符分為一個(gè)list董济,keepends是一個(gè)bool值步清,如果為真每行后會(huì)保留行分割符。
>>> s = 'a\nb\nc\n'
>>> s.splitlines()
['a', 'b', 'c']
>>> s.splitlines(True)
['a\n', 'b\n', 'c\n']
字符串反轉(zhuǎn):
>>> s = 'abc'
>>> s[::-1]
'cba'
字符串的join方法:
>>> s = 'abc'
>>> ' '.join(s)
'a b c'
>>> s = ['a','b','c']
>>> ''.join(s)
'abc'
>>> '_123_'.join(s)
'a_123_b_123_c'
使用len()計(jì)算字符串長(zhǎng)度:
>>> len('abc') # 返回3
字符串大小寫
S.upper()#S中的字母大寫
S.lower() #S中的字母小寫
S.capitalize() #首字母大寫
S.istitle() #S是否是首字母大寫的
S.isupper() #S中的字母是否全是大寫
S.islower() #S中的字母是否全是小寫
S.swapcase() #大小寫互換
S.title()
>>> 'abc'.upper()
'ABC'
>>> 'ABC'.lower()
'abc'
>>> 'abc'.capitalize()
'Abc
>>> 'abc'.istitle()
False
>>> 'abc'.isupper()
False
>>> 'abc'.islower()
True
>>> 'aBc'.swapcase()
'AbC'
>>> 'who am i'.title()
'Who Am I'
字符串去空格:
strip(),lstrip(),rstrip()方法默認(rèn)去除字符串的空格虏肾,可以指定去除其他字符廓啊。
S.strip()去掉字符串的左右空格
S.lstrip()去掉字符串的左邊空格
S.rstrip()去掉字符串的右邊空格
>>> ' abc'.lstrip()
'abc'
>>> 'abc '.rstrip()
'abc'
>>> ' a b c '.strip() # 只去掉字符串兩頭的空格
'a b c'
字符串其他方法:
字符串還有很多玩法可以折騰,如:
S.center(width[, fillchar]) #字符串居中
>>> s = 'abc'
>>> s.center(20)
' abc '
>>> s.center(20,'*')
'********abc*********'
S.count(substr, [start, [end]]) #計(jì)算substr在S中出現(xiàn)的次數(shù)
>>> 'aabc'.count('a') # 返回2
S.encode() #編碼封豪,默認(rèn)utf-8
S.expandtabs(tabsize=8) #將tab轉(zhuǎn)換成空格
>>> s
'\tabc'
>>> ss = s.expandtabs()
>>> ss
' abc'
S.endswith() #判斷尾字符
>>> 'abcd'.endswith('d') # 返回True
S.isalnum() #是否全是字母和數(shù)字谴轮,并至少有一個(gè)字符
>>> 'abc'.isalnum() # 返回True
>>> '23ab'.isalnum() # 返回True
>>> '_23ab'.isalnum() # 返回False
>>> ''.isalnum() # 返回False
S.isalpha() #是否全是字母,并至少有一個(gè)字符
>>> 'abc'.isalpha()
True
>>> 'abc_'.isalpha()
False
S.isdigit() #是否全是數(shù)字吹埠,并至少有一個(gè)字符
>>> '123'.isdigit()
True
>>> '123_'.isdigit()
False
S.isspace() #是否全是空白字符第步,并至少有一個(gè)字符
>>> ' '.isspace() # 返回True
S.rpartition() #返回分隔符本身,和前后的子字符串
>>> s
'who am i'
>>> s.rpartition('am')
('who ', 'am', ' i')
>>> s.rpartition('is') # 如果分隔符沒有找到缘琅,則返回兩個(gè)空字符串和s
('', '', 'who am i')
S.startswith() # 判斷首字符
>>> 'abcd'.startswith('ab') # 返回True
查看詳細(xì)的字符串方法
>>> dir('str')
列表
列表存儲(chǔ)的是N個(gè)元素粘都,類型任意,通過下標(biāo)(索引)返回對(duì)應(yīng)值刷袍。
特點(diǎn):
- 有序
- 下標(biāo)從0開始
常用方法:
- 列表通過索引(下標(biāo))獲取數(shù)據(jù)翩隧,索引從0開始。如 new_list[0] 為1
- append(object) 往列表末尾添加元素
- clear() 清空列表所有元素
- copy() 淺拷貝
Note: 還有一種深拷貝呻纹。淺拷貝還有一定聯(lián)系堆生。而深拷貝可以理解成是一個(gè)完全獨(dú)立的復(fù)制體。
- count(value) 統(tǒng)計(jì)指定元素出現(xiàn)幾次
- index(value,[start,[stop]]) 查找指定元素第一次出現(xiàn)的下標(biāo)
- insert(index,object) 將元素插入指定位置
- pop([index]) 默認(rèn)刪除列表最后一個(gè)元素
- remove(value) 刪除第一次出現(xiàn)的元素
- sort() 對(duì)列表的元素進(jìn)行排序
- extend(iterable) 將iterable中的元素添加到列表中
元組
元組是列表的一個(gè)子集雷酪。元組有的方法列表都有淑仆。
特點(diǎn):
- 不可變
Note: 不可變性只適用于元組本身頂層而非內(nèi)容
創(chuàng)建元組:
t = (1,2,3,) 等價(jià)于 t = 1,2,3,
#要注意最后有一個(gè)逗號(hào),當(dāng)只有一個(gè)元素時(shí)太闺,一定要有逗號(hào)。
In [192]: type((1))
Out[192]: int
In [193]: type((1,))
Out[193]: tuple
方法:
- count()
- index()
- 切片操作
列表元組轉(zhuǎn)換:
In [187]: tuple(l)
Out[187]: (1, 2, 3)
In [188]: t = (1,2,3,)
In [189]: list(t)
Out[189]: [1, 2, 3]
字符串轉(zhuǎn)元組:
In [190]: s = 'hello'
In [191]: tuple(s)
Out[191]: ('h', 'e', 'l', 'l', 'o')
字典
字典存儲(chǔ)的是N個(gè)鍵值對(duì)(k:v). 鍵的類型為字符串或數(shù)字嘁圈,值的類型任意省骂。
特點(diǎn):
- 無序
- 鍵唯一
創(chuàng)建字典:
第一種:
d=dict{) #創(chuàng)建一個(gè)空字典
d={'tom':‘cat’,001:23}
d['tom']------取出30,一種映射關(guān)系
第二種:
>>> items=[('name','wzl')]
>>> dict(items)
{'name': 'wzl'}
>>> d=dict([('name','yuan'),('job','stu')])
第三種:
>>> d = {k:v for (k,v) in zip(['a','b','c'],[1,2,3])}
>>> d
{'a': 1, 'c': 3, 'b': 2}
字典基本操作:
d={'tom':‘cat’,001:23}
d['tom'] #取值
d['tom'] = 20 #如果key存在最住,更新‘tom'所對(duì)應(yīng)的值钞澳;如果key不存在,則為添加
遍歷字典:
可以遍歷keys()涨缚,values()轧粟,items()
dic = {'k1':'v1,'k2':'v2','k3':'v3'}
for k in dic.keys(): #打印所有的key
print(k)
for v in dic.values(): #打印所有的value
print(v)
for k,v in dic.items(): #打印所有的key:value
print(k,v)
打印value,并自動(dòng)添加序號(hào),數(shù)字表示從1開始兰吟,默認(rèn)為0
for i,v in enumerate(dic.values(),1):
print(i,v)
常用方法:
- clear(),清空所有鍵值對(duì)
- copy(),淺拷貝
- fromkeys(),創(chuàng)建一個(gè)新字典:從一個(gè)可迭代對(duì)象獲取元素作為key通惫,并且value設(shè)為同一值
>>> d = {}
>>> d.fromkeys([1,2,3],'hello')
{1: 'hello', 2: 'hello', 3: 'hello'}
- get(k[,d]),獲取k對(duì)應(yīng)值,如果k不存在混蔼,默認(rèn)返回None履腋。可通過d來指定返回值
>>> d = {1: 'hello', 2: 'hello', 3: 'hello'}
>>> d.get(1)
'hello'
>>> d.get(5) #d.keys()沒有5惭嚣,返回None
>>> d.get(5,100)
100
- items()遵湖,a set-like object providing a view on D's items
- keys(),a set-like object providing a view on D's keys
- pop(k,d=None),刪除指定的k。如果k不存在晚吞,且d=None延旧,返回KeyError
d = {1: 'hello', 2: 'hello', 3: 'hello'}
d.pop(1)
d.pop(100) #KeyError
d.pop(100,'invalid') #返回’invalid'
- popitem(),刪除任一鍵值對(duì),并以元組的形式返回槽地。如果字典為空迁沫,則抱KeyError
- setdefault(k,d=None),同get(k,d=None)。只不過當(dāng)k不存在時(shí)闷盔,會(huì)執(zhí)行添加
In [110]: d
Out[110]: {1: 'default'}
In [111]: d.setdefault(2)
In [112]: d
Out[112]: {1: 'default', 2: None}
In [113]: d.setdefault(3,'v3')
Out[113]: 'v3'
In [114]: d
Out[114]: {1: 'default', 2: None, 3: 'v3'}
- update(E=None,**F)
- values(),a set-like object providing a view on D's values