- 原文博客地址: Python數(shù)據(jù)類型詳解02
- 上文Python數(shù)據(jù)類型詳解01中主要介紹了
Python
中的一些常用的數(shù)據(jù)類型 - 這篇文章主要介紹一些
Python
中的一些常用的模塊
一. Number(數(shù)字)
-
Python
中數(shù)學運算常用的函數(shù)基本都在math
模塊狱庇、cmath
模塊中。 -
math
模塊提供了許多對浮點數(shù)的數(shù)學運算函數(shù)粱锐。 -
cmath
模塊包含了一些用于復數(shù)運算的函數(shù)往史。 -
cmath
模塊的函數(shù)跟math
模塊函數(shù)基本一致忠蝗,區(qū)別是cmath
模塊運算的是復數(shù),math
模塊運算的是數(shù)學運算。 - 要使用
math
或cmath
函數(shù)必須先導入:
import math
# 或者
import cmath
1. Python數(shù)學常量
在math
模塊中定義了三個數(shù)學常量
# 自然常數(shù) e
e = 2.718281828459045
# 圓周率垮媒,一般以π來表示
pi = 3.141592653589793
# 2π
tau = 6.283185307179586
2. Python三角函數(shù)
要直接訪問的,需要導入 math
模塊, 然后通過 math 靜態(tài)對象調(diào)用方法
函數(shù) | 描述 |
---|---|
acos(x) | 返回x的反余弦弧度值航棱。 |
asin(x) | 返回x的反正弦弧度值睡雇。 |
atan(x) | 返回x的反正切弧度值。 |
atan2(y, x) | 返回給定的 X 及 Y 坐標值的反正切值饮醇。 |
cos(x) | 返回x的弧度的余弦值它抱。 |
hypot(x, y) | 返回歐幾里德范數(shù) sqrt(x*x + y*y) 。 |
sin(x) | 返回的x弧度的正弦值朴艰。 |
tan(x) | 返回x弧度的正切值观蓄。 |
degrees(x) | 將弧度轉換為角度,如degrees(math.pi/2) 混移, 返回90.0 |
radians(x) | 將角度轉換為弧度 |
3.Python數(shù)學函數(shù)
函數(shù) | 返回值 ( 描述 ) |
---|---|
abs(x) | 返回數(shù)字的絕對值,如abs(-12) 返回 12 |
ceil(x) | 返回數(shù)字的上入整數(shù)(小數(shù)向上取整)侮穿,如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中已經(jīng)棄用) |
exp(x) | 返回e的x次冪, 如math.exp(2) 返回7.38905609893065 |
fabs(x) | 返回數(shù)字的絕對值歌径,如math.fabs(-10) 返回10.0 |
floor(x) | 返回數(shù)字的下舍整數(shù)(小數(shù)向下取整),如math.floor(4.9)返回 4 |
log(x) | 如math.log(math.e) 返回1.0, math.log(100,10) 返回2.0 |
log10(x) | 返回以10為基數(shù)的x的對數(shù)亲茅,如math.log10(100) 返回 2.0 |
max(x1, x2,...) | 返回給定參數(shù)的最大值回铛,參數(shù)可以為序列。 |
min(x1, x2,...) | 返回給定參數(shù)的最小值芯急,參數(shù)可以為序列勺届。 |
modf(x) | 返回x的整數(shù)部分與小數(shù)部分(元組形式),兩部分的數(shù)值符號與x相同娶耍,整數(shù)部分以浮點型表示; 如:math.modf(99.09) , 返回(0.09000000000000341, 99.0) |
pow(x, y) |
x**y 運算后的值免姿。 |
round(x [,n]) | 返回浮點數(shù)x的四舍五入值,如給出n值榕酒,則代表舍入到小數(shù)點后的位數(shù); 如round(90.09, 1)輸出:90.1; 如:round(90.09) 輸出:90 |
sqrt(x) | 返回數(shù)字x的平方根, 如:math.sqrt(4) 返回 2.0 |
- 其中
abs()
和fabs()
區(qū)別-
abs()
是一個內(nèi)置函數(shù)胚膊,而fabs()
在math
模塊中定義的。 -
fabs()
函數(shù)只適用于float
和integer
類型想鹰,而abs()
也適用于復數(shù)
-
4. Python隨機數(shù)函數(shù)
- 隨機數(shù)可以用于數(shù)學紊婉,游戲,安全等領域中辑舷,還經(jīng)常被嵌入到算法中喻犁,用以提高算法效率,并提高程序的安全性何缓。
- 隨機數(shù)函數(shù)需要導入
random
模塊肢础,然后通過random
靜態(tài)對象調(diào)用函數(shù)方法 -
Python
包含以下常用隨機數(shù)函數(shù):
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
返回指定遞增基數(shù)集合中的一個隨機數(shù),默認基數(shù)缺省值為1, 默認類型為int
randrange(self, start, stop=None, step=1, _int=int)
- 參數(shù)
-
start
-- 指定范圍內(nèi)的開始值碌廓,包含在范圍內(nèi)传轰。 -
stop
-- 指定范圍內(nèi)的結束值,不包含在范圍內(nèi)谷婆。 -
step
-- 指定遞增基數(shù)
-
# 輸出 100 <= number < 1000 間的隨機偶數(shù)
print(random.randrange(100, 1000, 2))
4-3. random
隨機生成的一個實數(shù)慨蛙,它在[0,1)范圍內(nèi)
print(random.random())
4-4. seed
該函數(shù)沒有返回值, 改變隨機數(shù)生成器的種子, 可生成同一個隨機數(shù)
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)范圍內(nèi)的實數(shù)
- 參數(shù):
- x -- 隨機數(shù)的最小值,包含該值纪挎。
- y -- 隨機數(shù)的最大值期贫,不包含該值。
print(random.uniform(2, 5))
二. 字符串
上一篇文章Python數(shù)據(jù)類型詳解01介紹了字符串的一些基礎知識, 這里就主要介紹字符創(chuàng)中常用的函數(shù)和語法
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. 字符串格式化
把其他類型的數(shù)據(jù)格式化為字符串形式返回, 字符串和其他類型之間要有%
分開
符號 | 描述 |
---|---|
%c |
格式化字符及其ASCII碼 |
%s |
格式化字符串 |
%d |
格式化整數(shù) |
%u |
格式化無符號整型 |
%o |
格式化無符號八進制數(shù) |
%x |
格式化無符號十六進制數(shù) |
%X |
格式化無符號十六進制數(shù)(大寫) |
%f |
格式化浮點數(shù)字廷区,可指定小數(shù)點后的精度 |
%e |
用科學計數(shù)法格式化浮點數(shù) |
%E |
作用同%e唯灵,用科學計數(shù)法格式化浮點數(shù) |
%g |
%f和%e的簡寫 |
%G |
%f 和 %E 的簡寫 |
%p |
用十六進制數(shù)格式化變量的地址 |
使用方式
print('che is %d' % 19)
// 跟C語言的寫法
prin他("che is %d", 19)
3. str.format()
函數(shù)
-
Python2.6
開始,新增了一種格式化字符串的函數(shù)str.format()
隙轻,它增強了字符串格式化的功能埠帕。
基本語法是通過{}
和:
來代替以前的%
垢揩。 -
format
函數(shù)可以接受不限個參數(shù),位置可以不按順序敛瓷。
簡單使用
# format函數(shù)
# 不設置指定位置叁巨,按默認順序
str1 = '{} {}'.format('hello', 'python')
print(str1)
# 設置指定位置
str2 = '{0}{1}'.format('Python', '字符串')
print(str2)
# 設置指定位置
str3 = '{1} {0} {1}'.format('hello', 'che')
print(str3)
# 設置參數(shù)
print("姓名: {name}, 年齡: {age}".format(name='che', age=18))
# 設置字典參數(shù)
dic = {'name': 'jun', 'age': 20}
print("姓名: {name}, 年齡: {age}".format(**dic))
# 設置列表參數(shù)
list0 = ['titan', 20]
print("姓名: {0[0]}, 年齡: {0[1]}".format(list0))
/*輸出結果
hello python
Python字符串
che hello che
姓名: che, 年齡: 18
姓名: jun, 年齡: 20
姓名: titan, 年齡: 20
*/
4. 格式化操作符輔助指令
相關操作符具體的使用后面再說
符號 | 功能 |
---|---|
* |
定義寬度或者小數(shù)點精度 |
- |
在負數(shù)前面顯示加號( - ) |
+ |
在正數(shù)前面顯示加號( + ) |
# |
在八進制數(shù)前面顯示零('0'),在十六進制前面顯示'0x'或者'0X'(取決于用的是'x'還是'X') |
0 |
顯示的數(shù)字前面填充'0'而不是默認的空格 |
% |
%% 輸出一個單一的'%' |
m.n. |
m 是顯示的最小總寬度,n 是小數(shù)點后的位數(shù)(如果可用的話) |
: |
后面帶填充的字符呐籽,只能是一個字符锋勺,不指定則默認是用空格填充 |
{{}} |
轉義大括號, 類似%的輸出 |
5. 數(shù)字格式化操作符
數(shù)字 | 格式 | 輸出 | 描述 |
---|---|---|---|
3.1415926 | {:.2f} |
3.14 | 保留小數(shù)點后兩位 |
3.1415926 | {:+.2f} |
+3.14 | 帶符號保留小數(shù)點后兩位 |
-1 | {:+.2f} |
-1.00 | 帶符號保留小數(shù)點后兩位 |
2.71828 | {:.0f} |
3 | 不帶小數(shù) |
5 | {:0>2d} |
05 | 數(shù)字補零 (填充左邊, 寬度為2) |
5 | {:x<4d} |
5xxx | 數(shù)字補x (填充右邊, 寬度為4) |
10 | {:x<4d} |
10xx | 數(shù)字補x (填充右邊, 寬度為4) |
1000000 | {:,} |
1,000,000 | 以逗號分隔的數(shù)字格式 |
0.25 | {:.2%} |
25.00% | 百分比格式 |
1000000000 | {:.2e} |
1.00e+09 | 指數(shù)記法 |
13 | {:10d} |
13 | 右對齊 (默認, 寬度為10) |
13 | {:<10d} |
13 | 左對齊 (寬度為10) |
13 | {:^10d} |
13 | 中間對齊 (寬度為10) |
進制轉換(以十進制數(shù)字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.字符串的內(nèi)建函數(shù)
下列方法實現(xiàn)了string
模塊的大部分方法,如下表所示列出了目前字符串內(nèi)建支持的方法狡蝶,所有的方法都包含了對Unicode
的支持庶橱,有一些甚至是專門用于Unicode
的
方法 | 返回結果 | 描述 |
---|---|---|
'titan'.capitalize() |
Titan | 把字符串的第一個字符大寫 |
'hello\tpython'.expandtabs() |
hello python | 把字符串 string 中的 tab 符號轉為空格,tab 符號默認的空格數(shù)是 8 |
str5.find('irl') |
11 | 檢測 str 是否包含在 string 中贪惹,如果 beg 和 end 指定范圍苏章,則檢查是否包含在指定范圍內(nèi),如果是返回開始的索引值奏瞬,否則返回-1 |
str5.rfind('irl') |
11 | 同find方法, 從右向左查詢 |
str5.index('gi') | 10 | 跟find()方法一樣枫绅,只不過如果str不在 string中會報一個異常. |
str5.rindex('gi') | 10 | 同index方法, 從右向左查詢 |
'jun0929'.isalnum() |
True | 至少有一個字符并且所有字符都是字母或數(shù)字則返回 True,否則返回 False |
'titan'.isalpha() |
True | 至少有一個字符并且所有字符都是字母則返回 True,否則返回 False |
u'23e'.isdecimal() |
False | 字符串只包含十進制字符返回True,否則返回False(只針對unicode對象) |
"123456".isdigit() |
True | 字符串只包含數(shù)字則返回 True 否則返回 False |
'23e'.islower() |
True | 字符串中包含至少一個區(qū)分大小寫的字符硼端,并且所有這些(區(qū)分大小寫的)字符都是小寫并淋,則返回 True,否則返回 False |
u"23443434"isnumeric() |
True | 字符串中只包含數(shù)字字符珍昨,則返回 True县耽,否則返回 False(只針對unicode對象) |
" ".isspace() |
True | 字符串中只包含空格,則返回 True镣典,否則返回 False. |
'JING'.isupper() |
True | 字符串中包含至少一個區(qū)分大小寫的字符酬诀,并且所有這些(區(qū)分大小寫的)字符都是大寫,則返回 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 | 檢查字符串在制定范圍內(nèi)是否是以指定子字符串開頭 |
"0jun0".strip('0') |
jun | 返回移除字符串頭尾指定的字符生成的新字符串 |
'Python'.swapcase() |
pYTHON | 返回大小寫字母轉換后生成的新字符串 |
'hello python'.title() |
Hello Python | 返回所有單詞都是以大寫開始 |
'jun'.upper() |
JUN | 返回小寫字母轉為大寫字母的字符串 |
除了以上方法外還有下列重要方法
6-1. count()方法
返回子字符串在字符串中出現(xiàn)的次數(shù)
str.count(sub, start= 0,end=len(string))
//使用
print('hello world'.count('l', 1, 8))
print('hello world'.count('l'))
//輸出:
2
3
- 參數(shù)
-
sub
-- 搜索的子字符串 -
start
-- 字符串開始搜索的位置。默認為第一個字符,第一個字符索引值為0趾唱。 -
end
-- 字符串中結束搜索的位置涌乳。字符中第一個字符的索引為 0。默認為字符串的最后一個位置甜癞。
-
6-2. center()方法
返回一個原字符串居中,并使用空格填充至長度 width 的新字符串夕晓。默認填充字符為空格
str.center(width, fillchar)
//使用
>>> str = 'titan'
>>> str.center(8, '-')
'--titan---'
>>> str.center(9)
' titan '
>>>
- 不提供
fillchar
參數(shù)則默認為空格 - 當
width
參數(shù)小于等于原字符串的長度時,原樣返回 - 無法使左右字符數(shù)相等時候悠咱,左側字符會比右側少 1
6-3. encode()方法
以 encoding 指定的編碼格式編碼字符串蒸辆。errors參數(shù)可以指定不同的錯誤處理方案
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
-- 該參數(shù)可以是一個字符串或者是一個元素 -
start
-- 字符串中的開始位置, 可不傳 -
end
-- 字符中結束位置, 可不傳
6-5. ljust() 和 rjust()方法
-
ljust()
: 返回一個原字符串左對齊,并使用空格填充至指定長度的新字符串。如果指定的長度小于原字符串的長度則返回原字符串 -
rjust()
: 返回一個原字符串右對齊 - 參數(shù)
-
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(新字符串)后生成的新字符串,如果指定第三個參數(shù)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()方法
通過指定分隔符對字符串進行切片市栗,如果參數(shù) 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'
)分隔乡括,返回一個包含各行作為元素的列表肃廓,如果參數(shù) 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地址
- 后期會持續(xù)更新相關文章, 未完待續(xù)...