文章目錄
思維導圖
一.鏈式賦值_系列解包賦值_常量
- 鏈式賦值
鏈式賦值用於同一個對象賦值給多個變量
>>> x=y=23
>>> x
23
>>> y
23
- 系列解包賦值
系列數據賦值給對應相同個數的變量(個數必須保持一致)
>>> a,b,c=1,3,5
>>> a
1
>>> c
5
- 常量
Python不支持量,即沒有語法規則限制改變一個前量的值。我們只能約定變量的命名規則,以及在程序的邏輯上不對常量的值作出修改。
>>> MAX_SPEED =120
>>> MAX_SPEED
120
>>> MAX_SPEED =150 # 實際是可以改的.凡能邏組上不做
>>> MAX_SPEED
150
二.最基本內置數據類型介紹
每個對象都有類型,Python 中最基本的內置數據類型:
1.整型
整數,2345,10,50
2.浮點型
小數,3.14或者科學數法314e-2
3.布爾型
表示真假,僅包含: True、False
4.字符串型
由字符組成的序列。“abc”,”程序員”
三.數字運算
import pandas as pd
data = {'operate': ['+', '-', '*', '/', '//', '%','**'],
'example': ['1+2.2', '5-2.5', '2*8', '8.2/2', '8.2//2', '9%2', '2**3'],
'result':['3.2', '2.5', '16', '4.1', '4.0', '1', '8']}
print(pd.DataFrame(data))
operate example result
0 + 1+2.2 3.2
1 - 5-2.5 2.5
2 * 2*8 16
3 / 8.2/2 4.1
4 // 8.2//2 4.0
5 % 9%2 1
6 ** 2**3 8
//——整數除法
/——浮點數除法
注意:除數爲0,會產生異常
>>> 6/0
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ZeroDivisionError: division by zero
使用divmod()函數同時得到商和餘數
>>> divmod(50,3)
(16, 2)
四.整型
- 進制
Python 中,除10進制,還有其他三種進制:
0b 或0B,二進制 0 1
0o或0O,八進制 0 1 2 3 4 5 6 7
0x 或0x,十六進制0 1 2 3 4 5 6 7 8 9 a b c d e f
>>> 0b5
File "<stdin>", line 1
0b5
^
SyntaxError: invalid token
>>> 0b101
5
>>> 0o101
65
>>> 0x101
257
- int()實現類型轉換:
1.浮點數直接捨去小數部分。如:int(9.9):結果是:9
2.布爾值True轉爲1, False轉爲0.如; intTrue)結果是1
3. 字符串符合整數格式(浮點數格式不行)則直接轉成對應整數,否則報錯。
>>> int('123')
123
>>> int('123a')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '123a'
- 自動轉型
整數和浮點數混合運算,表達式結果自動轉成浮點數,可以看上面運算符實例
- 整數取值範圍
Python2中, int是32位,可以存儲從-2147483648到2147483647的整數(約21億)。 Long類型是64位,可以存儲:-263–263-1之間的數值。
Python3中, int 可以存儲任意大小的整數, long 被取消。
>>> googol=10**100
>>> googol
10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Googol 是Google最初的名字,這也是Google 最初的合義,
Python3中可以做超大數的計算,而不會造成“整數溢益出”這也是Python特別適合科學運算的特點。
五.浮點型
- 浮點數
浮點數稱爲 float
浮點數用科學計數法表示,比如:3.14 表示成:314E-2或者314e-2。這些數字在內存中也是按照科學計數法存儲。
類型轉換和四捨五入
- 類似於int(),可以使用float()將其他類型轉化成浮點數。
- 整數和浮點數混合運算時,表達式結果自動轉型成浮點數。比如:2+8.0的結果是10.0
3.round(value)同以返回四捨五入的值
注:但不會改變原有值,而是產生新的值
>>> a=3.14159
>>> round(a)
3
>>> a
3.14159
- 增強型賦值運算符
+=中間不能加空格
>>> a+=1
>>> a
4.14159
>>> a+ =1
File "<stdin>", line 1
a+ =1
^
SyntaxError: invalid syntax
六.數字運算實例
實例一:時間表示
計算機中時間的表示是從"1970年1月1日 00:00:00”開始,以毫秒(1/1000秒)進行計算,我們也把 1970年這個時刻稱爲“unix 時間點”
python 中可以通過time.time()獲得當前時刻,返回的值是以秒爲單位,帶微秒(1/1000毫秒)精度的浮點值。
>>> time.time()
1583920677.3545372
>>> a=int(time.time())
>>> a
1583920717
>>> totalMinute=a//60 #總分鐘數
>>> totalMinute
26398678
>>> totalHours=totalMinute//60 #總小時數
>>> totalHours
439977
>>> totalYears=totalHours//24//365
>>> totalYears
50
從1970到現在2020年,相差50年
實例二:計算兩點距離
import math
#定義兩個點
x1,y1=1,1
x2,y2=2,3
#計算距離
distance=math.sqrt((x1-x2)**2+(y1-y2)**2)
>>>distance
2.23606797749979
七.布爾型
- 布爾值
python2中沒有布爾值,用0表示False,用1表示True
python3中,False、True都是關鍵字,本質還是0和1
>>> a=True
>>> b=1
>>> a+b
2
- 邏輯運算符
>>> x=1
>>> y=0
>>> x or y
1
>>> x and y
0
>>> not x
False
>>> x=0
>>> y=1
>>> x or y
1
- 比較運算符
返回1表示真,返回0表示假,分別和True、False等價
>>> a=1
>>> b=2
>>> a==b
False
>>> a!=b
True
>>> a>b
False
八.同一運算
is 與==的區別:
- is 判斷兩個變量是否引用同一個對象,即是比較對象的地址
- == 判斷兩個變量引用的對象的值是否相等,默認調用對象的_eq_()方法
>>> a=1000
>>> b=1000
>>> a==b
True
>>> a is b
False
>>> id(a)
2251637956496
>>> id(b)
2251638998416
- 總結
1、 is 比較兩個對象的 id 值是否相等,是否指向同一個內存址
2、== 比較的是兩個對象的內容是否相等,值是否相等:
3、小整數對象[-5, 256]在全局解釋器範圍內被放入緩存供重複用
>>> a=1
>>> id(a)
140713390940560
>>> b=1
>>> id(b)
140713390940560
4、is運算符比==效率高,在變量和None 進行比較時應該使用is。
九.字符串類型
1.字符串創建
- 字符串基本特點
字符串的本質是:字符序列。 Python 的字符串是不可變的,我們無法對原字符電做任何修次。但,可以將字符串的—部分複製到新創建的字符串,達到“看起來修改”的效果。
Python不支持單字符類型,單字符也是作爲-個字符申使用的。
- 字符串的編碼
Python3直接支持Unicode,可以表示世界上任何書面語言的字符。 Python3的字符默認就是16位 Unicode編碼,AscⅡ 碼是Unicode編碼的子集。
使用內置函數 ord()可以把字符轉換成對應的 Unicode 碼;
使用內置函數 chr()可以把十進制數字轉換成對應的字符。
>>> ord('好')
22909
>>> chr(128888)
'\U0001f778'
>>> chr(122)
'z'
- 引號創建字符串
單引號,雙引號
使雙引號的好處是創建本身就包含引號的字符串,不需要轉義
>>> a='tom's pen'
File "<stdin>", line 1
a='tom's pen'
^
SyntaxError: invalid syntax
>>> a='tom\'s pen'
>>> a
"tom's pen"
>>> a="tom's pen"
>>> a
"tom's pen"
三引號:三個單引號或者三個雙引號,可以創建多行字符串
>>> b='''i
... love
... u'''
>>> b
'i\nlove\nu' #因爲換行,顯示換行符
- 空字符串和len()函數
python允許空字符串存在,長度爲0,空字符串表示爲:‘’(中間不加空格)
len()用於計算字符串含有多少字符,數字是不行的
>>> len('')
0
>>> a=1231564
>>> len(a)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: object of type 'int' has no len()
>>> a='1231564'
>>> len(a)
7
2.轉義、拼接、複製
- 常用的轉義字符及含義
轉義字符 含義
(在行尾時) 續行符
\ 反斜槓符號
’ 單引號
" 雙引號
\a 響鈴(系統發出)
\b 退格(Backspace)
\e 轉義
\000 終止符,\000後的字符全部忽略
\n 換行
\v 縱向製表符
\t 橫向製表符
\r 回車符
\f 換頁符
\o 八進制數代表的字符
\x 十六進制數代表的字符
- 實驗:
>>> a='i\nlove\nu'
>>> a
'i\nlove\nu'
>>> print(a)
i
love
u
注:加r實現不轉義
>>> a=r'i\nlove\nu'
>>> print(a)
i\nlove\nu
- 字符串拼接
1.可以使用+將多個字符串拼接起來,例如:‘a’+‘b’=‘ab’
(1) 如果+兩邊都是字符串,則拼接。
(2) 如果+兩邊都是數字,則加法運算
(3) 如果+兩邊類型不同,則拋出異岸。
>>> 'a'+'c'
'ac'
- 字符串複製
使用* 實現複製
>>> 'ac'*3
'acacac'
- 不換行打印
調用end=‘’
print('a',end='')
print('a',end='+')
-> aa+
- 從控制檯讀取字符串
調用input()
>>> name=input("請輸入名字:")
請輸入名字:小二
>>> name
'小二'
3.提取和替換字符
str()將其他數據類型轉爲字符型
用[]提取字符
字符串的本質就是字符序列,我們可以通過在字符串後面添加[],在[]裏面指定偏移量:可以提取該位置的單個字符。
- 正向搜索:
最左側第一個字符,偏移量是0,第二個偏移量是1,以此類推。直到len(str)-1爲止。
- 反向搜索:
最右側第一個字符,偏移量是-1,倒數第二個偏移量是-2,以此類推,直到-lenstr()爲止。
>>> a='123456789'
>>> a[0]
'1'
>>> a[-3]
'7'
- replace()替換
字符串是不可以直接修改的,若要替換字符串中某一部分,只有通過創建新的字符串實現
>>> a[0]=2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment
>>> a.replace('1','2')
'223456789'
>>> a
'123456789'
整個過程是創建了新的字符串對象,並指向了a,不是修改了a。地址不一樣
>>> id(a.replace('1','2'))
2251639325808
>>> id(a)
2251639265584
4.切片slice操作
切片操作可以快速提取字符串,標準格式爲[起始偏移量:終止偏移量:步長]
- 三個變量位正數:
- 三個變量位負數:
注:偏移量不在字符串長度範圍內也不會報錯
>>> a='123456789'
>>> a[0:11]
'123456789'
5.分割與合併
- split()可以基於指定分隔符將字符串分隔成多個子字符串(存到列表裏),不指定默認用空白字符(換行、空格、製表符)
>>> c='i love u'
>>> c.split()
['i', 'love', 'u']
- join()作用於split()相反,起連接作用
>>> d=['i', 'love', 'u']
>>> '*'.join(d)
'i*love*u'
注意:+和join()都能拼接,但是join()速度更快
import time
t1=time.time() #start
a=" "
for i in range(10000):
a+='vs'
t2=time.time() #end
print("運算時間:"+str(t2-t1))
t3=time.time()
b=[]
for i in range(10000):
b.append('vs')
a=" ".join(b)
t4=time.time()
print("運算時間:"+str(t4-t3))
運算時間:0.01099538803100586
運算時間:0.008993864059448242
6.駐留機制和成員操作符
- 字符串駐留機制和字符串比較
字符串駐留:僅保存一份相同且不可變字符串的方法,不同的值被存放在字符串駐留池中,
Python支持字符串駐留機制,對於符合標識符規則的字符串(僅包含下劃線(_)、字母和數字)會啓用字符串駐留機制。
>>> a='1_2'
>>> b='1_2'
>>> a is b
True
>>> c='1*2'
>>> d='1*2'
>>> c is d
False
- 成員操作符
in
not in
判斷某個字符串是否在字符串全體中
>>> x='abcd'
>>> 'a' in x
True
>>> 'e' in x
False
6.format格式化
- format()基本用法
str.format(),增強了字符串格式化的功能。
基本語法是通過{}和:來代替以前的%。
format 函數可以接受不限個參數,位置可以不按順序
>>> a="名字:{0},年齡:{1},{0}是個搗蛋鬼"
>>> a.format("小二","8")
'名字:小二,年齡:8,小二是個搗蛋鬼'
>>> a="名字:{name},年齡:{age}"
>>> a.format(age=8,name="小二")
'名字:小二,年齡:8'
#用%s
>>> print("名字:"'%s' %'小二')
名字:小二
- 填充與對齊
填充常跟對齊一起使
^、<、>分別是居中、左對齊、右對齊,後面帶寬度
:號後面帶填充的字符,只能是一個字符,不指定的話默認是用空格填
>>> "{:+<5}".format("123")
'123++'
- 數字格式化
浮點用f,整數用d
>>> a="存款:{:.2f}"
>>> a.format(8888.8888)
'存款:8888.89'
7.擴展
- 常用查找方法
>>> a="我是小二,今年8歲了,喜歡調皮搗蛋"
>>> len(a) #字符串長度
17
>>> a.startswith("我是") #以指定字符串開頭
True
>>> a.endswith("蛋") #以指定字符串結尾
True
>>> a.find('8') #第一次出現指定字符串的位置
rfind() #最後一次出現指定字符串的位置
- 大小寫轉換
str = "www.runoob.com"
print(str.upper()) # 把所有字符中的小寫字母轉換成大寫字母
print(str.lower()) # 把所有字符中的大寫字母轉換成小寫字母
print(str.capitalize()) # 把第一個字母轉化爲大寫字母,其餘小寫
print(str.title()) # 把每個單詞的第一個字母轉化爲大寫,其餘小寫
>>>
WWW.RUNOOB.COM
www.runoob.com
Www.runoob.com
Www.Runoob.Com
- 格式排版
center(),ljust(),rjust()分別對應居中、左對齊、右對齊
>>> a='123'
>>> a.center(5,'*')
'*123*'
5是字符串長度,‘*’是填充字符,不指定填充字符,默認爲空格