學習10:Python重要知識

Python易忽略知識

(1)print 默認輸出是換行的,若是要實現不換行須要在變量末尾加上 end=""html

1559716856085

(2)isinstance 和 type 的區別在於:type()不會認爲子類是一種父類類型。isinstance()會認爲子類是一種父類類型。這麼理解,父類:動物;子類:貓。isinstance()認爲貓是動物,type()認爲貓就是貓不是動物。python

(3)數值的除法包含兩個運算符:/ 返回一個浮點數,// 返回一個整數。git

(4)Python 不支持單字符類型,單字符在 Python 中也是做爲一個字符串使用。github

(5)迭代器與生成器。正則表達式

  • 迭代是Python最強大的功能之一,是訪問集合元素的一種方式。迭代器對象從集合的第一個元素開始訪問,直到全部的元素被訪問完結束。迭代器只能往前不會後退。迭代器有兩個基本的方法:iter()next()。把一個類做爲一個迭代器使用須要在類中實現兩個方法 iter() 與 next() 。
class MyNumbers:
  def __iter__(self):
    self.a = 1
    return self
 
  def __next__(self):
    x = self.a
    self.a += 1
    return x
 
myclass = MyNumbers()
myiter = iter(myclass)
 
print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))
  • 在 Python 中,使用了 yield 的函數被稱爲生成器(generator)。生成器是一個返回迭代器的函數,只能用於迭代操做,更簡單點理解生成器就是一個迭代器。每次遇到 yield 時函數會暫停並保存當前全部的運行信息,返回 yield 的值, 並在下一次執行 next() 方法時從當前位置繼續運行。使用 yield 實現斐波那契數列:
#!/usr/bin/python3
 
import sys
 
def fibonacci(n): # 生成器函數 - 斐波那契
    a, b, counter = 0, 1, 0
    while True:
        if (counter > n): 
            return
        yield a
        a, b = b, a + b
        counter += 1
f = fibonacci(10) # f 是一個迭代器,由生成器返回生成
 
while True:
    try:
        print (next(f), end=" ")
    except StopIteration:
        sys.exit()

(6)列表的棧與隊列sql

1559718273814

(7)將輸出的值轉成字符串,可使用 repr() 或 str() 函數來實現。mongodb

  • str(): 函數返回一個用戶易讀的表達形式。
  • repr(): 產生一個解釋器易讀的表達形式。

(8)類定義了 init() 方法,類的實例化操做會自動調用 init() 方法。類的方法與普通的函數只有一個特別的區別——它們必須有一個額外的第一個參數名稱, 按照慣例它的名稱是 self。與通常函數定義不一樣,類方法必須包含參數 self, 且爲第一個參數,self 表明的是類的實例。self 的名字並非規定死的,也可使用 this,可是最好仍是按照約定是用 self數據庫

(9)**__private_attrs:兩個下劃線開頭,聲明該屬性爲私有,不能在類的外部被使用或直接訪問。在類內部的方法中使用時 self.__private_attrs**。flask

1559725262731

(10)處理從 urls 接收數據的 urllib.request 以及用於發送電子郵件的 smtplib:app

>>> from urllib.request import urlopen
>>> for line in urlopen('http://tycho.usno.navy.mil/cgi-bin/timer.pl'):
...     if 'EST' in line or 'EDT' in line.decode('utf-8'): 
...         print(line)


>>> import smtplib
>>> server = smtplib.SMTP('localhost')
>>> server.sendmail('soothsayer@example.org', 'jcaesar@example.org',
... """To: jcaesar@example.org
... From: soothsayer@example.org
...
... Beware the Ides of March.
... """)
>>> server.quit()

(11)doctest掃描模塊並根據程序中內嵌的文檔字符串執行測試。經過用戶提供的例子,它強化了文檔,容許 doctest 模塊確認代碼的結果是否與文檔一致:

def average(values):
    return sum(values) / len(values)

import doctest
print(doctest.testmod())   # 自動驗證嵌入測試

(12)Python實例總結 https://www.runoob.com/python3/python3-examples.html

(13)Python實現查找與排序:https://www.runoob.com/python3/python3-examples.html

(14)re.match 嘗試從字符串的起始位置匹配一個模式,若是不是起始位置匹配成功的話,match()就返回none。flags是否區分大小寫。

re.match(pattern, string, flags=0)

(15)re.match與re.search的區別。re.match只匹配字符串的開始,若是字符串開始不符合正則表達式,則匹配失敗,函數返回None;而re.search匹配整個字符串,直到找到一個匹配。

(16)Python鏈接MySQL

import MySQLdb

# 顯示全部數據庫
mydb = MySQLdb.Connect(
    host='localhost',
    user='root',
    passwd='root',
    database='all_news'
    )
mycursor = mydb.cursor()
mycursor.execute("SHOW DATABASES")
for x in mycursor:
    print(x)
print("*"*20)

# 建立數據表
# mycursor.execute("CREATE TABLE sites (name VARCHAR(255), url VARCHAR(255))")
mycursor.execute("SHOW TABLES")
for x in mycursor:
    print(x)

# 修改表
# mycursor.execute("ALTER TABLE sites ADD COLUMN id INT AUTO_INCREMENT PRIMARY KEY")

# 插入數據
# sql = "INSERT INTO sites (name, url) VALUES (%s, %s)"
# val = ("RUNOOB", "https://www.runoob.com")
# mycursor.execute(sql, val)
# mydb.commit()    # 數據表內容有更新,必須使用到該語句
# print(mycursor.rowcount, "記錄插入成功。")

# 批量插入
# sql = "INSERT INTO sites (name, url) VALUES (%s, %s)"
# val = [
#   ('Google', 'https://www.google.com'),
#   ('Github', 'https://www.github.com'),
#   ('Taobao', 'https://www.taobao.com'),
#   ('stackoverflow', 'https://www.stackoverflow.com/')
# ]
# mycursor.executemany(sql, val)
# mydb.commit()    # 數據表內容有更新,必須使用到該語句
# print(mycursor.rowcount, "記錄插入成功。")


# 查詢數據
print("="*20)
mycursor.execute("SELECT * FROM sites")
myresult = mycursor.fetchall()     # fetchall() 獲取全部記錄
# myresult = mycursor.fetchone() # 讀一條數據
for x in myresult:
  print(x)

# 刪除數據
# sql = "DELETE FROM sites WHERE name = 'stackoverflow'"
# mycursor.execute(sql)
# mydb.commit()
# print(mycursor.rowcount, " 條記錄刪除")

# 更新數據
sql = "UPDATE sites SET name = 'ZH' WHERE id = 4"
mycursor.execute(sql)
mydb.commit()
print(mycursor.rowcount, " 條記錄被修改")

# 執行事務
# SQL刪除記錄語句
sql = "DELETE FROM EMPLOYEE WHERE AGE > %s" % (20)
try:
   # 執行SQL語句
   cursor.execute(sql)
   # 向數據庫提交
   db.commit()
except:
   # 發生錯誤時回滾
   db.rollback()

(17) 格式化日期:

#!/usr/bin/python3
import time
# 格式化成2016-03-20 11:45:39形式
print (time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))

# 格式化成Sat Mar 28 22:24:24 2016形式
print (time.strftime("%a %b %d %H:%M:%S %Y", time.localtime()))

(18)Python操做MongoDB

  • 啓動服務
D:\mongodb\bin>mongod --dbpath D:\mongodb\data\db --logpath=D:\mongodb\log\mongo.log --logappend
  • MongoDB
# Python 操做MongoDB
print("*"*50)

import pymongo

myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["runoobdb"]
dblist = myclient.list_database_names()
if "runoobdb" in dblist:
    print("數據庫已存在!")

# 建立集合
mycol = mydb["sites"]
collist = mydb.list_collection_names()
if "sites" in collist:   # 判斷 sites 集合是否存在
    print("集合已存在!")


# 添加數據
mydict = [
  { "_id": 1, "name": "RUNOOB", "cn_name": "菜鳥教程"},
  { "_id": 2, "name": "Google", "address": "Google 搜索"},
  { "_id": 3, "name": "Facebook", "address": "臉書"},
  { "_id": 4, "name": "Taobao", "address": "淘寶"},
  { "_id": 5, "name": "Zhihu", "address": "知乎"}
  ]
# x = mycol.insert_one(mydict)
# x = mycol.insert_many(mydict)
# print(x.inserted_ids)

# 修改數據
myquery = { "alexa": "10000" }
newvalues = { "$set": { "alexa": "12345" } }
mycol.update_one(myquery, newvalues)
# 輸出修改後的  "sites"  集合
# for x in mycol.find():
#   print(x)




# 查詢數據, find() 方法來查詢指定字段的數據,將要返回的字段對應值設置爲 1。

# for x in mycol.find():
    # print(x)

# for x in mycol.find({},{"_id":0}):
#     print(x)

# myquery = { "name": "RUNOOB" }
# for x in mycol.find(myquery):
#     print(x)


# myresult = mycol.find().limit(3)
# 輸出結果
# for x in myresult:
#   print(x)

# 刪除數據
# myquery = { "name": "知乎" }
# myquery = { "name": {"$regex": "^F"} }

# mycol.delete_one(myquery)
# mycol.delete_many(myquery)
# 刪除後輸出
for x in mycol.find():
  print(x)


# 排序,升序sort("alexa"),降序sort("alexa", -1)
# mydoc = mycol.find().sort("alexa")
# for x in mydoc:
#   print(x)

(19)WSGI 應用和常見的 Web 框架

  • 部署Django
[uwsgi]
socket = 127.0.0.1:3031
chdir = /home/foobar/myproject/
wsgi-file = myproject/wsgi.py
processes = 4
threads = 2
stats = 127.0.0.1:9191
uwsgi yourfile.ini
  • 部署Flask

建立文件 myflaskapp.py ,代碼以下:

from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
    return "<span style='color:red'>I am app 1</span>"

執行如下命令:

uwsgi --socket 127.0.0.1:3031 --wsgi-file myflaskapp.py --callable app --processes 4 --threads 2 --stats 127.0.0.1:9191
相關文章
相關標籤/搜索