1. 程式人生 > >Python 系列之一基礎知識(一篇文章掌握基礎知識)

Python 系列之一基礎知識(一篇文章掌握基礎知識)

概述

近期在學習機器學習,機器學習中一般都推薦使用python 語言。使用python 語言,在資料處理方面相對於java 等其他語言來說,更加方便易容,python 可以引入第三方的庫,加以資料處理,比如處理矩陣等高等數學以及資料結構,還十分方便的進行程式資料的展示。

本文中,只是列列舉了python 的簡單用法和基礎知識,關於進階的內容,請參考度娘,官網(如果你english hen good),部落格等。個人因為興趣,把python 當做強大的指令碼工具來學習了。各位python 大神如果路過,請海涵。

學習路線

首先我個人整理了一個python 學習的思維導圖。這個思維導圖,可能有考慮不全的地方,但是是根據java 中有的一些內容進行整理的。具體如下:


至於kNN.py 這個示例檔案:具體內容如下:

從這個檔案中可以看到的內容有:註釋,變數定義,資料型別,迴圈,判斷,函式,包管理,集合,第三方庫,檔案操作等。

'''
Created on Sep 16, 2010
kNN: k Nearest Neighbors

Input:      inX: vector to compare to existing dataset (1xN)
            dataSet: size m data set of known vectors (NxM)
            labels: data set labels (1xM vector)
            k: number of neighbors to use for comparison (should be an odd number)
            
Output:     the most popular class label

@author: pbharrin
'''
from numpy import *
import operator
from os import listdir

def createDataSet():
    group = array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])
    labels = ['A','A','B','B']
    return group, labels

def file2matrix(filename):
    fr = open(filename)
    numberOfLines = len(fr.readlines())         #get the number of lines in the file
    returnMat = zeros((numberOfLines,3))        #prepare matrix to return
    classLabelVector = []                       #prepare labels return   
    fr = open(filename)
    index = 0
    for line in fr.readlines():
        line = line.strip()
        listFromLine = line.split('\t')
        returnMat[index,:] = listFromLine[0:3]
        classLabelVector.append(int(listFromLine[-1]))
        index += 1
    return returnMat,classLabelVector

具體內容:

OK, 有了思維導圖,那麼我們接下來就是具體的學習了。至於python 的安裝,度娘去吧,安裝軟體這些都不是事,哈哈

python註釋:

註釋可以分為單行註釋和多行註釋。

首先我們來看一下單行註釋:

# 這是一行註釋

print("Hello, World!")

然後是多行註釋,可以有兩種方式,一種是單引號的方式,一種是雙引號的方式

#!/usr/bin/python3 '''
這是多行註釋,用三個單引號
這是多行註釋,用三個單引號 
這是多行註釋,用三個單引號
'''
#!/usr/bin/python3 """
這是多行註釋,用三個雙引號
這是多行註釋,用三個雙引號 
這是多行註釋,用三個雙引號
"""

變數定義

註釋看完之後,我們來看一下具體變數的定義,即變數識別符號改怎麼定義。

按照java 的理解,一把全部小寫字母和大寫字母來定義準沒錯。但是我們還是看一下語法。

識別符號語法規則:

第一個字元必須是字母表中字母或者下劃線_ (一般不用下劃線,感覺)

識別符號的其他部分由字母、數字、和下劃線組成。

識別符號對字母大小寫敏感。

另外還要注意的是python 保留字,主要有如下:

>>> import keyword
>>> keyword.kwlist

['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']

原始檔語法格式

python 程式碼主要採取縮排的格式,縮排一定要嚴格對齊:

ifTrue:print("True")else:print("False")

如果縮排不對齊,會包語法錯誤,例子如下:

ifTrue:print("Answer")print("True")else:print("Answer")print("False")# 縮排不一致,會導致執行錯誤

如果一行語句需要分成多行來寫,一般用反斜槓來進行分行:

total = item_one + \
        item_two + \
        item_three

如果是[],{},() 中的內容,則不需要反斜槓,如下:

total =['item_one','item_two','item_three','item_four','item_five']

輸入輸出

此處,先用到簡單的print(),來輸出,其他的格式化輸出,以及用表示式進行輸出,後面在作分析。

直接上程式碼:

>>> print 'HelloWorld'
HelloWorld
>>> print 'hello','world'
hello world
>>> print 1000
1000
>>> print 100 + 3000
3100
>>> print(1)
1
>>> print('1', '2')
('1', '2')
>>> print('1', '2', '3')
('1', '2', '3')
>>> x = 1
>>> print(x)
1
>>> x = 7 
>>> y = '7'
>>> print("the x is %d, the y is %s " % (x, y))
the x is 7, the y is 7 
>>> 

格式化輸出, 類似print("the x is %d, the y is %s " % (x, y)

具體其他格式:大致如下:

轉換型別          含義

d,i                 帶符號的十進位制整數
o                   不帶符號的八進位制
u                   不帶符號的十進位制
x                    不帶符號的十六進位制(小寫)
X                   不帶符號的十六進位制(大寫)
e                   科學計數法表示的浮點數(小寫)
E                   科學計數法表示的浮點數(大寫)
f,F                 十進位制浮點數
g                   如果指數大於-4或者小於精度值則和e相同,其他情況和f相同
G                  如果指數大於-4或者小於精度值則和E相同,其他情況和F相同
C                  單字元(接受整數或者單字元字串)
r                    字串(使用repr轉換任意python物件)

s                   字串(使用str轉換任意python物件)

資料型別

在python 中,大致可以分為5類資料型別

Number (數字)

String (字串)

List(列表)

Tuple(元組)

Dictionary(字典)

列表,元組,字典屬於集合型別。

注意python 中沒有java 中的陣列的概念。

首先我們來看一下數字

>>> var1 = 1
>>> var2 = 2
>>> var3 = 3   # var1, var2, var3 都是整型
>>> var1
1
>>> var2
2
>>> del var3   # 刪除var3 這個引用
>>> var3
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'var3' is not defined
>>> var3 = 1.2   # float 
>>> var3
1.2
>>> var3 = 1.20123 ## float
>>> var3  
1.20123
>>> var4=5+6j    ## 複數
>>> var4
(5+6j)
>>> 
整體上看,python 的數字型別分為整型int,長整型long, 浮點型float,  複數complex(x+yj, x 和y 都是實數)

String 型別

字串有數字字母下滑線等特殊字元組成:

>>> x='[email protected]@##ad;a[a]a'
>>> x
'[email protected]@##ad;a[a]a'
>>> x='草泥馬'
>>> x
'\xe8\x8d\x89\xe6\xb3\xa5\xe9\xa9\xac'
>>> 

可以從-1開始取值,也可以從0開始取值

>>> x='[email protected]@##ad;a[a]a'
>>> x[1]
'w'
>>> x[0]
'a'
>>> x[-1]
'a'
>>> 
>>> x[-2]
']'
>>> x[-3]
'a'
>>> x[-100]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: string index out of range
>>> x[100]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: string index out of range
>>> 

注意長度不可以超過字串長度

列表(List)

>> list = ['apple', 'jack', 12, 12.5, 12 - 5j]    #列表1
>>> list
['apple', 'jack', 12, 12.5, (12-5j)]              # 列表2
>>> otherlist=[12, 13]
>>> list
['apple', 'jack', 12, 12.5, (12-5j)]
>>> list[0]       #第一個值
'apple'
>>> list[0:0]   #從0號元素開始,取到第0號元素,不包含0
[]
>>> list[0:1]   # 取0到1的元素,不包含1
['apple']
>>> list[0:2]   # 0到2的元素,不包含2
['apple', 'jack']
>>> list[1:3]   # 1到3的元素,不包含3
['jack', 12]
>>> list[:3]     # 從開始取到3,不包含3
['apple', 'jack', 12]
>>> list[:]    # 取所有元素
['apple', 'jack', 12, 12.5, (12-5j)]
>>> list[0:]          # 從開始取到最後
['apple', 'jack', 12, 12.5, (12-5j)]
>>> list*2             # 元素複製一遍,依次往後面新增
['apple', 'jack', 12, 12.5, (12-5j), 'apple', 'jack', 12, 12.5, (12-5j)]
>>> list + otherlist   # 兩個列表相加,
['apple', 'jack', 12, 12.5, (12-5j), 12, 13]
>>> list.append(otherlist)   # 把otherlist 作為一個元素,新增到list 中
>>> list
['apple', 'jack', 12, 12.5, (12-5j), [12, 13]]
>>> list.extend(otherlist)  # 兩個列表相加
>>> list
['apple', 'jack', 12, 12.5, (12-5j), [12, 13], 12, 13]
>>> 

元組

關於元組的操作,與列表類似,內嵌min,max comp,len 等函式

>>> tup1=(1,1,'234','dlaldlal', ';d;ad;a')
>>> tup1
(1, 1, '234', 'dlaldlal', ';d;ad;a')
>>> tup1(1)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object is not callable
>>> tup1[1]
1
>>> tup1[0]
1
>>> tup1[0:]
(1, 1, '234', 'dlaldlal', ';d;ad;a')
>>> tup1[2:]
('234', 'dlaldlal', ';d;ad;a')
>>> tup1[1:]
(1, '234', 'dlaldlal', ';d;ad;a')
>>> tup1[1:3]
(1, '234')
>>> tup2=(1,2)
>>> tup1 + tup2
(1, 1, '234', 'dlaldlal', ';d;ad;a', 1, 2)
>>> 

字典

字典類似於java 中的Map :

下面我們來直接看例子。

>>> dict = {"a" : 1, "b" : "b", 1 : 2}
>>> dict[1]  #尋找元素
2
>>> dict[2.3] = 2  # 新增元素
>>> dict
{'a': 1, 1: 2, 'b': 'b', 2.3: 2}
>>> 

條件判斷,迴圈

1,條件判斷

語法:(通常需要注意的點主要有 if 條件後面的冒號容易忘記:)

if condition1:
    true1_expressions
elif condition2:
    true2_expressions
elif condtion3:
    true3_expressions
elif ...
    ...
else:
    else_expressions

2,for 迴圈

直接上例子:
for letter in 'Python':     # 第一個例項
   print '當前字母 :', letter
 
fruits = ['banana', 'apple',  'mango']
for fruit in fruits:        # 第二個例項
   print '當前水果 :', fruit
   
fruits = ['banana', 'apple',  'mango']
for index in range(len(fruits)):
   print '當前水果 :', fruits[index]

3,while 迴圈:

count = 0
while (count < 3):
    print('重複一遍')
    count = count + 1

方法定義:

來兩個基本款例子:

 func(name,arg1,arg2)

func(name,key1=value1,key1=value2)

包管理:

大致可以參考如下,python 中,包和模組可以認為是同一個概念,但是具體應該還是有些差別的,暫時沒有深究。

#檔案目錄結構
#|--demo.py
#|--package_a
#   |--__init__.py
#   |--class_a.py  #類ClassA
#   |--class_b.py  #類ClassB和函式func_b()

檔案讀取

在機器學習中,檔案讀取時經常用到的內容,下面我們來看一下python 中的檔案讀取。

1,檔案物件的獲取。

python 中檔案物件的獲取,用open(fileName) 來得到一個file 物件。

open(filename, mode)
其中mod 讀寫檔案的模式如下

2,簡單的寫檔案:

f=open("/home/demo.txt", "w")  會覆蓋原來的內容

f.write("hello.world...\n")

f.close()

注意如果/home 目錄不存在,則會報錯。否則,不管demo.txt 是否存在,都不會報錯。

3,簡單的檔案讀取:

f=open("/home/demo.txt", "w")  會覆蓋原來的內容

f.readlines()

['hello,world!!!hello,worldcat demo.txt !\n', 'hello,worldcat demo.txt !\n']

集合操作

即關於元組,List,字典的操作,大致已經在資料型別模組下有提及過。

類定義

直接上python程式碼,看例子:

class people:
    #定義基本屬性
    name = ''
    age = 0
    #定義私有屬性,私有屬性在類外部無法直接進行訪問
    __weight = 0
    #定義構造方法
    def __init__(self,n,a,w):
        self.name = n
        self.age = a
        self.__weight = w
    def speak(self):
        print("%s 說: 我 %d 歲。" %(self.name,self.age))

# 例項化類
p = people('runoob',10,30)
p.speak()
至於高階的函數語言程式設計,以及第三方庫的使用,本小白也不是弄的很清楚,函數語言程式設計,在我個人的理解,每次呼叫一個函式,返回的都是一個物件,這樣就可以連續呼叫函式,類似這樣子。希望各位,如果有好的理解,可以在評論區留言,謝謝各位。

第三方庫的使用,想數學庫,畫圖用的庫,python 爬蟲框架等內容,算是基礎之上的一個封裝。需要用到的時候,具體查詢即可。

可以說,看到這裡,加上動手試一下。整個python 算是入門了吧,之後的工作就是多用了,可以實現常見的排序演算法、實現常見的資料結構來進行練習,希望大家一同共同成長。

相關推薦

Python 系列之一基礎知識文章掌握基礎知識

概述近期在學習機器學習,機器學習中一般都推薦使用python 語言。使用python 語言,在資料處理方面相對於java 等其他語言來說,更加方便易容,python 可以引入第三方的庫,加以資料處理,比如處理矩陣等高等數學以及資料結構,還十分方便的進行程式資料的展示。本文中,

Entity Framework學習筆記——EF簡介文章告訴你什麽是EF

比較 編程 ast 定義 .aspx b2c 文件創建 發送 ase Entity Framework是以ADO.NET為基礎,面向數據的“實體框架”。以下簡稱EF。 它利用了抽象化數據結構的方式,將每個數據庫對象都轉換成應用程序對象 (entity),

我個人看到的理解python“迭代”概念最好的文章

深入理解python迭代 原文: 更深入的理解 Python 中的迭代 作者: Trey Hunner 譯者:LCTT MjSeven 1本文內容說明 2本文的python執行環境說明 一、什麼是迭代     (斜體字內容來自百度百科)迭代,就是重複反饋的活動,目的通常是為了

【線性代數】矩陣、向量、行列式、特徵值與特徵向量掌握這些概念文章就夠了

在數學領域中,線性代數是一門十分有魅力的學科,首先,它不難學;其次,它能廣泛應用於現實生活中;另外,在機器學習越來越被重視的現在,線性代數也能算得上是一個優秀程式設計師的基本素養吧? 一、線性代數的入門知識 很多人在大學學習線性代數時,國內

Python的記憶體管理機制 小記憶體塊的申請

哈哈哈,看的有點兒興奮了,筆記下:       在Python的內部同時維護著巨集和記憶體管理函式兩種記憶體管理機制,巨集定義可以節省一次函式呼叫的開銷, 提高執行效率,但同時,使用巨集是危險的,因為隨著Python的演進,記憶體管理機制的實現可能會發生改變,因為巨集

Python高級語法之:文章了解yield與Generator生成器

而不是 xrange 需要 num 是不是 兩個 ack 第一次 進行 Python高級語法中,由一個yield關鍵詞生成的generator生成器,是精髓中的精髓。它雖然比裝飾器、魔法方法更難懂,但是它強大到我們難以想象的地步:小到簡單的for loop循環,大到代替多線

php基礎分享第一 PHP引用變量

term shadow 使用情況 才會 nag ges 理解 查看 思考 首先我們要明白什麽是引用變量概念 : 在php中引用意味著用不同的名字訪問同一個變量內容;定義方式:使用&符號; php引用的工作原理<?php 定義一個變量

百度地圖自定義標註、資訊視窗、多種類聚合、主題嘔心瀝血的部落格...

一、序     最近做百度地圖的圖形化定製。略有心得,在此和大家分享一下,少走彎路。先看目錄,大致介紹一下都寫了些啥。我會從最基本的來,一點點往下寫,同志們可以看目錄自己去找需要的部分。ps:注意,我用的是百度地圖 2.0 版本,例子也都是。   這個完整程式碼,我會上傳到 githu

文章掌握nightwatch自動化測試

nightwatch.js是一個web-ui自動化測試框架,被vue-cli深度整合進來。如果一個專案是基於vue-cli搭建的,基本可以做到開箱即用。 但是我們不可能一直都使用vue-cli。因為它很多時候不能夠滿足我們的定製化需求。我們很多時候會對構建框架進行定製,或者完全重新搭建。這個時候整合進來ni

文章掌握Java註解

什麼是註解?   用一個詞就可以描述註解,那就是元資料,即一種描述資料的資料。所以,可以說註解就是原始碼的元資料。比如,下面這段程式碼:   @Override public String toString() {     return "This is Str

文章掌握Sql-On-Hadoop核心技術

1. SQL On Hadoop 分類 1.1 查詢延時分類 AtScale 在 2016 年的一篇名為 [15]The Business Intelligence for Hadoop Benchmark 的 SQL On Hadoop 效能測評報告中指出:受查詢資料量大小,查詢型

UML科普文,文章掌握14種UML圖

## 前言 上一篇文章寫了一篇建造者模式,其中有幾個UML類圖,有的讀者反饋看不懂了,我們今天就來解決一哈。 ## 什麼是UML? `UML`是`Unified Model Language`的縮寫,中文是`統一建模語言`,是由一整套圖表組成的標準化建模語言。 ## 為什麼要用UML? 通過使用UML使

文章掌握Nginx核心檔案結構

> 文章主要分析Nginx核心配置檔案 ./conf/nginx.conf ### 1 Nginx核心配置結構 ![](https://img2020.cnblogs.com/blog/830289/202012/830289-20201212095636835-561238497.png) ### 2

Python基礎知識

post 練習 初學 查看 http 變量 規則 style python程序 首先,對於初學者在一個項目中設置多個程序可以執行,是非常方便的,可以方便對不同知識點的練習和測試 對於商業項目而言,通常在一個項目中,只有一個可以執行的Python程序 一、註釋 為了提高可讀性

Python基礎知識 初識Python

快捷 err ogl 熱門 HR 會有 社區 小型 palm Python簡介 一、Python介紹 Python(英國發音:/?pa?θ?n/ 美國發音:/?pa?θɑ?n/),是一種廣泛使用的高級編程語言,屬於通用型編程語言,由吉多·範羅蘇姆創造,第一版發布於1

Python——Bumpy基礎知識

一、Numpy的引入 1、標準的Python 中用列表(list)儲存一組值,可以當作陣列使用。但由於列表的元素可以是任何物件,因此列表中儲存的是物件的指標。對於數值運算來說,這種結構顯然比較浪費記憶體和CPU 計算 2、雖然Python 提供了array 模組,它和列表不同,能直接儲存數值,但

python爬蟲基礎知識--Urllib.request

explain:The urllib.request module defines functions and classes which help in opening URLs (mostly HTTP) in a complex world — basic and digest aut

技術系列之 網路模型基礎

全文針對linux環境。tcp/udp兩種server種,tcp相對較複雜也相對比較常用。本文就從tcp server開始講起。先從基本說起,看一個單執行緒的網路模型,處理流程如下: socket-->bind-->listen-->[accept-->

網路測速全解析之一:自定義View基礎知識

效果如圖: 一、基礎知識: 基礎知識,也就是最基本的自定義view需要掌握的知識,我這裡主要是學習了GcsSloop大佬的view自定義系列部落格(這裡是部落格地址) 1.自定義view繪製流程呼叫鏈 2.android自定義座標系(向右向下為正)

c語言-樹的基礎知識

相交 ges 最大 .cn nbsp 分享 blog com lin 第一、樹的定義: 1.有且只有一個稱為根的節點 2.有若幹個互不相交的子樹,這些子樹本身也是一顆樹 第二、專業術語: 樹的深度:從根節點到最低層,節點的層數 ,稱之為樹的深度。