Python是一個非常優雅的編程語言,語法非常的簡單,很多時候讀一些Python代碼就像讀英語一樣,很適合作為新手學習編程的第一門語言。Python裡面有很多功能非常強大的機器學習和大數據分析的包,所以也適合很多對大數據和人工智慧感興趣的同學來學習。 要想瞭解一門語言,不論是人類語言還是電腦語言, ...
Python是一個非常優雅的編程語言,語法非常的簡單,很多時候讀一些Python代碼就像讀英語一樣,很適合作為新手學習編程的第一門語言。Python裡面有很多功能非常強大的機器學習和大數據分析的包,所以也適合很多對大數據和人工智慧感興趣的同學來學習。
要想瞭解一門語言,不論是人類語言還是電腦語言,首先你需要瞭解這門語言的語法,Python語言也不例外,在這裡我就講一講Python一些語法基礎,包括Python數據類型、變數類型、條件控制、迴圈結構等等。有了這些基礎,我們接下來就能夠學習Python當中稍微複雜一點的函數以及模塊了。
我還是要推薦下我自己創建的Python學習交流群627044331,這是Python學習交流的地方,不管你是小白還是大牛,小編都歡迎,不定期分享乾貨,包括我整理的一份適合零基礎學習Python的資料和入門教程廢話少說,Here we go!
快速開始
Python的安裝我就不用介紹了,對應自己電腦的類型到官網下載安裝就好了,非常簡單。安裝好了之後你可以在命令行中鍵入命令python進入交互模式,也可以使用一款你喜歡的文本編輯器來編寫python腳本,然後在命令行中執行。幾乎對於所有的編程語言來說,第一個程式都是列印"hello, world!"。試用一下代碼就可以列印出“hello, world!”。
greeting = input() #從鍵盤中輸入“hello, world!”,記住input()函數輸出的都是字元串
print(greeting)
記住在python3中print後面一定要打括弧。你也可以將你的腳本保存為“hello.py”,然後在命令行中執行
python3 hello.py
這樣就可以輸出:
hello, world!
數據類型
Python的語法相對比其它編程語言簡單的地方之一就是它不用申明變數類型。直接用“=”給一個變數賦值後這個變數就被創建了。Python中常見的數據類型有以下幾種:
數字 (Number)
python可以支持整數int(只有長整型), 浮點型float, 布爾型bool以及複數型complex。內置的type()函數可以用來判斷變數的類型,記住type()函數的返回值需要用print()列印出來。
(a, b, c, d) = (10, 5.5, False, 2+5j)
print(type(a))
字元串 (String)
Python中的字元串表示用單引號' '或者雙引號" "括起來的任意字元,比如‘hello, world’, 或者“hello, world”,但如果引號裡面又有引號的話,就需要用反斜線\來轉義。
str = "python"
str.replace('p', 'P')
- 切片:Python中字元串可以很方便的截取其中一部分,字元串的第一個字元索引值為0,第二個為1,後面一次累加,最後一個字元串索引為-1。截取的語法為:變數[第一個索引值:第二個索引值]
str1 = str[0]
str2 = str[2:4]
2. 連接和複製:兩個字元串可以用(+)連接成一個字元串,用星號*可以複製字元串
str3 = str1 + str2
str4 = str1 * 3
3. 多行輸出:可以用'''...'''的格式來輸出多行字元串
print('''line1
line2
line3''')
4. 判斷是否存在:in或者not in
if "n" not in str:
...
5. 格式化輸出:和C語言中的printf用法相同
print("My name is %s and I'm %d years old" % ("Mike", 16))
print("Pi is %f" % (3.1415926)) # %f預設保留小數點後6位有效數字
print("Pi is %.2f" % (3.1415926))
數據結構
列表 (List)
列表應該可以說是Python中最重要最常用的一種數據類型了,python中的列表很像Perl中的數組(array)結構。列表用方括弧[]括起來,用逗號隔開,列表中的每一個元素都從0開始索引,-1為最後一個元素的索引,同樣也可以進行連接(+)和複製(*)操作。
list = [10, "python", 8.2]
list1 = list[0:2]
list2 = list[1:]
list3 = list*2
"python" in list
- List的常用內置函數:
- len():獲得list的長度
- max()、min():列表元素最大值和最小值(只支持相同類型元素)
- append():往list的末尾添加元素
- extend():往列表末尾添加多個值
- insert(i, NewItem):插入任意元素
- pop():刪除末尾的元素
- pop(i):刪除索引是i的元素
- count(obj):統計某個元素在列表中出現的次數
- reverse():反向列表
- sort():列表排序
- clear():清空列表
- list(tuple):將元組轉化為列表
元組(Tuple)
元組和列表非常像,唯一不同的是元組中的元素不能修改,用小括弧()括起來,用逗號分開,當元組中只有一個元素時,也要加上逗號。
tuple1 = (8, "tuple", 6.6")
tuple2 = ("hello",)
tuple3 = tuple1[2]
tuple4 = (8, "tuple",[3, 10], 6.6")
tuple4[2][1] = 6 #tuple4中的一個列表中的元素是可以更改的
字典(Dictionary)
Python中的字典就是Perl中的哈希(Hash),或者很多其它語言中的映射Map,字典和列表的區別是字典中的元素是無序的,用大括弧{}來標識,並且是通過健(key)和值(Vavule)來存儲的,健必須是唯一的。
dic1 = {}
dic1["hello"] = "world"
"hello" in dic1 #判斷字典中是否存在某個key
dic2 = {"Yingshan" : "Li", "site" : "www.yingshanli.com"}
- 字典的常用內置函數:
- dic.keys()
- dic.values()
- dic.pop("site") #刪除一個key
- del dic["site"] #刪除一個key
- dic.clear()
- key in dic
- dic.items()
集合(Set)
集合用來存放一組無序且不可重覆的元素,用大括弧{}或者set()函數創建,如果要創建一個空集合就需要用set(),而不是{},因為{}是用來創建空字典的。set()函數只能接納一個list作為參數
num1 = {1, 5, 3, 8}
5 in num #判斷5是否在集合中
num2 = set([10, 8, 5, 8]) #num2中只有10、8、5三個元素
num2.add(9) #添加元素
num2.remove(8) #刪除元素
num1 & num2 #並集運算
num1 | num2 #交集運算
條件判斷
條件判斷很簡答,這裡就不贅述了
num = 10
if num > 0:
print "positive number!"
elif num < 0:
print "negative number!"
else:
print "0!"
迴圈控制
Python主要有兩種迴圈,for...in迴圈和while迴圈。for...in迴圈可以遍歷一個列表、元組或者字元串等等
range()函數
- range(n)輸出0到n-1的整數列表
- range(m,n)輸出m到n-1的整數列表
- range(m,n,i)生成從m開始到n-1以i為增量的等差數列
- range(len())結合可以遍歷一個大小未知的列表
for...in迴圈
names = ["John", "Mike", "Bob"]
for name in names:
print(name)
sum = 0
for i in range(101):
sum = sum + i
while迴圈
n = 10
sum = 0
while n > 0:
n = n-1
sum = sum + n
break和continue
break可以跳出整個迴圈體,而continue只是跳出當前迴圈,進入下一個迴圈
迭代器和生成器
列表生成式
列表生成式就是生成一個特定列表的表達式,基本語法:[exp for iter_var in iterable],例如:
list1 = [2*a for a in range(10)]
還可以加入一層迴圈:
list2 = [a*b for a in range(3) for b in range(4)]
還可以加入判斷語句:
list3 = [2*a for a in range(10) if a%2 == 1]
這樣寫比用迴圈語句來寫要簡單很多。註意不要忘記把式子用中括弧括起來,因為你要生成的是列表。
生成器
用列表生成式生成的列表會把列表中所有的數據全部放入記憶體中,當列表非常大時,會消耗很多的記憶體,並且列表的大小是有限的,因此有些時候我們不必把一個完整的列表一下子生成放在記憶體中,我們可以只保存一個演算法,當需要的時候可以一個一個的推出後續的元素,這種方法就叫做生成器(generator),構造生成器主要有兩種方式:
- 像列表生成式一樣,只要中括弧[]改為小括弧():
generator1 = (2*a for a in range(10))
2. 當程式比較複雜難以用列表生成式的方式產生生成器時,使用yield函數:
def cube(num1, num2):
for i in range(num1, num2):
yield i^3
當函數看到yield關鍵字時,這個函數就不再是一個普通函數了,而成了一個生成器generator,每一次調用next()函數時就執行一次,遇到yield就返回不再繼續執行,程式會記住當前的位置,直到下一次繼續調用next()再執行下一次,一直到不能再返回值了就報出StopIteration錯誤。
除了可以用next()函數調用生成器中的元素,更普遍的用法是用for迴圈來遍歷生成器中的元素:
g = cube(3, 8)
for n in g:
print(n)
迭代器
我們現在已經知道在Python中,可以用for迴圈迭代的對象包括:
- string, list, tuple, dictionary, set
- 生成器generator
Python中可以用for迴圈迭代的對象統稱為"**可迭代對象Iterable**"。我們可以使用isinstance()函數來判斷對象的類型:
from collections import Iterable
print(isinstance(g, Iterable))
與之相應的,Python中定義可以next()函數調用,並不斷返回下一個值的對象稱之為**迭代器Iterator**,我們知道generator既可以被使用for迴圈,也可以使用next()函數,所以generator既是Iterable也是Iterator。但是string, list, tuple, dictionary, set等等不能使用next()函數,因此只是Iterable,但是可以使用iter()函數將Iterable變成Iterator。
isinstance([], Iterable)
isinstance(iter([]), Iterable)
以上差不多就是Python3最核心最基本的語法了,後面我會接著更新Python高級一點的知識,函數與模塊,祝大家學習愉快!