最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python中變量和數(shù)據(jù)類型的使用方法和避坑指南

 更新時間:2026年06月01日 08:15:09   作者:榮碼  
這篇文章主要為大家詳細介紹了Python中變量和數(shù)據(jù)類型的使用方法和避坑指南,主要包括5個基本數(shù)據(jù)類型和類型查看與轉(zhuǎn)換,文中的示例代碼講解詳細,感興趣的小伙伴可以了解下

前言

上周面試,面試官問了一個問題:

a = [1, 2, 3]
b = a
b.append(4)
print(a)  # 輸出什么?

我當時就愣了——a 居然也被改了,輸出 [1, 2, 3, 4]!

后來才知道,Python 的變量不是"盒子裝數(shù)據(jù)",而是"標簽貼數(shù)據(jù)"。ab 貼的是同一個列表,改一個另一個也變。這個坑不搞清楚,后面寫代碼全是 bug。

今天把變量和數(shù)據(jù)類型徹底講明白,5個坑我都幫你踩過了。

一、變量:不是盒子,是標簽

1.1 變量到底是什么?

很多教程說"變量是裝數(shù)據(jù)的盒子",這個比喻在 Python 里不準確。

Python 的變量更像是一張便利貼——貼在數(shù)據(jù)上,而不是裝著數(shù)據(jù):

name = "張三"      # 把"張三"這個便利貼貼在字符串上
age = 25           # 把"age"這個便利貼貼在整數(shù)25上
height = 1.75      # 貼在浮點數(shù)1.75上
is_student = True  # 貼在布爾值True上

關(guān)鍵區(qū)別:

# "盒子"思維:a和b是兩個獨立的盒子
a = [1, 2, 3]
b = a        # 把a的內(nèi)容復制一份給b?
b.append(4)
print(a)     # [1, 2, 3, 4] ← a也被改了!
?
# "標簽"思維:a和b貼在同一個列表上
a = [1, 2, 3]
b = a        # b也貼到了同一個[1,2,3]上
b.append(4)  # 改的是列表本身,a和b都能看到
print(a)     # [1, 2, 3, 4] ← 合理!

坑1:變量是引用不是拷貝,賦值 b = a 不會創(chuàng)建新數(shù)據(jù),只是多貼了一個標簽。想真正拷貝用 b = a.copy()b = a[:]。

1.2 變量命名規(guī)則

規(guī)則正確示例錯誤示例原因
由字母、數(shù)字、下劃線組成user_nameuser-name- 不是合法字符
不能以數(shù)字開頭name22name數(shù)字開頭非法
不能使用保留關(guān)鍵字class_classclass 是關(guān)鍵字
區(qū)分大小寫NamenamePython 大小寫敏感

Python 官方 PEP8 規(guī)范推薦 snake_case(蛇形命名法)

# ? 推薦
user_name = "張三"
max_value = 100
is_valid = True
?
# ? 不推薦(駝峰命名在Python中不常見,通常只用于類名)
userName = "張三"
MaxValue = 100

1.3 動態(tài)類型:同一個變量能裝不同類型

x = 10        # int
print(type(x))  # <class 'int'>
?
x = "hello"   # 變成 str 了
print(type(x))  # <class 'str'>
?
x = [1, 2, 3] # 又變成 list
print(type(x))  # <class 'list'>

這在 Java/C++ 里不可能——變量聲明了 int 就永遠是 int。Python 隨時能換,靈活但也容易出 bug

建議:雖然 Python 允許變量類型變化,但盡量保持變量用途一致,別一個變量一會兒是數(shù)字一會兒是字符串,自己都看不懂。

二、5個基本數(shù)據(jù)類型

2.1 整數(shù) int

整數(shù)就是沒有小數(shù)點的數(shù)字,Python 中沒有長度限制(取決于內(nèi)存):

a = 100          # 十進制
b = 0b1100100    # 二進制(前綴 0b)
c = 0o144        # 八進制(前綴 0o)
d = 0x64         # 十六進制(前綴 0x)
?
print(a, b, c, d)  # 全部輸出:100
?
# 大數(shù)字可以用下劃線分隔,便于閱讀
big_num = 1_000_000_000
print(big_num)  # 1000000000
?
# 進制轉(zhuǎn)換
print(bin(255))   # 0b11111111
print(oct(255))   # 0o377
print(hex(255))   # 0xff

2.2 浮點數(shù) float

帶小數(shù)點的數(shù)字,用于需要精度的場景。

坑2:0.1 + 0.2 ≠ 0.3,這是所有編程語言的通病,不只是 Python:

a = 0.1 + 0.2
print(a)  # 0.30000000000000004  ← 不是0.3!
?
# 涉及錢的計算,一定要用 decimal
from decimal import Decimal
result = Decimal('0.1') + Decimal('0.2')
print(result)  # 0.3 ?

血淚教訓:做金融類項目時,我因為用了 float 算金額,對賬差了0.01元,排查了一整天。涉及錢,一律用 Decimal。

2.3 布爾值 bool

只有 TrueFalse(首字母大寫,別寫 true)。

坑3:哪些值是 False?很多人答不全

# 這些都是 False("假"值/空值)
bool(0)      # False
bool(0.0)    # False
bool("")     # False(空字符串)
bool([])     # False(空列表)
bool({})     # False(空字典)
bool(None)   # False
?
# 其余都是 True
bool(1)      # True
bool("abc")  # True
bool([0])    # True(列表不為空,哪怕里面是0)
bool(-1)     # True(負數(shù)也是True)

面試常考: "Python中哪些值是假值?" 記住口訣——零、空、None 就是假。

2.4 字符串 str

用單引號或雙引號包裹的文本:

name = "張三"
address = '北京市朝陽區(qū)'
?
# 三引號:多行字符串
poem = """
床前明月光,
疑是地上霜。
舉頭望明月,
低頭思故鄉(xiāng)。
"""
?
# 原始字符串(轉(zhuǎn)義字符不生效,Windows路徑必備)
path = r"C:\new folder\file.txt"
# 不加r的話,\n會被當成換行符!
?
# 字符串拼接
print("Hello" + " " + "World")  # Hello World
print("Ha" * 3)                  # HaHaHa

2.5 None

None 表示"什么都沒有",不是0,不是空字符串,不是False。

result = None
print(result is None)  # True
?
# 區(qū)分 None 和空值
empty_list = []
print(empty_list is None)  # False!空列表不是None
print(len(empty_list) == 0)  # True,這才是判斷空列表的正確方式

坑4:判斷空值用 is None,不要用 == None,雖然結(jié)果一樣但 is 才是 Python 規(guī)范。判斷空列表/空字符串用 len(x) == 0 或直接 if not x:

三、類型查看與轉(zhuǎn)換

3.1 type() 和 isinstance()

x = 42
print(type(x))  # <class 'int'>
?
# isinstance 判斷類型(推薦,考慮繼承關(guān)系)
print(isinstance(x, int))         # True
print(isinstance(x, (int, float)))  # True(int或float都行)

type() vs isinstance() 的區(qū)別:

class Animal:
    pass
?
class Dog(Animal):
    pass
?
d = Dog()
print(type(d) == Animal)     # False(type不認繼承)
print(isinstance(d, Animal)) # True(isinstance認繼承)

實際開發(fā)中 優(yōu)先用 isinstance() ,更安全。

3.2 類型轉(zhuǎn)換

# 轉(zhuǎn)整數(shù)
int(3.14)      # 3(截斷,不四舍五入)
int("42")      # 42
?
# 轉(zhuǎn)浮點數(shù)
float(3)       # 3.0
float("3.14")  # 3.14
?
# 轉(zhuǎn)字符串
str(42)        # "42"
str(3.14)      # "3.14"
?
# 轉(zhuǎn)布爾值
bool(0)        # False
bool("")       # False
bool("abc")    # True

坑5:字符串轉(zhuǎn)數(shù)字會報錯

int("abc")  # ValueError! 程序直接崩了
?
# 安全轉(zhuǎn)換方法
def safe_int(s, default=0):
    try:
        return int(s)
    except ValueError:
        return default
?
print(safe_int("100"))  # 100
print(safe_int("abc"))  # 0(不會崩)

實際開發(fā)中,凡是接收用戶輸入轉(zhuǎn)數(shù)字的,都要做異常處理。

四、== 和 is 的區(qū)別(面試必考)

這個問題面試被問到的概率極高:

a = [1, 2, 3]
b = [1, 2, 3]
?
print(a == b)  # True,值相等
print(a is b)  # False,不是同一個對象(內(nèi)存地址不同)
?
c = a
print(a is c)  # True,是同一個對象

一句話記?。?code>== 比較值,is 比較身份(是不是同一個對象)。

還有個小整數(shù)池的坑:

x = 256
y = 256
print(x is y)  # True(-5到256會被緩存,同一對象)
?
x = 257
y = 257
print(x is y)  # False(超出緩存范圍,不同對象)

面試官最愛問這個,記住 -5到256是小整數(shù)池的范圍就行。

五、實戰(zhàn):登錄驗證系統(tǒng)

把上面學的布爾值、字符串、類型轉(zhuǎn)換串起來:

"""用戶登錄驗證 - 演示變量與數(shù)據(jù)類型的綜合使用"""
?
def validate_login(username, password):
    """驗證登錄信息"""
    valid_users = {
        "admin": "123456",
        "user1": "password",
        "test": "test123"
    }
?
    if not username:                    # 空字符串是假值
        return False, "用戶名不能為空"
    if username not in valid_users:
        return False, "用戶不存在"
    if valid_users[username] != password:
        return False, "密碼錯誤"
?
    return True, "登錄成功"
?
# 測試
test_cases = [
    ("admin", "123456"),   # 正確
    ("admin", "wrong"),    # 密碼錯誤
    ("unknown", "123"),    # 用戶不存在
    ("", "123"),           # 空用戶名
]
?
for username, password in test_cases:
    success, message = validate_login(username, password)
    status = "?" if success else "?"
    print(f"{status} {username or '(空)'}: {message}")

運行結(jié)果:

? admin: 登錄成功
? admin: 密碼錯誤
? unknown: 用戶不存在
? (空): 用戶名不能為空

注意 not username 這里用了布爾值的特性——空字符串是假值,直接 if not username 就能判斷空,不用寫 if username == ""。這就是理解數(shù)據(jù)類型帶來的簡潔。

總結(jié):5個坑一句話回顧

一句話避坑方法
坑1:變量是引用b = a 不會拷貝數(shù)據(jù).copy()[:]
坑2:浮點數(shù)精度0.1+0.2≠0.3涉及錢用 Decimal
坑3:哪些是假值零、空、None 就是假記住口訣就行
坑4:判斷空值== None 不規(guī)范is Noneif not x:
坑5:字符串轉(zhuǎn)數(shù)字int("abc") 直接崩try/except 包一下

到此這篇關(guān)于Python中變量和數(shù)據(jù)類型的使用方法和避坑指南的文章就介紹到這了,更多相關(guān)Python變量和數(shù)據(jù)類型內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python中time包實例詳解

    python中time包實例詳解

    在本篇文章里小編給大家整理的是一篇關(guān)于python中time包實例詳解內(nèi)容,對此有興趣的朋友們可以學習下。
    2021-02-02
  • 一文教會你用Python繪制動態(tài)可視化圖表

    一文教會你用Python繪制動態(tài)可視化圖表

    數(shù)據(jù)可視化是數(shù)據(jù)科學中關(guān)鍵的一步,下面這篇文章主要給大家介紹了關(guān)于如何利用Python繪制動態(tài)可視化圖表的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-05-05
  • Python簡單實現(xiàn)enum功能的方法

    Python簡單實現(xiàn)enum功能的方法

    這篇文章主要介紹了Python簡單實現(xiàn)enum功能的方法,簡單分析了Python實現(xiàn)enum功能的相關(guān)技巧,需要的朋友可以參考下
    2016-04-04
  • PyCharm 2020.1版安裝破解注冊碼永久激活(激活到2089年)

    PyCharm 2020.1版安裝破解注冊碼永久激活(激活到2089年)

    這篇文章主要介紹了PyCharm 2020.1版安裝破解注冊碼永久激活(激活到2089年),需要的朋友可以參考下
    2020-09-09
  • 詳解Python流程控制語句

    詳解Python流程控制語句

    這篇文章主要介紹了Python流程控制語句的的相關(guān)資料,幫助大家更好的理解和學習python,感興趣的朋友可以了解下
    2020-10-10
  • Python lambda函數(shù)基本用法實例分析

    Python lambda函數(shù)基本用法實例分析

    這篇文章主要介紹了Python lambda函數(shù)基本用法,結(jié)合實例較為詳細的分析了Python lambda函數(shù)的功能、使用方法及相關(guān)操作注意事項,需要的朋友可以參考下
    2018-03-03
  • 淺談pymysql查詢語句中帶有in時傳遞參數(shù)的問題

    淺談pymysql查詢語句中帶有in時傳遞參數(shù)的問題

    這篇文章主要介紹了淺談pymysql查詢語句中帶有in時傳遞參數(shù)的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • Python數(shù)據(jù)類型詳解(一)字符串

    Python數(shù)據(jù)類型詳解(一)字符串

    簡單的說字符串String就是使用引號定義的一組可以包含數(shù)字,字母,符號(非特殊系統(tǒng)符號)的集合。今天我們就來詳細探討下Python數(shù)據(jù)類型中的字符串
    2016-05-05
  • Python分類測試代碼實例匯總

    Python分類測試代碼實例匯總

    這篇文章主要介紹了Python分類測試代碼實例匯總,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-07-07
  • Python遍歷指定文件及文件夾的方法

    Python遍歷指定文件及文件夾的方法

    這篇文章主要介紹了Python遍歷指定文件及文件夾的方法,對比兩種實現(xiàn)技巧分析了Python遍歷文件及文件夾的方法,需要的朋友可以參考下
    2015-05-05

最新評論

阿图什市| 龙陵县| 五河县| 富锦市| 万载县| 炉霍县| 宜川县| 资源县| 梅州市| 宝兴县| 溧阳市| 抚宁县| 安龙县| 连城县| 平遥县| 玛多县| 峨边| 南阳市| 阿拉善右旗| 呼图壁县| 绥阳县| 胶州市| 房山区| 济源市| 乌兰县| 象山县| 通海县| 新巴尔虎右旗| 长葛市| 新晃| 日照市| 温泉县| 安远县| 罗田县| 成都市| 海淀区| 三河市| 桦南县| 金乡县| 宁陵县| 京山县|