日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

第二章 数据类型和文件操作

發布時間:2025/4/5 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第二章 数据类型和文件操作 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

變量創建過程

首先,當我們定義了一個變量name = ‘oldboy’的時候,在內存中其實是做了這樣一件事:

程序開辟了一塊內存空間,將‘oldboy’存儲進去,再讓變量名name指向‘oldboy’所在的內存地址。如下圖所示:

我們可以通過id()方法查看這個變量在內存中的地址

  • >>> name = "oldboy"
  • >>> id(name)
  • 4317182304
  • python 解釋器有自動垃圾回收機制,自動隔一段時間把沒有跟變量名關聯的內存數據回收

    name = "wuxiping" name = "Jack" print(id(name))name = "Alex" name1 = name print(name1) print(id(name),id(name1))name = "黑姑娘" print(name1) # 因為name1是直接指向Alex,所以name1 沒變

    身份運算

    python 中有很多種數據類型, 查看一個數據的類型的方法是type().

    判斷一個數據類型是不是str, or int等,可以用身份運算符is

  • >>> type(name) is str
  • True
  • >>>
  • >>> type(name) is not int
  • True
  • # 身份運算 name = "Alex" name1 = "黑姑娘" print(type(name1)) print(type(name1) is str) print(type(name1) is int) # 不能直接說 name1 is str,因為name1 是一個字符串,現在判斷的是它是不是一個字符串類型!因此要先拿到它的類型 print(name1 is str)age = 12.32 print(type(age) is not float)

    空值None

    代表什么都沒有的意思,一般用在哪呢? 比如玩游戲,你要初始化一個女朋友, 需要填上姓名、年齡、身高、體重等信息, 這些信息是讓玩家填的,在填之前,你要先把變量定義好,那就得存個值 ,這個值用0,1來占位不合適 ,用True,False也不合適 ,用None最合適

  • >>> name=None
  • >>> age=None
  • >>> height=None
  • >>> weight=None
  • >>>
  • >>> name,age,height,weight
  • (None, None, None, None)
  • >>>
  • 此時可用is 運算符來判斷變量是不是None

  • >>> if name is None:
  • ... print("你的女朋友還沒起名字呢.")
  • ...
  • 你的女朋友還沒起名字呢.
  • 其實用==判斷也行,但是不符合開發規范

  • >>> name == None
  • True
  • 三元運算

    顯的很NB的代碼寫法。

    # 三元運算 a = 10 b = 5 if a>15:c = a else:c = b print(c) # 或者 d = a if a>15 else b print(d)

    d = 值1 if 條件A else 值2

    如果條件A成立,就取左邊值1,否則就取值2

    細講數據類型----列表

    追加,數據會追加到尾部

  • >>> names
  • ['alex', 'jack']
  • >>> names.append("rain")
  • >>> names.append("eva")
  • >>>
  • >>> names
  • ['alex', 'jack', 'rain', 'eva']
  • 插入,可插入任何位置

  • >>> names.insert(2,"黑姑娘")
  • >>> names
  • ['alex', 'jack', '黑姑娘', 'rain', 'eva']
  • >>>
  • 合并,可以把另一外列表的值合并進來

  • >>> n2 = ["狗蛋","綠毛","雞頭"]
  • >>> names
  • ['alex', 'jack', '黑姑娘', 'rain', 'eva']
  • >>> names.extend(n2)
  • >>> names
  • ['alex', 'jack', '黑姑娘', 'rain', 'eva', '狗蛋', '綠毛', '雞頭']
  • 列表嵌套

  • >>> names.insert(2,[1,2,3])
  • >>> names
  • ['alex', 'jack', [1, 2, 3], '黑姑娘', 'rain', 'eva', '狗蛋', '綠毛', '雞頭']
  • >>> names[2][1]
  • 2
  • 刪除操作

    del 直接刪

  • >>> names
  • ['alex', 'jack', [1, 2, 3], '黑姑娘', 'rain', 'eva', '狗蛋', '綠毛', '雞頭']
  • >>> del names[2]
  • >>> names
  • ['alex', 'jack', '黑姑娘', 'rain', 'eva', '狗蛋', '綠毛', '雞頭']
  • pop 刪

  • >>> names
  • ['alex', 'jack', '黑姑娘', 'rain', 'eva', '狗蛋', '綠毛', '雞頭']
  • >>> names.pop() #默認刪除最后一個元素并返回被刪除的值
  • '雞頭'
  • >>> names
  • ['alex', 'jack', '黑姑娘', 'rain', 'eva', '狗蛋', '綠毛']
  • >>> help(names.pop)
  • >>> names.pop(1) #刪除指定元素
  • 'jack'
  • clear 清空

  • >>> n2
  • ['狗蛋', '綠毛', '雞頭']
  • >>> n2.clear()
  • >>> n2
  • []
  • 修改操作

  • >>> names
  • ['alex', '黑姑娘', 'rain', 'eva', '狗蛋', '綠毛']
  • >>> names[0] = "金角大王"
  • >>> names[-1] = "銀角大王"
  • >>> names
  • ['金角大王', '黑姑娘', 'rain', 'eva', '狗蛋', '銀角大王']
  • 查操作

  • >>> names
  • ['金角大王', '黑姑娘', 'rain', 'eva', '狗蛋', '銀角大王', 'eva']
  • >>>
  • >>> names.index("eva") #返回從左開始匹配到的第一個eva的索引
  • 3
  • >>> names.count("eva") #返回eva的個數
  • 2
  • name = ['金角大王', '黑姑娘', 'rain', 'eva', '狗蛋', '銀角大王', 'eva']# 切片,顧頭不顧尾 print(name[1:4]) print(name[1:-2]) print(name[1:]) # 可取最后一個數 print(name[:5]) # 倒著切 print(name[-5:-1]) print(name[-5:]) # 步長, 允許跳著取值 print(name[0:-1:1]) print(name[0:-1:2]) print(name[0:-1:3])# 從右往左走 print(name[-1:-5:-1]) # 步長變成負的即可print(name[:]) # 都省略,全取 print(name[0:-1:2]) print(name[::2]) # 反轉 name = ['金角大王', '黑姑娘', 'rain', 'eva', '狗蛋', '銀角大王', 'eva']n = "銀角大王" print(n[::-1]) name.reverse() print(name)# 排序 name.sort() print(name) # 循環列表 for i in name:print(i)

    ?細講數據類型-元組(大部分和列表相似)

      不可修改

    索引,切片,等

    count,index

    注意:元組本身不可變,如果元組中還包含其他可變元素,這些可變元素可以改變

    >>> data (99, 88, 77, ['Alex', 'Jack'], 33) >>> data[3][0] = '金角大王' >>> data (99, 88, 77, ['金角大王', 'Jack'], 33)

    為啥呢? 因為元組只是存每個元素的內存地址,上面[‘金角大王’, ‘Jack’]這個列表本身的內存地址存在元組里確實不可變,但是這個列表包含的元素的內存地址是存在另外一塊空間里的,是可變的。

    ?細講數據類型-字符串

    定義

    字符串是一個有序的字符的集合,用于存儲和表示基本的文本信息,’ ‘或’’ ‘’或’’’ ‘’’中間包含的內容稱之為字符串

    ?反轉:將步長變成-1即可

    特性:

    按照從左到右的順序定義字符集合,下標從0開始順序訪問,有序

    1.可以進行切片操作

    2.不可變,字符串是不可變的,不能像列表一樣修改其中某個元素,所有對字符串的修改操作其實都是相當于生成了一份新數據。

    補充:

    1.字符串的單引號和雙引號都無法取消特殊字符的含義,如果想讓引號內所有字符均取消特殊意義,在引號前面加r,如name=r’l\thf’

    字典:

    字典是Python語言中唯一的映射類型。

    定義:{key1:value1,key2:value2}

    特性:

    1.key-value結構

    2.key必須為不可變數據類型、必須唯一

    3.可存放任意多個value、可修改、可以不唯一

    4.無序

    5.查詢速度快,且不受dict的大小影響,至于為何快?我們學完hash再解釋。

    # coding=utf-8 # 字典:定義:{key1:value1,key2:value2} # info = { # "name":"小猿圈", # "mission": "幫一千萬極客高效學編程", # "website": "http://apeland.com"} # print(info.keys())# 創建操作 # person = {"name": "alex", 'age': 20}# person = dict(name='seven', age=20)# keys = [1,2,3,4,5] # a= {}.fromkeys(keys,100) # print(a)# 增加 # person = {"name": "alex", 'age': 20} # person["job"] = "Teacher" # print(person) # person.setdefault("salary",[1,2,3]) # print(person) # 刪除 person = {"name": "alex", 'age': 20} # print(person) # print(person.pop("name")) # 刪除指定鍵key # print(person) # print(person) # del person["name"] # 刪除指定鍵key # print(person) # print(person.clear()) # 清空字典# 修改操作 # person["name"] = "NAME" # print(person) # 替代原先的value值 # person1 = {"gender":"male"} # print(person.update(person1)) # 將字典person1的鍵值對添加到字典person中 # print(person)# 查操作 # print(person["name"]) # 返回字典中key對應的值,若key不存在字典中,則報錯 # print(person.get("name")) # 返回字典中key對應的值,若key不在字典中,則返回default的值(default默認為None) # print("name" in person) # 若存在則返回True,否則返回False # print(person.keys()) # 返回一個包含字典所有key的列表 # print(person.values()) # 返回一個包含字典所有value的列表 # print(person.items()) # 返回一個包含所有(鍵,值)元祖的列表# 循環 # for i in person: # print(i,person[i]) # for i in person.items(): # print(i) # for k,v in person.items(): # print(k,v) # for i in person.keys(): # print(i) for i in person.values():print(i)

    細講數據類型-集合

    定義

    1.里面的元素不可變,代表你不能存一個list、dict 在集合里,字符串、數字、元組等不可變類型可以存

    2.天生去重,在集合里沒辦法存重復的元素

    3.無序,不像列表一樣通過索引來標記在列表中的位置 ,元素是無序的,集合中的元素沒有先后之分,如集合{3,4,5}和{3,5,4}算作同一個集合

    基于上面的特性,我們可以用集合來干2件事,去重和關系運算

    # 創建集合 set 增刪查 a = {1,2,3,4,2,'alex',3,'rain','alex'} print(a) a.add(5) print(a) # a.add([1,2,3]) # print(a) a.add((1,2,3)) print(a) # 刪除 a.discard(5) # 隨機刪除 a.pop() # 如果沒有該元素就會報錯 a.remove() # 關系運算 s_1024 = {"佩奇","老男孩","海峰","馬JJ","老村長","黑姑娘","Alex"} s_pornhub = {"Alex","Egon","Rain","馬JJ","Nick","Jack"} print(s_1024 & s_pornhub) # 交集, elements in both set print(s_1024 | s_pornhub) # 并集 or 合集 print(s_1024 - s_pornhub) # 差集 , only in 1024 print(s_pornhub - s_1024) # 差集, only in pornhub print(s_1024 ^ s_pornhub) # 對稱差集, 把腳踩2只船的人T出去 print(s_1024.intersection(s_pornhub))

    ?秒懂二進制

    字符編碼之文字是如何顯示的

    ASCII碼

    這張表就是計算機顯示各種文字、符號的基石呀

    ASCII(American Standard Code for Information Interchange,美國信息交換標準代碼)是基于拉丁字母的一套電腦編碼系統,主要用于顯示現代英語和其他西歐語言。它是現今最通用的單字節編碼系統,并等同于國際標準ISO/IEC 646。

    在這里,每一位0或者1所占的空間單位為bit(比特),這是計算機中最小的表示單位

    每8個bit組成一個字節,這是計算機中最小的存儲單位(畢竟你是沒有辦法存儲半個字符的)orz~

  • bit 位,計算機中最小的表示單位
  • 8bit = 1bytes 字節,最小的存儲單位,1bytes縮寫為1B
  • 1KB=1024B
  • 1MB=1024KB
  • 1GB=1024MB
  • 1TB=1024GB
  • 1PB=1024TB
  • 1EB=1024PB
  • 1ZB=1024EB
  • 1YB=1024ZB
  • 1BB=1024YB
  • GBK2312? ?2個字節代表一個字符

    論斷句的重要性與必要性:

    Unicode標準也在不斷發展,但最常用的是用兩個字節表示一個字符(如果要用到非常偏僻的字符,就需要4個字節)?,F代操作系統和大多數編程語言都直接支持Unicode。

    UTF-8

    新的問題又出現了:如果統一成Unicode編碼,亂碼問題從此消失了。但是,如果你寫的文本基本上全部是英文的話,用Unicode編碼比ASCII編碼需要多一倍的存儲空間,由于計算機的內存比較大,并且字符串在內容中表示時也不會特別大,所以內容可以使用unicode來處理,但是存儲和網絡傳輸時一般數據都會非常多,那么增加1倍將是無法容忍的!!!

    為了解決存儲和網絡傳輸的問題,出現了Unicode Transformation Format,學術名UTF,即:對unicode字符進行轉換,以便于在存儲和網絡傳輸時可以節省空間!

      • UTF-8: 使用1、2、3、4個字節表示所有字符;優先使用1個字符、無法滿足則使增加一個字節,最多4個字節。英文占1個字節、歐洲語系占2個、東亞占3個,其它及特殊字符占4個
      • UTF-16: 使用2、4個字節表示所有字符;優先使用2個字節,否則使用4個字節表示。
      • UTF-32: 使用4個字節表示所有字符;

    總結:UTF 是為unicode編碼 設計 的一種 在存儲 和傳輸時節省空間的編碼方案。

    如果你要傳輸的文本包含大量英文字符,用UTF-8編碼就能節省空間:

    hash是個什么東西閱讀量: 461

    什么是哈希?

    hash,一般翻譯做散列、雜湊,或音譯為哈希,是把任意長度的輸入(又叫做預映射pre-image)通過散列算法變換成固定長度的輸出,該輸出就是散列值。這種轉換是一種壓縮映射,也就是,散列值的空間通常遠小于輸入的空間。

    它其實就是一個算法,最簡單的算法就是加減乘除,比方,我設計個數字算法,輸入+7=輸出,比如我輸入1,輸出為8;輸入2,輸出為9。

    哈希算法不過是一個更為復雜的運算,它的輸入可以是字符串,可以是數據,可以是任何文件,經過哈希運算后,變成一個固定長度的輸出,該輸出就是哈希值。但是哈希算法有一個很大的特點,就是你不能從結果推算出輸入,所以又稱為不可逆的算法

    哈希特性

    不可逆:在具備編碼功能的同時,哈希算法也作為一種加密算法存在。即,你無法通過分析哈希值計算出源文件的樣子,換句話說:你不可能通過觀察香腸的紋理推測出豬原來的樣子。

    計算極快:20G高清電影和一個5K文本文件復雜度相同,計算量都極小,可以在0.1秒內得出結果。也就是說,不管豬有多肥,骨頭多硬,做成香腸都只要眨眨眼的時間,

    哈希的用途

    哈希算法的不可逆特性使其在以下領域使用廣泛

    1.密碼,我們日常使用的各種電子密碼本質上都是基于hash的,你不用擔心支付寶的工作人員會把你的密碼泄漏給第三方,因為你的登錄密碼是先經過 hash+各種復雜算法得出密文后 再存進支付寶的數據庫里的

    2.文件完整性校驗,通過對文件進行hash,得出一段hash值 ,這樣文件內容以后被修改了,hash值就會變。 MD5 Hash算法的”數字指紋”特性,使它成為應用最廣泛的一種文件完整性校驗和(Checksum)算法,不少Unix系統有提供計算md5 checksum的命令。

    3.數字簽名,數字簽名技術是將摘要信息用發送者的私鑰加密,與原文一起傳送給接收者。接收者只有用發送者的公鑰才能解密被加密的摘要信息,然后用HASH函數對收到的原文產生一個摘要信息,與解密的摘要信息對比。如果相同,則說明收到的信息是完整的,在傳輸過程中沒有被修改,否則說明信息被修改過,因此數字簽名能夠驗證信息的完整性。

    此外,hash算法在區塊鏈領域也使用廣泛。

    md5加密算法

    基于hash的數據類型有哪些?

    Python 中基于hash的2個數據類型是dict and set , 之前說dict查詢速度快,為何快? 說set天生去重,怎么做到的?其實都是利用了hash的特性,我們下面來剖析

    用Python操作文件

  • f=open(filename) # 打開文件
  • f.write("我是野生程序員") # 寫操作
  • f.read() #讀操作
  • f.close() #保存并關閉
  • 操作模式

      • r 只讀模式
      • w 創建模式,若文件已存在,則覆蓋舊文件
      • a 追加模式,新數據會寫到文件末尾

    總結

    以上是生活随笔為你收集整理的第二章 数据类型和文件操作的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。