Python3 基礎知識整理
Part I: 安裝和使用Anaconda
1. What and Why Anacanda?
Anaconda是包管理器和環境管理器
(1)附帶很多常用科學數據包;
(2)可以更好的管理包,包括安裝、卸載和更新包。
(3)可以幫助管理環境。
2. 安裝中的常見問題:
https://zhuanlan.zhihu.com/p/34337889
3. 管理包:
安裝包conda install package_name: conda install pandas
同時安裝多個包:conda install pandas numpy
安裝指定的版本號:conda install numpy=1.10
conda還會自動為你安裝依賴項
卸載包:
conda remove package_names: conda remove pandas
更新包:
conda update package_name: conda update --all
列出已經安裝的包:
conda list
如果不知道要找的包的確切名稱,可以嘗試使用conda search search_term進行搜索。
4. 管理環境:
(1)安裝nb_conda用於notebook自動關聯nb_conda的環境
(2)創建環境:conda create -n env_name package_names [=version]
(3)進入環境:activate my_env
(4)離開環境: deactivate
(5)共享環境:
導出環境:conda env export > environment.yaml
進入環境:activate env_name.
更新環境:conda env update -f=/path/to/environment.yml
(6)列出環境: conda env list; 默認環境root, 當前環境*.
(7)刪除環境:conda env remove -n env_name
5. Conda官方文檔:https://conda.io/docs/user-guide/tasks/manage-conda.html
Part II: 安裝和使用Jupyter Notebook
1. What and Why
Jupyter notebook 可以將數據分析的代碼、圖像和文檔全部組合到一個web文檔中。
2. 安裝:conda/pip install jupyter notebook
安裝常見問題:https://zhuanlan.zhihu.com/p/34337292
3. 啟動: jupyter notebook
4. 使用:
(1) prerequistiion:
安裝環境自動關聯包:conda install nb_conda
安裝代碼自動補全包: conda install pyreadline
(2)自動補全:定義變數的cell運行以後,notebook才能識別。
(3) 共享:
客戶:HTML
項目:Python
知乎:Markdown
Part III: Python基礎
1. Python 3基礎語法:
(1)Python 3放棄了向下兼容。
(2)編碼:源碼文件以UTF-8編碼 ,字元串是unicode形式 。
(3)標識符:
第一個字元必須是字母表中字母或下劃線 _ 。
標識符的其他的部分由字母、數字和下劃線組成。
標識符對大小寫敏感。
(4)保留字:
import keyword
keyword.kwlist
(5)注釋:
單行:#
多行:多個#, , .
(6)行與縮進:縮進的空格數是可變的,但是同一個代碼塊的語句必須包含相同的縮進空格數。
(7)同一條語句顯示在多行:使用來實現多行語句,也可以使用 """...""" 或者 ... 跨越多行。 在 [], {}, 或 () 中的多行語句,不需要使用反斜杠()。
(8)同一行顯示多條語句:用分號;分割。
(9)空行: 函數之間或類的方法之間用空行分隔,表示一段新的代碼的開始。類和函數入口之間也用一行空行分隔,以突出函數入口的開始。
(10)等待用戶輸入:
input("
按下 enter鍵後退出。")
以上代碼中 ,"
"在結果輸出前會輸出兩個新的空行。一旦用戶按下 enter 鍵時,程序將退出。
(11)代碼組:
縮進相同的一組語句構成一個代碼塊,我們稱之代碼組。
像if、while、def和class這樣的複合語句,首行以關鍵字開始,以冒號( : )結束,該行之後的一行或多行代碼構成代碼組。
我們將首行及後面的代碼組稱為一個子句(clause)。
(12)運算符:
算數運算符:+ - * / % ** //
比較運算符:== !<> > < >= <=
賦值運算符:= += -+ *= /= %= **= //=
位運算符:& | ^ ~ << >>
邏輯運算符: and or not
成員運算符:in not in
(13)變數:Python 中的變數就是變數,沒有類型,我們所說的"類型"是變數所指的內存中對象的類型,故python中的變數不需要聲明。變數賦值以後就會被創建。
多變數賦值: a = b = c = 1
a, b, c = 1, 2, "runoob"
(14)print輸出: print輸出是換行的,如果要實現不換行需要在變數末尾加上 end=" ".
(15)標準數據類型:
· Number(數字)- 不可變
· String(字元串)- 不可變
· List(列表) - 可變
· Tuple(元組)- 不可變
· Sets(集合)- 不可變
· Dictionary(字典)- 可變
2. Number:
(1)int(long int)、float、bool、complex
(2)type and isinstance
type: print(type(a))
isinstance: isinstance(a,int)
區別: type()不會認為子類是一種父類類型。 isinstance()會認為子類是一種父類類型。
class A: pass
class B(A): pass
isinstance(B(), A) # returns True
type(B()) == A # returns False
(3) del
del var1[,var2[,var3[....,varN]]]]
del vardel var_a, var_b
(4) 常用函數:數學函數、隨機數函數、三角函數(略)。
(5) 數學常量:pi e
3. 字元串
(1)Python中的字元串用單引號()或雙引號(")括起來。
(2) 轉義符:使用反斜杠()轉義特殊字元,如果你不想轉義,可在字元串前面添加一個 r,表示原始字元串。
(3)用方括弧來截取字元串,索引值以 0 為開始值,-1 為從末尾的開始位置。
(4)字元串運算符: + * [] [:] in not in r/R
(5)字元串格式化: 最基本的用法是將一個值插入到一個有字元串格式符 %s 的字元串中。與C類似。
(6)python三引號允許一個字元串跨多行,字元串中可以包含換行符、製表符以及其他特殊字元。
(7)python字元串內建函數(略)。
4. 列表list:[a,b]
(1) 列表中元素的類型可以不相同,它支持數字,字元串甚至可以包含列表(所謂嵌套)。
(2)列表寫在方括弧([])之間、用逗號分隔開。
(3)列表索引值以 0 為開始值,-1 為從末尾的開始位置。
(4)列表操作:
基本:len + * in
迭代: for x in [1,2,3]: print(x, end=" ")
新增: append
修改:list_name[index]=
刪除元素 :del list_name[index]
刪除列表:del list_name[:]
(5)列表嵌套(類數組):
>>> a = [a, b, c]
>>> n = [1, 2, 3]
>>> x = [a, n]
>>> x
[[a, b, c], [1, 2, 3]]
>>> x[0]
[a, b, c]
>>> x[0][1]
b
(6)列表方法與函數(略)
(7)列表推導式:
常應用程序將一些操作應用於某個序列的每個元素,用其獲得的結果作為生成新列表的元素,或者根據確定的判定條件創建子序列。 >>> vec = [2, 4, 6]
>>> [3*x for x in vec]
[6, 12, 18]
>>> [3*x for x in vec if x > 3]
[12, 18]
>>> [3*x for x in vec if x < 2]
[]
5. 元組tuple:(a,b)
(1)元組元素寫在小括弧里,並用逗號分開。或者不用小括弧也可以。
>>> tup1 = (Google, Runoob, 1997, 2000);
>>> tup3 = "a", "b", "c", "d"; # 不需要括弧也可以
(2)元組索引值以 0 為開始值,-1 為從末尾的開始位置。
(3)元組操作:
基本:len + * in
迭代: for x in (1,2,3): print(x, end=" ")
更新: 不允許
刪除元素 :不允許
刪除元組: del tuple_name
創建空元組:tup1 = ();
元組中只包含一個元素時,需要在元素後面添加逗號,否則括弧會被當作運算符使用。
(4)元組內置函數(略)。
6. 集合set: {a,b}
(1)集合(set)是一個無序不重複元素的序列。基本功能是進行成員關係測試(a-b a|b a&b a^b) 和刪除重複元素。
print(a - b) # a和b的差集, 在a中不在b中 print(a | b) # a和b的並集,在a or b中 print(a & b) # a和b的交集,在a且在b中 print(a ^ b) # a和b中不同時存在的元素
(2)可以使用大括弧 { } 或者 set() 函數創建集合,注意:創建一個空集合必須用 set() 而不是 { },因為 { } 是用來創建一個空字典。
創建格式:parame = {value01,value02,...}或者set(value)
(3)集合操作:
增加update:setname.update([騰訊,『阿里巴巴』,『京東』])
刪除discard: setname.discard(京東)
(4)集合推導式:
>>> a = {x for x in abracadabra if x not in abc} >>> a {r, d}
7. 字典dic:{key1:value1,key2:value2}
(1)字典的每個鍵值對用冒號(:)分割,每個對之間用逗號(,)分割,整個字典包括在花括弧({})中。
(2)鍵必須是唯一的,但值則不必。值可以取任何數據類型,但鍵必須是不可變的,如字元串,數字或元組。
(3)字典操作:
創建空字典:dic_name = {}
訪問:dict_name[key]
修改/增加:dict_name[key]=value
刪除鍵:del dict_name[key]
清空字典:dict.clear()
刪除字典: del dict_name
(4) 內置函數與方法:略。
(5) 字典推導式:
>>> {x: x**2 for x in (2, 4, 6)}{2: 4, 4: 16, 6: 36}
8. 條件控制: if - elif - else.
(1) 語法:
if condition_1:
statement_block_1
elif condition_2:
statement_block_2
else: statement_block_3
(2) if常用操作符: < <= > >= == !<> and or not
9. 循環語句:
(1) while 循環:
Note: Python中沒有do ... while循環。
1)語法:
while 判斷條件:
語句
2)無限循環:
使用 CTRL+C 來退出當前的無限循環。
3)while循環使用else語句:
count = 0
while count < 5:
print (count, " 小於 5")
count = count + 1
else:
print (count, " 大於或等於 5")
4)簡單語句組: 如果你的while循環體中只有一條語句,你可以將該語句與while寫在同一行中。
flag = 1
while (flag): print (歡迎訪問菜鳥教程!)
print ("Good bye!")
注意:以上的無限循環你可以使用 CTRL+C 來中斷循環。
歡迎訪問菜鳥教程!
歡迎訪問菜鳥教程!
……
(2)for循環:
1)語法:
for循環可以遍歷任何序列的項目,如一個列表或者一個字元串。
for <variable> in <sequence>:
<statements>
else:
<statements>
2) for 循環與range ()函數:
如果你需要遍曆數字序列,可以使用內置range()函數。它會生成數列。
可以使用range指定區間的值:
>>>for i in range(5,7) :
print(i)
5 6
也可以使range以指定數字開始並指定不同的增量(甚至可以是負數,有時這也叫做步長):
>>>for i in range(-10, -50, -30) :
print(I)
-10 -40
也可以結合range()和len()函數以遍歷一個序列的索引,如下所示:。
>>>a = [Google, Baidu, Runoob, Taobao, QQ]
>>> for i in range(len(a)):
... print(i, a[i])
...
0 Google
1 Baidu
2 Runoob
3 Taobao
4 QQ
還可以使用range()函數來創建一個列表:
>>>list(range(5))
[0, 1, 2, 3, 4]
3)for循環與pass語句: pass是空語句,是為了保持程序結構的完整性。
pass 不做任何事情,一般用做佔位語句。
for letter in Runoob:
if letter == o:
pass
print (執行 pass 塊)
print (當前字母 :, letter)
print ("Good bye!")
當前字母 : R
當前字母 : u
當前字母 : n
執行 pass 塊
當前字母 : o
執行 pass 塊
當前字母 : o
當前字母 : b
Good bye!
4)for循環的遍歷技巧
A: 在字典中遍歷時,關鍵字和對應的值可以使用items()方法同時解讀出來
>>> knights = {gallahad: the pure, robin: the brave}
>>> for k, v in knights.items():
... print(k, v)
...
gallahad the pure
robin the brave
B:在序列中遍歷時,索引位置和對應值可以使用 enumerate() 函數同時得到:
>>> for i, v in enumerate([tic, tac, toe]):
... print(i, v)
...
0 tic
1 tac
2 toe
C: 同時遍歷兩個或更多的序列,可以使用 zip() 組合:
>>> questions = [name, quest, favorite color]
>>> answers = [lancelot, the holy grail, blue]
>>> for q, a in zip(questions, answers):
... print(What is your {0}? It is {1}..format(q, a))
...
What is your name? It is lancelot.
What is your quest? It is the holy grail.
What is your favorite color? It is blue.
D: 要反向遍歷一個序列,首先指定這個序列,然後調用 reversed() 函數:
>>> for i in reversed(range(1, 6, 2)):
... print(i)
...
5
3
1
E: 要按順序遍歷一個序列,使用 sorted() 函數返回一個已排序的序列,並不修改原值:
>>> basket = [apple, orange, apple, pear, orange, banana]
>>> for f in sorted(set(basket)):
... print(f)
...
apple
banana
orange
pear
(3)for和while循環語句中的break和continue語句以及循環中的else子句。
break: 跳出整個循環體。如果你從 for 或 while 循環中終止,任何對應的循環 else 塊將不執行。 (下例:查找到蘋果即跳出循環,會列印 所有之前查找的紀錄及蘋果) number=0
gafataDict={騰訊:『HK:00700』,蘋果:Apple, 谷歌:『:GOOGLE』}
for key,value in gafataDict.items():
number=number+1
if (key==蘋果):
print(查找:,key, 公司的股票代碼:,value)
break
print(當前公司:,key, 當前股票代碼:,value)
當前公司:騰訊,當前股票代碼:HK:00700
查找:蘋果,公司的股票代碼:Apple
continue: 跳過當前循環塊中的剩餘語句,然後繼續進行下一輪循環。 (下例:查找到蘋果即跳出當前循環的 剩餘語句,繼續下一輪循環,會列印 所有之前查找的紀錄及之後查找的紀錄)
gafataDict={騰訊:『HK:00700』,『阿里巴巴』:『baba』, 蘋果:Apple, 谷歌:『:GOOGLE』}
for key,value in gafataDict.items():
if (key==蘋果):
continue
print(當前公司:,key, 當前股票代碼:,value)
當前公司:騰訊,當前股票代碼:HK:00700
當前公司:阿里巴巴,當前股票代碼:baba
當前公司:谷歌,當前股票代碼:GOOGLE
循環語句可以有 else 子句,它在窮盡列表(以for循環)或條件變為 false (以while循環)導致循環終止時被執行,但循環被break終止時不執行。
10. 函數
(1)內建函數和用戶自定義函數。
(2)函數定義:
def 函數名(參數列表):
函數體
(3)參數:
1)必須參數:必需參數須以正確的順序傳入函數。調用時的數量必須和聲明時的一樣。
2)關鍵字參數:使用關鍵字參數允許函數調用時參數的順序與聲明時不一致,因為 Python 解釋器能夠用參數名匹配參數值。
3)默認參數:
#可寫函數說明
def printinfo( name, age = 35 ):
"列印任何傳入的字元串"
print ("名字: ", name);
print ("年齡: ", age);
return;
#調用printinfo函數
printinfo( name="runoob" );
名字: runoob
年齡: 35
4)不定長參數:
def functionname([formal_args,] *var_args_tuple ):
"函數_文檔字元串"
function_suite
return [expression]
加了星號(*)的變數名會存放所有未命名的變數參數。
(4)參數傳遞:
不可變類型:類似 c++ 的值傳遞,如 整數、字元串、元組。如fun(a),傳遞的只是a的值,沒有影響a對象本身。比如在 fun(a)內部修改 a 的值,只是修改另一個複製的對象,不會影響 a 本身。
可變類型:類似 c++ 的引用傳遞,如 列表,字典。如 fun(la),則是將 la 真正的傳過去,修改後fun外部的la也會受影響。
(5)匿名函數:
python 使用 lambda 來創建匿名函數。lambda 函數擁有自己的命名空間,且不能訪問自己參數列表之外或全局命名空間里的參數。
lambda [arg1 [,arg2,.....argn]]:expression。
(6)Return語句:
return [表達式] 語句用於退出函數,選擇性地向調用方返回一個表達式。不帶參數值的return語句返回None。
(7)變數作用域:
1) L / E / G / B
L (Local) 局部作用域
E (Enclosing) 閉包函數外的函數中
G (Global) 全局作用域
B (Built-in) 內建作用域
以 L –> E –> G –>B 的規則查找,即:在局部找不到,便會去局部外的局部找(例如閉包),再找不到就會去全局找,再者去內建中找。
x = int(2.9) # 內建作用域
g_count = 0 # 全局作用域
def outer():
o_count = 1 # 閉包函數外的函數中
def inner():
i_count = 2 # 局部作用域
2) Python 中只有模塊(module),類(class)以及函數(def、lambda)才會引入新的作用域,其它的代碼塊(如 if/elif/else/、try/except、for/while等)是不會引入新的作用域的,也就是說這些語句內定義的變數,外部也可以訪問.
3) global和nonlocal關鍵字
以下實例修改全局變數 num:
num = 1
def fun1():
global num # 需要使用 global 關鍵字聲明
print(num)
num = 123
print(num)
fun1()
以上實例輸出結果:
1
123
如果要修改嵌套作用域(enclosing 作用域,外層非全局作用域)中的變數則需要 nonlocal 關鍵字了,如下實例:
def outer():
num = 10
def inner():
nonlocal num # nonlocal關鍵字聲明
num = 100
print(num)
inner()
print(num)
outer()
以上實例輸出結果:
100
100
另外有一種特殊情況,假設下面這段代碼被運行:
a = 10
def test():
a = a + 1
print(a)
test()
以上程序執行,報錯信息如下:
錯誤信息為局部作用域引用錯誤,因為 test 函數中的 a 使用的是局部,未定義,無法修改。
11. 數據結構:
集合(collections): 雙向鏈表queue (對列,棧)、排序字典 (OrderedDict) 、計數器 (Counter)
(1)隊列:先進先出(叫號系統)
入隊(隊列尾部,往隊列里添加元素):queue.append()
出隊(隊列首部 ,從隊列里刪除元素):queue.popleft()
將列表做隊列使用:(效率不高)
(2)堆棧:後進先出(網頁前進與後退)
入棧 (加入新的元素放在最上面):stack.appendleft()
出棧 (移出元素,移出最上面的元素,棧頂元素):stack.pop()
將列表做堆棧使用:
(3) 排序字典:
Python默認的字典鍵是無序的。
排序字典的鍵是按照插入順序來排序的 。
(4)計數器:
from collections import Counter
cDict=Counter(ABAABAABC)
cDict
Counter ({A:5,B:3,C:1})
cDict.most_common(2)
[A:5,B:3]
12. 模塊:
模塊是一個包含所有你定義的函數和變數的文件,其後綴名是.py。
(1)語句
1)import module1[, module2[,... moduleN]
2)from modname import name1[, name2[, ... nameN]]
3)from modname import *
(2)搜索路徑
一個模塊只會被導入一次,不管你執行了多少次import。 搜索路徑被存儲在sys模塊中的path變數。 >>> import sys
>>> sys.path
[, /usr/lib/python3.4, /usr/lib/python3.4/plat-x86_64-linux-gnu, /usr/lib/python3.4/lib-dynload, /usr/local/lib/python3.4/dist-packages, /usr/lib/python3/dist-packages]
sys.path 輸出是一個列表,其中第一項是空串,代表當前目錄(若是從一個腳本中列印出來的話,可以更清楚地看出是哪個目錄),亦即我們執行python解釋器的目錄(對於腳本的話就是運行的腳本所在的目錄)。
(3)深入模塊
模塊除了方法定義,還可以包括可執行的代碼。這些代碼一般用來初始化這個模塊,只有在第一次被導入時才會被執行
(4)__name__屬性
1) 一個模塊被另一個程序第一次引入時,其主程序將運行。如果我們想在模塊被引入時,模塊中的某一程序塊不執行,我們可以用__name__屬性來使該程序塊僅在該模塊自身運行時執行。
2) 每個模塊都有一個__name__屬性,當其值是__main__時,表明該模塊自身在運行,否則是被引入。主模塊的名字永遠是__main__.
3) __name__ 與 __main__ 底下是雙下劃線, _ _ 是這樣去掉中間的那個空格。#!/usr/bin/python3# Filename: using_name.py I
f __name__ == __main__:
print(程序自身在運行)else:
print(我來自另一模塊)
(5)__path__屬性
這是一個目錄列表,裡面每一個包含的目錄都有為這個包服務的__init__.py,你得在其他__init__.py被執行前定義。可以修改這個變數,用來影響包含在包裡面的模塊和子包。一般用來擴展包裡面的模塊。
(6)dir()函數
內置的函數 dir() 可以找到模塊內定義的所有名稱。以一個字元串列表的形式返回:
</p><pre>>>> import fibo
>>> dir(fibo)
[__name__, fib, fib2]
(7)包
1)包是一種管理 Python 模塊命名空間的形式,採用"點模塊名稱"。比如一個模塊的名稱是 A.B, 那麼他表示一個包 A中的子模塊 B 。
2)在導入一個包的時候,Python 會根據 sys.path 中的目錄來尋找這個包中包含的子目錄。
目錄只有包含一個叫做 __init__.py 的文件才會被認作是一個包,
sound/ 頂層包 __init__.py 初始化 sound 包 formats/ 文件格式轉換子包 __init__.py wavread.py wavwrite.py aiffread.py aiffwrite.py auread.py auwrite.py ... effects/ 聲音效果子包 __init__.py echo.py surround.py reverse.py ... filters/ filters 子包 __init__.py equalizer.py vocoder.py karaoke.py ...
3)導入包的方式:
A: import sound.effects.echo
這種情況需要使用全名去訪問 sound.effects.echo.echofilter(input, output, delay=0.7, atten=4)
B:from sound.effects import echo - 推薦的方式
這種情況不需要使用冗長的全名去訪問
echo.echofilter(input, output, delay=0.7, atten=4)
C: 直接導入 一個函數或變數 (包-〉模塊-〉函數或變數)
from sound.effects.echo import echofilter
(sound.effects是包,echo是模塊,echofilter是函數或變數)
D:from sound.effects import *
導入語句遵循如下規則:在包定義文件 __init__.py 中維護 __all__ 的列表變數,從而把列表中的所有名字作為包內容導入。如果沒有更新__all__, 就不會導入包里的任何子模塊,只是把包和它裡面定義的所有內容導入進來(可能運行__init__.py里定義的初始化代碼)。
這裡有一個例子,在:file:sounds/effects/__init__.py中包含如下代碼:
__all__ = ["echo", "surround", "reverse"]
這表示當你使用from sound.effects import *這種用法時,你只會導入包裡面這三個子模塊。
13. 迭代器與生成器:
(1)迭代器是一個可以記住遍歷的位置的對象。
迭代器對象從集合的第一個元素開始訪問,直到所有的元素被訪問完結束。迭代器只能往前不會後退。字元串,列表或元組對象都可用於創建迭代器。
迭代器有兩個基本的方法:iter() 和 next()。
迭代器對象可以使用常規for語句進行遍歷:
list=[1,2,3,4] it = iter(list) # 創建迭代器對象 for x in it:
print (x, end=" ")
1 2 3 4
也可以使用 next() 函數: import sys # 引入 sys 模塊
list=[1,2,3,4] it = iter(list) # 創建迭代器對象
while True:
try:
print (next(it),end=" ")
except StopIteration:
sys.exit()
1 2 3 4
(2)生成器
在 Python 中,使用了 yield 的函數被稱為生成器(generator)。生成器是一個返回迭代器的函數,只能用於迭代操作。
14. Python解釋器
查看Python版本:
python -V
以上命令執行結果如下:
Python 3.3.2
(1)互動式編程
在命令提示符中輸入"Python"命令來啟動Python解釋器:
$ python3
執行以上命令後,出現如下窗口信息:
$ python3
Python 3.4.0 (default, Apr 11 2014, 13:05:11)
[GCC 4.8.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
在 python 提示符中輸入以下語句,然後按回車鍵查看運行效果:
print ("Hello, Python!");
以上命令執行結果如下:
Hello, Python!
(2)腳本式編程
將如下代碼拷貝至 hello.py文件中:
print ("Hello, Python!");
通過以下命令執行該腳本:
python3 hello.py
輸出結果為:
Hello, Python!
15. Python3輸入和輸出
(1)輸出格式美化
1)將輸出的值轉成字元串:
str(): 返回一個用戶易讀的表達形式,單引號顯示。
repr(): 返回一個解釋其器易讀的表達形式,雙引號+單引號顯示。
>>> s = Hello, Runoob
>>> str(s)Hello, Runoob
>>> repr(s)"Hello, Runoob"
2)補0:
rjust()方法 :將字元串靠右,並在左邊填充空格。
ljust()方法:
center()方法:
zfill()方法: 在數字的左邊填充0.
3) str.format():
A: 基本使用
>>> print({}網址: {}!.format(菜鳥教程, www.runoob.com))
菜鳥教程網址: www.runoob.com!
B:{}中的數字用於指向傳入對象在format()中的位置 。
>>> print({0} 和 {1}.format(Google, Runoob)) Google 和 Runoob
C:如果format()中使用了關鍵字參數,那麼它們的值會指向使用該名字的參數。
>>> print({name}網址: {site}.format(name=菜鳥教程, site=www.runoob.com)) 菜鳥教程網址: www.runoob.com
D:位置及關鍵字參數可以任意的結合
>>> print(站點列表 {0}, {1}, 和 {other}。.format(Google, Runoob, other=Taobao)) 站點列表 Google, Runoob, 和 Taobao。
E: !a/!s/!r可以用於在格式化某個值之前對其進行轉化
!a: 使用ascii()
!s: 使用str()
!r: 使用repr()
>>> import math >>> print(常量 PI 的值近似為: {!r}。.format(math.pi)) 常量 PI 的值近似為: 3.141592653589793。
F: 可選項 : 和格式標識符可以跟著欄位名。可選項 : 和格式標識符可以跟著欄位名。
>>> import math >>> print(常量 PI 的值近似為 {0:.3f}。.format(math.pi)) 常量 PI 的值近似為 3.142。
G: 在 : 後傳入一個整數, 可以保證該域至少有這麼多的寬度。 用於美化表格時很有用。
>>> table = {Google: 1, Runoob: 2, Taobao: 3} >>> for name, number in table.items(): ... print({0:10} ==> {1:10d}.format(name, number)) ... Runoob ==> 2 Taobao ==> 3 Google ==> 1
(2)舊式字元串格式化:%操作符,功能與str.format類似。
>>> import math >>> print(常量 PI 的值近似為:%5.3f。 % math.pi) 常量 PI 的值近似為:3.142。
(3)讀取鍵盤輸入:input()函數
input() 內置函數從標準輸入讀入一行文本,默認的標準輸入是鍵盤。
str = input("請輸入:"); print ("你輸入的內容是: ", str)
(4)讀和寫文件: open ()
open (filename, mode)
mode:
r: 只讀
rb: 二進位值只讀
r+: 讀寫
w: 只寫,寫覆蓋
wb: 二進位值只寫,寫覆蓋
w+: 讀寫
a: 只寫,附加
ab: 二進位值只寫,寫附加
a+: 讀寫,寫附加
(5)文件對象的方法 :
1) f.read()
f.read(size)將讀取一定數目的數據, 當 size 被忽略了或者為負, 那麼該文件的所有內容都將被讀取並且返回。
2) f.readline()
f.readline() 會從文件中讀取單獨的一行。換行符為
。
3) f.readlines()
f.readlines() 將返回該文件中包含的所有行。如果設置可選參數 sizehint, 則讀取指定長度的位元組, 並且將這些位元組按行分割。
4) f.write()
f.write(string) 將 string 寫入到文件中, 然後返回寫入的字元數。
5) f.tell()
f.tell() 返迴文件對象當前所處的位置.
6) f.seek()
如果要改變文件當前的位置, 可以使用 f.seek(offset, from_what) 函數。
from_what 的值, 如果是 0 表示開頭, 如果是 1 表示當前位置, 2 表示文件的結尾,例如:
seek(x,0) : 從起始位置即文件首行首字元開始移動 x 個字元
seek(x,1) : 表示從當前位置往後移動x個字元
seek(-x,2):表示從文件的結尾往前移動x個字元
7) f.close()
關閉文件並釋放系統的資源.
16. Others
(1) Useful Links:
google: https://busca.uol.com.br/
python3教材:http://www.runoob.com/python3/python3-tutorial.html
(2) 如何使用搜索引擎:找到報錯的第一行和最後一行,將這些關鍵字複製到搜索引擎中。
推薦閱讀:
※測試的道理
※讓我們做個簡單的解釋器(一)
※前端開發學習路線分享,學前端要學哪些內容?
※PAT團體程序設計天梯賽-練習集答案
※React Native開源項目如何運行?