Python 特性語法總結(jié)
成員運(yùn)算符
運(yùn)算符 | 描述 |
---|---|
in | 在指定的序列中找到值,返回True;否則返回False |
not in | 相反 |
a = 10
list = [1,2,3,4,5]
if (a in list):
print(a)
if (a not in list):
print(0)
身份運(yùn)算符
運(yùn)算符 | 描述 |
---|---|
is | x is y, 類似 id(x) == id(y) , 如果引用的是同一個(gè)對(duì)象則返回 True顾翼,否則返回 False |
is not | 相反 |
is 與 == 區(qū)別:
is
用于判斷兩個(gè)變量引用對(duì)象是否為同一個(gè),==
用于判斷引用變量的值是否相等。
字符串格式化
print ("我叫 %s 今年 %d 歲!" % ('小明', 10))
//我叫 小明 今年 10 歲!
主要使用format()
格式化函數(shù)
print("name:{a},addr呻疹".format(a='haha',b='home')
數(shù)據(jù)結(jié)構(gòu)
1.列表
del
關(guān)鍵字
del list[0]
del list函數(shù)
操作 | 含義 |
---|---|
max(list) / min(list) | 返回最值 |
list(seq) | 將元組轉(zhuǎn)換為列表 |
cmp(list1,list2) | 比較兩個(gè)列表的元素 |
len(list) | 長(zhǎng)度 |
- 腳本操作符
操作 | 含義 |
---|---|
+ |
組合 |
* |
重復(fù) |
in |
元素是否存在于列表中 |
- 方法
操作 | 含義 |
---|---|
list.append(obj) | 末尾添加 |
list.count(obj) | 統(tǒng)計(jì)某個(gè)元素在列表中出現(xiàn)的次數(shù) |
list.extend(seq) | 用新列表擴(kuò)展原來的列表 |
list.index(obj) | 第一個(gè)匹配項(xiàng)的索引位置 |
list.insert(index, obj) | 將對(duì)象插入列表 |
list.pop([index = -1]) | 默認(rèn)移除最后一個(gè)元素并返回元素值 |
list.remove(obj) | 移除第一個(gè)匹配項(xiàng) |
list.reverse() | 元素反向 |
list.sort(cmp=None, key=None, reverse=False) | 根據(jù)規(guī)則排序 |
2. 元組
#!/usr/bin/python
# -*- coding: UTF-8 -*-
tup1 = (12, 34.56)
tup2 = ('abc', 'xyz')
# 以下修改元組元素操作是非法的。
# tup1[0] = 100
# 創(chuàng)建一個(gè)新的元組
tup3 = tup1 + tup2
print tup3
#輸出(12, 34.56, 'abc', 'xyz')
del
不允許刪除元組中的元素筹陵,但是可以刪除整個(gè)元組
內(nèi)置函數(shù)
- cmp(tuple1,tuple2)
- len(tuple)
- max(tuple) / min(tuple)
-
tuple(seq)
將列表轉(zhuǎn)換為元組
3. 字典
字典是另一種可變?nèi)萜髂P突逵睿铱纱鎯?chǔ)任意類型對(duì)象。
- 鍵唯一惶翻,值不需要唯一
- 若同一個(gè)鍵出現(xiàn)兩次姑蓝,則后一個(gè)值被記住
- 鍵不可變,因此
不可以用列表作為鍵
操作dict | 含義 |
---|---|
del dict['a'] | 刪除鍵是'a'的條目 |
dict.clear() | 清空字典條目 |
del dict | 刪除字典 |
cmp(dict1,dict2) | 比較 |
len(dict) | 計(jì)算字典元素個(gè)數(shù)吕粗,鍵數(shù) |
str(dict) | 返回字典的字符串表示纺荧,方便打印 |
dict.has_key(key) | 如果鍵在字典dict里返回true,否則返回false |
dict.items() | 以列表返回可遍歷的(鍵颅筋,值)元組數(shù)組 |
dict.keys() | 以列表返回所有鍵 |
dict.values() | 以列表返回字典中所有值 |
dict.update(dict1) | 把另一個(gè)字典dict1的鍵值對(duì)更新到dict里 |
dict.pop(key[,default]) | 刪除鍵值對(duì)宙暇,并彈出key對(duì)應(yīng)的值,不給key則返回default值 |
dict.popitem() | 返回并刪除字典中最后一對(duì)鍵值(元組) |
遍歷技巧
-
字典
遍歷同時(shí)解讀鍵和值:items()
dic = {'keya':'valuea', 'keyb':'valueb'}
for k,v in dic.items():
print(k,v)
"""
輸出
keya valuea
keyb valueb
"""
-
列表
遍歷同時(shí)得到索引位置和對(duì)應(yīng)值:enumerate()
for i, v in enumerate(['a', 'b', 'c']):
print(i,v)
"""
輸出
0 a
1 b
2 c
"""
- 同時(shí)遍歷兩個(gè)及以上
列表
:zip()
list1 = ['a1', 'b1', 'c1']
list2 = ['a2', 'b2', 'c2']
for x, y in zip(list1, list2):
print('list1 {0} and list2 {1}'.format(list1,list2)
"""
輸出
list1 a1 and list2 a2
list1 b1 and list2 b2
list1 c1 and list2 c2
"""
- 反序遍歷:reversed()
for i in reversed(range(1,10,2)):
print(i)
"""
輸出
9
7
5
3
1
"""
函數(shù)傳參
可變對(duì)象與不可變對(duì)象
python中一切都是對(duì)象议泵,嚴(yán)格意義我們不能說值傳遞還是引用傳遞占贫,我們應(yīng)該說傳不可變對(duì)象和傳可變對(duì)象。
不定長(zhǎng)參數(shù)
一個(gè)函數(shù)能處理比當(dāng)初聲明時(shí)更多的參數(shù)先口。這些參數(shù)叫做不定長(zhǎng)參數(shù)型奥。
- 加了
*
號(hào)的參數(shù)會(huì)以元組(tuple)的形式導(dǎo)入(可以不傳遞未命名的變量導(dǎo)入空元組),存放所有未命名的變量參數(shù)碉京。
注意:定義函數(shù)時(shí)參數(shù)前加*厢汹,若是在調(diào)用函數(shù)時(shí)參數(shù)前加*有解包裹的效果
https://www.cnblogs.com/bingabcd/p/6671368.html - 帶兩個(gè)星號(hào)
**
的參數(shù)會(huì)以字典的形式導(dǎo)入。 - 注意區(qū)別參數(shù)表中單獨(dú)出現(xiàn)的*谐宙,作用是其后的參數(shù)必須用關(guān)鍵字傳入烫葬。
匿名函數(shù)lambda
lambda只是一個(gè)表達(dá)式,函數(shù)體比def簡(jiǎn)單很多。
語法:
lambda [arg1 [,arg2,……,argn]]:expression
demo
sum = lambda arg1, arg2: arg1 + arg2
#調(diào)用
print(sum(1,2))
#輸出
#3
迭代器與生成器
迭代是python訪問集合元素的一種方式搭综。
- 迭代器是一個(gè)可以記住遍歷的位置的對(duì)象垢箕。
- 迭代器只能往前不會(huì)后退。
- 兩個(gè)基本方法 iter()和next()
- 字符串兑巾、列表舰讹、元組對(duì)象都可用于創(chuàng)建迭代器
迭代器
- 由列表創(chuàng)建迭代器對(duì)象(導(dǎo)入sys模塊)
#!/usr/bin/python3
import sys # 引入 sys 模塊
list=[1,2,3,4]
it = iter(list) # 創(chuàng)建迭代器對(duì)象
while True:
try:
print (next(it))
except StopIteration:
sys.exit()
#輸出結(jié)果
#1
#2
#3
#4
- 把類作為迭代器使用
需要在類中實(shí)現(xiàn)兩個(gè)方法
1.__iter__()
返回一個(gè)迭代器對(duì)象,這個(gè)對(duì)象實(shí)現(xiàn)了__next()__方法并通過StopIteration異常標(biāo)識(shí)迭代的完成闪朱。
2.__next__()
返回下一個(gè)迭代器對(duì)象
實(shí)例:創(chuàng)建一個(gè)返回?cái)?shù)字的迭代器月匣,初始值為1,逐步增1
class MyNumbers:
def __iter__(self):
self.a = 1
return self
def __next__(self):
x = self.a
self.a += 1
return x
myclass = MyNumbers()
myiter = iter(myclass)
print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))
#輸出結(jié)果
#1
#2
#3
#4
#5
StopIteration
在20次迭代后停止執(zhí)行
class MyNumbers:
def __iter__(self):
self.a = 1
return self
def __next__(self):
if self.a <= 20:
x = self.a
self.a += 1
return x
else:
raise StopIteration
myclass = MyNumbers()
myiter = iter(myclass)
for x in myiter:
print(x)
#輸出1到20
生成器 yield
使用了yield的函數(shù)被稱為生成器(generator)奋姿。
- 此類函數(shù)返回的是迭代器锄开,只能用于迭代操作。
- 每次遇到y(tǒng)ield時(shí)函數(shù)會(huì)暫停并保存當(dāng)前所有的運(yùn)行信息称诗,返回yield的值萍悴,并在下次執(zhí)行next()方法時(shí)從當(dāng)前位置繼續(xù)運(yùn)行。
實(shí)例:使用yield實(shí)現(xiàn)斐波那契數(shù)列
#!/usr/bin/python3
import sys
def fibonacci(n): # 生成器函數(shù) - 斐波那契
a, b, counter = 0, 1, 0
while True:
if (counter > n):
return
yield a
a, b = b, a + b
counter += 1
f = fibonacci(10) # f 是一個(gè)迭代器寓免,由生成器返回生成
while True:
try:
print (next(f), end=" ")
except StopIteration:
sys.exit()
#輸出結(jié)果
#0 1 1 2 3 5 8 13 21 34 55
模塊
命令行中參數(shù)的使用
使用模塊: sys
import sys
for i in sys.argv:
print(i)
- sys.argv 是一個(gè)包含命令行參數(shù)的列表
- sys.path 包含了一個(gè)Python解釋器自動(dòng)查找所需模塊的路徑的列表癣诱。
__name__屬性
一個(gè)模塊被另一個(gè)程序第一次引入時(shí),其主程序?qū)⑦\(yùn)行袜香。如果我們想在模塊被以引入時(shí)撕予,模塊中的某一程序塊不執(zhí)行,可以使用__name__屬性蜈首。
__name__屬性使該程序塊僅在該模塊自身運(yùn)行時(shí)執(zhí)行实抡。
#!/usr/bin/python3
# Filename: using_name.py
if __name__ == '__main__':
print('程序自身在運(yùn)行')
else:
print('我來自另一模塊')
輸出
$ python using_name.py
程序自身在運(yùn)行
$ python
>>> import using_name
我來自另一模塊
>>>
輸入和輸出
repr()
產(chǎn)生一個(gè)解釋器易讀的表達(dá)式
# repr() 函數(shù)可以轉(zhuǎn)義字符串中的特殊字符
hello = 'hello, runoob\n'
hellos = repr(hello)
print(hellos)
輸出
'hello, runoob\n'
# repr() 的參數(shù)可以是 Python 的任何對(duì)象
repr((x, y, ('Google', 'Runoob')))
返回
"(32.5, 40000, ('Google', 'Runoob'))"
關(guān)于字符串對(duì)象的格式化方法
- string.rjust(num) 字符串靠右,左邊填充num個(gè)空格
for x in range(1,11):
print(repr(x).rjust(2), repr(x*x).rjust(3))
for x in range(1, 11):
print('{0:2d} {1:3d} {2:4d}'.format(x, x*x, x*x*x))
輸出
1 1 1
2 4 8
3 9 27
4 16 64
5 25 125
6 36 216
7 49 343
8 64 512
9 81 729
10 100 1000
- string.ljust()/center()
- string.zfill(num)在數(shù)字的左邊填充num個(gè)0
讀和寫文件
-
open()
基本語法open(filename, mode)
mode:決定了文件的打開模式欢策,非強(qiáng)制吆寨,默認(rèn)為只讀(r)。
f = open("1.txt")
f.read(size)
size:讀取數(shù)目踩寇,可選參數(shù)啄清,空則讀取并返回所有內(nèi)容。f.readline()
從文件中讀取單獨(dú)的一行俺孙。換行符為'\n'辣卒。若返回一個(gè)空字符串則說明已讀取到最后一行。f.readlines()
返回文件中包含的所有行鼠冕。
如果設(shè)置可選參數(shù)sizehint
, 則讀取指定長(zhǎng)度的字節(jié)
, 并且將這些字節(jié)按行分割添寺。f.write()
f.write(string) 將 string(字符串類型) 寫入到文件中, 然后返回寫入的字符數(shù)胯盯。f.tell()
返回文件對(duì)象當(dāng)前所處的位置懈费,它是從文件開頭開始算起的字節(jié)數(shù)。f.seek()
改變文件當(dāng)前的位置
seek(x,0) : 從起始位置即文件首行首字符開始移動(dòng) x 個(gè)字符
seek(x,1) : 表示從當(dāng)前位置往后移動(dòng)x個(gè)字符
seek(-x,2):表示從文件的結(jié)尾往前移動(dòng)x個(gè)字符f.close()
關(guān)閉文件并釋放系統(tǒng)的資源博脑。
當(dāng)處理一個(gè)文件對(duì)象時(shí), 使用 with
關(guān)鍵字是非常好的方式憎乙。在結(jié)束后, 它會(huì)幫你正確的關(guān)閉文件票罐。 而且寫起來也比 try - finally 語句塊要簡(jiǎn)短:
with open('/tmp/foo.txt', 'r') as f:
read_data = f.read()
f.closed
True