学習10:Pythonの重要な知識

8504 ワード

Pythonは知識を無視しやすい
(1)printのデフォルト出力は改行されています.改行しない場合は、変数の末尾にend=""""":
(2)isinstanceとtypeの違いは,type()が子クラスを親クラスタイプとは思わないことである.isinstance()は、子クラスが親クラスタイプであると考えられます.親:動物;子類:猫.isinstance()は猫を動物、type()は猫を動物ではないと考えています.
(3)数値の除算には2つの演算子があります:/浮動小数点数を返し、//整数を返します.
(4)Pythonでは単文字タイプはサポートされておらず、単文字はPythonでも文字列として使用されている.
(5)反復器とジェネレータ.
  • 反復はPythonの最も強力な機能の一つであり、集合要素にアクセスする方法である.反復オブジェクトは、すべての要素がアクセスされるまで、コレクションの最初の要素からアクセスを開始します.反復器は前に進むしか後退しない.反復器には2つの基本的な方法がある:iter()とnext().1つのクラスを反復器として使用するには、クラスで2つのメソッド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)リストのスタックとキュー
    (7)出力値を文字列に変換し、repr()またはstr()関数を用いて実現することができる.
  • str():関数は、ユーザーが読みやすい表現を返します.
  • repr():解釈器の読みやすい表現を生成します.

  • (8)クラスはinit()メソッドを定義し,クラスのインスタンス化操作はinit()メソッドを自動的に呼び出す.クラスのメソッドは、通常の関数とは特別な違いがあります.通常、selfという名前の追加の最初のパラメータ名が必要です.一般的な関数定義とは異なり、クラスメソッドにはパラメータselfが含まれ、最初のパラメータである必要があります.selfはクラスのインスタンスを表します.selfの名前は死に決まっているわけではありませんが、thisを使ってもいいですが、約束通りselfを使ったほうがいいです.
    (9)**__private_attrs:2つの下線の先頭に、この属性がプライベートであることを宣言し、クラスの外部で使用または直接アクセスできません.クラス内のメソッドで使用する場合self._private_attrs**.
    (10)urlsから受信データを処理するurllib.requestおよびEメール送信用smtplib:
    >>> 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('[email protected]', '[email protected]',
    ... """To: [email protected]
    ... From: [email protected]
    ...
    ... 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)WSDIアプリケーションと一般的な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
  • の導入
    ファイルを作成するpy、コードは次のとおりです.
    from flask import Flask
    app = Flask(__name__)
    @app.route('/')
    def index():
        return "I am app 1"

    次のコマンドを実行します.
    uwsgi --socket 127.0.0.1:3031 --wsgi-file myflaskapp.py --callable app --processes 4 --threads 2 --stats 127.0.0.1:9191

    転載先:https://www.cnblogs.com/baiboy/p/11014657.html