一篇小文,入門 Python

Python 編程語言 人工智能 Guido Python小生煎 2019-07-05

作者:樂雨泉(yuquanle),湖南大學在讀碩士,研究方向機器學習與自然語言處理。

一篇小文,入門 Python

Python 是由 Guido Van Rossum 在 90 年代早期設計,現在是最常用的編程語言之一。特別是人工智能的火熱,再加之它的語法簡潔且優美,實乃初學者入門AI必備的編程語言。

1. Python 基本語法

1.1 標識符

第一個字符必須是英文字母或下劃線 _ 。標識符的其他的部分由字母、數字和下劃線組成。標識符對大小寫敏感。

1.2 保留字

保留字即關鍵字,不能用作任何標識符名稱。 keyword 模塊可以輸出當前版本的所有關鍵字:

import keyword
print(keyword.kwlist)
['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']

1.3 註釋

單行註釋採用#,註釋是給人看的,可以是任意內容,解釋器會忽略掉註釋。

多行註釋採用'''或"""。

# print("我是註釋,不會執行")
print("正常執行代碼")
'''
這是多行註釋,用三個單引號
這是多行註釋,用三個單引號
'''
print("Hello, World!")
"""
這是多行註釋,用三個雙引號
這是多行註釋,用三個雙引號
"""
print("Hello, World!")

1.4 行與縮進

Python 使用縮進來表示代碼塊而不是大括號 {}。 縮進的空格數是可變的,但是同一個代碼塊的語句必須是相同的縮進空格數。建議四個空格數。

注意 Tab 和四格空格混用會報錯,這個錯誤還不容易被察覺。

1.5 輸入輸出

通常是一條語句一行,如果語句很長,我們可以使用反斜槓()來實現多行語句。在 [], {}, 或 () 中的多行語句,則不需要反斜槓。

sentence1 = "I love " + 
"python"
sentence2 = ["I", "love",
"python"]

2. 基本數據類型

計算機程序要處理不同的數據,需要定義不同的數據類型。Python 中的變量不需要聲明,每個變量在使用前都必須賦值,變量賦值以後該變量才會被創建。

Python中變量就是變量,沒有類型,所說的"類型"是變量所指的內存中對象的類型。等號(=)用來給變量賦值。等號(=)運算符左邊是一個變量名,等號(=)運算符右邊是存儲在變量中的值。

2.1 數字類型(Number)

數字類型是不可變數據。Python3 支持 int(整數)、float(浮點數)、bool(布爾)、complex(複數),數值類型的賦值和計算是很直觀的。

# int(整數)
a = 3
# float(浮點數)
b = 3.5
#bool(布爾)
c = True
#complex(複數)
d = 4+3j
print(a, b, c, d)
#內置的 type() 函數可以用來查詢變量所指的對象類型
print(type(a), type(b), type(c), type(d))
#還可以用 isinstance 來判斷
#isinstance 和 type 的區別在於:type()不會認為子類是一種父類類型,isinstance()會認為子類是一種父類類型
print(isinstance(a, int))
print(isinstance(a, float))


關於數值運算,可以同時為多個變量賦值,如a, b = 1, 2。一個變量可以通過賦值指向不同類型的對象。

除法包含兩個運算符:/ 返回一個浮點數,// 返回一個整數。混合計算時,Python會把整型轉換成為浮點數。

# 加
print("Add operation: 5 + 4 = ",5 + 4)
# 減
print("Sub operation: 5 - 4 = ",5 - 4)
# 乘
print("Mul operation: 5 * 4 = ",5 * 4)
# 除,得到一個浮點數
print("Div operation: 5 / 4 = ",5 / 4)
# 除,得到一個整數
print("Div operation: 5 // 4 = ",5 // 4)
# 取餘
print("Mod operation: 5 % 4 = ",5 % 4)
# 乘方
print("Pow operation: 5 ** 4 = ",5 ** 4)

2.2 字符串類型(String)

Python 沒有單獨的字符類型,一個字符就是長度為1的字符串。字符串用單引號 ' 或雙引號 " 括起來。

s1 = "I love python"
s2 = 'I love python'
print(s1)
print(s2)
#索引值以 0 為開始值,-1 為從末尾的開始位置
print("s1首字母字符:", s1[0])
print("s1末尾字母字符:", s1[-1])
print("輸出從第三個開始到第五個的字符:", s1[2:5])
#加號 + 是字符串的連接符
#星號 * 表示複製當前字符串,緊跟的數字為複製的次數
str = "I love python "
print("連接字符串:", str + "!!!")
print("輸出字符串兩次:", str * 2)
#反斜槓 轉義特殊字符
#若不想讓反斜槓發生轉義,可以在字符串前面添加一個 r
print('I
love
python')
print("反斜槓轉義失效:",r'I
love
python')

2.3 列表類型(List)

列表類型是一種有序的集合。列表中元素的類型可以不相同,它支持數字,字符串甚至可以包含列表(所謂嵌套)。列表是寫在方括號 [] 之間、用逗號分隔開的元素列表。

list_a = [1, 2, 3, 4, 5, 6]
list_b = [7, 8, 9]
print(list_a)
print(list_b)
#列表可以被索引和截取,列表被截取後返回一個包含所需元素的新列表
print ("輸出完整列表: ", list_a)
print ("輸出列表第一個元素:", list_a[0])
print ("從第二個開始輸出到第三個元素:", list_a[1:3])
print ("輸出從第三個元素開始的所有元素:", list_a[2:])
print ("連接兩次列表:", list_a * 2)
print ("連接列表:", list_a + list_b)
#列表中的元素是可以改變的
list_a = [1, 2, 3, 4, 5, 6]
print("變化前:", list_a)
list_a[0] = 0
list_a[2:5] = [7, 8, 9]
print("變化後:", list_a)
#append()方法:在列表末尾添加新的對象
list_a = [1, 2, 3, 4, 5, 6]
print("添加前:", list_a)
list_a.append(7)
list_a.append(8)
print("添加後:", list_a)
#del語句:刪除列表元素
list_a = [1, 2, 3, 4, 5, 6]
print("刪除前:", list_a)
del list_a[0]
print("刪除後:", list_a)
#len()方法:計算列表長度
list_a = [1, 2, 3, 4, 5, 6]
print("列表長度:", len(list_a))
#max()方法:返回列表元素最大值。min()方法:返回列表元素最小值
list_a = [1, 2, 3, 4, 5, 6]
print("列表最小值:", min(list_a))
print("列表最大值:", max(list_a))
#list()方法:將字符串轉換為列表
str = '123456'
print("轉換後:", list(str))
#count()方法:統計某個元素在列表中出現的次數
list_a = [1, 1, 2, 3, 4, 5, 6]
print("1在list_a中出現的次數:", list_a.count(1))
#index()方法:從列表中找出某個值第一次出現的索引位置
list_a = [1, 2, 3, 4, 5, 6]
print("3第一次出現的位置:", list_a.index(3))
#insert()方法:將對象插入列表指定位置
list_a = [1, 2, 3, 4, 5, 6]
print("插入前:", list_a)
list_a.insert(0 ,7)
print("插入後:", list_a)
#pop()方法:移除列表中的一個元素(默認最後一個元素),並且返回該元素的值
list_a = [1, 2, 3, 4, 5, 6]
print("默認移除最後一個元素:", list_a.pop())
print("指定移除第一個元素:", list_a.pop(0))
#reverse()方法:翻轉列表中元素
list_a = [1, 2, 3, 4, 5, 6]
print("翻轉前:", list_a)
list_a.reverse()
print("翻轉後:", list_a)
#sort()方法:該方法沒有返回值,但是對原列表進行排序
list_a = [1, 3, 2, 5, 4, 6]
print("排序前:", list_a)
list_a.sort()
print("升序排序:", list_a)
list_a.sort(reverse = True)
print("降序排序:", list_a)


2.4 元組類型(Tuple)

元組類型是不可變類型,元組使用小括號()。

tup1 = (1, 2, 3, 4, 5 )
# 元組中只包含一個元素時,需要在元素後面添加逗號,否則括號會被當作運算符使用
tup2 = (50,)
tup3 = (50)
print(type(tup2))
print(type(tup3))
#訪問元組:使用下標索引來訪問元組中的值
tup1 = (1, 2, 3, 4, 5 )
print ("tup1[0]: ", tup1[0])
print ("tup1[1:3]: ", tup1[1:3])
#修改元組:元組中的元素值是不允許修改的,但可以對元組進行連接組合
tup1 = (1, 2)
tup2 = ('a', 'b')
# 創建一個新的元組
tup3 = tup1 + tup2
print(tup3)
#刪除元組:元素值是不允許刪除,但可以使用del語句來刪除整個元組
tup1 = (1, 2, 3, 4, 5 )
print(tup1)
del tup1
print("刪除後的元組 tup1: ")
print(tup1)
#元組運算符:如 + 號和 * 號
tup1 = (1, 2)
tup2 = ('a', 'b')
print("連接:", tup1 + tup2)
print("複製3次:", tup1 * 3)
#len():計算元組元素個數
tup1 = (1, 2)
print("元組長度:", len(tup1))
#max()方法: 返回元組中元素最大值。min()方法: 返回元組中元素最小值
tup1 = (1, 2)
print("元組最大值:", min(tup1))
print("元組最大值:", max(tup1))
#tuple()方法:將列表轉換為元組
list1= ['1', '2']
print("轉換前:", list1)
tup1 = tuple(list1)
print("轉換後:", tup1)

2.5 集合類型(Set)

集合類型是無序的不重複元素序列。使用大括號 {} 或者 set() 函數創建集合。

注意:創建一個空集合必須用 set() 而不是 {},因為 {} 是用來創建一個空字典。

a={'a','b','c'}
b=set('abc')
c=set()
d={}
print(a)
print(b)
print(type(a), type(b), type(c), type(d))
#無序性
a = set('python')
print(a)
#互異性
a = set('good')
print(a)
#add()方法:為集合添加元素
a = set('good')
a.add('p')
print(a)
#update()方法:給集合添加元素
a = set('good')
a.update('p')
print("添加一個元素", a)
a.update(['a', 'b', 'c'])
print("添加多個元素", a)
a.update(['H', 'e'], {'l', 'l', 'o'})
print('添加列表和集合', a)
#remove()方法:移除指定元素
s = {'P', 'y', 't', 'h', 'o', 'n'}
s.remove('t')
print("去掉t", s)
#pop()方法:隨機移除元素
s = {'P', 'y', 't', 'h', 'o', 'n'}
print("隨機刪除元素:", s.pop())
#clear()方法:移除集合中的所有元素
s = {'P', 'y', 't', 'h', 'o', 'n'}
s.clear()
print("清空集合:", s, len(s))
#issubset()方法:判斷指定集合是否為該方法參數集合的子集
A = set('abcd')
B = set('cdef')
C = set('ab')
print("C是否A子集:", C.issubset(A))
#union()方法:返回兩個集合的並集,也可以用 |
print("A和B並集:", A|B)
print("A和B並集:",A.union(B))
#intersection()方法:返回集合的交集,也可以用&
print("A和B交集:", A&B)
print("A和B交集:",A.intersection(B))
#difference()方法:差集,也可以用-
print("A和B差集:", A-B)
print("A和B差集:",A.difference(B))

2.6 字典類型(Dictionary)

字典類型是可變類型。在同一個字典中,鍵(key)必須是唯一的。

字典的每個鍵值(key=>value)對用冒號(:)分割,每個對之間用逗號(,)分割,整個字典包括在花括號({})中。

# 用{}創建字典
dict1 = {"a":"1", "b":"2"}
print(dict1)
# 用內置函數dict()
dict2 = dict(a="1", b="2")
print(dict2)
#訪問字典裡的值
dict1 = {"a":"1", "b":"2"}
print ("dict1['a']: ", dict1['a']) #如果沒有會報錯
print ("dict1.get('a'): ", dict1.get('a')) #如果沒有返回None
print("獲取所有的key值:", dict1.keys())
print("獲取所有的value值:", dict1.values())
#增加新的鍵/值對
dict1 = {"a":"1", "b":"2"}
print ("增加前:", dict1)
dict1['c'] = 3
print ("增加後:", dict1)
#刪除字典指定元素
dict1 = {"a":"1", "b":"2"}
print ("刪除前:", dict1)
del dict1['a']
print ("刪除後:", dict1)
#清空字典
dict1 = {"a":"1", "b":"2"}
print ("清空前:", dict1)
dict1.clear()
print ("清空後:", dict1)
#dir()方法:查看dict所有方法
print(dir(dict))

3. 條件判斷和循環

條件控制:通過一條或多條語句的執行結果(True 或者 False)來決定執行的代碼塊。

每個條件後面要使用冒號: ,表示接下來是滿足條件後要執行的語句塊。使用縮進來劃分語句塊,相同縮進數的語句在一起組成一個語句塊。在 Python 中沒有 switch–case 語句。

#if操作
x = 5
if x > 3:
print("yes")
#if嵌套:if...elif...else
#也可以把 if...elif...else 結構放在另外一個 if...elif...else 結構中
x = 99
if x<60:
print("不及格")
elif x<80:
print("良好")
else:
print("優秀")
#while循環
sum = 0
counter = 1
while counter <= 10:
sum = sum + counter
counter += 1
print("1 到 10 之和為: %d" % sum)
#while 循環使用 else 語句
count = 0
while count < 5:
print (count, " 小於 5")
count = count + 1
else:
print (count, " 大於或等於 5")
#for 語句:for循環可以遍歷任何序列(列表、字符串等)
str = 'python'
list1 = ['I', 'love', 'python']
print("遍歷字符串")
for i in str:
print(i)
print("遍歷列表")
for i in list1:
print(i)
#range()函數:遍歷數字序列,可以使用內置range()函數生成數列
for i in range(5):
print(i)
#也可以使用range指定區間的值
for i in range(2,6):
print(i)
#也可以使range以指定數字開始並指定不同的增量(步長),可以是負數
for i in range(0, 10, 3):
print(i)
for i in range(-10, -100, -30):
print(i)
#可以結合range()和len()函數以遍歷一個序列的索引
list1 = ['I', 'love', 'Python']
for i in range(len(list1)):
print(list1[i])
#break語句:跳出 for 和 while 的循環體
list1 = ['I', 'love', 'Python']
for i in list1:
if i == 'love':
break
print('當前為 :', i)
#continue語句:跳過當前循環塊中的剩餘語句,然後繼續進行下一輪循環
var = 10
while var > 0:
var = var -1
# 變量為 5 時跳過輸出
if var == 5:
continue
print ('當前值 :', var)
print ("hello world!")
#pass 語句:pass是空語句,是為了保持程序結構的完整性,pass 不做任何事情,一般用做佔位語句
while True:
pass # 等待鍵盤中斷 (Ctrl+C)

4. 函數

函數是組織好的,可重複使用的,用來實現單一,或相關聯功能的代碼段。函數能提高應用的模塊性,和代碼的重複利用率。

Python提供了許多內建函數,比如“print()”,也可以自己創建函數,這被叫做用戶自定義函數。

# 1.無參函數
# 用def定義新函數
def my_func():
print("test...")
return 1
# 調用函數
my_func()
# 2.有參函數
# 關鍵字參數、默認參數、可變參數。
# 關鍵字參數: 調用時指定參數的名稱,且與函數聲明時的參數名稱一致。使用關鍵字參數允許函數調用時參數的順序與聲明時不一致。
def my_func1(x, y):
print(x)
print(y)
# 標準調用
my_func1(1, 2)
# 關鍵字調用
def my_func1(y = 1, x = 2)
# 默認參數:在函數聲明時,指定形參的默認值,調用時可不傳入參數(使用默認值)。
def my_func2(x, y=1):
print(x+y)

my_func2(2)
#可變參數:變參數就是傳入的參數個數是可變的,可以是1個、2個到任意個。
#在參數前面加了一個*號。在函數內部,參數numbers接收到的是一個tuple。
def my_func3(*numbers):
sum = 0
for n in numbers:
sum = sum + n * n
return sum
# 函數調用
my_func3() #返回結果0
my_func3(1,2) #返回結果5
# 關鍵字參數:可變參數允許你傳入0個或任意個參數,這些可變參數在函數調用時自動組裝為一個tuple。而關鍵字參數允許你傳入0個或任意個含參數名的參數,這些關鍵字參數在函數內部自動組裝為一個dict。
def my_func4(x, **kw):
print ('x:', x, 'other:', kw)
#除了必選參數x外,還接受關鍵字參數kw。在調用該函數時,可以只傳入必選參數。
my_func4(8)
#也可以傳入任意個數的關鍵字參數
my_func4(8, z="66")

5. 類

類(Class): 用來描述具有相同的屬性和方法的對象的集合。它定義了該集合中每個對象所共有的屬性和方法。對象是類的實例。

類變量:類變量在整個實例化的對象中是公用的。類變量定義在類中且在函數體之外。類變量通常不作為實例變量使用。

數據成員:類變量或者實例變量, 用於處理類及其實例對象的相關的數據。

#創建類Student
class Student(object):
"學生成績"
def __init__(self, name, score):
self.name = name
self.score = score
def print_score(self):
print('%s: %s' % (self.name, self.score))

#創建Student類的對象bart
jack = Student('Bart Simpson', 59)
#創建Student類的對象lisa
bob = Student('Lisa Simpson', 87)
#訪問類的屬性
jack.print_score()
bob.print_score()
# 添加一個 'age' 屬性
jack.age = 7
print("添加一個 'age' 屬性:",hasattr(jack, 'age'))
# 修改 'age' 屬性
jack.age = 8
print("修改 'age' 屬性:",getattr(jack, 'age'))
# 刪除 'age' 屬性
del jack.age
print("刪除 'age' 屬性:",hasattr(jack, 'age'))

5.1 類的繼承

面向對象的編程帶來的主要好處之一是代碼的重用,實現這種重用的方法之一是通過繼承機制。

通過繼承創建的新類稱為子類或派生類,被繼承的類稱為基類、父類或超類。

#編寫一個名為Fruit的class,執行run()方法可以直接打印
#編寫Apple和Orange類時,就可以直接從Fruit類繼承
class Fruit(object):
'父類Animal'
def run_father(self):
print('調用父類方法...')
class Apple(Fruit):
'子類1 Apple'
def run_son(self):
print('調用子類方法...')
class Orange(Fruit):
'子類2 Orange'
def run_son(self):
print('調用子類方法...')
#實例化子類
apple = Apple()
orange = Orange()
#調用父類方法
apple.run_father()
orange.run_father()
#調用子類方法
apple.run_son()
orange.run_son()

方法重寫

如果父類方法的功能不能滿足你的需求,你可以在子類重寫你父類的方法

class Fruit(object):
'父類Animal'
def run(self):
print('調用父類方法...')
class Apple(Fruit):
'子類1 Apple'
def run(self):
print('子類1 Apple 重寫父類方法...')
class Orange(Fruit):
'子類2 Orange'
def run(self):
print('子類2 Orange 重寫父類方法...')
#實例化子類
apple = Apple()
orange = Orange()
#調用父類方法
apple.run()
orange.run()

6. 模塊

Python 模塊(Module),是一個 Python 文件,以 .py 結尾,包含了 Python 對象定義和 Python 語句。模塊讓你能夠有邏輯地組織你的 Python 代碼段。

把相關的代碼分配到一個模塊裡能讓你的代碼更好用,更易懂。模塊能定義函數,類和變量,模塊裡也能包含可執行的代碼。


# 導入模塊
import math
# 現在可以調用模塊裡包含的函數了
print("求e的n次冪:",math.exp(1))
# from…import 語句:從模塊中導入一個指定的部分到當前命名空間中
# 導入模塊中的特定函數
from math import exp
# 現在可以直接使用該函數了
print("求e的n次冪:",exp(1))
# from…import* 語句:導入一個模塊中的所有項目。然而這種聲明不該被過多地使用
from math import *

小編為了大家能更快入門,為大家準備了一些Python函數視頻資料免費分享給大家,希望可以幫助到大家。

轉發此文,關注並私信小編“學習”即可免費獲取

!完全免費!

一篇小文,入門 Python

相關推薦

推薦中...