八、給小白看的第一篇Python基礎教程
本文是第一篇,一共四篇打下Python基礎
@Author:Runsen
@Date:Writern By 2019/04/15 and supplied By 2020/3/31
@公眾號:Python之王
為了照顧小白,我把之前的部落格上的Python基礎分享過來。好像是18年的時候,大一時候的東西。
一共四篇,聲明下:Python的入門難度為0,比Java,C++根本不能比,你會英語基本沒問題。
本文是第一篇
1、基本概念
1.1 四種類型
python中數有四種類型:整數、長整數、浮點數和複數。
- 整數, 如 1
- 長整數 是比較大的整數
- 浮點數 如 1.23、3E-2
- 複數 如 1 + 2j、 1.1 + 2.2j
1.2 字元串
字元串(字元的序列)
- python中單引號和雙引號使用完全相同。
- 使用三引號(”’或”””)可以指定一個多行字元串。
- 轉義符
'\'
- 自然字元串, 通過在字元串前加r或R。 如
r"this is a line with \n"
則\n
會顯示,並不是換行。 - python允許處理
unicode
字元串,加前綴u或U, 如u"this is an unicode string"
。 - 字元串是不可變的。
- 按字面意義級聯字元串,如”this ” “is ” “string”會被自動轉換為this is string。
1.3 標識符的命名
標識符的命名
- 第一個字元必須是字母表中字母或下劃線’_’。
- 標識符的其他的部分有字母、數字和下劃線組成。
- 標識符對大小寫敏感。
1.4 對象
python程式中用到的任何「東西」都成為「對象」。
1.5 邏輯行和物理行
- 物理行:就是程式設計師所寫程式碼的所在行。
- 邏輯行:是指源程式碼經過預編譯後,程式碼所在的那一行。
Python假定每個物理行都對應著一個邏輯行。例如:print( “Hello World” ) 就是一個物理行,Python希望每行只有一個語句,因為這樣看起來更加易讀。
如果你想要在一個物理行中使用多於一個邏輯行,那麼你需要使用分號(; )來特別地標明這種用法。分號表示一個邏輯行/語句的結束。
例如:
count = 5
print ( "count" )
與下面的語句等同:
count = 5;
print ( "count" );
當然也可以寫成下面這種:
count = 5 ; print ( "count" );
甚至可以寫成這樣:
count = 5 ; print ( "count" )
我們使用\
的換行
print \
("Runsen")
1.6 縮進
空白在python是非常重要的,行首的空白是最重要的,又稱為縮進。行首的空白(空格和製表符)用來決定邏輯行的縮進層次,從而決定語句。
2、運算符與表達式
2.1 運算符與其用法
運算符 | 名稱 | 例子 |
---|---|---|
+ | 兩個對象相加 | 加法,如3 + 5得到8,字元也可以相加’a’ + ‘b’得到’ab’ |
– | 一個數減去另一個數 | 5 – 2得到3 |
* | 乘 兩個數相乘或是返回一個被重複若干次的字元串 | 2 * 3得到6,’a’ * 3得到’aaa’ |
** | 冪 返回x的y次冪 | 3 ** 4得到81(即3 * 3 * 3 * 3) |
/ | 除 x除以y | 4/3得到1(整數的除法得到整數結果)。4.0/3或4/3.0得到1.3333 |
// | 取整除 返回商的整數部分 | 4 // 3.0得到1. |
% | 取模 返回除法的餘數 | 8%3得到2。-25.5%2.25得到1.5 |
<< | 左移,把一個數的二進位左移一定數目,也就是在右邊補多少個0, | 如 2 << 2得到8,二進位10變成1000 |
>> | 右移 把一個數的比特向右移一定數目,也就是在右邊刪除位數 | 10>>2得到2,二進位1010變成10,直接刪除後面2位 |
& | 按位與 | 數的按位與 9 & 13得到9,二進位1001&1101,變成1001,兩個值相應的位置都為1,那麼該結果就是1,不然就是0 |
| | 按位或 | 數的按位或 5 | 3得到7。二進位101&11,變成111,如果兩個值相應的位置有一個是1,那麼該結果就是1,也就是如果都是0,該結果就是0,101和11沒有都是0,所以111 |
^ | 按位異或 | 數的按位異或 5 ^ 3得到6,二進位101&11,變成110,兩個值相應的位置相同,那麼該結果就是0,也就是如果都是0或者都是1,該結果就是0,101和11,第一個都是1,所以110 |
~ | 按位翻轉 | x的按位翻轉是-(x+1) ~5得到6 |
< | 小於 返回x是否小於y。 | 所有比較運算符返回1表示真,返回0表示假。 5 < 3返回0(即False)而3 < 5返回1(即True)。還可以被任意連接:3 < 5 < 7返回True。 |
> | 大於 返回x是否大於y | 5 > 3返回True。如果兩個操作數需要都是數字 |
<= | 小於等於 返回x是否小於等於y | x = 3; y = 6; x <= y返回True |
>= | 大於等於 返回x是否大於等於y | x = 4; y = 3; x >= y返回True |
== | 等於 比較對象是否相等 | x = 2; y = 2; x == y返回True |
!= | 不等於 比較兩個對象是否不相等 | x = 2; y = 3; x != y返回True。 |
not | 布爾「非」 如果x為True,返回False | x = True; not y返回False。 |
or | 布爾「或」 如果x是True,它返回True,否則它返回y的計算值。 | x = True; y = False; x or y返回True |
2.2 運算符優先順序
.運算符優先順序(從低到高)
運算符 | 描述 |
---|---|
lambda | Lambda表達式 |
or | 布爾「或」 |
and | 布爾「與」 |
not x | 布爾「非」 |
in,not in | 成員測試 |
is,is not | 同一性測試 |
<,<=,>,>=,!=,== | 比較 |
` | ` |
^ | 按位異或 |
` | ` |
& | 按位與 |
<<,>> | 移位 |
+,- | 加法與減法 |
*,/,% | 乘法、除法與取余 |
+x,-x | 正負號 |
~x | 按位翻轉 |
** | 指數 |
~x | 按位翻轉 |
x.attribute | 屬性參考 |
x[index] | 下標 |
x[index:index] | 定址段 |
f(arguments…) | 函數調用 |
(experession,…) | 綁定或元組顯示 |
[expression,…] | 列表顯示 |
{key:datum,…} | 字典顯示 |
‘expression,…’ | 字元串 |
2.3 輸出
python 控制台輸出 使用print
print ("abc" ) #列印abc並換行
print ("abc%s" % "d" ) #列印abcd
print ("abc%sef%s" % ("d", "g") ) #列印abcdefg
3、控制流
3.1 if 語句
i = 10
n = int(input("enter a number:"))
if n == i:
print( "equal")
elif n < i:
print( "lower")
else:
print ("higher")
3.2 while語句
while True:
pass
else:
pass
#else語句可選,當while為False時,else語句被執行。 pass是空語句。
for 循環 for..in
for i in range(0, 5):
print (i)
else:
pass
# 列印0到4
註:當for循環結束後執行else語句;
range(a, b)返回一個序列,從a開始到b為止,但不包括b,range默認步長為1,可以指定步長,range(0,10,2);
3.3 break語句
終止循環語句,如果從for或while中終止,任何對應循環的else將不執行。
3.4 continue語句
continue語句用來調過當前循環的剩餘語句,然後繼續下一輪循環。
下面就是 break 和 continue 主要的 區別:
- break:跳出整個循環
- continue:跳出本次循環,繼續執行下一次循環
希望大家牢記。
4、函數
函數通過def定義。def關鍵字後跟函數的標識符名稱,然後跟一對圓括弧,括弧之內可以包含一些變數名,該行以冒號結尾;接下來是一塊語句,即函數體。
def sumOf(a, b):
return a + b
4.1 函數形參
函數中的參數名稱為『形參』,調用函數時傳遞的值為『實參』
4.2 局部變數
在函數內定義的變數與函數外具有相同名稱的其他變數沒有任何關係,即變數名稱對於函數來說是局部的。這稱為變數的作用域。
global語句, 為定義在函數外的變數賦值時使用global語句。
def func():
global x
print( "x is ", x)
x = 1
x = 3
func()
print(x)
#3
#1
4.3 默認參數
通過使用默認參數可以使函數的一些參數是『可選的』。
def say(msg, times = 1):
print(msg * times)
say("Runsen")
say("Runsen", 3)
注意:只有在形參表末尾的那些參數可以有默認參數值,即不能在聲明函數形參的時候,先聲明有默認值的形參而後聲明沒有默認值的形參,只是因為賦給形參的值是根據位置而賦值的。
4.4 關鍵參數
如果某個函數有很多參數,而現在只想指定其中的部分,那麼可以通過命名為這些參數賦值(稱為『關鍵參數』)。
優點:不必擔心參數的順序,使函數變的更加簡單;假設其他參數都有默認值,可以只給我們想要的那些參數賦值。
def func(a, b=2, c=3):
print ("a is %s, b is %s, c is %s") % (a, b, c)
func(1) #a is 1, b is 2, c is 3
func(1, 5) #a is 1, b is 5, c is 3
func(1, c = 10) #a is 1, b is 2, c is 10
func(c = 20, a = 30) #a is 30, b is 2, c is 20
4.5 return 語句
return語句用來從一個函數返回,即跳出函數。可從函數返回一個值。
沒有返回值的return語句等價於return None。None表示沒有任何東西的特殊類型。
4.5 文檔字元串
__doc__
(文檔字元串)
def func():
'''This is self-defined function
Do nothing
'''
pass
print(func.__doc__)
#This is self-defined function
#
#Do nothing
5、模組
模組就是一個包含了所有你定義的函數和變數的文件,模組必須以.py為擴展名。模組可以從其他程式中『輸入』(import)
以便利用它的功能。
在python程式中導入其他模組使用’import’, 所導入的模組必須在sys.path所列的目錄中,因為sys.path第一個字元串是空串”即當前目錄,所以程式中可導入當前目錄的模組。
5.1 位元組編譯的.pyc文件
導入模組比較費時,python做了優化,以便導入模組更快些。一種方法是創建位元組編譯的文件,這些文件以.pyc為擴展名。
pyc是一種二進位文件,是py文件經編譯後產生的一種byte code,而且是跨平台的(平台無關)位元組碼,是有python虛擬機執行的,類似於
java或.net虛擬機的概念。pyc的內容,是跟python的版本相關的,不同版本編譯後的pyc文件是不同的。
5.2 from .. import
如果想直接使用其他模組的變數或其他,而不加’模組名+.’前綴,可以使用from .. import。
例如想直接使用sys的argv,from sys import argv 或 from sys import *
5.3 模組的__name__
每個模組都有一個名稱,py文件對應模組名默認為py文件名,也可在py文件中為__name__賦值;如果是__name__,說明這個模組被用戶
(4) dir()函數
- dir(sys)返回sys模組的名稱列表;如果不提供參數,即dir(),則返回當前模組中定義名稱列表。
(5) del
del -> 刪除一個變數/名稱,del之後,該變數就不能再使用。
6、數據結構
python有三種內建的數據結構:列表、元組和字典。
6.1 列表
list是處理一組有序項目的數據結構,列表是可變的數據結構。列表的項目包含在方括弧[]中,
eg: [1, 2, 3], 空列表[]。判斷列表中是否包含某項可以使用in,
比如 l = [1, 2, 3]; print 1 in l; #True;
支援索引和切片操作;索引時若超出範圍,則IndexError;
使用函數len()查看長度;使用del可以刪除列表中的項,eg: del l[0] # 如果超出範圍,則IndexError
list函數如下:
append(value) ---向列表尾添加項value
l = [1, 2, 2]
l.append(3) #[1, 2, 2, 3]
count(value) ---返回列表中值為value的項的個數
l = [1, 2, 2]
print( l.count(2)) # 2
extend(list2) ---向列表尾添加列表list2
l = [1, 2, 2]
l1 = [10, 20]
l.extend(l1)
print (l ) #[1, 2, 2, 10, 20]
index(value, [start, [stop]]) ---返回列表中第一個出現的值為value的索引,如果沒有,則異常 ValueError
l = [1, 2, 2]
a = 4
try:
print( l.index(a))
except ValueError, ve:
print( "there is no %d in list" % a
insert(i, value)) ---向列表i位置插入項vlaue,如果沒有i,則添加到列表尾部
l = [1, 2, 2]
l.insert(1, 100)
print l #[1, 100, 2, 2]
l.insert(100, 1000)
print l #[1, 100, 2, 2, 1000]
pop([i]) ---返回i位置項,並從列表中刪除;如果不提供參數,則刪除最後一個項;如果提供,但是i超出索引範圍,則異常IndexError
l = [0, 1, 2, 3, 4, 5]
print( l.pop()) # 5
print( l) #[0, 1, 2, 3, 4]
print( l.pop(1)) #1
print( l) #[0, 2, 3, 4]
try:
l.pop(100)
except IndexError, ie:
print( "index out of range")
remove(value) ---刪除列表中第一次出現的value,如果列表中沒有vlaue,則異常ValueError
l = [1, 2, 3, 1, 2, 3]
l.remove(2)
print (l )#[1, 3, 1, 2, 3]
try:
l.remove(10)
except ValueError, ve:
print ("there is no 10 in list")
reverse() ---列表反轉
l = [1, 2, 3]
l.reverse()
print (l) #[3, 2, 1]
sort(cmp=None, key=None, reverse=False) ---列表排序
l5 = [10, 5, 20, 1, 30]
l5.sort()
print( l5) #[1, 5, 10, 20, 30]
l6 = ["bcd", "abc", "cde", "bbb"]
l6.sort(cmp = lambda s1, s2: cmp(s1[0],s2[1]))
print( l6) #['abc', 'bbb', 'bcd', 'cde']
l7 = ["bcd", "abc", "cde", "bbb", "faf"]
l7.sort(key = lambda s: s[1])
print (l7) #['faf', 'abc', 'bbb', 'bcd', 'cde']
本文已收錄 GitHub,傳送門~ ,裡面更有大廠面試完整考點,歡迎 Star。