Python3學習筆記 - day1

前言

本文不是一篇系統的從零開始學習Python的教程,若是你須要從零開始學習Python,廖雪峯的官方網站Python教程這部分將是比較好的一種選擇,若是你英語比較好,也能夠在國外的一些網站上找到優質的教學視頻(好比某油管視頻網站)。python

閱讀本文的前提可能須要你有必定的編程基礎,並最好了解一種以上其餘主流的面向對象的編程語言,好比Java、C#、PHP等。編程

首先須要瞭解的是,Python與PHP相似,是一種解釋型的編程語言,與之對應的是Java、C#這類編譯型的語言。我本身有比較豐富的C#和PHP方面的經驗,兩種類型的語言(指解釋型和編譯型)各有各的優缺點。隨着各類語言的發展,如今各類語言之間也會互相借鑑一些好的特性,所以語言之間的差別也開始愈來愈模糊。因此我認爲語言並無好壞之分,而是某種語言會更適合在某些場景下使用,若是你會多種語言,能夠根據需求選用不一樣的語言開發,從而達到事半功倍的效果。api


基本語法

這裏只說三點,與其餘語言相同或者類似之處就不作解釋了。數組

註釋

  • 單行註釋符號: #

# This is one line comment編程語言

  • 多行註釋: 以'''(三個單引號)起始,並以'''結束的
'''
These lines are comments.
You can write multiple lines here.
xxxxxxx
'''


行末 : 符號

if, elif, else, for, def, class等關鍵字行的行末應加上, 不然會報語法錯誤。函數


縮進

Python用的是4個空格做爲縮進,做用域也不用花括號括起來,而是經過縮進來判斷:學習

class TestClass():
    def test_func():    # 4個空格縮進,表示在TestClass範圍內
        if True:        # 8個空格縮進,表示在TestClass的test_func範圍內
            pass        # 12個空格縮進,表示在TestClass的test_func的if判斷內
        
        print('xxx')    # 8個空格縮進,表示在TestClass的test_func範圍內
    
    print('test')       # 4個空格縮進,表示在TestClass範圍內

print('abc')            # 沒有縮進,表示執行的時候總會執行到這一行


有別於其餘語言的一些特性

數字操做符

數字操做符中,有兩個值得一說的操做符。網站

  • 除法/將獲得小數結果,地板除//將自動向下取整:

18 / 4 = 4.5
18 // 4 = 4code

  • 計算指數**

5 ** 3 = 125orm


字符串

字符串前綴

r:raw string

s = 'daniel\nfu' # 將輸出兩行,第一行爲daniel,第二行是fu
s = r'daniel\nfu' # 將只輸出一行: daniel\nfu, 其中\n將直接輸出而不做爲換行符來對待

b:binary

print(b'\xe2\x82\xac20'.decode('utf-8')) # 將輸出€20

f:format

name = 'Daniel'
age = 33
print(f'My name is {name.upper()} and I am {age} years old.')

# 輸出結果:
My name is DANIEL and I am 33 years old.


切片

name = "Hello there, my name is Daniel Fu and I`m 33 years old."

print(name[4]) # 字母o(hello的最後一個字母),從左至右第5個字母(由於index是從0開始)

print(name[-3]) # 字母l(old中的l),index爲負數表示從右至左第三個字母(-0和0沒有區別,所以負index是從-1開始的)

print(name[6:11]) # 結果爲"there", 即從index6開始,到index11結束(但不包含11)的全部內容

print(name[:5]) # 結果爲"Hello",省略起始值,則表示從0開始

print(name[45:]) # 結果爲"years old.", 省略終止值表示從index45開始,直至字符串結束的全部內容

print(name[:]) # 省略起止值,即返回整個字符串

print(name[::5]) # 結果爲"Hlotee ynm sDne uadIm3 er l.",第三個參數表示結果中每隔N(此例爲5)個字母返回一個

print(name[::-2]) # 結果爲".l re 3mIdau enDs mny eetolH",表示將字符串反轉以後,每隔N(此例爲2)個字母返回一個

切片是個很是有意思的特性,有了這個特性,實現某些功能將會異常簡單,舉兩個例子:

  • 判斷字符串是不是迴文
def is_palindrome(x):
    if not isinstance(x, str):
        x = str(x)
    return x == x[::-1]

print(is_palindrome('abcdedcba')) # True
print(is_palindrome(123454321)) # True
print(is_palindrome('abcdefg')) # False


  • 字符串首字母大寫,其餘小寫
def capitalize_word(x):
    if not isinstance(x, str):
        return 'Argument should be a word'
    else:
        return x[:1].upper() + x[1:].lower()

print(capitalize_word('daniel')) # Daniel

print(capitalize_word('CHINA')) # China
print(capitalize_word('wOrLd')) # World
print(capitalize_word(13)) # Argument should be a word
print(capitalize_word(True)) # Argument should be a word

利用切片這種操做,有些在其餘語言裏看起來須要多行代碼才能搞定的功能,在Python裏的核心代碼可能只須要一行。另外,數組(array)和元組(tuple)也可使用切片功能,用法上和字符串切片是同樣的:

chars = ['a', 'b', 'c', 'd', 'e', 'f'] # 改爲元組: ('a', 'b', 'c', 'd', 'e', 'f') 也是同樣的效果,返回的結果是元組而不是數組

print(chars[1]) # b 
print(chars[-1]) # f 
print(chars[1,3]) # ['b', 'c']
print(chars[:2]) # ['a', 'b']
print(chars[4:]) # ['e', 'f']
print(chars[::-1]) # ['f', 'e', 'd', 'c', 'b', 'a']
print(chars[::2]) # ['a', 'c', 'e']
print(chars[::-2]) # ['f', 'd', 'b']


函數參數

可變參數列表

def test_func(*args):
    for ar in args:
        print(ar)
        
print(test_func(['d', 'e', 'f'])) # 結果爲:['d', 'e', 'f']
print(test_func(*['d', 'e', 'f'])) # 結果爲: 'd', 'e', 'f' 三行,表示傳入了3個參數。


另一個比較有意思的例子:

def drop_first_last(grades):
    first, *middle, last = grades # 這句將傳入的參數的第一個值賦給first變量,最後一個值賦給last變量,其餘任意多的值,賦給*middle這個可變長變量
    avg = sum(middle) / len(middle)
    return avg
    
print(drop_first_last([1, 2, 3, 4])) # 2.5 去掉1和4以後,求2和3的平均值


列表展開

定義多個變量,自動對應到列表中的值:

a1, b1, c1 = [1, 2, 3]
print(a1) # 1
print(b1) # 2
print(c1) # 3

a2, b2, c2 = (11, 12, 13)
print(a2) # 11
print(b2) # 12
print(c2) # 13

a3, b3, c3 = 'abc'
print(a3) # a
print(b3) # b
print(c3) # c

# 參數數量對不上,則會報錯
a4, b4 = ['a', 'b', 'c']  # ValueError: too many values to unpack (expected 2)


多父類繼承

不少語言都只能從單一父類繼承,而Python能夠多個父類繼承。

class Animal(object):
    def __init__(self, name):
        self.name = name

    def run(self):
        print(self.name, 'is running!')
        
class AmuseThing(object):
    def amuse(self):
        print(self.name, 'is amusing you!')

class Dog(Animal):
    def bark(self):
        print(self.name, 'is barking!')

class Husky(Dog, AmuseThing):
    pass
    
husky = Husky('Idiot husky')
husky.run() # 從Dog中繼承,而Dog從Animal中繼承
husky.bark() # 從Dog中繼承
husky.amuse() # 從AmuseThing中繼承


掌握了這些知識點以後,咱們對Python有了必定的瞭解,這樣在後續進階一點的學習過程當中,咱們能夠充分利用某些特性來實現咱們的需求。


本文在博客園和個人我的博客www.fujiabin.com上同步發佈。轉載請註明來源。

相關文章
相關標籤/搜索