Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
圖:
關鍵點:
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
.p1 {
/* 超出隱藏 */
overflow: hidden;
/* 設置文本不自動換行 (默認會自動換行)*/
white-space: nowrap;
/* 設置超出的部分如何顯示 */
text-overflow: ellipsis;
}
/*在WebKit瀏覽器或移動端*/
.p2 {
/* 超出隱藏 */
overflow: hidden;
display: -webkit-box;
-webkit-box-orient: vertical;
/* 設置行數(shù) */
-webkit-line-clamp: 2;
/* 設置超出的部分如何顯示 */
text-overflow: ellipsis;
}
/* 兼容性比較好的 */
.p3 {
position: relative;
line-height: 40px;
height: 120px;
overflow: hidden;
}
.p3::after {
content: '...';
position: absolute;
bottom: 0;
right: 0;
background: #fff;
}
高度=行高*行數(shù)
.p3 {
position: relative;
line-height: 40px;
/*??????????*????????????????3
height: 120px;
overflow: hidden;
}
.p3::after {
content: '...';
position: absolute;
bottom: 0;
right: 0;
background: #fff;
}
遇到這種問題,面試官的關注點更多是在于如何實現(xiàn)多行文本省略號處理,并且兼容性比較好。
位 A 同學發(fā)了我一張截圖,問為何結果中出現(xiàn)了負數(shù)?
問題截圖
看了圖,我第一感覺就是數(shù)據(jù)溢出了。數(shù)據(jù)超出能表示的最大值,就會出現(xiàn)奇奇怪怪的結果。
然后,他繼續(xù)發(fā)了張圖,內容是 print(100000*208378),就是直接打印上圖的 E[0]*G[0],結果是 20837800000,這是個正確的結果。
所以新的問題是:如果說上圖的數(shù)據(jù)溢出了,為何直接相乘的數(shù)卻沒有溢出?
由于我一直忽視數(shù)據(jù)的表示規(guī)則(整型的上限是多少?),而且對 Numpy 了解不多,還錯看了圖中結果,誤以為每一個數(shù)據(jù)都是錯誤的,所以就解答不出來。
最后,經過學習群里的一番討論,我才終于明白是怎么回事,所以本文把相關知識點做個梳理。
在正式開始之前,先總結一下上圖會引出的話題:
關于第一個問題,先看看 Python 2,它有兩種整數(shù):
當一個整數(shù)超出短整數(shù)范圍時,它會自動采用長整數(shù)表示。舉例,打印 2**100 ,結果會在末尾加字母 L 表示它是長整數(shù)。
但是到了 Python 3,情況就不同了:它僅有一種內置的整數(shù),表示為 int,形式上是 Python 2 的短整數(shù),但實際上它能表示的范圍無限,行為上更像是長整數(shù)。無論多大的數(shù),結尾都不需要字母 L 來作區(qū)分。
也就是說,Python 3 整合了兩種整數(shù)表示法,用戶不再需要自行區(qū)分,全交給底層按需處理。
理論上,Python 3 中的整數(shù)沒有上限(只要不超出內存空間)。這就解釋了前文中直接打印兩數(shù)相乘,為什么結果會正確了。
PEP-237(Unifying Long Integers and Integers)中對這個轉變作了說明。它解釋這樣做的 目的:
這會給新的 Python 程序員(無論他們是否是編程新手)減少一項上手前要學的功課。
Python 在語言運用層屏蔽了很多瑣碎的活,比如內存分配,所以,我們在使用字符串、列表或字典等對象時,根本不用操心。整數(shù)類型的轉變,也是出于這樣的便利目的。(壞處是犧牲了一些效率,在此就不談了)
回到前面的第二個話題:Numpy 中整數(shù)的上限是多少?
由于它是 C 語言實現(xiàn),在整數(shù)表示上,用的是 C 語言的規(guī)則,也就是會區(qū)分整數(shù)和長整數(shù)。
有一種方式可查看:
import numpy as np a=np.arange(2) type(a[0]) # 結果:numpy.int32
也就是說它默認的整數(shù) int 是 32 位,表示范圍在 -2147483648 ~ 2147483647。
對照前文的截圖,里面只有兩組數(shù)字相乘時沒有溢出:100007*4549、100012*13264,其它數(shù)據(jù)組都溢出了,所以出現(xiàn)奇怪的負數(shù)結果。
Numpy 支持的數(shù)據(jù)類型要比 Python 的多,相互間的區(qū)分界限很多樣:
numpy的數(shù)據(jù)類型
截圖來源:https://www.runoob.com/numpy/numpy-dtype.html
要解決整數(shù)溢出問題,可以通過指定 dtype 的方式:
import numpy as np q=[100000] w=[500000] # 一個溢出的例子: a=np.array(q) b=np.array(w) print(a*b) # 產生溢出,結果是個奇怪的數(shù)值 # 一個解決的例子: c=np.array(q, dtype='int64') d=np.array(w, dtype='int64') print(c*d) # 沒有溢出:[50000000000]
好了,前面提出的問題就回答完了。來作個結尾吧:
位 A 同學發(fā)了我一張截圖,問為何結果中出現(xiàn)了負數(shù)?
問題截圖
看了圖,我第一感覺就是數(shù)據(jù)溢出了。數(shù)據(jù)超出能表示的最大值,就會出現(xiàn)奇奇怪怪的結果。
然后,他繼續(xù)發(fā)了張圖,內容是 print(100000*208378),就是直接打印上圖的 E[0]*G[0],結果是 20837800000,這是個正確的結果。
所以新的問題是:如果說上圖的數(shù)據(jù)溢出了,為何直接相乘的數(shù)卻沒有溢出?
由于我一直忽視數(shù)據(jù)的表示規(guī)則(整型的上限是多少?),而且對 Numpy 了解不多,還錯看了圖中結果,誤以為每一個數(shù)據(jù)都是錯誤的,所以就解答不出來。
最后,經過學習群里的一番討論,我才終于明白是怎么回事,所以本文把相關知識點做個梳理。
在正式開始之前,先總結一下上圖會引出的話題:
關于第一個問題,先看看 Python 2,它有兩種整數(shù):
當一個整數(shù)超出短整數(shù)范圍時,它會自動采用長整數(shù)表示。舉例,打印 2**100 ,結果會在末尾加字母 L 表示它是長整數(shù)。
但是到了 Python 3,情況就不同了:它僅有一種內置的整數(shù),表示為 int,形式上是 Python 2 的短整數(shù),但實際上它能表示的范圍無限,行為上更像是長整數(shù)。無論多大的數(shù),結尾都不需要字母 L 來作區(qū)分。
也就是說,Python 3 整合了兩種整數(shù)表示法,用戶不再需要自行區(qū)分,全交給底層按需處理。
理論上,Python 3 中的整數(shù)沒有上限(只要不超出內存空間)。這就解釋了前文中直接打印兩數(shù)相乘,為什么結果會正確了。
PEP-237(Unifying Long Integers and Integers)中對這個轉變作了說明。它解釋這樣做的 目的:
這會給新的 Python 程序員(無論他們是否是編程新手)減少一項上手前要學的功課。
Python 在語言運用層屏蔽了很多瑣碎的活,比如內存分配,所以,我們在使用字符串、列表或字典等對象時,根本不用操心。整數(shù)類型的轉變,也是出于這樣的便利目的。(壞處是犧牲了一些效率,在此就不談了)
回到前面的第二個話題:Numpy 中整數(shù)的上限是多少?
由于它是 C 語言實現(xiàn),在整數(shù)表示上,用的是 C 語言的規(guī)則,也就是會區(qū)分整數(shù)和長整數(shù)。
有一種方式可查看:
import numpy as np a=np.arange(2) type(a[0]) # 結果:numpy.int32
也就是說它默認的整數(shù) int 是 32 位,表示范圍在 -2147483648 ~ 2147483647。
對照前文的截圖,里面只有兩組數(shù)字相乘時沒有溢出:100007*4549、100012*13264,其它數(shù)據(jù)組都溢出了,所以出現(xiàn)奇怪的負數(shù)結果。
Numpy 支持的數(shù)據(jù)類型要比 Python 的多,相互間的區(qū)分界限很多樣:
numpy的數(shù)據(jù)類型
截圖來源:https://www.runoob.com/numpy/numpy-dtype.html
要解決整數(shù)溢出問題,可以通過指定 dtype 的方式:
import numpy as np q=[100000] w=[500000] # 一個溢出的例子: a=np.array(q) b=np.array(w) print(a*b) # 產生溢出,結果是個奇怪的數(shù)值 # 一個解決的例子: c=np.array(q, dtype='int64') d=np.array(w, dtype='int64') print(c*d) # 沒有溢出:[50000000000]
好了,前面提出的問題就回答完了。來作個結尾吧:
*請認真填寫需求信息,我們會在24小時內與您取得聯(lián)系。