Python 基本數(shù)據(jù)類型

1、數(shù)據(jù)類型

1.1 編程規(guī)范

注釋

python注釋也有自己的規(guī)范,在文章中會介紹到。注釋可以起到一個備注的作用,團隊合作的時候,個人編寫的代碼經(jīng)常會被多人調用,為了讓別人能更容易理解代碼的通途,使用注釋是非常有效的。

在說規(guī)范之前我們有必要先看以下Python的注釋有哪些 ?

  • 單行注釋
  • 多行注釋

單行注釋

# 開頭,# 右邊的所有東西都被當做說明文字,而不是真正要執(zhí)行的程序,只起到輔助說明作用

示例代碼如下:

# 這是第一個單行注釋
print("hello python")

為了保證代碼的可讀性,# 后面建議先添加一個空格,然后再編寫相應的說明文字

多行注釋(塊注釋)

如果注釋信息很多,一行無法顯示,就可以使用多行注釋

要在 Python 程序中使用多行注釋,可以用一對連續(xù)的 三個 引號(單引號和雙引號都可以)

示例代碼如下:

"""
這是一個多行注釋

在多行注釋之間,可以寫很多很多的內容……
""" 
print("hello python")

注釋不是越多越好,對于一目了然的代碼,不需要添加注釋

標識符命名規(guī)則

開發(fā)人員在程序中自定義的一些符號和名稱。標識符是自己定義的, 如變量名 、函數(shù)名等

標識符由字母、下劃線和數(shù)字組成,且數(shù)字不能開頭

python中的標識符是區(qū)分大小寫的

命名規(guī)則

1、下滑線命名法

用下劃線“_”來連接所有的單詞,比如 hello_world

  1. 見名知意

  2. 起一個有意義的名字,盡量做到看一眼就知道是什么意思(提高代碼可讀性) 比如: 名字 就定義為 name , 定義學生 用 student

2、駝峰命名法

大駝峰式命名法(upper camel case):

  • 每一個單字的首字母都采用大寫字母,

    例如:FirstName、HelloWorld

小駝峰式命名法(lower camel case):

  • 第一個單詞以小寫字母開始;

  • 第二個單詞的首字母大寫,

    例如:helloWorld、firstName

image.png

注意

所有的變量名、函數(shù)名 都是用下劃線命名法

類名使用大駝峰命名法

python命名規(guī)則
  • python中的標識符是區(qū)分大小寫的
  • 變量、函數(shù)名全部用小寫與下劃線
  • 常量(配置文件變量、不修改的變量)全部用大寫
  • 類名用大駝峰命名法

案例: 命名規(guī)范查看

# 類名用大駝峰 類與其他內容用兩個換行隔開
class Student(object):

    # 變量名之間用空格隔開
    def __init__(self, hello):
        self.hello = hello

    # 函數(shù)與函數(shù)之間加換行
    def print_hello_world(self):
        """
        函數(shù)名用下劃線命名法
        盡量滿足見名知意
        """
        print(f"hello.jpg {self.hello} !")

    def PrintHelloWorld(self):
        """大駝峰命名法提示有問題"""
        print(f"hello.jpg {self.hello} !")

    def printHelloWorld(self):
        """小駝峰命名法提示有問題"""
        print(f"hello.jpg {self.hello} !")

    def printhelloworld(self):
        """直接寫很難讀懂"""
        print(f"hello.jpg {self.hello} !")

    def PRINTHELLOWORLD(self):
        """直接寫很難讀懂"""
        print(f"hello.jpg {self.hello} !")


"""團隊規(guī)范"""
# 變量名使用下劃線命名法
# 盡量滿足見名知意
# 對象也是變量
student = Student("world")
student.print_hello_world()
關于代碼規(guī)范

任何語言的程序員,編寫出符合規(guī)范的代碼,是開始程序生涯的第一步

編程習慣的重要性
  1. 可以方便排查錯誤
  2. 方便自己看的代碼
  3. 便于別人看懂你的代碼(團隊協(xié)作)

良好的編程習慣的養(yǎng)成不能靠說,要靠多練,要在大量的編程中將其融入骨髓中。

一套系統(tǒng)應該具有統(tǒng)一的編程風格,任何編程風格都不可能是完美,應該從可維護性、可讀性方面繼續(xù)保持一種編程風格,而不要將多種編程風格混合在一套系統(tǒng)中,對于新手,難以理解如此多種風格的編碼。

ctrl + alt + l 快速格式化代碼

輸入輸出與變量

輸出

print() 方法用于打印輸出,最常見的一個函數(shù)。

以下是 print() 方法的語法:

print(*objects, sep=' ', end='\n', file=sys.stdout)

參數(shù)

  • objects -- 復數(shù),表示可以一次輸出多個對象。輸出多個對象時,用分隔符分割。
  • sep -- 用來間隔多個對象,默認值是一個空格。
  • end -- 用來設定以什么結尾。默認值是換行符 \n,我們可以換成其他字符串。
  • file -- 要寫入的文件對象。
輸入

input() 函數(shù)接受一個標準輸入數(shù)據(jù),返回為 string 類型。

>>>a = input("input:")
input:123                  # 輸入整數(shù)
>>> type(a)
<class 'str'>              # 字符串
變量

程序就是用來處理數(shù)據(jù)的,而變量就是用來存儲數(shù)據(jù)的

  • 在 Python 中,每個變量在使用前都必須賦值,變量賦值以后該變量才會被創(chuàng)建
  • 等號(=)用來給變量賦值
    • = 左邊是一個變量名
    • = 右邊是存儲在變量中的值
  • 直接使用之前已經(jīng)定義的變量
  • 變量名只有在 第一次出現(xiàn) 才是 定義變量
  • 變量名再次出現(xiàn),不是定義變量,而是直接使用之前定義過的變量
  • 在程序開發(fā)中,可以修改之前定義變量中保存的值嗎?
    • 可以
    • 變量中存儲的值,就是可以
變量名 = 值

變量定義之后,后續(xù)就可以直接使用了

1.2 數(shù)值類型

int(整形)

Python 中定義變量是 不需要指定類型(在其他很多高級語言中都需要)

整形,也被稱之為整數(shù)。整數(shù)就是數(shù)學中的數(shù)字。

整形在Python中不受長度限制大小范圍

使用 type 函數(shù)可以查看一個變量的類型

In [1]: 1
Out[1]: 1

In [2]: type(1)
Out[2]: int

浮點型(float)

小數(shù)類型

小數(shù)

In [1]: 1.0
Out[1]: 1.0

In [2]: type(1.0)
Out[2]: float

運算、運算符優(yōu)先級與整形是一樣。

類型轉化

浮點數(shù)轉化為整形(顯示轉化)

In [3]: int(1.0)
Out[3]: 1

In [4]: float(1)
Out[4]: 1.0

隱式轉化,系統(tǒng)背后默認進行轉換

In [5]: 1/2
Out[5]: 0.5

1.3 字符串

字符串是一種不可變的序列類型

字符串創(chuàng)建

字符串是 Python 中最常用的數(shù)據(jù)類型。我們可以使用引號( '" )來創(chuàng)建字符串。

創(chuàng)建字符串很簡單,只要為變量分配一個值即可。

單引號和雙引號

Python 中我們都知道單引號和雙引號都可以用來表示一個字符串,比如

print("What's your name?")

結果:
"What's your name?"

print('"python"是一門優(yōu)秀的語言')

結果:
"python"是一門優(yōu)秀的語言

一個單引號并不是單引號,它是字符串創(chuàng)建的格式

總體來說沒有任何區(qū)別,只在單引號當普通字符時容易區(qū)分:如 var = "let's go"

三引號創(chuàng)建塊字符串 長字符串

# 三引號實現(xiàn)塊注釋
""" 文檔注釋
三引號實現(xiàn)塊注釋
"""
''''''

字符串格式化

把不是字符類型的 轉變成字符串

在 Python 中可以使用 print 函數(shù)將信息輸出到控制臺

如果希望輸出文字信息的同時,一起輸出 數(shù)據(jù),就需要使用到 格式化操作符

format

此函數(shù)可以快速的處理各種字符串,增強了字符串格式化的功能?;菊Z法是使用{}和:來替代%。format函數(shù)可以接受不限各參數(shù),位置可以不按照順序

name = '張三'
age = 18
nickname = '法外狂徒'


# format 用 {} 占位
print('姓名:{},年齡{},外號:{} '.format(name, age, nickname))
print('hello {} 你今年已經(jīng){}歲了'.format(name, age))
# 保留小數(shù)點后兩位
In [1]: '{:.2f}'.format(12.333)
Out[1]: '12.33'

In [2]: '{a:.2f}'.format(a=12.333)
Out[2]: '12.33'

In [3]: '{a:6.2f}'.format(a=12.333)
Out[3]: ' 12.33'
%s

% 被稱為 格式化操作符,專門用于處理字符串中的格式

  • 包含 % 的字符串,被稱為 格式化字符串
  • % 和不同的 字符 連用,不同類型的數(shù)據(jù) 需要使用 不同的格式化字符
格式化字符 含義
%s 字符串
%d 有符號十進制整數(shù),%06d 表示輸出的整數(shù)顯示位數(shù),不足的地方使用 0 補全
%f 浮點數(shù),%.2f 表示小數(shù)點后只顯示兩位
%% 輸出 %

語法格式如下:

print("格式化字符串 %s" % 變量1)

print("格式化字符串" % (變量1, 變量2...))
name = '張三'
age = 18
nickname = '法外狂徒'

name2 = '李四'
age2 = 19
nickname2 = '幫兇'

# %s 用 %s 占位
print('姓名:%s' % name)
# 多個參數(shù)
print('%s,%s 哦嗨呦' % (name, name2))
格式化字符 含義
%s 字符串
%d 有符號十進制整數(shù),%06d 表示輸出的整數(shù)顯示位數(shù),不足的地方使用 0 補全
%f 浮點數(shù),%.2f 表示小數(shù)點后只顯示兩位
%% 輸出 %
%c %ASCII字符
%o %8進制
%x %16進制
%e %科學計數(shù)法
f

f’{}'形式,并不是真正的字符串常量,而是一個運算求值表達式,可以很方便的用于字符串拼接、路徑拼接等

name = '張三'

# f 在字符串中嵌入變量
print(f'hello {name} !')

案例:貓眼top100網(wǎng)址

貓眼top100的網(wǎng)址有以下特點:

第一頁:https://maoyan.com/board/4?offset=0

第二頁:https://maoyan.com/board/4?offset=10

第三頁:https://maoyan.com/board/4?offset=20

....

第十頁:https://maoyan.com/board/4?offset=90

請分別使用三種字符串構建的方法創(chuàng)建所有的請求地址

1.4 字符串常用方法

字符串是不可變數(shù)據(jù)類型,所有的操作都是返回新的一個列表,不會修改原有列表

字符串 能夠使用的 方法 如下:

In [1]: hello_str.
hello_str.capitalize    hello_str.isidentifier  hello_str.rindex
hello_str.casefold      hello_str.islower       hello_str.rjust
hello_str.center        hello_str.isnumeric     hello_str.rpartition
hello_str.count         hello_str.isprintable   hello_str.rsplit
hello_str.encode        hello_str.isspace       hello_str.rstrip
hello_str.endswith      hello_str.istitle       hello_str.split
hello_str.expandtabs    hello_str.isupper       hello_str.splitlines
hello_str.find          hello_str.join          hello_str.startswith
hello_str.format        hello_str.ljust         hello_str.strip
hello_str.format_map    hello_str.lower         hello_str.swapcase
hello_str.index         hello_str.lstrip        hello_str.title
hello_str.isalnum       hello_str.maketrans     hello_str.translate
hello_str.isalpha       hello_str.partition     hello_str.upper
hello_str.isdecimal     hello_str.replace       hello_str.zfill
hello_str.isdigit       hello_str.rfind

提示:正是因為 python 內置提供的方法足夠多,才使得在開發(fā)時,能夠針對字符串進行更加靈活的操作!應對更多的開發(fā)需求!

查找和替換

方法 用法
string.strip() 默認去掉 string 左右兩邊的空白字符
string.replace(old_str, new_str) 把 string 中的 old_str 替換成 new_str
string.split() 默認以空白字符進行分割
string.join(seq) 將 seq 中所有的元素(字符串類型)合并為一個新的字符串

提問:如何改變字符串

將下面的字符串中 world 改成 Python

hello = "hello world !"

print(hello.replace('world', 'Python'))

print(hello)

字符串是一種不可變的數(shù)據(jù)類型。所有操作字符的方法都是返回一個新的字符串。可以用返回的新的字符串覆蓋掉之前的字符串。

轉義字符

在需要在字符中使用特殊字符時,python 用反斜杠轉義字符。如下表:

轉義字符 描述
\ (在行尾時)續(xù)行符
\ 反斜杠符號
\' 單引號
\" 雙引號
\a 響鈴
\b 退格(Backspace)
\e 轉義
\000
\n 換行
\v 縱向制表符
\t 橫向制表符
\r 回車
\f 換頁
\oyy 八進制數(shù),yy代表的字符,例如:\o12代表換行
\xyy 十六進制數(shù),yy代表的字符,例如:\x0a代表換行
\other 其它的字符以普通格式輸出

原始字符串

由于字符串中的反斜線都有特殊的作用,因此當字符串中包含反斜線時,就需要使用轉義字符 \ 對字符串中包含的每個 '' 進行轉義。

比如說,我們要寫一個關于 Windows 路徑 G:\publish\codes\02\2.4 這樣的字符串,如果在 Python 程序中直接這樣寫肯定是不行的,需要使用 \ 轉義字符,對字符串中每個 '' 進行轉義,即寫成 G:\publish\codes\02\2.4 這種形式才行。

有沒有覺得這種寫法很啰嗦,有沒有更好的解決辦法呢?答案是肯定的,借助于原始字符串可以很好地解決這個問題。

原始字符串以“r”開頭,它不會把反斜線當成特殊字符。因此,上面的 Windows 路徑可直接寫成如下這種形式:

# 原始字符串包含的引號,同樣需要轉義
s2 = r'"Let\'s go", said Charlie'
print(s2)

1.5 布爾類型(bool)

python 中布爾值使用常量 True 和 False來表示;注意大小寫

boolint 的子類(繼承 int ),故 True == 1 False == 0 是會返回 Ture

bool 類型只有兩種狀態(tài)真或假

In [17]: bool(-1)
Out[17]: True

In [18]: bool(0)
Out[18]: False

In [19]: bool(None)
Out[19]: False

In [20]: bool("")
Out[20]: False

In [21]: bool(" ")
Out[21]: True

In [22]: def a():
    ...:     pass
    ...:
    ...: bool(a)
Out[22]: True

總結

True 對 False 錯

布爾類型只有兩種狀態(tài),True or Flase 。數(shù)字除了零之外,其余均為 True ,字符串除了空字符串之外都為True,對象除了空對象之外,其余均為 True 。

默認情況下,所有類型都可以轉化為布爾類型

1.6 運算符

算數(shù)運算符

因為是整數(shù),所以也可以進行數(shù)學中的基本運算。

  • 算數(shù)運算符是 運算符的一種
  • 是完成基本的算術運算使用的符號,用來處理四則運算
運算符 描述 實例
+ 10 + 20 = 30
- 10 - 20 = 10
* 10 * 20 = 200
/ 10 / 20 = 0.5
// 取整除 返回除法的整數(shù)部分(商) 9 // 2 輸出結果 4
% 取余數(shù) 返回除法的余數(shù) 9 % 2 = 1
** 又稱次方、乘方,2 ** 3 = 8
# 取余
In [16]: 9 % 4
Out[16]: 1

In [17]: 9 % 3
Out[17]: 0
    
In [18]: 2 ** 3
Out[18]: 8

除此之外,“+”還可以作為字符串(包括后續(xù)要介紹的序列)的連接運算符。

s1 = 'Hello, '
s2 = 'Charlie'
# 使用+連接兩個字符串
print(s1 + s2)

算數(shù)運算符的優(yōu)先級

和數(shù)學中的運算符的優(yōu)先級一致,在 Python 中進行數(shù)學計算時,同樣也是:

  • 先乘除后加減
  • 同級運算符是 從左至右 計算
  • 可以使用 () 調整計算的優(yōu)先級

以下表格的算數(shù)優(yōu)先級由高到最低順序排列

運算符 描述
** 冪 (最高優(yōu)先級)
* / % // 乘、除、取余數(shù)、取整除
+ - 加法、減法

例如:

  • 2 + 3 * 5 = 17
  • (2 + 3) * 5 = 25
  • 2 * 3 + 5 = 11
  • 2 * (3 + 5) = 16

賦值運算符

以下假設變量a為10,變量b為20:

運算符 描述 實例
= 簡單的賦值運算符 c = a + b 將 a + b 的運算結果賦值為 c
+= 加法賦值運算符 c += a 等效于 c = c + a
-= 減法賦值運算符 c -= a 等效于 c = c - a
*= 乘法賦值運算符 c *= a 等效于 c = c * a
/= 除法賦值運算符 c /= a 等效于 c = c / a
%= 取模賦值運算符 c %= a 等效于 c = c % a
**= 冪賦值運算符 c **= a 等效于 c = c ** a
//= 取整除賦值運算符 c //= a 等效于 c = c // a

比較運算符

比較運算符 功能
> 大于,如果運算符前面的值大于后面的值,則返回 True;否則返回 False
>= 大于或等于,如果運算符前面的值大于或等于后面的值,則返回 True;否則返回 False
< 小于,如果運算符前面的值小于后面的值,則返回 True;否則返回 False
<= 小于或等于,如果運算符前面的值小于或等于后面的值,則返回 True;否則返回 False
== 等于,如果運算符前面的值等于后面的值,則返回 True;否則返回 False
!= 不等于,如果運算符前面的值不等于后面的值,則返回 True;否則返回 False

邏輯運算符

Python語言支持邏輯運算符,以下假設變量 a 為 10, b為 20:

運算符 邏輯表達式 描述 實例
and x and y 布爾"與" ,兩個條件都滿足 (a and b) 返回 20。
or x or y 布爾"或",兩個條件中滿足一個 (a or b) 返回 10。
not not x 布爾"非" ,否定之前的結果 not(a and b) 返回 False

邏輯運算符案例:

x = 1
y = 0

print(x and y)
print(x or y)
print(not x)
print(not y)

# 案例升級
x = 3 > 4
y = 5 > 4

運算符優(yōu)先級

以下表格列出了從最高到最低優(yōu)先級的所有運算符:

運算符 描述
** 指數(shù) (最高優(yōu)先級)
* / % // 乘,除,取模和取整除
& 位 'AND'
<= < > >= 比較運算符
<> == != 等于運算符
= %= /= //= -= += *= **= 賦值運算符
is is not 身份運算符
in not in 成員運算符
not and or 邏輯運算符

案例:運算符優(yōu)先級

r = 4 > 2 ** 4 or True is 1 and '4' in "345"
if r:
    print('猜猜我的結果', r)
else:
    print('猜猜我的結果', r)

1.7 總結

1、在演練中,一共有幾種數(shù)據(jù)類型?

  • 4 種
  • str —— 字符串
  • bool —— 布爾(真假)
  • int —— 整數(shù)
  • float —— 浮點數(shù)(小數(shù))

2、在 Python 中定義變量時需要指定類型嗎?

  • 不需要
  • Python 可以根據(jù) = 等號右側的值,自動推導出變量中存儲數(shù)據(jù)的類型
  1. 字符串是一種什么結構?它能不能被修改?
    • 字符串是一種序列類型
    • 字符串不能被修改

1.8 拓展知識

常見錯誤類型

SyntaxError: unexpected EOF while parsing 
語法錯誤,多了無法解析的符號,檢查一下是否多了或者少了括號

SyntaxError: invalid character in identifier 
語法錯誤有無效標識符,檢查一下中文符號

IndexError: list index out of range 
索引錯誤,超出索引范圍,檢查一下列表是否為空

TypeError: must be str, not int
數(shù)據(jù)類型錯誤,該數(shù)據(jù)不是正確的數(shù)據(jù)類型,比如字符串和數(shù)字直接拼接,檢查一下數(shù)據(jù)類型

IndentationError: expected an indented block
縮進錯誤,檢查一下代碼的縮進是否正確

KeyError: 'fond'
鍵錯誤,字典中沒有該的key對應的值,檢查一下鍵名或者字典數(shù)據(jù)是否正確

ValueError: substring not found
值錯誤,輸入的數(shù)據(jù)類型跟要求的不符合

NameError: name 'a' is not defined
未初始化對象,變量沒有被定義

AttributeError: 'tuple' object has no attribute 'remove'
屬性錯誤,該對象沒有這個屬性、方法,檢查一下數(shù)據(jù)類型

SystemExit   
解釋器請求退出,出現(xiàn)在exit()函數(shù)后

IOError 
輸入/輸出操作失敗

ImportError 
導入模塊/對象失敗,檢查一下模塊是否能夠正常使用

UnicodeDecodeError/UnicodeEncodeError/UnicodeTranslateError
Unicode 解碼/編碼/轉換/時的錯誤

成員運算符

innot in 被稱為 成員運算符

成員運算符用于 測試 序列中是否包含指定的 成員

運算符 描述 實例
in 如果在指定的序列中找到值返回 True,否則返回 False 3 in '123' 返回 True
not in 如果在指定的序列中沒有找到值返回 True,否則返回 False 3 not in '123' 返回 False

身份運算符

is 比較的是兩個實例對象是不是完全相同,它們是不是同一個對象,占用的內存地址是否相同。萊布尼茨說過:“世界上沒有兩片完全相同的葉子”,這個is正是這樣的比較,比較是不是同一片葉子(即比較的id是否相同,這id類似于人的身份證標識)。

身份運算符用于比較兩個對象的存儲單元

運算符 描述 實例
is is 是判斷兩個標識符是不是引用自一個對象 x is y, 類似 id(x) == id(y) , 如果引用的是同一個對象則返回 True,否則返回 False
is not is not 是判斷兩個標識符是不是引用自不同對象 x is not y , 類似 id(a) != id(b)。如果引用的不是同一個對象則返回結果 True,否則返回 False。

id() 函數(shù)用于獲取對象內存地址。

身份運算符案例:

# %% 身份運算符
one = 1
o = 1
print(o is one)  # 變量駐存在內存中

a1 = [1]
a2 = [1]

print(a1 is a2)

print(id(o), id(one))
print(id(a1), id(a2))

# is 與 ==

print(a1 is a2)
print(a1 == a2)

字符串格式化

# 對齊輸出
# 左對齊 utf-8 萬國碼 
In [5]: '{a:<10}'.format(a=12.3,b=13.44)
Out[5]: '12.3      '
   
# 數(shù)字補x (填充右邊, 寬度為10)
In [6]: '{a:0<10}'.format(a=12.3,b=13.44)
Out[6]: '12.3000000'
    
# 兩邊對齊...
In [7]: '{a:0^10}'.format(a=12.3,b=13.44)
Out[7]: '00012.3000'
# 保留小數(shù)點后兩位
In [1]: '{:.2f}'.format(12.333)
Out[1]: '12.33'

In [2]: '{a:.2f}'.format(a=12.333)
Out[2]: '12.33'

In [3]: '{a:6.2f}'.format(a=12.333)
Out[3]: ' 12.33'
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • Create by westfallon on 6/27 什么是數(shù)據(jù)類型 python中變量沒有類型,我們所說的數(shù)...
    westfallon閱讀 258評論 0 0
  • Python 中的變量不需要聲明,每個變量在使用前都必須賦值,變量賦值以后該變量才會被創(chuàng)建。 在 Python 中...
    darklovy閱讀 383評論 0 1
  • Python基本數(shù)據(jù)類型 在了解基本數(shù)據(jù)類型的時候,我們需要了解基本數(shù)據(jù)類型有哪些?數(shù)字int、布爾值bool、字...
    志者不俗閱讀 455評論 0 0
  • Python基本數(shù)據(jù)類型 1. 變量 Python 中的變量不需要聲明。每個變量在使用前都必須賦值,變量賦值以后該...
    Jenlte閱讀 413評論 0 0
  • 表情是什么,我認為表情就是表現(xiàn)出來的情緒。表情可以傳達很多信息。高興了當然就笑了,難過就哭了。兩者是相互影響密不可...
    Persistenc_6aea閱讀 129,399評論 2 7

友情鏈接更多精彩內容