目錄
?
基礎特性
數據結構/常用函數
函數
類
裝飾器
文件
異常
模塊
常用模塊
基礎特性
●首部添加#!/usr/bin/env python3表示這是一個python3程序
●變量為動態類型,弱類型語言的主要特性之一,要聲明變量直接變量名=xx即可,如x=777
●語句之后沒有分號; 作為結束,取而代之的是每行首部的縮進進行標識?
●運算符號中**代表^即指數,#為//,即注釋,""" ... """為文檔字符串,即/** ... */
●默認數值類型為浮點型
●基本類型函數; ?int(變量),float(變量),str(變量)等 ?將變量直接變為指定類型
●不使用{}區分代碼塊,而是用冒號:
●&& || ! ?分別變為 and or not
●庫用import導入, 如import math
●允許交換依次賦值,例:a,b=b,a+b按照順序語句理解即可
●if __name__ == '__main__':表示程序執行的入口(如c中的main)Python本身并沒有這么規定,這只是一種編碼習慣。由于模塊之間相互引用,不同模塊可能有這樣的定義,而程序入口只有一個。到底哪個程序入口被選中,這取決于
__name__
的值。
_name__
是內置變量,可用于表示當前模塊的名字
●input("提示消息,可加可不加") ? --從終端接收數據
●print() ?輸出數據
? ? ? ? ? ? print("...{}".format(變量),end="x") ? 格式化輸出數據, 如:print('{:.10f} {}'.format(x,y)),以保留10個小數點的格式輸出x,直接輸出y
end=“x”代表每個元素以x結尾,詳情自查
●字符串若是乘上整數 n,將返回由 n 個此字符串拼接起來的新字符串,例:?'s' * 10 等于'ssssssssss'
數據結構/常用函數
列表list,可用作棧/隊列
聲明,如:a=[1,2,3]
主要函數:
- append(x):將x添加到尾部
- insert(index,x):將x插入到索引index處
- count(x):返回x出現的次數
- remove(x):移除x
- pop(index):將索引index處的元素彈出
- reverse():翻轉列表
- extend(b):將列表b添加到列表結尾
- sort():排序
- 可使用del關鍵字刪除指定位置的列表元素。如del a[0]
列表推導式:一種列表推導的簡寫方式,列表推導式由包含一個表達式的中括號組成,表達式后面跟隨一個 for 子句,之后可以有零或多個 for 或 if 子句。結果是一個列表,由表達式依據其后面的 for 和 if 子句上下文計算而來的結果構成,如:squares = [x**2 for x in range(10)]
切片:返回列表某個范圍內的列表,即訪問某段內的元素,如a[:3]
翻轉:a[::-1]
元組tuple
元素不可變的列表
聲明,如 a=(1,2,3)或者,a=1,2,3
這樣聲明就是元組,編輯元組元素會報錯
集合set
集合是一個無序不重復元素的集。
聲明,如a={1,2,3},或者a=set()(即創建一個集合),可以傳參數,該參數為初始列表,如a = set('ab')為{a,b}
如果想要創建空集合,必須使用 set() 而不是 {}。后者用于創建空字典。
? 交并差& | - ?a^b:存在于a或b但不能同時存在
字典dictionary
字典是是無序的鍵值對(
key:value
)集合。
聲明,如a={1:2,2:3}
items():用于迭代字典,返回為(x,y),類型為class dict_items
字符串string
聲明 s=""
如果你想要分幾行輸入字符串,并且希望行尾的換行符自動包含到字符串當中,可以使用三對引號:"""\...""" 或 '''\...''' 。
string有各種內置方法
-
title()
?返回字符串的標題版本,即單詞首字母大寫其余字母小寫 -
upper()
?返回字符串全部大寫的版本 -
upper()
?返回字符串全部大寫的版本 -
swapcase()
?返回字符串大小寫交換后的版本 -
isalnum()
?檢查所有字符是否只有字母和數字 -
isalpha()
?檢查字符串之中是否只有字母 -
split()
?分割任意字符串,split()
?允許有一個參數,用來指定字符串以什么字符分隔(默認為?" "
),它返回一個包含所有分割后的字符串的列表。 -
join(list)
?使用指定字符連接多個字符串,將列表list中的元素用該字符串連接起來 -
strip(chars)
,用來剝離字符串首尾中指定的字符,默認為" ",剝離規則為按chars中的char順序尋找該字符串,找到刪除,若不指定參數,則效果為剝離首尾空格與換行符 -
lstrip(chars))
?只對字符串左剝離 -
?
rstrip(chars)
?只對字符串右剝離。 -
find()
?找到第一個匹配的子字符串,沒有找到則返回 -1
通用函數:
type(a):返回a的類型
len(a): 返回 a的長度
range(a,b,c):生成一個等差數列,非列表,a,b為范圍,c為差值
函數
定義函數:
def 函數名(參數):
? ? 語句1
? ? 語句2
global關鍵字定義全局變量,即使在函數內部也可以定義
函數的參數變量可以有默認值:def test(a , b=-99):
可以接收一個函數作為參數,在函數內部使用參數函數,即高級函數
map(function,list):
map 是一個在 Python 里非常有用的高階函數。它接受一個函數和一個序列(迭代器)作為輸入,然后對序列(迭代器)的每一個值。返回一個序列(迭代器),其包含應用函數后的結果。
舉例:
>>> lst = [1, 2, 3, 4, 5]
>>> def square(num):
... ? ? return num * num
>>> print(list(map(square, lst)))
[1, 4, 9, 16, 25]
可變參數?
* args
?/關鍵字參數?
** kwargs(
來源于:
https://zhuanlan.zhihu.com/p/50804195)
在Python中的代碼中經常會見到這兩個詞 args 和 kwargs,前面通常還會加上一個或者兩個星號。其實這只是編程人員約定的變量名字,args 是 arguments 的縮寫,表示位置參數;kwargs 是 keyword arguments 的縮寫,表示關鍵字參數。這其實就是 Python 中可變參數的兩種形式,并且 *args 必須放在 **kwargs 的前面,因為位置參數在關鍵字參數的前面。
*args
*args就是就是傳遞一個可變參數列表給函數實參,這個參數列表的數目未知,甚至長度可以為0。
def test_args(first, *args):
print('Required argument: ', first)
print(type(args))
for v in args:
print ('Optional argument: ', v)
test_args(1, 2, 3, 4)
第一個參數是必須要傳入的參數,所以使用了第一個形參,而后面三個參數則作為可變參數列表傳入了實參,并且是作為元組tuple來使用的。代碼的運行結果如下
Required argument: 1
Optional argument: 2
Optional argument: 3
Optional argument: 4
**kwargs
而**kwargs則是將一個可變的關鍵字參數的字典傳給函數實參,同樣參數列表長度可以為0或為其他值。下面這段代碼演示了如何使用kwargs
def test_kwargs(first, *args, **kwargs):
print('Required argument: ', first)
print(type(kwargs))
for v in args:
print ('Optional argument (args): ', v)
for k, v in kwargs.items():
print ('Optional argument %s (kwargs): %s' % (k, v))
test_kwargs(1, 2, 3, 4, k1=5, k2=6)
正如前面所說的,args類型是一個tuple,而kwargs則是一個字典dict,并且args只能位于kwargs的前面。代碼的運行結果如下
Required argument: 1
Optional argument (args): 2
Optional argument (args): 3
Optional argument (args): 4
Optional argument k2 (kwargs): 6
Optional argument k1 (kwargs): 5
調用函數
args和kwargs不僅可以在函數定義中使用,還可以在函數調用中使用。在調用時使用就相當于pack(打包)和unpack(解包),類似于元組的打包和解包。
首先來看一下使用args來解包調用函數的代碼,
def test_args_kwargs(arg1, arg2, arg3):
print("arg1:", arg1)
print("arg2:", arg2)
print("arg3:", arg3)
args = ("two", 3, 5)
test_args_kwargs(*args)
#result:
arg1: two
arg2: 3
arg3: 5
將元組解包后傳給對應的實參,kwargs的用法與其類似。
kwargs = {"arg3": 3, "arg2": "two", "arg1": 5}
test_args_kwargs(**kwargs)
#result
arg1: 5
arg2: two
arg3: 3
args和kwargs組合起來可以傳入任意的參數,這在參數未知的情況下是很有效的,同時加強了函數的可拓展性。
類
語法
class nameoftheclass(parent_class):
statement
初始構造方法
def __init__(self):
self.data = []
self即代表該類本身(類似于this),任何函數都可以傳該參數該方法在構建類的實例時被執行,當然該方法可以傳參,并使用self進行賦值
例:
>>> class Complex:
... def __init__(self, realpart, imagpart):
... self.r = realpart
... self.i = imagpart
...
>>> x = Complex(3.0, -4.5)
>>> x.r, x.i
(3.0, -4.5)
聲明類實例
? x=nameoftheclass()
繼承
在class()中傳一個class即代表繼承于該類,通用父類為object
例:
#!/usr/bin/env python3
class Person(object):
"""
返回具有給定名稱的 Person 對象
"""
def __init__(self, name):
self.name = name
def get_details(self):
return self.name
class Student(Person):
"""
返回 Student 對象,采用 name, branch, year 3 個參數
"""
def __init__(self, name, branch, year):
Person.__init__(self, name)
self.branch = branch
self.year = year
def get_details(self):
return "{} studies {} in {} year.".format(self.name, self.branch, self.year)
person1 = Person('x')
student1 = Student('y', 'CSE', 2045)
多繼承
python支持多繼承,在class()中傳多個class即可
刪除對象
使用關鍵字del可以刪除實例對象
del
?實際上使對象的引用計數減少一,當對象的引用計數變成零的時候,垃圾回收器會刪除這個對象。
?
@property
?裝飾器
?
@property
?裝飾器,
@property
?裝飾器就是負責把一個方法變成屬性調用的。
說實話,這玩意讓我想到了java的注解,在函數上使用該裝飾器,可以把該函數當成屬性來調用,返回值為一個property對象(實際上所有裝飾器都返回一個函數或者對象,作用就是為指定函數/屬性添加功能,即進行切面)
裝飾器
裝飾器的作用就是為函數增加功能(切面),@的寫法相當于語法糖
def debug(func):
def wrapper(*args, **kwargs): # 變參
print "[DEBUG]: enter {}()".format(func.__name__)
return func(*args, **kwargs)
return wrapper
@debug
def say(something):
print "hello {}!".format(something)
可以看到,debug為裝飾器,實際上就是一個函數,內部包裝一個函數,將函數say織入wrapper然后返回,在過程中完成了一些功能。
文件
- 使用 open() 函數打開文件,兩個參數,第一個是文件路徑,第二個是模式r/w/a(追加)
- 默認的模式為只讀模式,返回一個文件(class)
- close():關閉文件
- ?read():一次性讀取整個文件,read(size) 有一個可選的參數 size,用于指定字符串長度
- readline() :每次讀取文件的一行
- ?readlines() :讀取所有行到一個列表中。
- 使用for...in...循環遍歷文件中的每一行
- 通過write() 方法寫入文件,參數為內容
異常
使用 try...except 塊來處理任意異常
try:
? ? statements to be inside try clause
? ? ...
except ExceptionName:
? ? statements to evaluated in case of ExceptionName happens
使用 raise 語句拋出一個異常
finally子句必定執行
模塊
一個模塊就是一個.py文件
導入模塊
import xxx
from xxx import yyy,zzz
獲取模塊的名字
可以由全局變量__name__獲取模塊的名字
包
一個包包含了多個子模塊,在一個目錄下如果含有__init__.py文件,那么該目錄就是一個包,__init__.py中的內容也有一些規則,聲明列表__all__表明只有列表中的內容會被當做模塊。
常用模塊
os
-
os
?模塊提供了與操作系統相關的功能。 -
getuid()
?:返回當前進程的有效用戶 id。 -
getpid()
?:返回當前進程的 id。g
-
etppid():
返回父進程的 id。 -
uname()
?:返回識別操作系統的不同信息,在 Linux 中它返回的詳細信息可以從?uname -a
命令得到。uname()
?返回的對象是一個元組,(sysname, nodename, release, version, machine)
>>> os.uname()
('Linux', 'd80', '2.6.34.7-56.fc13.i686.PAE', '#1 SMP Wed Sep 15 03:27:15 UTC 2010', 'i686')
- getcwd() :返回當前工作目錄。
-
chdir(path)
:更改當前目錄到 path。
>>> os.getcwd()
'/home'
>>> os.chdir('Code')
>>> os.getcwd()
'/home/Code'
- listdir(path):返回路徑中的所有文件和路徑
官網: https://docs.python.org/3/library/os.html
requests
一個第三方http庫,用于進行網絡編程
安裝使用:sudo pip3 install requests
官網: https://2.python-requests.org//zh_CN/latest/
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
