1. 程式人生 > >《Python程式設計從入門到實戰》學習心得

《Python程式設計從入門到實戰》學習心得

一、前言

之前,專案後臺基本都是使用 Java 的 SpringBoot 框架完成的,
Python 自去年到現在,一直以來,都是玩著學的,沒有想過要應用到專案上。
但近來,科技園這邊的吳老師,建議專案中使用 Python 的 Django 框架做後臺,因其容易拓展、維護等,這是笨重的 Java 難以企及的。

是時候認真對待 Python ,近來其也火得不行了~
花了一天跳讀了一本評價極好的書《Python程式設計從入門到實戰》,以複習一下之前的 Python 基礎,同時做了一些小 demo,同時藉機對比了 C++、Java、JavaScript 等語言的基礎,像讀小說般輕鬆有趣,相當不錯的一次體驗,分享一下
這裡寫圖片描述

二、demo

Python直譯器有兩種,也就是說有兩種方式執行Python程式碼——①互動式程式設計、②指令碼式程式設計
很多初始教程採用互動式程式設計
這裡筆者藉助 pycharm,採用指令碼式程式設計。
###1.資料型別

# 1、全體小寫
print('Itaem'.lower())

# 2、全體大寫
print('Itaem'.upper())

# 3、連線+
print('Itaem'+'團隊')

# 4、轉義:和當年 C++ 課設常用的‘UI’符號一樣作用
print('方向:\n\t大資料\n\t雲端計算\n\t人工智慧')

# 5、去空:lstrip 去左空、rstrip 去右空
print('----'+' ITAEM '.strip()+'----') # 6、乘方:Python 特色 print(2**3) # 7、浮點:和 C++ 一致 print(2*0.3,3/2,3.0/2) # 8、字元+ 數字:和 Java 不一樣,得先轉換先 print('ITAEM有'+str(15)+'個成員') # 9、求模:可以 %2 根據 1/0 定 奇偶 print(5%2)

2.列表

# 1、列表 CRUD
lang=['Java','JavaScript','Python']
# ① 查
# 第一個元素
print(lang[0])
# 最後一個元素,當len=0 時報錯,負數即從末尾算起
print(lang[-1]) # ② 改 lang[0]='Go' print(lang) # ③ 增 lang.append('php') print(lang) # ④ 刪 del lang[0] print(lang) # ⑤ 刪末、用之 print(lang.pop()) print(lang) # ⑥ 刪值:只刪除第一個指定的值 lang.remove('JavaScript') print(lang) # 2、列表 組織 lang=['Java','C','Python'] # ① 永久排序: # Ⅰ、正:按字母 lang.sort() print(lang) # Ⅱ、反:按字母 lang.sort(reverse=True) print(lang) # ② 臨時排序:只排序顯示本次 print(sorted(lang)) # print(sorted(lang,reverse=True)) # 反 print(lang) # ③ 倒排序 lang.reverse() print(lang) # ④ 長度 print(len(lang)) # 3、列表 遍歷 lang=['Java','C','Python'] # ① for in:和 ES 差不多,就省了( ) for l in lang: print(l) # ② 數值 for v in range(3,9): print(v) # ③ 數值->列表 nums=list(range(3,9)) print(nums) # ④ 統計數字列表 # 最小 print(min(nums)) # 最大 print(max(nums)) # 平均 print(sum(nums)) # ⑤ 列表解析 squares=[v**2 for v in range(3,9)] print(squares) # ⑥ 切片 print(squares[:3]) print(squares[0:3]) print(squares[0:])

3.元組

ssh=('Spring','Struts2','Hibernate')
print(ssh)
print(ssh[0])
# ① 元組不能修改
# ssh[0]='xxx' # 報錯
# ② 遍歷
for v in ssh:
    print(v)

4.字典

# 1、建立:基本是 JSON 串、可巢狀
program={
    'C++':'good',
    'Java':'well',
    'Python':['perfect', 'powerful'],
    'other':{
        'php':'easy',
        'C#':'windows'
    }
}
print(program)
# 2、查
print(program['Java'])
# 3、增
program['Go']='excellent'
print(program)
# 4、改
program['C++']='common'
print(program)
# 5、刪
del program['C++']
print(program)
# 6、遍歷key-value
for k,v in program.items():
    print(k,v)
# 7、遍歷key、排序
for k in sorted(program.keys()):
    print(k)
# 8、遍歷value:value 巢狀,排不了序
for v in program.values():
    print(v)

這裡寫圖片描述

5.流程控制

# 1、if-elif-else 判斷
SSM=['Spring','SpringMVC','MyBatis']
# 列表部位空返回 True,否則 False
if SSM:
    print('SSM不為空')
elif 'Hibernate' not in SSM:
    print('Hibernate 不屬於SSM系列')
else:
    print('結束')

# 2、input 輸入:預設字串
# name=input('your name')
# print('hello',name)
# age=int(input('your age')) # 字元轉數值
# if 18==age:
#     print('perfect!')

# 3、while 迴圈:break 退出、continue 跳過
i=0
total=0
while i<=100:
    i = i + 1
    if i==5:
        break
    if i==4:
        continue
    total=total+i
print(total)

6.函式

import mymodule  as s

# 1、定義函式:傳參
def sayHello(name,msg='excellent~'):
    print(name,msg)
    return 'that`s all'

# 2、引數順序
sayHello('linhongcun!','well done~') # linhongcun! well done~
sayHello(msg='good~',name='larger5!') # larger5! good~

# 3、預設值:和 C++ 一致
sayHello(name='ITAEM!') # ITAEM excellent~
sayHello('ITAEM!') # ITAEM excellent~

# 4、返回值
print(sayHello('04008'))

# 5、列表引數
def update(list):
    list.append('55開')
# ① 原件
list=['Python','Java']
update(list)
print(list)
# ② 副本:禁止修改列表
update(list[:])
print(list)

#  6、不定引數
def show(*lan):
    print(lan)
show('Python')
show('Python','JavaScript')

7.類

# 繼承 object
class People():
    def __init__(self,hobby='bb'):
        self.hobby=hobby

class Student(People):

    # 構造方法
    def __init__(self,hobby='bb',name='lvcha',age=15):
        super().__init__(hobby)
        self.name=name
        self.age=age

    # 類似 Java 的 toString
    def __str__(self):
        return str(self.hobby+self.name+str(self.age))

    # 定義類 內部函式
    def showMSG(self):
        print('your name:',self.name)
        print('your age',self.age)

s1=Student('progra','linhongcun',21)
print(s1.hobby)
print(s1)

8.檔案

# 1、傳統開啟、讀取、關閉:和 C++ 基本一致
file1=open('xxx.txt','r') #注意路徑
#全部輸入,打成一行
content=file1.readlines()
print(len(content))
print(content)
file1.close()

# 2、with 在不需要訪問檔案後將自動關閉 ✔
with open('xxx.txt','r') as file2:
    print(file2.read())

# 3、新建寫入
with open('zzz.txt','w') as file3:
    file3.write('I like programming\n')
    file3.write('I love you\n')

# 4、追加
with open('zzz.txt','a') as file4:
    file4.write('I can`t forget you\n')

9.異常

# 1、try-except-else
try:
    # print(1/0)
    print(2/5)
except ZeroDivisionError:
    print('fail by zero')
else:
    print('ok')

10.JSON

import json

# 列表
language1=['Python','Java','JavaScript']
# 字典
language2={
    'Python':'powerful',
    'Java':'famous',
    'JavaScript':'developing'
}
# 元組
language3=('C++','C','C#','Go')

# 1、JSON 寫入檔案
with open('yyy.txt','w') as file1:
    # json.dump(language1,file1)
    json.dump(language2,file1)
    # json.dump(language3,file1)

# 2、讀取 JSON 檔案
with open('yyy.txt','r') as file2:
    txt=json.load(file2)
    print(txt)

11.pygame

import pygame
import sys

def run():

    # 初始化螢幕
    pygame.init()
    # 視窗大小
    screen = pygame.display.set_mode((900, 600))
    # 視窗標題
    pygame.display.set_caption('吃雞神坑助手')
    # 淺灰色
    bg_color=(230,230,230)
    image=pygame.image.load('numberOne.png')
    rect=screen.get_rect()
    while True:
        # 監視鍵盤、滑鼠
        for event in pygame.event.get():
            if event.type==pygame.QUIT:
                sys.exit()
        # 背景顏色
        screen.fill(bg_color)
        # 圖片
        screen.blit(image,rect)
        # 顯示視窗
        pygame.display.flip()

# 執行
run()

這裡寫圖片描述

12.模組化程式設計

這裡寫圖片描述

#####1.__init__.py

def show():
    print('hello')

#####2.test.py

from CrashProject import other
other.show()

13.切片、迭代器、生成器

letter = ['a', 'b', 'c']
num = ['1', '2']

# []->()
list = (a + b for a in letter for b in num)
print(list)
for a in list:
    print(a)

list = [a + b for a in letter for b in num]
print(list)

這裡寫圖片描述

這裡寫圖片描述

14、裝飾器

類似 JavaEE Spring 框架的 AOP

# 模擬登陸攔截
def AOPTest(func):
    print("---登陸前---")
    func()
    print("---登陸後---")

@AOPTest
def f1():
    print('呼叫方法')

這裡寫圖片描述

15、屬性 setter、getter

class Student(object):
    @property
    def birth(self):
        return self._birth

    @birth.setter
    def birth(self, value):
        self._birth = value


s1=Student()
s1.birth=18
print(s1.birth)

這裡寫圖片描述

16、多型

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

    def talk(self):
        pass

    @staticmethod   # 封裝
    def animal_talk(obj):
        obj.talk()


class Cat(Animal):
    def talk(self):
        print('喵')

class Dog(Animal):
    def talk(self):
        print('汪')

d = Dog("dog1")

c = Cat("cat1")

Animal.animal_talk(c)
Animal.animal_talk(d)

這裡寫圖片描述

三、其他

1、使用豆瓣加速 pip 模組,如安裝:

pip  install  -i  https://pypi.doubanio.com/simple/ django
pip install web.py -i http://pypi.douban.com/simple