將視圖轉為image_JavaScript二進制數組(2)TypedArray視圖

ArrayBuffer對象作為內存區域可以存放多種類型的數據。同一段內存,不同數據有不同的解讀方式,這種解讀方式稱為“視圖(view)”。ArrayBuffer有兩種類型的視圖,一種是類型化數組視圖(TypedArray),另一種是數據視圖(DataView)。類型化數組視圖的數組成員都是同一個數據類型,后者的數組成員可以是不同的數據類型。

TypedArray視圖一共有9種類型,每一種視圖都是一個構造函數。

e7f8fd04ad19893a19210a1f9e94d106.png

這些視圖實現了數組接口,均有length屬性,都可以使用方括號運算符來獲取單個元素,所有數組方法都可以在其上面使用。普通數組和TypedArray數組的差異主要在以下方面:

1、TypedArray數組的所有成員都是同一種類型。

2、TypedArray數組的成員是連續的,不會有空位,不存在稀疏數組的情況。

3、TypedArray數組成員的默認值是0。

TypedArray數組只是一個視圖,本身不存儲數據,它的數據都存儲在底層的ArrayBuffer對象中,要獲取底層對象必須使用buffer屬性。

TypedArray構造函數

TypedArray有四種形式的構造函數,分別是:

1、TypedArray(buffer, byteOffset, length)

參數buffer代表了視圖底層的ArrayBuffer對象,byteOffset表示視圖開始的字節序號,默認從0開始,length代表視圖包含的數據個數,默認直到本段內存區域結束。

其中,byteOffset必須是與所要建立的數據類型的字節長度的整數倍,否則會出錯。

var buffer = new ArrayBuffer(32);
var i16 = new Uint16Array(buffer, 1); // RangeError, Uint16的每個數據的長度為2個字節,故byteOffset必須是

2、TypedArray(length)

視圖可以不通過ArrayBuffer對象,直接指定長度,分配相應的內存。構造函數的參數代表要分配的成員個數。

var i16 = new Int16Array(3); // 分配了3*2=6個字節的內存
i16.buffer.byteLength;       // 6

3、TypedArray(typedArray)

可以通過一個TypedArray實例來構建另一個TypedArray實例,兩個實例的類型可以不一樣,此時新實例只是復制了源實例的值,底層的內存是不一樣的。

var source = new Uint16Array(16);
var target = new Int16Array(source);

4、TypedArray(arrayLikeObject)

可以通過一個類數組對象來創建TypedArray實例,數組對象的每一個值就是新實例數組的每一項對應的值。

var a = new Uint32Array([1,2,3,4]);
a[2]; // 3

TypedArray的屬性

1、TypedArray有一個name屬性,是用于描述類型數組的字符串值。九個類型數組的name屬性分別是:

Int8Array.name;         // "Int8Array"
Uint8Array.name;        // "Uint8Array"
Uint8ClampedArray.name; // "Uint8ClampedArray"
Int16Array.name;        // "Int16Array"
Uint16Array.name;       // "Uint16Array"
Int32Array.name;        // "Int32Array"
Uint32Array.name;       // "Uint32Array"
Float32Array.name;      // "Float32Array"
Float64Array.name;      // "Float64Array"

2、BYTES_PER_ELEMENT屬性表示這種數據類型的每個元素所占用的字節數。

Int8Array.BYTES_PER_ELEMENT;         // 1
Uint8Array.BYTES_PER_ELEMENT;        // 1
Uint8ClampedArray.BYTES_PER_ELEMENT; // 1
Int16Array.BYTES_PER_ELEMENT;        // 2
Uint16Array.BYTES_PER_ELEMENT;       // 2
Int32Array.BYTES_PER_ELEMENT;        // 4
Uint32Array.BYTES_PER_ELEMENT;       // 4
Float32Array.BYTES_PER_ELEMENT;      // 4
Float64Array.BYTES_PER_ELEMENT;      // 8

3、TypedArray實例的buffer屬性返回整段內存區域對于的ArrayBuffer對象。該屬性為只讀屬性。

var ab = new ArrayBuffer(32);
var ui16 = new Uint16Array(ab);
ui16.buffer === ab; // true
Object.getOwnPropertyDescriptor(Uint16Array.prototype.__proto__, 'buffer');
// {get: ?, set: undefined, enumerable: false, configurable: true}

4、TypedArray實例的byteLength屬性返回TypedArray數組占據的內存長度,單位為字節。

var ab = new ArrayBuffer(32);
var ui16 = new Uint16Array(ab, 2);
ui16.byteLength; // 30

5、TypedArray實例的byteOffset屬性表示TypedArray數組從底層ArrayBuffer對象的哪個字節開始。

var ab = new ArrayBuffer(32);
var ui16 = new Uint16Array(ab, 2);
ui16.byteOffset; // 2

6、TypedArray實例的length屬性表示實例有多少個成員。

var ab = new ArrayBuffer(32);
var ui16 = new Uint16Array(ab, 2);
ui16.length; // 15

TypedArray構造函數的靜態方法

TypedArray數組的所有構造函數上都有一個靜態方法of,用于將參數轉為一個TypedArray實例。

Float32Array.of(12.213, -8, 83.1); // [12.213, -8, 83.1]
// 也可以用下面的方法新建同樣的數組
var a = new Float32Array([12.213, -8, 83.1]);
var b = new Float32Array(3);
b[0] = 12.213;
b[1] = -8;
b[2] = 83.1

TypedArray數組的另一個靜態方法from()接受一個可遍歷的數據結構(比如數組)作為參數,返回一個基于此結構的TypedArray實例。同時還可以接受第二個函數參數,在新建實例時,對每一個元素向映射到函數中,將函數的結果作為新實例的值。

Uint16Array.from([1,2,3]); // [1,2,3]
Uint16Array.from([1,2,3], value => value * 2); // [2,4,6]

TypedArray原型對象上的方法

由于TypedArray實現了數組接口,故可以在TypedArray上使用數組的方法來進行操作。

Object.getOwnPropertyNames(Uint16Array.prototype.__proto__);
/* [
"constructor", 
"buffer", 
"byteLength", 
"byteOffset", 
"length", 
"entries", 
"keys", 
"values", 
"copyWithin", 
"subarray", 
"set", 
"every", 
"fill", 
"filter",
"find", 
"findIndex", 
"includes", 
"indexOf", 
"join", 
"lastIndexOf", 
"forEach", 
"map", 
"reduce", 
"reduceRight", 
"reverse", 
"slice", "some", 
"sort", 
"toLocaleString", 
"toString"] */

1、TypedArray.prototype.copyWithin(target, start[, end = this.length])

從原數組的start位置開始復制數據到end(不含),填充到target及以后的位置上,并返回修改后的數組。

var array = new Int16Array(10);
array.set([1,2,3]);
array; // [1, 2, 3, 0, 0, 0, 0, 0, 0, 0]
array.copyWithin(3, 0, 3); 
array; // [1, 2, 3, 1, 2, 3, 0, 0, 0, 0]

2、TypedArray.prototype.entries()

返回TypedArray的鍵值對遍歷器

var array = new Int16Array(3);
array.set([1,2,3]);
var iter = array.entries();
for (let element of iter) {console.log(element);
}
/*
[0,1]
[1,2]
[2,3]
*/

3、TypedArray.prototype.every(callback[, thisArg])

對數組的每一個元素都指向一次函數操作,如果每個元素都能通過測試,則返回true,否則返回false。

var array = new Int16Array(3);
array.set([1,2,3]);
array.every(function (value) { return value % 2 == 1;  }); // false 2不是奇數

4、TypedArray.prototype.fill(value[, start = 0[, end = this.length]])

使用指定值填充TypedArray從start到end(不含)的全部元素。

new Uint8Array([1, 2, 3]).fill(4);         // Uint8Array [4, 4, 4]
new Uint8Array([1, 2, 3]).fill(4, 1);      // Uint8Array [1, 4, 4]
new Uint8Array([1, 2, 3]).fill(4, 1, 2);   // Uint8Array [1, 4, 3]
new Uint8Array([1, 2, 3]).fill(4, 1, 1);   // Uint8Array [1, 2, 3]
new Uint8Array([1, 2, 3]).fill(4, -3, -2); // Uint8Array [4, 2, 3]

5、TypedArray.prototype.filter(callback[, thisArg])

對每個數組元素進行測試,保留通過測試函數的值。

function isBigEnough(element, index, array) {return element >= 10;
}
new Uint8Array([12, 5, 8, 130, 44]).filter(isBigEnough); 
// Uint8Array [ 12, 130, 44 ]

6、TypedArray.prototype.find(callback[, thisArg])

返回第一個通過測試函數的值。如果沒有一個元素通過測試,則返回undefined。

function isPrime(element, index, array) {var start = 2;while (start <= Math.sqrt(element)) {if (element % start++ < 1) {return false;}}return element > 1;
}var uint8 = new Uint8Array([4, 5, 8, 12]);
console.log(uint8.find(isPrime)); // 5

7、TypedArray.prototype.findIndex(callback[, thisArg])

返回第一個通過測試函數的值的下標。如果沒有一個元素通過測試,則返回undefined。

function isPrime(element, index, array) {var start = 2;while (start <= Math.sqrt(element)) {if (element % start++ < 1) {return false;}}return element > 1;
}var uint16 = new Uint16Array([4, 5, 8, 12]);
console.log(uint16.findIndex(isPrime)); // 1

8、TypedArray.prototype.forEach(callback[, thisArg])

為每一個數組元素執行指定的函數。

function logArrayElements(element, index, array) {console.log('a[' + index + '] = ' + element);
}new Uint8Array([0, 1, 2, 3]).forEach(logArrayElements);
/*
a[0] = 0
a[1] = 1
a[2] = 2
a[3] = 3
*/

9、TypedArray.prototype.includes(searchElement[, fromIndex])

返回一個布爾值,表明數組中從下標fromIndex開始到結尾,是否包含了指定的搜索元素。

var uint8 = new Uint8Array([1,2,3]);
uint8.includes(2);     // true
uint8.includes(4);     // false
uint8.includes(3, 3);  // false// NaN 的處理 (僅僅對 Float32 和 Float64 為 true)
new Uint8Array([NaN]).includes(NaN); // false, 因為 NaN 傳遞給構造器時轉換為 0
new Float32Array([NaN]).includes(NaN); // true;
new Float64Array([NaN]).includes(NaN); // true;

10、TypedArray.prototype.indexOf(searchElement[, fromIndex = 0])

在TypedArray中搜索元素,返回第一次出現的位置下標,如果找不到對應的元素,則返回-1。

let uint8 = new Uint8Array([2, 5, 9]);
uint8.indexOf(2);     // 0
uint8.indexOf(7);     // -1
uint8.indexOf(9, 2);  // 2
uint8.indexOf(2, -1); // -1
uint8.indexOf(2, -3); // 0

11、TypedArray.prototype.join([separator = ','])

將數值各個元素轉為字符串,再使用separator將其各個字符串連接后返回。

var array = new Int16Array([1,2,3,4]);
var str = array.join('-');
str; // "1-2-3-4"

12、TypedArray.prototype.keys()

返回一個數組下標的遍歷器。

var array = new Int16Array(3);
array.set([1,2,3]);
var iter = array.keys();
for (let index of iter) {console.log(index);
}
/*
0
1
2
*/

13、TypedArray.prototype.lastIndexOf(searchElement[, fromIndex = typedarray.length])

在TypedArray中搜索元素,返回最后一次出現的位置下標,如果找不到對應的元素,則返回-1。

const uint8 = new Uint8Array([2, 5, 9, 4, 5, 3]);
uint8.lastIndexOf(5); // 4

14、TypedArray.prototype.map(callback[, thisArg])

map方法對類型化數組中的元素調用提供的 callback函數,按照順序,并且會從結果構造新的類型化數組。

const uint8 = new Uint8Array([2, 5, 9, 4, 5, 3]);
const new_ui8 = uint8.map(function (value) {return value * 2;
});
new_ui8; // [4,10,18,8,10,6]

15、TypedArray.prototype.reduce(callback[, initialValue])

reduce() 方法接受一個函數作為參數,這個函數作為一個累加器,從左到右遍歷整個類型數組,最后返回一個單一的值。

const uint8 = new Uint8Array([2, 5, 9, 4, 5, 3]);
uint8.reduce(function (a, b) {return a + b;
}, 0); // 28

16、TypedArray.prototype.reduceRight(callback[, initialValue])

reduceRight()在累加器和類型化數組的每個元素上(從右到左)調用函數,使其歸約為單一的值。

const uint8 = new Uint8Array([2, 5, 9, 4, 5, 3]);
uint8.reduceRight(function (a, b) {return a + b;
}); // 28

17、TypedArray.prototype.reverse()

原地逆序TypedArray數組。

const uint8 = new Uint8Array([2, 5, 9, 4, 5, 3]);
uint8.reverse(); // [3,5,4,9,5,2]

18、TypedArray.prototype.set(array [,offset])

set()方法用于從指定數組中讀取值,并將其存儲在類型化數組中。

var buffer = new ArrayBuffer(8);
var uint8 = new Uint8Array(buffer);
uint8.set([1,2,3], 3);
console.log(uint8); // Uint8Array [ 0, 0, 0, 1, 2, 3, 0, 0 ]

19、TypedArray.prototype.slice([begin[, end]])

返回一個指定位置的新的TypedArray實例。

const uint8 = new Uint8Array([2, 5, 9, 4, 5, 3]);
uint8.slice(2,5); // [9,4,5]

20、TypedArray.prototype.some(callback[, thisArg])

提供一個測試函數,當TypedArray中的某一個元素通過測試函數,則返回true。

const uint8 = new Uint8Array([2, 5, 9, 4, 5, 3]);
uint8.some(function (value) { return value > 5; }); // true

21、TypedArray.prototype.sort([compareFunction])

sort()方法原地排序類型化數組的元素,并且返回類型化數組。這個方法的算法和Array.prototype.sort()相同。

var numbers = new Uint8Array([40, 1, 5, 200]);
numbers.sort();
// Uint8Array [ 1, 5, 40, 200 ] 
// 在這里,按數值排序數值時, 
// 不需要比較函數。

22、TypedArray.prototype.subarray([begin [,end]])

對TypedArray數組的一部分再建立一個新的視圖。第一個參數是起始的成員序號,第二個參數是結束的成員序號(不含該成員)如果省略則包含剩余的全部成員。新視圖和源視圖底層的ArrayBuffer是共用的。

const uint8 = new Uint8Array([2, 5, 9, 4, 5, 3]);
const new_uint8 = uint8.subarray(2, 5); // [9,4,5]
new_uint8[1] = 10;
new_uint8; // [9,10,5]
uint8; // [2,5,9,10,5,3]

23、TypedArray.prototype.toLocaleString()

toLocaleString()方法返回一個字符串,表明該類型化數組的元素。這些元素被轉化為字符串并由一個區域設置指定的分隔符(例如逗號 “,”)分隔。這個方法與Array.prototype.toLocaleString()擁有相同的算法。同時,由于類型化數組的元素都是數,將每個元素轉化為字符串的算法與Number.prototype.toLocaleString()是相同的。

var uint = new Uint32Array([2000, 500, 8123, 12, 4212]);
uint.toLocaleString('ja-JP', { style: 'currency', currency: 'JPY' });
// "¥2,000,¥500,¥8,123,¥12,¥4,212"

24、TypedArray.prototype.toString()

TypedArray 對象重寫了Object的 toString方法。對 TypedArray 對象來說,toString 方法聯結了數組,并返回一個字符串,它包含由逗號分隔的數組元素。

var numbers = new Uint8Array([2, 5, 8, 1, 4])
numbers.toString(); // "2,5,8,1,4"

25、TypedArray.prototype.values()

返回TypedArray的鍵值遍歷器。

const uint8 = new Uint8Array([2, 5, 9, 4, 5, 3]);
var iter = uint8.values();
for (let ele of iter) {console.log(ele);
}
/*
2
5
9
4
5
3
*/

26、TypedArray.prototype[@@iterator]()

返回TypedArray鍵值對的遍歷器,效果和values()方法一樣。

const uint8 = new Uint8Array([2, 5, 9, 4, 5, 3]);
var iter = uint8[Symbol.iterator]();
for (let ele of iter) {console.log(ele);
}
/*
2
5
9
4
5
3
*/

TypedArray的字節序

字節序是指數值在內存中的表示方式。

var buffer = new ArrayBuffer(16);
var int32View = new Int32Array(buffer);
for (let i = 0; i < int32View.length; i++) {int32View[i] = i * 2;
}
int32View; // [0,2,4,6]

上述代碼新建了一個16字節的內存區域,并在其上建了一個32位(4字節)的視圖,該視圖有4個元素,對元素分別賦值為0,2,4,6。如果對該內存區域上新建一個16位(2字節)的視圖,我們可以看出數據的存儲方式。

var int16View = new Int16Array(buffer);
for (let value of int16View) {console.log(value);
}
/*
0
0
2
0
4
0
6
0
*/

用圖來說明如下:

d69d883a4f058879f4a8d1fb3bed2bea.png

由于x86體系的計算機都采用小端字節序,相對重要的字節排在后面的內存地址,相對不重要的字節排在前面的內存地址。

比如,一個占據4字節的十六進制數0x12345678,決定其大小的最重要的字節是“12”,最不重要的是“78”,故在內存中,存儲順序是“78563412”。TypedArray數組內部也采用的是本機操作系統設定的字節序讀寫數據。

TypedArray對溢出的處理

不同的視圖類型所能容納的數值范圍是確定的,超出這個范圍就會出現溢出。

TypedArray數組對于溢出采用的處理方法是求余值。正向溢出的含義是指輸入值大于可容納的當前數據類型的最大值,最后得到的值等于當前數據類型的最小值加上余值,再減去1。負向溢出等于當前數據類型的最大值減去余值,再加上1。

// 無符號單字節整型可容納的最大數值是255,最小數值是0
var uint8 = new Uint8Array(1);
uint8[0] = 256; // 正向溢出,超出最大值范圍,余值是1
uint8[0]; // 0 最小值+余值-1=0uint8[0] = -12; // 負向溢出,超出最小值范圍,余值是12
uint8[0]; // 最大值-余值+1=255-12+1=244

UInt8ClampedArray視圖的溢出與其他8種類型的規則有所不同。負向溢出的值都是0,正向溢出的值都是255。

var a = new Uint8ClampedArray(1);
a[0] = 2112;
a[0]; // 255
a[0] = -123
a[0]; // 0

利用TypedArray構建復合視圖

由于視圖的構造函數可以指定起始位置和長度,所以在同一段內存中可以依次存放不同類型的數據,這就叫復合視圖。

var ab = new ArrayBuffer(24);
var idView = new Uint32Array(buffer, 0, 1);
var userNameView = new Uint8Array(buffer, 4, 16);
var amountView = new Float32Array(buffer, 20, 1);

上面的代碼將一個24字節的內存分成3個部分:

字節0到字節3,1個32位無符號整數,用于存放ID。

字節4到字節19存放16個8位無符號整數。

剩下4個字節存放1個32位浮點數。

這樣數據接口用C語言描述如下:

struct User {unsigned int id;char[16] username;float amount;
};

同系列文章:

《JavaScript二進制數組(1)ArrayBuffer》

《JavaScript二進制數組(2)TypedArray視圖》

《JavaScript二進制數組(3)DataView視圖》

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/529255.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/529255.shtml
英文地址,請注明出處:http://en.pswp.cn/news/529255.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

八大基本數據類型、數組和包裝類默認值

八大基本數據類型、數組和包裝類默認值 1.八大基本數據類型 Java八種基本數據類型總結序號數據類型大小/字節封裝類默認值可表示數據范圍1byte1Byte0-128~1272short2Short0-32768~327673int4Integer0-2147483648~21474836474long8Long0-9223372036854775808~9223372036854775…

解決IDEA中maven工程的jsp、jstl依賴導入了 ,但是 jsp頁面的uri卻不提示(手動輸上也報紅)

解決IDEA中maven工程的jsp、jstl依賴導入了 &#xff0c;但是 jsp頁面的uri卻不提示&#xff08;手動輸上也報紅&#xff09; 出現原因&#xff1a;idea內有緩存 解決辦法&#xff1a;File --> Invalidate Caches / Restart… --> lnvalidate and Restart idea版本&#…

空格 過濾多個_CAD選擇過濾器的運算符如何使用?

選擇過濾器FILTER在CAD早期版本中是擴展工具的一個功能&#xff0c;到了高版本變成標配的功能&#xff0c;但在浩辰CAD的菜單或工具面板中我還找到選擇過濾器的命令。浩辰CAD面板、右鍵菜單和特性面板倒是都提供了快速選擇的功能&#xff0c;快速選擇功能應該是借鑒選擇過濾器開…

Java中各種常見的生命周期

Java中各種常見的生命周期 1.Spring bean的生命周期&#xff1f; ? 1、Spring 容器根據配置中的 bean 定義中實例化 bean。 ? 2、Spring 使用依賴注入填充所有屬性&#xff0c;如 bean 中所定義的配置。 ? 3、如果 bean 實現 BeanNameAware 接口&#xff0c;則工廠通過傳…

各層作用_終于弄明白了 Singleton,Transient,Scoped 的作用域是如何實現的

一&#xff1a;背景1. 講故事前幾天有位朋友讓我有時間分析一下 aspnetcore 中為什么向 ServiceCollection 中注入的 Class 可以做到 Singleton&#xff0c;Transient&#xff0c;Scoped&#xff0c;挺有意思&#xff0c;這篇就來聊一聊這一話題&#xff0c;自從 core 中有了 S…

權限管理系統_在Gitee狂攬11K Star!這個SpringCloud的權限管理系統你必須知道

SpringCloud 大家都很熟悉了&#xff0c;它作為一套完整的微服務解決方案&#xff0c;廣受 Java 開發者們的好評&#xff0c; 今天就為大家介紹一款 Gitee 上的王牌項目&#xff0c;基于 SpringCloud 的權限管理系統——Pig。項目名稱&#xff1a;Pig項目作者&#xff1a;pig4c…

導出排除的表_excel拆分實例:如何快速制作考勤統計分析表

編按&#xff1a;面對新的統計需求&#xff0c;很多人會一下變懵&#xff0c;不知如何辦。如果涉及的統計有一千多行數據&#xff0c;哭的心思都有了&#xff1a;什么時候才能下班喲&#xff01;今天老菜鳥通過考勤統計分析表實例分享自己面對新統計需求的解決方法&#xff1a;…

rds 如何學習數據庫_如何將本地數據庫遷移到云數據庫 RDS 上?

使用數據傳輸服務 ( DTS ) 將本地數據庫遷移到 阿里云的云數據庫 RDS &#xff0c;可以實現應用不停服務的情況下&#xff0c;平滑完成數據庫的遷移工作。接下來我們將學習下如何使用 DTS 將本地數據庫遷移到 RDS 上。背景DTS 支持 SQL Server 數據結構遷移和全量遷移。DTS 支持…

arm ida 偽代碼 安卓 符號表_IDA 制作 sig文件 gdb 導入符號表

背景最近比賽遇到了一個題目, 32位靜態鏈接去符號了. 所以用IDA分析的時候很多libc的庫函數都無法識別, 就需要在 IDA 中引入 sig 文件. 從而可以識別諸如 read, write, malloc, free 這些庫函數. 雖然網上已經有很多制作好的sig文件, 但是還是應該學會自己制作sig文件以備不時…

lua如何打印行號_LUA教程錯誤信息和回跟蹤(Tracebacks)-34

雖然你可以使用任何類型的值作為錯誤信息&#xff0c;通常情況下&#xff0c;我們使用字符串來描述遇到的錯誤。如果遇到內部錯誤(比如對一個非table的值使用索引下標訪問)Lua將自己產生錯誤信息&#xff0c;否則Lua使用傳遞給error函數的參數作為錯誤信息。不管在什么情況下&a…

python 套接字 struck_Python socket粘包問題(最終解決辦法)

套接字&#xff1a;就是將傳輸層以下的協議封裝成子接口對于應用程序來說只需調用套接字的接口&#xff0c;寫出的程序自然是遵循tcp或udp協議的實現第一個功能個&#xff1a;實現&#xff1a;通過客戶端向服務端發送命令&#xff0c;調取windows下面的cmd窗口&#xff0c;將服…

python的lib文件夾_python遍歷文件夾os.path與pathlib

首先我們來一個需求&#xff0c;這個函數接受文件夾的名稱作為輸入參數&#xff0c;返回該文件夾中文件的路徑&#xff0c;以及其包含文件夾中文件的路徑。def print_dir_contents(sPath):import osfor sChild in os.listdir(sPath):sChildPath os.path.join(sPath,sChild)if …

python 數據字典用法_python數據字典的操作

一、什么是字典&#xff1f;字典是Python語言中唯一的映射類型。映射類型對象里哈希值(鍵&#xff0c;key)和指向的對象(值&#xff0c;value)是一對多的的關系&#xff0c;通常被認為是可變的哈希表。字典對象是可變的&#xff0c;它是一個容器類型&#xff0c;能存儲任意個數…

雙系統安裝deepin20_win10deepin15.10雙系統安裝教程

第二步&#xff1a;下載深度啟動盤制作工具深度啟動盤制作工具地址第三步&#xff1a;制作U盤啟動盤打開第二部下載的啟動盤制作工具&#xff0c;并準備一個u盤插入待裝系統的電腦&#xff0c;選擇鏡像文件后&#xff0c;下一步選擇磁盤并勾選格式化磁盤&#xff0c;點下一步開…

ubuntu19 安裝git_在Ubuntu 18.04上安裝Git

步驟1.首先&#xff0c;通過運行以下命令確保您的系統和apt包列表完全更新&#xff1a;apt-get update -yapt-get upgrade -y第2步。在Ubuntu 18.04上安裝Git。現在讓我們安裝git&#xff1a;apt install git您可以使用以下命令來檢查已安裝的git版本&#xff1a;$ git --versi…

mysql更新多條數據6_mysql語句:批量更新多條記錄的不同值

mysql更新語句很簡單&#xff0c;更新一條數據的某個字段&#xff0c;一般這樣寫&#xff1a;如果更新同一字段為同一個值&#xff0c;mysql也很簡單&#xff0c;修改下where即可&#xff1a;這里注意 ‘other_values’ 是一個逗號(&#xff0c;)分隔的字符串&#xff0c;如&am…

php mysql query 行數_如何在PHP中獲取MYSQL數據庫返回的數據的行數?

展開全部1. mysql_num_rows 可得到e69da5e887aa3231313335323631343130323136353331333337383861查詢記錄數<?php $con mysql_connect("localhost", "hello", "321");if (!$con){die(Could not connect: . mysql_error());}$db_selected …

mysql數據庫開發環境_MacOS下搭載開發環境之數據庫篇(Mysql + Navicat)

一、安裝Mysql1、官網下載mysql的tar包(提示&#xff1a;建議vpn環境下載)2、解壓并安裝tar包# 移動解壓后的二進制包到安裝目錄sudo mv mysql-5.7.19-osx10.9-x86_64 /usr/local/mysql# 更改 mysql 安裝目錄所屬用戶與用戶組cd /usr/localsudo chown -R root:wheel mysql# 初始…

mysql alter 唯一鍵_MySQL列屬性 之 唯一鍵

MySQL列屬性 之 唯一鍵唯一鍵唯一鍵&#xff1a;每張表往往有多個字段需要具有唯一性&#xff0c;數據不能重復&#xff0c;但是在每張表中&#xff0c;只能有一個主鍵&#xff0c;因此 唯一鍵就是用來解決表中多個字段需要具有唯一性的問題。例如身份證號碼應該每一行的記錄不…

如何在mysql中添加復選框_如何使用輸入和復選框更新mysql

如果我理解正確,您需要這樣做:mysql_query("UPDATE mp3SETaktif 1,baslik " . mysql_escape_string($_POST[baslik]) ."WHERE id $zuha");mysql_query("update mp3 set aktif 1,baslik $_POST[baslik]where id $_POST[id]")現在唯一的區別…