夢開始的地方

来源:http://www.cnblogs.com/yuhonglin/archive/2016/10/07/5918188.html
-Advertisement-
Play Games

Python 學習之路 目錄介紹 一、Python 介紹 python的創始人是吉多·範羅蘇姆.Python於1989年的聖誕節期間誕生. 二、Python 的主要應用領域 雲計算:OpenStack是python語言開發的 web開發:典型web框架有Django 科學運算\人工智慧:典型庫Num ...


Python 學習之路                                                                                                                                            

目錄介紹

  1. python 介紹
  2. python 應用領域
  3. python 優缺點
  4. python 解釋器
  5. python 發展史
  6. python 安裝
  7. python 程式編寫Hello word
  8. python 變數
  9. python 用戶輸入
  10. python 數據類型
  11. python 數據運算
  12. python 表達式(if..elif..else)
  13. python 表達式(while)
  14. python 表達式(for)

、Python 介紹                                        

  python的創始人是吉多·範羅蘇姆.Python於1989年的聖誕節期間誕生.

二、Python 的主要應用領域                                 

  • 雲計算:OpenStack是python語言開發的
  • web開發:典型web框架有Django
  • 科學運算\人工智慧:典型庫NumPy,SciPy,Matplotlib,Enthought Librarys,pandas
  • 系統運維:運維人員必備
  • 金融:
  • 圖形GUI:PyQT,WxPython,TkInter

2.1 python 是怎樣的一門語言:

   編程語言主要按以下幾個角度進行分類。編譯器和解釋器、靜態語言和動態語言、強類型語言和弱類型語言。以下進行解釋:

編譯器和解釋器的區別:

  編譯器:把源程式的每一條語句都編譯成機器語言,並保存成二進位文件,這樣運行時電腦可以直接以機器語言來運行此程式,速度很快; 

  解釋器:在執行程式時,才一條一條的解釋成機器語言給電腦來執行,所以運行速度是不如編譯後的程式運行的快的.這是因為電腦不能直接認識並執行我們寫的語句,它只能認識機器語言(是二進位的形式)

  編譯型:它和彙編語言是一樣的,也是有一個負責翻譯的程式來對我們的源代碼進行轉換,生成相對應的可執行代碼。這個過程說得專業一點,就稱為編 譯(Compile),而負責編譯的程式自然就稱為編譯器(Compiler)

  解釋型:一次把所有的代碼轉換成機器語言,然後寫成可執行文件。(假如你打算閱讀一本外文書,而你不知道這門外語,那麼你可以找一名翻譯,給他 足夠的時間讓他從頭到尾把整本書翻譯好,然後把書的母語版交給你閱讀;或者,你也立刻讓這名翻譯輔助你閱讀,讓他一句一句給你翻譯,如果你想往回看某個章節,他也得重新給你翻譯。)

靜態語言和動態語言的區別:

  靜態語言:動態類型語言是指在運行期間才去做數據類型檢查的語言,也就是說,在用動態類型的語言編程時,永遠也不用給任何變數指定數據類型,該 語言會在你第一次賦值給變數時,在內部將數據類型記錄下來。Python和Ruby就是一種典型的動態類型語言,其他的各種腳本語言如VBScript也多少屬於動態類型語言。

  動態語言:靜態類型語言與動態類型語言剛好相反,它的數據類型是在編譯其間檢查的,也就是說在寫程式時要聲明所有變數的數據類型,C/C++是靜態 類型語言的典型代表,其他的靜態類型語言還有C#、JAVA等。

  強類型語言:強制數據類型定義的語言。也就是說,一旦一個變數被指定了某個數據類型,如果不經過強制轉換,那麼它就永遠是這個數據類型了。如果 你定義了一個整型變數a,那麼程式根本不可能將a當作字元串類型處理。強類型定義語言是類型安全的語言

  弱類型語言:數據類型可以被忽略的語言。它與強類型定義語言相反, 一個變數可以賦不同數據類型的值

三、Python的優缺點                                      

優點:

  1. python程式簡單明瞭,易懂。如果深入下去,以後可以編寫很複雜的程式。
  2. 開發效率高。Python有非常強大的第三方庫,基本上你想通過電腦實現任何功能,Python官方庫里都有相應的模塊進行支持,直接下載調用後,在基礎庫的基礎上再進行開發,大大降低開發周期,避免重覆造輪子。
  3. 高級語言—用Python語言編寫程式的時候,你無需考慮諸如如何管理你的程式使用的記憶體一類的底層細節
  4. 可移植性—由於它的開源本質,Python已經被移植在許多平臺上(經過改動使它能夠工作在不同平臺上)。如果你小心地避免使用依賴於系統的特性,那麼你的所有Python程式無需修改就幾乎可以在市場上所有的系統平臺上運行。
  5. 可擴展性—如果你需要你的一段關鍵代碼運行得更快或者希望某些演算法不公開,你可以把你的部分程式用C或C++編寫,然後在你的Python程式中使用它們。
  6. 可嵌入性—你可以把Python嵌入你的C/C++程式,從而向你的程式用戶提供腳本功能。

缺點:

  1. 速度慢
  2. 代碼不能加密,因為PYTHON是解釋性語言,它的源碼都是以名文形式存放的,不過我不認為這算是一個缺點,如果你的項目要求源代碼必須是加密的,那你一開始就不應該用Python來去實現。
  3. 線程不能利用多CPU問題,這是Python被人詬病最多的一個缺點,GIL即全局解釋器鎖(Global Interpreter Lock),是電腦程式設計語言解釋器用於同步線程的工具,使得任何時刻僅有一個線程在執行,Python的線程是操作系統的原生線程.(該問題有折中解決辦法)

四、Python 解釋器                                       

  當我們編寫Python代碼時,我們得到的是一個包含Python代碼的以.py為擴展名的文本文件。要運行代碼,就需要Python解釋器去執行.py文件。由於整個Python語言從規範到解釋器都是開源的,所以理論上,只要水平夠高,任何人都可以編寫Python解釋器來執行Python代碼(當然難度很大)。事實上,確實存在多種Python解釋器。

CPython

  當我們從Python官方網站下載並安裝好Python 2.7後,我們就直接獲得了一個官方版本的解釋器:CPython。這個解釋器是用C語言開發的,所以叫CPython。在命令行下運行python就是啟動CPython解釋器。CPython是使用最廣的Python解釋器。教程的所有代碼也都在CPython下執行。

IPython

  IPython是基於CPython之上的一個互動式解釋器,也就是說,IPython只是在交互方式上有所增強,但是執行Python代碼的功能和CPython是完全一樣的。好比很多國產瀏覽器雖然外觀不同,但內核其實都是調用了IE。CPython用>>>作為提示符,而IPython用In [序號]:作為提示符。

 PyPy

   PyPy是另一個Python解釋器,它的目標是執行速度。PyPy採用JIT技術,對Python代碼進行動態編譯(註意不是解釋),所以可以顯著提高Python代碼的執行速度。絕大部分Python代碼都可以在PyPy下運行,但是PyPy和CPython有一些是不同的,這就導致相同的Python代碼在兩種解釋器下執行可能會有不同的結果。如果你的代碼要放到PyPy下執行,就需要瞭解PyPy和CPython的不同點

 Jython

  Jython是運行在Java平臺上的Python解釋器,可以直接把Python代碼編譯成Java位元組碼執行。

 IronPython

  IronPython和Jython類似,只不過IronPython是運行在微軟.Net平臺上的Python解釋器,可以直接把Python代碼編譯成.Net的位元組碼。

 小結:

  Python的解釋器很多,但使用最廣泛的還是CPython。如果要和Java或.Net平臺交互,最好的辦法不是用Jython或IronPython,而是通過網路調用來交互,確保各程式之間的獨立性。

五、Python 發展史                                       

  • 1989年,為了打發聖誕節假期,Guido開始寫Python語言的編譯器。Python這個名字,來自Guido所摯愛的電視劇Monty Python’s Flying Circus。他希望這個新的叫做Python的語言,能符合他的理想:創造一種C和shell之間,功能全面,易學易用,可拓展的語言。
  • 1991年,第一個Python編譯器誕生。它是用C語言實現的,並能夠調用C語言的庫文件。從一齣生,Python已經具有了:類,函數,異常處理,包含表和詞典在內的核心數據類型,以及模塊為基礎的拓展系統。
  • Granddaddy of Python web frameworks, Zope 1 was released in 1999
  • Python 1.0 - January 1994 增加了 lambdamapfilter and reduce.
  • Python 2.0 - October 16, 2000,加入了記憶體回收機制,構成了現在Python語言框架的基礎
  • Python 2.4 - November 30, 2004, 同年目前最流行的WEB框架Django 誕生
  • Python 2.5 - September 19, 2006
  • Python 2.6 - October 1, 2008
  • Python 2.7 - July 3, 2010
  • In November 2014, it was announced that Python 2.7 would be supported until 2020, and reaffirmed that there would be no 2.8 release as users were expected to move to Python 3.4+ as soon as possible
  • Python 3.0 - December 3, 2008
  • Python 3.1 - June 27, 2009
  • Python 3.2 - February 20, 2011
  • Python 3.3 - September 29, 2012
  • Python 3.4 - March 16, 2014
  • Python 3.5 - September 13, 2015

六、Python 安裝                                          

  windows 

1.下載安裝包        
    https://www.python.org/downloads  
    
2.安裝        
    預設安裝路徑:C:\python30  
   
3.配置環境變數        
    右擊我的電腦-->屬性-->高級系統設置-->環境變數-->在系統變數中找到Path,點擊編輯在最後加上;C:\python30(此處需要註意;號).然後保存即可

  Linux、Mac 

1.無需安裝,自帶python     

    ps:如果是python2.6 請升級到2.7

七、編寫程式Hello word                                   

  Linux

 

1 #/usr/bin/env python
2 
3 print "Hello world"
Python
1 #/bin/bash 
2 
3 echo "Hello world"
Shell
 1 public class A_test_python { 
 2  #程式入口
 3     public static void main (String[] args){
 4     
 5     #變數. JAVA中設置變數時需要說明變數類型,此處這是的字元變數
 6     String name = "Yhl";
 7     
 8     #列印出賦予變數得值是多少
 9     System.out.println(name);
10     }
11 }
JAVA

八、變數                                               

變數定義規則:

 

變數名只能是:字母、數字或下劃線的任意組合.變數名的第一個字元不能是數字

以下關鍵字不能聲明為變數名
and, as, assert, break, class, continue, def, del, elif, else, except, exec, finally, for, 
from, global, if, import, in, is, lambda, not, or, pass, print, raise, return, try, while, 
with, yield

 

註釋:

當行註視:# 被註釋內容

多行註釋:""" 被註釋內容 """ 或 '''被註釋內容'''
1 #_*_coding:utf-8_*_ 
2 #聲明變數 
3 name = "Honglin.yu" 
4 
5 #數據賦值給變數的值 
6 print(name)
Python
1 #/bin/bash
2 
3 #給變數name賦值
4 name="welcome to your beijing"
5 
6 #列印出變數name的值
7 echo $name
Shell
 1 public class A_3_1 {
 2 #程式入口
 3     public static void main (String[] args){
 4         
 5            #設置變數name.JAVA中在設置變數時需要說明變數類型(此處設置的是字元變數)
 6             String name = "Yhl";
 7     
 8             #列印出變數的值
 9             System.out.println("name");
10     }
11 }
JAVA

九、用戶輸入                                                

1 #用戶前臺輸入並賦值給變數name
2 name = input("What's your name?")
3 
4 #列印出前臺輸入的信息
5 print (" Welcome to " + name + " BJ ")
Python
 1 #/bin/bash
 2 
 3 #用戶前臺輸入
 4 read -p "what's  your  name" Uo
 5 
 6 #給變數name賦值
 7 name="welcome to beijing"
 8 
 9 #列印出前臺輸入的信息和變數的信息
10 echo $Uo$name
Shell
 1 #調用類方法Scanner
 2 import java.util.Scanner;
 3 
 4 #程式入口
 5 public class A_test_python{
 6           
 7     public static void main (String[] args){
 8                 #使用類方法
 9         Scanner in = new Scanner(System.in);
10         
11                 #給變數aa設置值
12                 String aa = "請輸入您的年齡:";
13         
14                 #列印出變數aa
15                 System.out.print(aa);
16 
17                 #提示前臺輸入
18         String name = in.next();
19 
20                 #列印出前臺輸入的信息
21         System.out.println("您的年齡是:"+name+"歲");
22     }
23 }
JAVA

十、數據類型                                            

 什麼是運算符?

 本章節主要說明Python的運算符。舉個簡單的例子 4 +5 = 9 。 例子中,4 和 5 被稱為操作數,"+" 稱為運算符。

 Python語言支持以下類型的運算符:

  • 算術元算符
  • 比較(關係)運算符
  • 賦值運算符
  • 邏輯運算符
  • 位運算符
  • 成員運算符
  • 身份運算符
  • 運算符優先順序

算術運算符 

運算符 描述 實例
+ 加 - 兩個對象相加 a + b 輸出結果 30
- 減 - 得到負數或是一個數減去另外一個數 a -  b 輸出結果 -10 
* 乘 - 兩個數相乘或是返回一個被重覆若幹次的字元串   a * b 輸出結果 200
/ 除 - a除以b a /  b 輸出結果 0.5
% 取模 - 返回除法的餘數 a /  b 輸出結果 10
** 冪 - 返回a的b次冪 a**b 輸出結果 100000000000000000000
// 取整除 - 返回商的整數部分 c // d 輸出結果 3    (c=10   d=3)

實例如下: 

a = 10
b = 20
touch = a + b
print("touch:",touch)
touch1 = a - b
print("touch1:",touch1)
touch2 = a * b
print("touch2:",touch2)
touch3 = a / b
print("touch3:",touch3)
touch4 = a // b
print("touch4:",touch4)
touch5 = a ** b
print("touch5:",touch5)
c = 10
d = 3
touch6 = c // d
print("touch6:",touch6)

比較運算符

假設設置變數a=10,變數b=20 

運算符 描述 實例
== 等於 - 比較對象是否相等             (a == b)  返回False
!= 不等於 -  比較兩個對象是否不相等 (a != b)  返回true
<> 不等於 -  比較兩個對象是否不相等 (a <> b)  返回true.這個運算符類似!=
> 大於 - 返回x是否大於y (a > b)  返回False
<

小於 - 返回x是否小於y.返回1表示真,返回0表示假.與特殊變數true

和False等價(註意大小寫)

(a < b)  返回true
>= 大於等於 - 返回x是否大於等於y (a >= b) 返回False
<= 小於等於 - 返回x是否小於等於y (a <= b)  返回true

賦值運算符

運算符 描述                         實例
= 簡單的賦值運算符 c = a +b 將a + b 的運算結果賦值為c
+= 加法賦值運算符 c += a 等效於 c = c + a
-= 減法賦值運算符 c -= a  等效於 c = c - a
*= 乘法賦值運算符 c *= a 等效於 c = c * a
/= 除法賦值運算符 c /= a  等效於 c = c / a
%= 取模賦值運算符 c %= a 等效於 c = c % a
**= 冪賦值運算符 c **= a 等效於 c = c ** a
//= 取整除賦值運算符 c //= a  等效於 c = c // a

實例如下: 

a = 10
b = 20
c = a + b
print("C的值等於:",c)
c += a
print("C的值等於:",c)
c -= a
print("C的值等於:",c)
c *= a
print("C的值等於:",c)
c /= a
print("C的值等於:",c)
c %= a
print("C的值等於:",c)
c **= a
print("C的值等於:",c)
c //= a
print("C的值等於:",c)

位運算符

假設設置變數a=60,變數b=13

運算符  描述 實例
&

按位與運算符:參與運算的兩個值,如果兩個相應位都為1,則該

位的結果為1,否則為0

(a & b)輸出結果12,二進位解釋:0000 1100
| 按位或運算符:只要對應的二個二進位有一個為1時,結果位是1 (a | b)輸出結果61,二進位解釋:0011 1101
^

按位異或運算符:當兩對應的二進位位取反,即把1變為0,把0變

為1

(a ^ b)輸出結果49,二進位解釋:0011 0001
~

按位取反運算符:對數據的每個二進位取反,即把1變為0,把0變

為1

(~a )輸出結果-61,二進位解釋:1100 0011.

在一個有符號二進位數的補碼形式

<<

左移動運算符:運算符的各二進位全部左移若幹位,由"<<"右邊

的數指定移動的位數,高位丟棄,低位補0

a << 2 輸出結果240,二進位解釋1111 0000
>>

右移動運算符:把">>"左邊的運算數各二進位全部右移若幹位

,">>"右邊的數指定移動的位數

a >> 2 輸出結果15,二進位解釋:0000 1111

邏輯運算符

假設設置變數a=10,變數b=20

運算符 邏輯表達式 描述 實例
and a and b 布爾"與" -如果a為False,a and b 返回False,否則它返回b的計算值 (a and b)返回20.
or a or b 布爾"或" -如果a是非0,它返回a的值,否則它返回b的計算值 (a and b)返回10.
not not a 布爾"非" -如果a為True,返回False.如果a為False,他返回True not(a and b)返回False.

成員運算符

除了以上的一些運算符之外,Python還支持成員運算符,測試實例中包含了一系列的成員,包括字元串,列表或元組。

運算符 描述 實例
in 如果在指定的序列中找到值返回True.則返回False a在b序列中.如果a在b序列中返回True
not in 如果在指定的序列中沒有找到值返回True.否則返回False a不在b序列中.如果a不在b序列中返回True

身份運算符

身份運算符用於比較兩個對象的存儲單元

運算符 描述 實例
is is是判斷兩個標識符是不是引用自一個對象 a is b.如果id(a)等於id(b).is返回結果1
is not is not是判斷兩個標識符是不是引用自不同對象 a is not b.如果id(a)不等於id(b).is not返回結果1

運算符優先順序

運算符 描述
** 指數(最高優先順序)
~ + - 按位翻轉.一元加號和減號(最後兩個的方法名+@和-@)
* / % // 乘 ,除 ,取模和取整數
+ - 加法和減法
>><< 右移,左移運算符
& 位"AND"
^| 位運算符
<= <> >= 比較運算符
<> == != 等於運算符
= %= /= //== -= += *= **= 賦值運算符
is is not 身份運算符
in not in 成員運算符
not or and 邏輯運算符

十一、表達式                                            

  11.1  表達式if...elif......else語句

  Python

#Python if......else  語句

#if...else語句
#前臺輸入.在寫if...else語句時需要註意符號(符號:  ==  " ").變數後必須加空格

a = input("age_a:")
b = input("age_b:")

if a == "10" and b == "20":
    print(a,b)
else:
    print("Gun.......")

 

#Python  if......elif......else

#猜年齡的游戲開始 #設置變數 user_age = 30 #用戶前臺輸入年齡.python中前臺輸入的信息後臺預設為str字元串類型 user_input = int(input("Please enter the age:")) #if條件判斷 if user_input == user_age: print("Ipuut Errors,Please enter age") elif user_input < user_age: print("Errors ,Please enter age.","正確的年齡是:",user_age) else: print("idiot")

  Shell

#if...else語句
#!/bin/bash #註意:Shell中變數後不能加空格.進行對比時前後必須有空格且需要寫在[]中.then結束語不能直接跟在[]後.需要換行寫.如下 a=10 b=20 if [ $a == $b ] then echo "This is a and b:"$a$b else echo "Gun...." echo "a and b:"$a$b fi

  11.2  表達式while語句

#python  while語句
#無條件迴圈 count = 0 while True: print("come bye come bye",count) count += 1 #while 嵌套if語句 count = 0 while True: print("come bye come bye",count) count += 1 if count == 10: print("滾犢子") break

  11.3  表達式for語句   

#python    for迴圈語句

#將0到9的值賦值給i並迴圈列印出來
for  i  in  range(10):

#前臺列印出來
    print("迴圈列印:",i)


#python  for語句嵌套if語句
#將0到4的的值賦給i
for  i  in  range(5):
#if語句進行條件判斷.當i大於3的時候並列印出來.
    if  i  >  3:

        print("Cycle:",i)

  


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在網路編程中,出於節約帶寬或者編碼的需要,通常需要以原生方式處理long和int,而不是轉換為string。 public class ByteOrderUtils { public static byte[] int2byte(int res) { byte[] targets = new byt ...
  • 什麼是Optional對象 Java 8中所謂的Optional對象,即一個容器對象,該對象可以包含一個null或非null值。如果該值不為null,則調用isPresent()方法將返回true,且調用get()方法會返回該值。 另外,該對象還有其它方法: 如可以使用orElse()方法給Opti ...
  • 裝飾器實際上就是函數,可以在裝飾器中置入通用功能的代碼來降低程式的複雜度。 功能: >引入日誌 >增加計時邏輯來檢測性能 >給函數加入事務的能力 例子1、簡單裝飾器 例子2、含返回值的裝飾器 例子3、複雜裝飾器 這裡是含參數的裝飾器,在裝飾器中調用before方法和after方法,完成對List方法 ...
  • RabbitMQ簡介 AMQP,即Advanced Message Queuing Protocol,高級消息隊列協議,是應用層協議的一個開放標準,為面向消息的中間件設計。消息中間件主要用於組件之間的解耦,消息的發送者無需知道消息使用者的存在,反之亦然。AMQP的主要特征是面向消息、隊列、路由(包括 ...
  • f you are not familiar with MySQL stored procedures or want to review it as a refresher, you can follow the MySQL stored procedures tutorial. We will ...
  • 為什麼要引入繼承?   還是做一個媒體庫,裡面可以放CD,可以放DVD。如果把CD和DVD做成兩個沒有聯繫的類的話,那麼在管理這個媒體庫的時候,要單獨做一個添加CD的函數,單獨做一個添加DVD的函數,如果還要往這個媒體庫里添加其他的媒體類,還要再創建另一個添加函數。我們說這樣的代碼不具備可擴展性。... ...
  • 收集整理一些常用的PHP類庫,資源以及技巧. 有中英兩種版本,以便在工作中迅速的查找所需。 ...
  • 在我前面的文章(http://www.cnblogs.com/homewch/p/5749850.html)中有提到R可以自定義啟動環境,需要修改R安裝文件中的ect文件夾下的配置文件Rprofile.site即可: Rprofile.site文件里,設置的內容包括預設編輯器,CRAN鏡像選取,自動 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...