主頁 > 後端開發 > Python字典和集合

Python字典和集合

2021-10-18 13:01:22 後端開發

1.什么是字典

  • Python內置的資料結構之一,與串列一樣是一個可變序列
  • 以鍵值對的方式存盤資料,字典是一個無序的序列
    • 在存盤資料時要經過hash(key)的計算,計算的結果就是存盤的位置,因此字典的鍵值對順序并不是按照存盤時的先后順序決定的,而是經過計算得到的存盤位置,
    • 字典中的鍵必須時不可變序列,否則當鍵改變時,hash計算的結果就會發生變化,導致存盤位置發生變化,因此鍵必須要使用不可變序列

  • 字典的實作原理
    • 與查新華字典類似,差字典是先根據部首或者拼音查找相應的頁碼,Python中的字典是根據 key去查找value的所在位置

2.字典的創建方式

#字典創建的兩種方式
#第一種,使用花括號
dict_1 = {'num':'20210101','name':'Liming','sex':'male'}
print(dict_1)
#第二種,使用內置函式dict()
# 2.1 通過其他字典創建
dict_2 = dict(dict_1)
print(dict_2)
print(dict_2 is dict_2)     # True

# 2.2 通過關鍵字引數創建
dict_3 = dict(num = "20210101",name = "Liming",sex = 'male')
print(dict_3)
print(dict_1 == dict_3)     #True
print(dict_1 is dict_3)     #False

# 2.3 通過鍵值對的序列創建
dict_4 = dict([('num',"20210101"),('name',"Liming"),('sex',"male")])
print(dict_3)

#2.4 通過dict和zip結合創建
dict_5 = dict(zip(['num','name','sex'],['20210101','Liming','male']))
print(dict_5)

if dict_1 == dict_2 == dict_3 == dict_4 == dict_5:   #判斷字典的值是否相同
    print("創建字典的5種方式相同")    
else:
    print("創建字典的5種方式不同")
  • 字典種的鍵是唯一的,創建字典時若出現“鍵”相同的情況,則后定義的“鍵-值”對將覆寫先定義的“鍵-值”對,
x = {'a':1,'b':2,"b":3}
print(x)
#運行結果
{'a': 1, 'b': 3}

 

  • fromkeys()方法創建字典:當所有的鍵對應同一個值的時候,可以使用fromkeys創建字典
  • dict.fromkeys(seq[,value]):
    • seq:為字典“鍵”的值串列
    • value:為設定鍵序列(seq)的值,省略時默認為None
dict_1 = dict.fromkeys(['zhangsan','wangwu'])
print(dict_1)
dict_2 = dict.fromkeys(['zhang_san','wang_wu'],18)
print(dict_2)
dict_3 = dict.fromkeys(['zhang_san','wang_wu'],b)
print(dict_3)
#從下面四行代碼可以看出,當他們值為可變序列并且參考地址相同時,類似于淺copy
dict_3['wang_wu'].pop()
print(dict_3)
dict_3['wang_wu'].append(10)
print(dict_3)

#運行結果
{'zhangsan': None, 'wangwu': None}
{'zhang_san': 18, 'wang_wu': 18}
{'zhang_san': [18], 'wang_wu': [18]}
{'zhang_san': [], 'wang_wu': []}
{'zhang_san': [10], 'wang_wu': [10]}

 

3.字典的訪問

a.根據鍵訪問值

  • 字典中每個元素表示一種映射關系,將提供的“鍵‘作為下標可以訪問對應的值
  • 如果字典中不存在這個”鍵“,則會拋出例外
#根據鍵訪問值
dict_1 = {"name":"張飛","age":18,"sex":"male"}
print(dict_1["name"])
print(dict_1["sex"])
#print(dict_1["x"])   指定的鍵不存在,拋出例外

 

b.使用get()方法訪問值

  • 在訪問字典時,若不確定字典中是否由某個鍵,可通過get()方法進行獲取,
  • 若該鍵存在,則回傳對應的值
  • 若該鍵不存在,則回傳默認值
  • 語法格式
    • dict.get([key[,default = None])   
    • key:要查找的鍵
    • default:默認值,默認為None,可自行設定需要輸出的默認值,如果指定的鍵不存在,則回傳默認值,當default為空時,回傳None
#使用get()方法訪問值
dict_1 = {"name":"張飛","age":18,"sex":"male"}
print(dict_1.get("name"))
print(dict_1.get("x"))    #回傳None
print(dict_1.get("x",18))   #當鍵不存在時,輸出設定的默認值,并不會把鍵x存入dect_1
print(dict_1.get("age",19))   #當鍵存在時,輸出age原本的值

4.in 和 not in 在字典中的使用

  • 判斷鍵是否在字典中
#in和not in在字典中的使用:判斷鍵是否在字典中
dict_1 = {"name":"張飛","age":18,"sex":"male"}
print("name" in dict_1)           #True
print("張飛" in dict_1)            #False
print("張飛" not in dict_1)        #True

 

5.修改和添加字典中的元素

  • 當以指定鍵為下標為字典元素賦值時,有兩種含義:
    • 若該鍵存在字典中,則表示修改該鍵對應的值
    • 若該鍵不存在字典中,則表示添加一個新的鍵值對,也就是添加一個新元素到字典中
dict_1 = {"name":"張飛","age":18}
print(dict_1)
dict_1["name"] = "李四"   #name鍵存在字典dict_1中,所以此處為修改name的值
print(dict_1)
dict_1["sex"] = "male"    #sex鍵不存在字典dict_1中,所以此處為添加新的鍵值對
print(dict_1)

#輸出結果
{'name': '張飛', 'age': 18}
{'name': '李四', 'age': 18}
{'name': '李四', 'age': 18, 'sex': 'male'}

 

6.洗掉字典中的元素   del命令   clear()方法  pop()方法   popitem()方法

  • del命令:根據”鍵“洗掉字典中的元素
dict_1 = {"name":"張飛","age":18,"sex":"male"}
del dict_1["name"]
print(dict_1)
#運行結果
{'age': 18, 'sex': 'male'}
  • clear()方法:用于清除字典中所有元素,其語法格式如下:
dict_1 = {"name":"張飛","age":18,"sex":"male"}
dict_1.clear()
print(dict_1)
#運行結果
{}
  • pop()方法:用于獲取指定”鍵“的值,并將這個鍵值對從字典中移除,并回傳該鍵的值,
    • dict.pop(key[,default])
    • key:要被洗掉的鍵
    • default:默認值,當字典中沒有要被洗掉的key時,該方法回傳指定的默認值
dict_1 = {"name":"張飛","age":18,"sex":"male"}
print(dict_1.pop("age"))     #洗掉鍵age與其值,pop()方法的回傳值為,洗掉的該鍵的值
print(dict_1)
print(dict_1.pop('age',17))
print(dict_1)
print(dict_1.pop('name',"里斯"))
print(dict_1)
  •  popitem()方法:用于隨機獲取一個鍵值對,將其洗掉,并以元組的方式回傳被洗掉的鍵值對
    • dict.popitem():該方法無引數
dict_1 = {"name":"張飛","age":18,"sex":"male"}
x = dict_1.popitem()
print(x,type(x))
print(dict_1)
#運行結果
('sex', 'male') <class 'tuple'>
{'name': '張飛', 'age': 18}

 

 

7.更新字典

  • 使用update()方法:可以將新字典的鍵值對,一次性全部添加到當前字典中
  • 如果兩個字典存在相同的鍵,則以新字典中的值為準,更新當前字典
  • dict.updata(dict2)
    • dict:當前字典
    • dict2:新字典
dict_1 = {"name":"張飛","age":18}
dict_2 = {"name":"李四","sex":"male"}
dict_1.update(dict_2)
print(dict_1)
print(dict_2)
#運行結果
{'name': '李四', 'age': 18, 'sex': 'male'}
{'name': '李四', 'sex': 'male'}

 

 

8.獲取字典視圖的三個方法

  • key()方法
#keys()方法:獲取字典中所有的key
dict_1 = {"name":"張飛","age":18,"sex":"male"}
key_1 = dict_1.keys()
print(key_1,type(key_1)) #可以看出獲取到了字典所有的鍵,并存放在了一個貌似串列的dict_keys視圖中
key_2 = list(key_1)    #將物件key_1視圖變成串列,并不改變原來的key_1視圖
print(key_1)
print(key_2)
#運行結果
dict_keys(['name', 'age', 'sex']) <class 'dict_keys'>
dict_keys(['name', 'age', 'sex'])
['name', 'age', 'sex']
  • values()方法
#values()方法:獲取字典中所有的value
dict_1 = {"name":"張飛","age":18,"sex":"male"}
value_1 = dict_1.values()
print(value_1,type(value_1)) #可以看出獲取到了字典所有的值,并存放在了一個貌似串列的dict_values視圖中
value_2 = list(value_1)
print(value_1)
print(value_2)
#運行結果
dict_values(['張飛', 18, 'male']) <class 'dict_values'>
dict_values(['張飛', 18, 'male'])
['張飛', 18, 'male']
  • items()方法
#items()方法:獲取字典中所有的鍵值對
dict_1 = {"name":"張飛","age":18,"sex":"male"}
items_1 = dict_1.items()
#可以看出獲取到了字典所有的鍵值對,并將鍵值對存放在了元組中,再把元組存放在串列中,視圖型別為:dict_items
print(items_1,type(items_1))
items_2 = list(items_1)     #將視圖轉換成串列
print(items_2)
items_3 = tuple(items_2)    #將串列轉換成元組
print(items_2)
print(items_3)
#運行結果
dict_items([('name', '張飛'), ('age', 18), ('sex', 'male')]) <class 'dict_items'>
[('name', '張飛'), ('age', 18), ('sex', 'male')]
[('name', '張飛'), ('age', 18), ('sex', 'male')]
(('name', '張飛'), ('age', 18), ('sex', 'male'))

 

9.遍歷字典

  • 使用for回圈遍歷,串列、元組和集合的組合時

  ·當變數x為一個時,x會直接獲取串列(元組)的值

  ·當變數x,y···的個數剛好與串列(元組)的個數相同時,則直接將值依次賦給變數

注意:只有在使用串列和元組和集合的兩兩組合時才能這樣使用,

"""
使用for回圈遍歷,串列和元組的組合時,
    ·當變數x為一個時,x會直接獲取串列(元組)的值
    ·當變數x,y···的個數剛好與串列(元組)的個數相同時,則直接將值依次賦給變數
"""
a = [('Mary', 'C',"d"),('Jone', 'java',"d"),('Lily', 'Python',"d"),('Lily', 'Python',"d")]
for x in a:
    print(x)        #串列里面存盤的元組,只有一個變數x,所以將元組直接賦值給x
print("============================================")
for x,y,z in a:     #串列里面存盤的元組,每個元組里面存盤了3個元素,剛好可以用三個變數xyz接收這三個元素
    print(x,y,z)
print("============================================")

a = (['Mary', 'C',"d"],['Jone', 'java',"d"],['Lily', 'Python',"d"],['Lily', 'Python',"d"])
for x in a:         #元組里面存盤的串列,只有一個變數x,所以將元組直接賦值給x
    print(x)
print("============================================")
for x,y,z in a:     #元組里面存盤的串列,每個串列里面存盤了3個元素,剛好可以用三個變數xyz接收這三個元素
    print(x,y,z)
#運行結果
('Mary', 'C', 'd')
('Jone', 'java', 'd')
('Lily', 'Python', 'd')
('Lily', 'Python', 'd')
============================================
Mary C d
Jone java d
Lily Python d
Lily Python d
============================================
['Mary', 'C', 'd']
['Jone', 'java', 'd']
['Lily', 'Python', 'd']
['Lily', 'Python', 'd']
============================================
Mary C d
Jone java d
Lily Python d
Lily Python d
a = {('Mary', 'C',"A"),('Jone', 'java',"B"),('Lily', 'Python',"C"),('Lily', 'Python',"D")}
for x in a:         #集合里面存盤的元組,只有一個變數x,所以將元組直接賦值給x
    print(x)
for x,y,z in a:      #集合里面存盤的元組,每個元組里面存盤了3個元素,剛好可以用三個變數xyz接收這三個元素
    print(x,y,z)
#運行結果
('Mary', 'C', 'A')
('Lily', 'Python', 'D')
('Jone', 'java', 'B')
('Lily', 'Python', 'C')
Mary C A
Lily Python D
Jone java B
Lily Python C

 

  • 遍歷字典中所有的鍵值對

    • 使用items()方法,該方法以串列的形式回傳可遍歷的鍵值對元組
stu_class = {
    'Mary': 'C',
    'Jone': 'java',
    'Lily': 'Python',
    'Lilo': 'Python'
}
for name,cla in stu_class.items():
    print(name,"選修的課程為:",cla)
#運行結果
Mary 選修的課程為: C
Jone 選修的課程為: java
Lily 選修的課程為: Python
Lilo 選修的課程為: Python
  • 遍歷字典中所有的鍵

    • 當不需要字典中的值時,可使用keys()方法,只遍歷字典中的鍵,該方法以串列回傳一個字典中所有的鍵
stu_class = {
    'Mary': 'C',
    'Jone': 'java',
    'Lily': 'Python',
    'Lilo': 'Python'
}
for name in stu_class.keys():
    print(name)
#運行結果
Mary
Jone
Lily
Lilo
  •  遍歷字典中所有的值

    • 當只關心字典所包含的值時,可以使用values()方法,該方法以串列形式回傳字典中所有的值
stu_class = {
    'Mary': 'C',
    'Jone': 'java',
    'Lily': 'Python',
    'Lilo': 'Python'
}
for cla in stu_class.values():
    print(cla)
#運行結果
C
java
Python
Python

10.字典的特點

  • 字典中所有的元素都是一個鍵值對(key - value),key不允許重復,但是value可以重復
  • 字典中的元素是無序的
  • 字典中的key是不可變物件(不可變序列)
  • 字典頁可以根據需要動態伸縮
  • 字典會浪費較大的記憶體,是一種使用空間換時間的資料

11.復制字典

  • 直接賦值:物件的參考
  • 淺復制(copy()方法):拷貝父物件,參考物件內部的子物件
  • 深復制(deepcopy()方法):copy模塊的deepcopy()方法,完全復制父物件及其子物件
dict1 = {'user':'runoob','num':[123]}
dict2 = dict1       #參考物件
dict3 = dict1.copy()    #淺復制,深復制父物件,子物件不復制,還是參考
import copy
dict4 = copy.deepcopy(dict1) #深復制,完全復制父物件和子物件
print(1,dict1,id(dict1))                #1 {'user': 'runoob', 'num': [123]} 1630766832896
dict1['user'] = 'root'                  
print(1,dict1,id(dict1))                #1 {'user': 'root', 'num': [123, 23]} 1630766832896 print(2,dict2,id(dict2))                #2 {'user': 'root', 'num': [123, 23]} 1630766832896 print(3,dict3,id(dict3))                #3 {'user': 'runoob', 'num': [123, 23]} 1630766833088 print(4,dict4,id(dict4))                #4 {'user': 'runoob', 'num': [123]} 1630767214080

 

Python集合(set)

1.什么是集合

  • python語言提供的內置資料結構
  • 與串列和字典一樣,都屬于可變序列
  • 集合是沒有value的字典
  • 集合型別與其他型別最大的區別在于,它不包含重復元素

 

 

 2.集合創建

#集合創建方式一:使用{}
set_1 = {"Python","Hello",90}
print(set_1)
set_2 = {1,1,2,3,4,4,"Python","Python"}    #集合中的元素不允許重復
print(set_2)
set_3 = {1,2.2,(1,2,3,4),"Python"}
print(set_3)
#set_4 = {1,2.2,[1,2,3,4]}    # 代碼報錯:集合中的元素不允許為 可變資料型別(可變序列)

#集合創建方式二:使用內置函式 set():將字符出、串列、元組、range()等物件轉化成集合
set_4 = set("python")
print(set_4)
set_5 = set([1,2,3,4,5])
print(set_5)
set_6 = set((1,2,"Hello"))
print(set_6)
set_7 = set(range(5))
print(set_7)
set_8 = set()          #創建空集合
print(set_8)
set_9 = {}
print(type(set_9))     # <class 'dict'> :所以創建空集合的時候,不能直接使用{}

 3.集合的判斷操作

  • in  或者  not  in :   判斷元素是否在集合中
set_1 = {10,20,30,40,50}
print(10 in set_1)          #True
print(100 in set_1)         #False
print(20 not in set_1)      #False
print(100 not in set_1)     #True

4.集合添加元素  add()方法    update()方法

set_1.add(x)方法:如果資料項x不在結合set_1中,將x添加到set_1中    (一次添加一個元素,元素不重復的前提下)

set_1.update(T)方法:合并結合T中的元素到當前集合set_1中,并自動去除重復元素  (至少添加一個元素,元素不重復的前提下)

#集合添加元素
set_1 = {1,2.2,"Python"}
set_2 = {(1,2,True,"Hello"),2.2,"Python","China"}
set_1.add((1,2,True,"Hello"))
print(set_1)
set_1.update(set_2)
print(set_1)
set_1.update([10,20,30])   #可以添加集合中的元素
print(set_1)
set_1.update((40,50,60))   #可以添加元組中過的元素
print(set_1)
#運行結果
{1, 2.2, (1, 2, True, 'Hello'), 'Python'}
{1, 2.2, 'China', (1, 2, True, 'Hello'), 'Python'}
{1, 2.2, 'China', 10, (1, 2, True, 'Hello'), 20, 'Python', 30}
{1, 2.2, 'China', 40, 10, (1, 2, True, 'Hello'), 50, 20, 'Python', 60, 30}

5.集合洗掉元素  remove()方法  discard()方法  pop()方法   clear()方法

S.remove(x)方法:如果x在集合S中,移除該元素;如果x不存在則拋出例外

S.discard(x)方法:如果x在集合S中,移除該元素;如果x不存在不會報錯

set_1 = {1,(1,2,True,"Hello"),2.2,"Python"}
set_1.remove(1)
print(set_1)
# set_1.remove(1)   #集合中無元素1,執行此代碼會拋出例外
set_1.discard(2.2)
print(set_1)
set_1.discard(2.2)  #集合中無元素2.2,不過執行此代碼不會拋出例外
print(set_1)
#運行結果
{(1, 2, True, 'Hello'), 2.2, 'Python'}
{(1, 2, True, 'Hello'), 'Python'}
{(1, 2, True, 'Hello'), 'Python'}

S.pop()方法:隨機洗掉并回傳集合中過的一個元素,如果集合為空則拋出例外

S.clear()方法:清空集合

set_1 = {1,(1,2,True,"Hello"),2.2,"Python"}
print(set_1.pop())
print(set_1)
set_1.clear()
print(set_1)
#set_1.pop() #集合為空,執行此行代碼,會拋出例外
#運行結果
1
{2.2, 'Python', (1, 2, True, 'Hello')}
set()

6.集合間的關系

  • 兩個集合是否相等  ==  、  !=   、  is   、not  is
set_1 = {10,20,30,40}
set_2 = {40,30,10,20}
print(set_1 == set_2)   #True    比較集合的值是否相等
print(set_1 is set_2)   #False   比較集合的參考地址是否相等
  • 一個集合是否是另一個集合的子集
    • 可以呼叫方法 issubset() 判斷
    • B是A的子集
A = {1,2,3,4,5,6}
B = {1,2,3,4}
print(B.issubset(A))     #True  B是A的子集
  • 一個集合是否是另一個集合的超集
    • 可以呼叫方法 issuperset()  判斷
    • A是B的子集
A = {1,2,3,4,5,6}
B = {1,2,3,4}
print(A.issuperset(B))   #True  A是B的超集
  • 兩個集合是否沒有交集  
    • 可以呼叫方法 isdisjoint() 判斷  
A = {1,2,3,4,5,6}
B = {1,2,3,4}
print(A.isdisjoint(B))   #False  判斷A和B是否沒有交集
B = {7,8,9,10}
print(A.isdisjoint(B))   #True  判斷A和B是否沒有交集

7.集合的資料關系

pass

 

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/320866.html

標籤:其他

上一篇:面試官:Java從編譯到執行,發生了什么?

下一篇:Spring Boot + GraphQL 才是 API 的未來!

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【C++】Microsoft C++、C 和匯編程式檔案

    ......

    uj5u.com 2020-09-10 00:57:23 more
  • 例外宣告

    相比于斷言適用于排除邏輯上不可能存在的狀態,例外通常是用于邏輯上可能發生的錯誤。 例外宣告 Item 1:當函式不可能拋出例外或不能接受拋出例外時,使用noexcept 理由 如果不打算拋出例外的話,程式就會認為無法處理這種錯誤,并且應當盡早終止,如此可以有效地阻止例外的傳播與擴散。 示例 //不可 ......

    uj5u.com 2020-09-10 00:57:27 more
  • Codeforces 1400E Clear the Multiset(貪心 + 分治)

    鏈接:https://codeforces.com/problemset/problem/1400/E 來源:Codeforces 思路:給你一個陣列,現在你可以進行兩種操作,操作1:將一段沒有 0 的區間進行減一的操作,操作2:將 i 位置上的元素歸零。最終問:將這個陣列的全部元素歸零后操作的最少 ......

    uj5u.com 2020-09-10 00:57:30 more
  • UVA11610 【Reverse Prime】

    本人看到此題沒有翻譯,就附帶了一個自己的翻譯版本 思考 這一題,它的第一個要求是找出所有 $7$ 位反向質數及其質因數的個數。 我們應該需要質數篩篩選1~$10^{7}$的所有數,這里就不慢慢介紹了。但是,重讀題,我們突然發現反向質數都是 $7$ 位,而將它反過來后的數字卻是 $6$ 位數,這就說明 ......

    uj5u.com 2020-09-10 00:57:36 more
  • 統計區間素數數量

    1 #pragma GCC optimize(2) 2 #include <bits/stdc++.h> 3 using namespace std; 4 bool isprime[1000000010]; 5 vector<int> prime; 6 inline int getlist(int ......

    uj5u.com 2020-09-10 00:57:47 more
  • C/C++編程筆記:C++中的 const 變數詳解,教你正確認識const用法

    1、C中的const 1、區域const變數存放在堆疊區中,會分配記憶體(也就是說可以通過地址間接修改變數的值)。測驗代碼如下: 運行結果: 2、全域const變數存放在只讀資料段(不能通過地址修改,會發生寫入錯誤), 默認為外部聯編,可以給其他源檔案使用(需要用extern關鍵字修飾) 運行結果: ......

    uj5u.com 2020-09-10 00:58:04 more
  • 【C++犯錯記錄】VS2019 MFC添加資源不懂如何修改資源宏ID

    1. 首先在資源視圖中,添加資源 2. 點擊新添加的資源,復制自動生成的ID 3. 在解決方案資源管理器中找到Resource.h檔案,編輯,使用整個專案搜索和替換的方式快速替換 宏宣告 4. Ctrl+Shift+F 全域搜索,點擊查找全部,然后逐個替換 5. 為什么使用搜索替換而不使用屬性視窗直 ......

    uj5u.com 2020-09-10 00:59:11 more
  • 【C++犯錯記錄】VS2019 MFC不懂的批量添加資源

    1. 打開資源頭檔案Resource.h,在其中預先定義好宏 ID(不清楚其實ID值應該設定多少,可以先新建一個相同的資源項,再在這個資源的ID值的基礎上遞增即可) 2. 在資源視圖中選中專案資源,按F7編輯資源檔案,按 ID 型別 相對路徑的形式添加 資源。(別忘了先把檔案拷貝到專案中的res檔案 ......

    uj5u.com 2020-09-10 01:00:19 more
  • C/C++編程筆記:關于C++的參考型別,專供新手入門使用

    今天要講的是C++中我最喜歡的一個用法——參考,也叫別名。 參考就是給一個變數名取一個變數名,方便我們間接地使用這個變數。我們可以給一個變數創建N個參考,這N + 1個變數共享了同一塊記憶體區域。(參考型別的變數會占用記憶體空間,占用的記憶體空間的大小和指標型別的大小是相同的。雖然參考是一個物件的別名,但 ......

    uj5u.com 2020-09-10 01:00:22 more
  • 【C/C++編程筆記】從頭開始學習C ++:初學者完整指南

    眾所周知,C ++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。 C ++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由 ......

    uj5u.com 2020-09-10 01:00:41 more
最新发布
  • Rust中的智能指標:Box<T> Rc<T> Arc<T> Cell<T> RefCell<T> Weak

    Rust中的智能指標是什么 智能指標(smart pointers)是一類資料結構,是擁有資料所有權和額外功能的指標。是指標的進一步發展 指標(pointer)是一個包含記憶體地址的變數的通用概念。這個地址參考,或 ” 指向”(points at)一些其 他資料 。參考以 & 符號為標志并借用了他們所 ......

    uj5u.com 2023-04-20 07:24:10 more
  • Java的值傳遞和參考傳遞

    值傳遞不會改變本身,參考傳遞(如果傳遞的值需要實體化到堆里)如果發生修改了會改變本身。 1.基本資料型別都是值傳遞 package com.example.basic; public class Test { public static void main(String[] args) { int ......

    uj5u.com 2023-04-20 07:24:04 more
  • [2]SpinalHDL教程——Scala簡單入門

    第一個 Scala 程式 shell里面輸入 $ scala scala> 1 + 1 res0: Int = 2 scala> println("Hello World!") Hello World! 檔案形式 object HelloWorld { /* 這是我的第一個 Scala 程式 * 以 ......

    uj5u.com 2023-04-20 07:23:58 more
  • 理解函式指標和回呼函式

    理解 函式指標 指向函式的指標。比如: 理解函式指標的偽代碼 void (*p)(int type, char *data); // 定義一個函式指標p void func(int type, char *data); // 宣告一個函式func p = func; // 將指標p指向函式func ......

    uj5u.com 2023-04-20 07:23:52 more
  • Django筆記二十五之資料庫函式之日期函式

    本文首發于公眾號:Hunter后端 原文鏈接:Django筆記二十五之資料庫函式之日期函式 日期函式主要介紹兩個大類,Extract() 和 Trunc() Extract() 函式作用是提取日期,比如我們可以提取一個日期欄位的年份,月份,日等資料 Trunc() 的作用則是截取,比如 2022-0 ......

    uj5u.com 2023-04-20 07:23:45 more
  • 一天吃透JVM面試八股文

    什么是JVM? JVM,全稱Java Virtual Machine(Java虛擬機),是通過在實際的計算機上仿真模擬各種計算機功能來實作的。由一套位元組碼指令集、一組暫存器、一個堆疊、一個垃圾回收堆和一個存盤方法域等組成。JVM屏蔽了與作業系統平臺相關的資訊,使得Java程式只需要生成在Java虛擬機 ......

    uj5u.com 2023-04-20 07:23:31 more
  • 使用Java接入小程式訂閱訊息!

    更新完微信服務號的模板訊息之后,我又趕緊把微信小程式的訂閱訊息給實作了!之前我一直以為微信小程式也是要企業才能申請,沒想到小程式個人就能申請。 訊息推送平臺🔥推送下發【郵件】【短信】【微信服務號】【微信小程式】【企業微信】【釘釘】等訊息型別。 https://gitee.com/zhongfuch ......

    uj5u.com 2023-04-20 07:22:59 more
  • java -- 緩沖流、轉換流、序列化流

    緩沖流 緩沖流, 也叫高效流, 按照資料型別分類: 位元組緩沖流:BufferedInputStream,BufferedOutputStream 字符緩沖流:BufferedReader,BufferedWriter 緩沖流的基本原理,是在創建流物件時,會創建一個內置的默認大小的緩沖區陣列,通過緩沖 ......

    uj5u.com 2023-04-20 07:22:49 more
  • Java-SpringBoot-Range請求頭設定實作視頻分段傳輸

    老實說,人太懶了,現在基本都不喜歡寫筆記了,但是網上有關Range請求頭的文章都太水了 下面是抄的一段StackOverflow的代碼...自己大修改過的,寫的注釋挺全的,應該直接看得懂,就不解釋了 寫的不好...只是希望能給視頻網站開發的新手一點點幫助吧. 業務場景:視頻分段傳輸、視頻多段傳輸(理 ......

    uj5u.com 2023-04-20 07:22:42 more
  • Windows 10開發教程_編程入門自學教程_菜鳥教程-免費教程分享

    教程簡介 Windows 10開發入門教程 - 從簡單的步驟了解Windows 10開發,從基本到高級概念,包括簡介,UWP,第一個應用程式,商店,XAML控制元件,資料系結,XAML性能,自適應設計,自適應UI,自適應代碼,檔案管理,SQLite資料庫,應用程式到應用程式通信,應用程式本地化,應用程式 ......

    uj5u.com 2023-04-20 07:22:35 more