- 原文部落格地址: Python資料型別詳解02
- 上文Python資料型別詳解01中主要介紹了
Python
中的一些常用的資料型別 - 這篇文章主要介紹一些
Python
中的一些常用的模組
一. Number(數字)
Python
中數學運算常用的函式基本都在math
模組、cmath
模組中。math
模組提供了許多對浮點數的數學運算函式。cmath
模組包含了一些用於複數運算的函式。cmath
模組的函式跟math
模組函式基本一致,區別是cmath
模組運算的是複數,math
模組運算的是數學運算。- 要使用
math
或cmath
函式必須先匯入:
import math
# 或者
import cmath
複製程式碼
1. Python數學常量
在math
模組中定義了三個數學常量
# 自然常數 e
e = 2.718281828459045
# 圓周率,一般以π來表示
pi = 3.141592653589793
# 2π
tau = 6.283185307179586
複製程式碼
2. Python三角函式
要直接訪問的,需要匯入 math
模組, 然後通過 math 靜態物件呼叫方法
函式 | 描述 |
---|---|
acos(x) | 返回x的反餘弦弧度值。 |
asin(x) | 返回x的反正弦弧度值。 |
atan(x) | 返回x的反正切弧度值。 |
atan2(y, x) | 返回給定的 X 及 Y 座標值的反正切值。 |
cos(x) | 返回x的弧度的餘弦值。 |
hypot(x, y) | 返回歐幾里德範數 sqrt(x*x + y*y) 。 |
sin(x) | 返回的x弧度的正弦值。 |
tan(x) | 返回x弧度的正切值。 |
degrees(x) | 將弧度轉換為角度,如degrees(math.pi/2) , 返回90.0 |
radians(x) | 將角度轉換為弧度 |
3.Python數學函式
函式 | 返回值 ( 描述 ) |
---|---|
abs(x) | 返回數字的絕對值,如abs(-12) 返回 12 |
ceil(x) | 返回數字的上入整數(小數向上取整),如math.ceil(4.1) 返回 5, math.ceil(4.0) 返回 4 |
cmp(x, y) | 如果 x < y 返回 -1, 如果 x == y 返回 0, 如果 x > y 返回 1; (Python在3.x中已經棄用) |
exp(x) | 返回e的x次冪, 如math.exp(2) 返回7.38905609893065 |
fabs(x) | 返回數字的絕對值,如math.fabs(-10) 返回10.0 |
floor(x) | 返回數字的下舍整數(小數向下取整),如math.floor(4.9)返回 4 |
log(x) | 如math.log(math.e) 返回1.0, math.log(100,10) 返回2.0 |
log10(x) | 返回以10為基數的x的對數,如math.log10(100) 返回 2.0 |
max(x1, x2,...) | 返回給定引數的最大值,引數可以為序列。 |
min(x1, x2,...) | 返回給定引數的最小值,引數可以為序列。 |
modf(x) | 返回x的整數部分與小數部分(元組形式),兩部分的數值符號與x相同,整數部分以浮點型表示; 如:math.modf(99.09) , 返回(0.09000000000000341, 99.0) |
pow(x, y) | x**y 運算後的值。 |
round(x [,n]) | 返回浮點數x的四捨五入值,如給出n值,則代表舍入到小數點後的位數; 如round(90.09, 1)輸出:90.1; 如:round(90.09) 輸出:90 |
sqrt(x) | 返回數字x的平方根, 如:math.sqrt(4) 返回 2.0 |
- 其中
abs()
和fabs()
區別abs()
是一個內建函式,而fabs()
在math
模組中定義的。fabs()
函式只適用於float
和integer
型別,而abs()
也適用於複數
4. Python隨機數函式
- 隨機數可以用於數學,遊戲,安全等領域中,還經常被嵌入到演算法中,用以提高演算法效率,並提高程式的安全性。
- 隨機數函式需要匯入
random
模組,然後通過random
靜態物件呼叫函式方法 Python
包含以下常用隨機數函式:
4-1. choice
從序列(元組, 列表, 字串)的元素中隨機挑選一個元素
import random
random.choice( seq )
# 測試用例
# 從序列的元素中隨機挑選一個元素
print(random.choice((1, 3, 5, 2)))
print(random.choice([1, 2, 3, 4]))
# 隨機返回一個字元
print(random.choice("titanjun"))
複製程式碼
4-2. randrange
返回指定遞增基數集合中的一個隨機數,預設基數預設值為1, 預設型別為int
randrange(self, start, stop=None, step=1, _int=int)
複製程式碼
- 引數
start
-- 指定範圍內的開始值,包含在範圍內。stop
-- 指定範圍內的結束值,不包含在範圍內。step
-- 指定遞增基數
# 輸出 100 <= number < 1000 間的隨機偶數
print(random.randrange(100, 1000, 2))
複製程式碼
4-3. random
隨機生成的一個實數,它在[0,1)範圍內
print(random.random())
複製程式碼
4-4. seed
該函式沒有返回值, 改變隨機數生成器的種子, 可生成同一個隨機數
random.seed(5)
print(random.random())
random.seed()
print(random.random())
複製程式碼
4-5. shuffle
- 將列表的所有元素隨機排序, 沒有返回值
- 因元組不支援二次賦值, 所以元組不支援重新排列
# 將序列的所有元素隨機排序
list1 = [1, 2, 3, 4]
random.shuffle(list1)
print(list1)
複製程式碼
4-6. uniform
- 隨機生成一個在[x, y)範圍內的實數
- 引數:
- x -- 隨機數的最小值,包含該值。
- y -- 隨機數的最大值,不包含該值。
print(random.uniform(2, 5))
複製程式碼
二. 字串
上一篇文章Python資料型別詳解01介紹了字串的一些基礎知識, 這裡就主要介紹字元創中常用的函式和語法
1. in
和 not in
判斷字串是否包含指定字串
# 判斷字串中是否包含某字串
str = 'Hello Python'
if ('llo' in str):
str += ' True'
else:
str += ' False'
print(str)
# 判斷字串是否不包含某字串
if ('py' not in str):
str += ' not in'
else:
str += ' in'
print(str)
// 分別輸出
Hello Python True
Hello Python True not in
複製程式碼
2. 字串格式化
把其他型別的資料格式化為字串形式返回, 字串和其他型別之間要有%
分開
符號 | 描述 |
---|---|
%c |
格式化字元及其ASCII碼 |
%s |
格式化字串 |
%d |
格式化整數 |
%u |
格式化無符號整型 |
%o |
格式化無符號八進位制數 |
%x |
格式化無符號十六進位制數 |
%X |
格式化無符號十六進位制數(大寫) |
%f |
格式化浮點數字,可指定小數點後的精度 |
%e |
用科學計數法格式化浮點數 |
%E |
作用同%e,用科學計數法格式化浮點數 |
%g |
%f和%e的簡寫 |
%G |
%f 和 %E 的簡寫 |
%p |
用十六進位制數格式化變數的地址 |
使用方式
print('che is %d' % 19)
// 跟C語言的寫法
prin他("che is %d", 19)
複製程式碼
3. str.format()
函式
Python2.6
開始,新增了一種格式化字串的函式str.format()
,它增強了字串格式化的功能。 基本語法是通過{}
和:
來代替以前的%
。format
函式可以接受不限個引數,位置可以不按順序。
簡單使用
# format函式
# 不設定指定位置,按預設順序
str1 = '{} {}'.format('hello', 'python')
print(str1)
# 設定指定位置
str2 = '{0}{1}'.format('Python', '字串')
print(str2)
# 設定指定位置
str3 = '{1} {0} {1}'.format('hello', 'che')
print(str3)
# 設定引數
print("姓名: {name}, 年齡: {age}".format(name='che', age=18))
# 設定字典引數
dic = {'name': 'jun', 'age': 20}
print("姓名: {name}, 年齡: {age}".format(**dic))
# 設定列表引數
list0 = ['titan', 20]
print("姓名: {0[0]}, 年齡: {0[1]}".format(list0))
/*輸出結果
hello python
Python字串
che hello che
姓名: che, 年齡: 18
姓名: jun, 年齡: 20
姓名: titan, 年齡: 20
*/
複製程式碼
4. 格式化操作符輔助指令
相關操作符具體的使用後面再說
符號 | 功能 |
---|---|
* |
定義寬度或者小數點精度 |
- |
在負數前面顯示加號( - ) |
+ |
在正數前面顯示加號( + ) |
# |
在八進位制數前面顯示零('0'),在十六進位制前面顯示'0x'或者'0X'(取決於用的是'x'還是'X') |
0 |
顯示的數字前面填充'0'而不是預設的空格 |
% |
%% 輸出一個單一的'%' |
m.n. |
m 是顯示的最小總寬度,n 是小數點後的位數(如果可用的話) |
: |
後面帶填充的字元,只能是一個字元,不指定則預設是用空格填充 |
{{}} |
轉義大括號, 類似%的輸出 |
5. 數字格式化操作符
數字 | 格式 | 輸出 | 描述 |
---|---|---|---|
3.1415926 | {:.2f} |
3.14 | 保留小數點後兩位 |
3.1415926 | {:+.2f} |
+3.14 | 帶符號保留小數點後兩位 |
-1 | {:+.2f} |
-1.00 | 帶符號保留小數點後兩位 |
2.71828 | {:.0f} |
3 | 不帶小數 |
5 | {:0>2d} |
05 | 數字補零 (填充左邊, 寬度為2) |
5 | {:x<4d} |
5xxx | 數字補x (填充右邊, 寬度為4) |
10 | {:x<4d} |
10xx | 數字補x (填充右邊, 寬度為4) |
1000000 | {:,} |
1,000,000 | 以逗號分隔的數字格式 |
0.25 | {:.2%} |
25.00% | 百分比格式 |
1000000000 | {:.2e} |
1.00e+09 | 指數記法 |
13 | {:10d} |
13 | 右對齊 (預設, 寬度為10) |
13 | {:<10d} |
13 | 左對齊 (寬度為10) |
13 | {:^10d} |
13 | 中間對齊 (寬度為10) |
進位制轉換(以十進位制數字11為例)
進位制 | 格式 | 輸出 |
---|---|---|
二進位制 | '{:b}'.format(11) |
1011 |
十進位制 | '{:d}'.format(11) |
11 |
八進位制 | '{:o}'.format(11) |
13 |
十六進位制 | '{:x}'.format(11) |
b |
小寫十六進位制 | '{:#x}'.format(11) |
0xb |
大寫十六進位制 | '{:#X}'.format(11) |
0XB |
print('百分比: %d%%' % 23)
print('{}索引值: {{0}}'.format('jun'))
print('{:#x}'.format(9))
print('{:#X}'.format(9))
/*輸出結果:
百分比: 23%
jun索引值: {0}
0x9
0X9
*/
複製程式碼
6.字串的內建函式
下列方法實現了string
模組的大部分方法,如下表所示列出了目前字串內建支援的方法,所有的方法都包含了對Unicode
的支援,有一些甚至是專門用於Unicode
的
方法 | 返回結果 | 描述 |
---|---|---|
'titan'.capitalize() |
Titan | 把字串的第一個字元大寫 |
'hello\tpython'.expandtabs() |
hello python | 把字串 string 中的 tab 符號轉為空格,tab 符號預設的空格數是 8 |
str5.find('irl') |
11 | 檢測 str 是否包含在 string 中,如果 beg 和 end 指定範圍,則檢查是否包含在指定範圍內,如果是返回開始的索引值,否則返回-1 |
str5.rfind('irl') |
11 | 同find方法, 從右向左查詢 |
str5.index('gi') | 10 | 跟find()方法一樣,只不過如果str不在 string中會報一個異常. |
str5.rindex('gi') | 10 | 同index方法, 從右向左查詢 |
'jun0929'.isalnum() |
True | 至少有一個字元並且所有字元都是字母或數字則返回 True,否則返回 False |
'titan'.isalpha() |
True | 至少有一個字元並且所有字元都是字母則返回 True,否則返回 False |
u'23e'.isdecimal() |
False | 字串只包含十進位制字元返回True,否則返回False(只針對unicode物件) |
"123456".isdigit() |
True | 字串只包含數字則返回 True 否則返回 False |
'23e'.islower() |
True | 字串中包含至少一個區分大小寫的字元,並且所有這些(區分大小寫的)字元都是小寫,則返回 True,否則返回 False |
u"23443434"isnumeric() |
True | 字串中只包含數字字元,則返回 True,否則返回 False(只針對unicode物件) |
" ".isspace() |
True | 字串中只包含空格,則返回 True,否則返回 False. |
'JING'.isupper() |
True | 字串中包含至少一個區分大小寫的字元,並且所有這些(區分大小寫的)字元都是大寫,則返回 True,否則返回 False |
'-'.join( ['a', 's', 'd'] ) |
a-s-d | 用於將序列中的元素以指定的字元連線生成一個新的字串 |
'THIS'.lower |
this | 返回將字串中所有大寫字元轉換為小寫後生成的字串 |
"88this".lstrip('8') |
this | 返回截掉字串左邊的空格或指定字元後生成的新字串 |
'this88'.rstrip('8') |
this | 返回截掉字串右邊的空格或指定字元後生成的新字串 |
max('python') |
z | 返回字串中最大的字母 |
min('python') |
h | 返回字串中最小的字母 |
'https://www.titanjun.top'.partition('://') |
('https', '://', 'www.titanjun.top') | 返回一個3元的元組,第一個為分隔符左邊的子串,第二個為分隔符本身,第三個為分隔符右邊的子串 |
'this'.startswith('th', 1, 4) |
False | 檢查字串在制定範圍內是否是以指定子字串開頭 |
"0jun0".strip('0') |
jun | 返回移除字串頭尾指定的字元生成的新字串 |
'Python'.swapcase() |
pYTHON | 返回大小寫字母轉換後生成的新字串 |
'hello python'.title() |
Hello Python | 返回所有單詞都是以大寫開始 |
'jun'.upper() |
JUN | 返回小寫字母轉為大寫字母的字串 |
除了以上方法外還有下列重要方法
6-1. count()方法
返回子字串在字串中出現的次數
str.count(sub, start= 0,end=len(string))
//使用
print('hello world'.count('l', 1, 8))
print('hello world'.count('l'))
//輸出:
2
3
複製程式碼
- 引數
sub
-- 搜尋的子字串start
-- 字串開始搜尋的位置。預設為第一個字元,第一個字元索引值為0。end
-- 字串中結束搜尋的位置。字元中第一個字元的索引為 0。預設為字串的最後一個位置。
6-2. center()方法
返回一個原字串居中,並使用空格填充至長度 width 的新字串。預設填充字元為空格
str.center(width, fillchar)
//使用
>>> str = 'titan'
>>> str.center(8, '-')
'--titan---'
>>> str.center(9)
' titan '
>>>
複製程式碼
- 不提供
fillchar
引數則預設為空格 - 當
width
引數小於等於原字串的長度時,原樣返回 - 無法使左右字元數相等時候,左側字元會比右側少 1
6-3. encode()方法
以 encoding 指定的編碼格式編碼字串。errors引數可以指定不同的錯誤處理方案
str.encode(encoding='UTF-8',errors='strict')
//示例
'titan'.encode('UTF-8','strict')
//輸出: b'titan'
複製程式碼
encoding
-- 要使用的編碼,如"UTF-8"。errors
-- 設定不同錯誤的處理方案。預設為strict
,意為編碼錯誤引起一個UnicodeError
。 其他可能得值有ignore
,replace
,xmlcharrefreplace
,backslashreplace
以及通過codecs.register_error()
註冊的任何值。
6-4. endswith()方法
用於判斷字串是否以指定字尾結尾,如果以指定字尾結尾返回True,否則返回False
str.endswith(suffix[, start[, end]])
//使用示例
str5 = 'her is my girl friend haha!!'
print(str5.endswith('!!'))
print(str5.endswith('ha', 0, len(str5) - 2))
//輸出結果: 都是True
複製程式碼
suffix
-- 該引數可以是一個字串或者是一個元素start
-- 字串中的開始位置, 可不傳end
-- 字元中結束位置, 可不傳
6-5. ljust() 和 rjust()方法
ljust()
: 返回一個原字串左對齊,並使用空格填充至指定長度的新字串。如果指定的長度小於原字串的長度則返回原字串rjust()
: 返回一個原字串右對齊- 引數
width
-- 指定字串長度。fillchar
-- 填充字元,預設為空格
str.ljust(width[, fillchar])
str.rjust(width[, fillchar])
//測試用例
str = "this is string example....wow!!!";
print str.ljust(50, '0');
print str.rjust(50, '0');
//輸出:
this is string example....wow!!!000000000000000000
000000000000000000this is string example....wow!!!
複製程式碼
6-6. replace()方法
返回字串中的 old(舊字串) 替換成 new(新字串)後生成的新字串,如果指定第三個引數max,則替換不超過 max 次
str.replace(old, new[, max])
//測試
str = 'Python is a good language!'
print(str7.replace('o', 'i', 2))
//輸出:
Pythin is a giod language!
複製程式碼
6-7. split()方法
通過指定分隔符對字串進行切片,如果引數 num 有指定值,則僅分隔 num 個子字串
str.split(str="", num=string.count(str))
//測試
str7 = 'Python is a good language!'
print(str7.split(' '))
print(str7.split(' ', 3))
//輸出:
['Python', 'is', 'a', 'good', 'language!']
['Python', 'is', 'a', 'good language!']
複製程式碼
6-8. splitlines()方法
按照行('\r', '\r\n', \n'
)分隔,返回一個包含各行作為元素的列表,如果引數 keepends 為 False,不包含換行符,如果為 True,則保留換行符
str.splitlines([keepends])
//測試
str8 = 'ab c\n\nde fg\rkl\r\n'
print(str8.splitlines())
str9 = 'ab c\n\nde fg\rkl\r\n'
print(str9.splitlines(True))
//輸出:
['ab c', '', 'de fg', 'kl']
['ab c\n', '\n', 'de fg\r', 'kl\r\n']
複製程式碼
- 對於
Python
語言, 我也正在努力學習中, 文中如有不足之處, 還望多多指教 - 測試程式碼詳見 GitHub地址
- 後期會持續更新相關文章, 未完待續...