1. 程式人生 > >有C/C++/Java基礎的,學習Python一篇文章就夠了

有C/C++/Java基礎的,學習Python一篇文章就夠了

我在學校裡學習的是C、C++、C#,實習的時候公司裡用的都是Java,於是又自學了java。用我領導的一句話說,“C++轉Java幾天時間就夠了”。最近在學習深度學習演算法和自然語言處理的時候,很多演算法都是用python寫的,於是又下定決定學習了python。用了一下午就基本學會了,以下是菜鳥教程的連結。

為什麼給兩套教程呢,有句話是這麼說的,“Java只有一種,而Python語言有兩種,2和3“。Python 3.0在設計的時候為了不帶入過多的累贅,和Python2在一些方面有一些不同,下面也會詳細說明。

有了C++/Java基礎的學習python還是很快的,我在看教程的時候很多東西都是跳過不看的,因為它和其他語言裡的都一樣。為了減少看那些冗餘內容的時間,特此整理一下python和C++/Java在編碼方面不一樣的地方,方便自學python的人更快的學習。

文末有python及其IDE資源哦。

一、 基礎語法

1、縮排

python與C++/Java最大的不同就是使用縮排來表示程式碼塊,而不使用大括號({})。Python中一個模組的界限,是由這行前面有多少空格決定的,而C和Java用的是大括號{}。比如以下程式:

if True:
    #可以在同一行中使用多條語句,語句之間使用分號(;)分割。
    print ("True");print ("True")
else:
    print ("False")

那如果這行程式碼比較長,一行放不下怎麼辦?我們可以使用反斜槓(\)來實現

total = item_one + \
        item_two + \
        item_three

python的空行沒有任何作用,加了也不會報錯,用適當的空行隔開模組可以讓你的程式碼層次更加清晰明瞭。

2、註釋

Python中單行註釋以 # 開頭,多行註釋使用三個單引號(”’)或三個雙引號(“”“)。例如:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 檔名:test.py

# 第一個註釋
print ("Hello, Python!")  # 第二個註釋
'''
這是多行註釋,使用單引號。
這是多行註釋,使用單引號。
'''
"""
這是多行註釋,使用雙引號。
這是多行註釋,使用雙引號。
"""

二、 資料型別

1、變數的宣告

在Python中定義變數的時候,不需要宣告其資料型別,但是必須賦值,在賦值的時候會給它分配相應的資料型別。例如:

 counter = 100 # 整型變數
 miles = 1000.0 # 浮點型變數
 name = "abcdefg" # 字串
 print (counter)
 print (miles)
 print (name)

在 Python 中,變數就是變數,它沒有型別,我們所說的”型別”是變數所指的記憶體中物件的型別,變數只是對它的引用,可以用del counter刪除。
這裡插一句,Python2和Python3的print有較大不同,而且print 預設輸出是換行的。

print counter #這是Python2
print (counter) #這是Python3
#如果要實現不換行:
print counter , #Python2:在變數末尾加上逗號
print (counter,end=" ")#Python3:在變數末尾加上 end=""

2、資料型別

Python3 中有六個標準的資料型別:Number(數字)String(字串)List(列表)Tuple(元組)Set(集合)Dictionary(字典)。
Python中沒有char,單字元也按字串處理。
Python2沒有Set(集合)。

(1)Number

int、float、bool、complex(複數)。
在Python 3裡,只有一種整數型別 int,表示為長整型,沒有 python2 中的 Long。
在 Python2 中是沒有布林型的,它用數字 0 表示 False,用 1 表示 True。到 Python3 中,把 True 和 False 定義成關鍵字了,但它們的值還是 1 和 0,可以和數字相加。

(2)String:

Python中的字串用單引號(‘)或雙引號(“)括起來,同時使用反斜槓(\)轉義特殊字元。
字串的擷取的語法格式如下:變數[頭下標,尾下標]
索引值以 0 為開始值,-1 為從末尾的開始位置。
加號 (+) 表示連線字串, 星號 (*) 表示複製當前字串,緊跟的數字為複製的次數。例項如下:

str = 'abcdef' 
print (str) # 輸出字串 
print (str[0:-1]) # 輸出第一個到倒數第二個的所有字元 
print (str[0]) # 輸出字串第一個字元 
print (str[2:5]) # 輸出從第三個開始到第五個的字元 
print (str[2:]) # 輸出從第三個開始的後的所有字元 
print (str * 2) # 輸出字串兩次 
print (str + "ghi") # 連線字串

執行以上程式會輸出如下結果:

abcdef
abcde
a
cde
cdef
abcdefabcdef
abcdefghi

(3)List(列表)

列表是Python 中使用最頻繁的資料型別,和Java中的List比較像。
但是Python的列表中的元素可以是不同型別,比如數字,字串甚至可以包含列表。
列表是寫在方括號([])之間、用逗號分隔開的元素列表。
和字串一樣,列表同樣可以被索引和擷取

#!/usr/bin/python3 
list = [ 'abcd', 123 , 4.56, 'efghij', 78.9 ]
tinylist = [123, 'efghij'] 
print (list) # 輸出完整列表 
print (list[0]) # 輸出列表第一個元素
print (list[1:3]) # 從第二個開始輸出到第三個元素 
print (list[2:]) # 輸出從第三個元素開始的所有元素 
print (tinylist * 2) # 輸出兩次列表 
print (list + tinylist) # 連線列表

輸出結果:

['abcd', 123, 4.56, 'efghij', 78.9]
abcd
[123, 4.56]
[4.56, 'efghij', 78.9]
[123, 'efghij', 123, 'efghij']
['abcd', 123, 4.56, 'efghij', 78.9, 123, 'efghij']

(4)元組:

元組(tuple)與列表類似,不同之處在於元組的元素不能修改。元組寫在小括號(())裡,元素之間用逗號隔開。

#!/usr/bin/python3 
tuple = ( 'abcd', 786 , 2.23, 'runoob', 70.2 ) 
tinytuple = (123, 'runoob') 
print (tuple) # 輸出完整元組 
print (tuple[0]) # 輸出元組的第一個元素 
print (tuple[1:3]) # 輸出從第二個元素開始到第三個元素
print (tuple[2:]) # 輸出從第三個元素開始的所有元素 
print (tinytuple * 2) # 輸出兩次元組 
print (tuple + tinytuple) # 連線元組

輸出結果:

('abcd', 786, 2.23, 'runoob', 70.2)
abcd
(786, 2.23)
(2.23, 'runoob', 70.2)
(123, 'runoob', 123, 'runoob')
('abcd', 786, 2.23, 'runoob', 70.2, 123, 'runoob')

(5)集合(set)

集合(set)是一個無序不重複元素的序列,和java裡的set一樣。
基本功能是進行成員關係測試和刪除重複元素。
可以使用大括號 { } 或者 set() 函式建立集合,注意:建立一個空集合必須用 set() 而不是 { },因為 { } 是用來建立一個空字典。

#!/usr/bin/python3 
student = {'Tom', 'Jim', 'Mary', 'Tom', 'Jack', 'Rose'} 
print(student) # 輸出集合,重複的元素被自動去掉 
# 成員測試 
if('Rose' in student) : 
    print('Rose 在集合中') 
else : 
    print('Rose 不在集合中') 

# set可以進行集合運算
a = set('abracadabra') 
b = set('alacazam') 
print(a) 
print(a - b) # a和b的差集 
print(a | b) # a和b的並集 
print(a & b) # a和b的交集 
print(a ^ b) # a和b中不同時存在的元素

輸出結果:

{'Mary', 'Jim', 'Rose', 'Jack', 'Tom'}
Rose 在集合中
{'b', 'a', 'c', 'r', 'd'}
{'b', 'd', 'r'}
{'l', 'r', 'a', 'c', 'z', 'm', 'b', 'd'}
{'a', 'c'}
{'l', 'r', 'z', 'm', 'b', 'd'}

注:python2中沒有set

(6)Dictionary(字典)

Python中的字典(dictionary)相當於Java中的Map,用”{ }”建立,是一個無序的鍵(key) : 值(value)對集合。
鍵(key)必須使用不可變型別,且在同一個字典中,鍵必須是唯一的。

dict = {}
dict['one'] = "1 - ABCD"
dict['one'] = "1 - abcd" #相當於java中Map的put,可以通過賦值新增或修改字典元素
dict[2]     = "2 - efgh"

tinydict = {'name': 'Tom','age':18}

print (dict['one'])       # 輸出鍵為 'one' 的值
print (dict[2])           # 輸出鍵為 2 的值
print (tinydict)          # 輸出完整的字典
print (tinydict.keys())   # 輸出所有鍵
print (tinydict.values()) # 輸出所有值

輸出結果:

1 - abcd
2 - efgh
{'name': 'Tom', 'age': 18}
dict_keys(['name', 'age'])
dict_values(['Tom', 18])

(7)資料型別轉換

直接將資料型別作為函式名即可,十分方便。如:

a=”12345”
b=int(a)
print (b)

(8)總結

資料型別 分為數字型和非數字型。
數字型包括整型,長整型,浮點型,複數型;
非數字型包括字串,列表,元組和字典 ;
列表用 “[ ]” 標識類似 C 語言中的陣列;
元組用 “( )” 標識。內部元素用逗號隔開。但是元組不能二次賦值,相當於只讀列表;
字典用 “{ }” 標識。字典由索引 key 和它對應的值 value 組成,相當於Java裡的Map。
非數字型的共同點:都可以使用切片、連結(+)、重複(*)、取值(a[])等相關運算;
非數字型的不同點:列表 可以直接賦值,元組不可以賦值,字典按照 dict[k]=v 的方式賦值。

三、運算子

1、算數運算子

Python和Java都有:
+-*/(加減乘除)%(取模)
Python新加:
**(冪)//(取整除)
注:Python2中除法(/)和java,C++中一樣,整數/整數=整數
Python3中除法(/)總是返回一個浮點數,要獲取整數使用(//)操作符

print (2/4) # 除法,得到一個浮點數(Python3) 
0.5 
print (2//4) # 除法,得到一個整數 
0

2、比較運算子

Python和Java都有:
==(等於)!=(不等於)>(大於)<(小於)>=(大於等於)<=(小於等於)
注:Python2中有<>(不等於),Python3中沒有

3、賦值運算子

Python和Java都有:
=(賦值)+=(加法賦值)-=(減法賦值)*=(乘法賦值)/=(除法賦值)%=(取模賦值)
Python新加:
**=(冪賦值)//=(取整除賦值)
Python移除:
++(自增運算子)—(自減運算子)

4、位運算子

Python和Java都有:
&(按位與)|(按位或)^(按位異或)~(按位取反)<<(左移)>>(右移)

5、邏輯運算子

Python自成一體:
and(布林與)or(布林或)not(布林非)

6、成員運算子

Python自成一體:
in(如果在指定的序列中找到值返回 True,否則返回 False)
not in(如果在指定的序列中沒有找到值返回 True,否則返回 False)

7、身份運算子

Python自成一體:
is (判斷兩個識別符號是不是引用自一個物件)
is not (是判斷兩個識別符號是不是引用自不同物件)
注:is 用於判斷兩個變數引用物件是否為同一個, == 用於判斷引用變數的值是否相等。

8、優先順序

與Java基本相同:
[冪]>[按位取反]>[*,/,%,//]>[+ -]>[>>,<<]>[&]>[\^,|]>[<=,<,>,>=]>[<>,==,!=]>[賦值運算子]>[身份運算子]>[成員運算子]>[邏輯運算子]

未完待續…