Latest web development tutorials

Python3 ภาพรวมมาตรฐานห้องสมุด

อินเตอร์เฟซระบบปฏิบัติการ

โมดูล OS ให้จำนวนของฟังก์ชั่นที่เกี่ยวข้องกับระบบปฏิบัติการที่เชื่อมโยง

>>> import os
>>> os.getcwd()      # 返回当前的工作目录
'C:\\Python34'
>>> os.chdir('/server/accesslogs')   # 修改当前的工作目录
>>> os.system('mkdir today')   # 执行系统命令 mkdir 
0

เราแนะนำให้ใช้ "นำเข้า OS สไตล์" แทน "จาก OS นำเข้า * ที่" เพื่อให้มั่นใจว่ามีระบบปฏิบัติการที่แตกต่างกันใน os.open ที่แตกต่างกัน () ไม่แทนที่ในตัวฟังก์ชั่นเปิด ()

เมื่อคุณใช้ระบบปฏิบัติการดังกล่าวเป็นโมดูลที่มีขนาดใหญ่ในตัวผบ () และความช่วยเหลือ () ฟังก์ชั่นที่มีประโยชน์:

>>> import os
>>> dir(os)
<returns a list of all module functions>
>>> help(os)
<returns an extensive manual page created from the module's docstrings>

สำหรับไฟล์และการจัดการไดเรกทอรีงานประจำวัน ,: mod: โมดูล shutil มีอินเตอร์เฟซระดับสูงที่ง่ายต่อการใช้:

>>> import shutil
>>> shutil.copyfile('data.db', 'archive.db')
>>> shutil.move('/build/executables', 'installdir')

ไฟล์ wildcard

โมดูล glob ให้ฟังก์ชั่นสำหรับการทำรายการไฟล์จากการค้นหาไดเรกทอรีตัวแทน:

>>> import glob
>>> glob.glob('*.py')
['primes.py', 'random.py', 'quote.py']

บรรทัดคำสั่ง

ยูทิลิตี้สคริปต์ที่พบบ่อยมักจะเรียกใช้พารามิเตอร์บรรทัดคำสั่ง เหล่านี้อาร์กิวเมนต์บรรทัดคำสั่งเป็นรายการที่จัดเก็บไว้ในโมดูล SYS ตัวแปร argv คุณจะได้รับตัวอย่างผลลัพธ์ต่อไปหลังจากที่การดำเนินงานของ "งูใหญ่ demo.py หนึ่งสองสาม" ที่บรรทัดคำสั่ง:

>>> import sys
>>> print(sys.argv)
['demo.py', 'one', 'two', 'three']

ข้อผิดพลาดในการเปลี่ยนเส้นทางส่งออกและยุติ Program

SYS และยัง stdin, stdout และ stderr คุณสมบัติแม้เมื่อ stdout ได้รับการเปลี่ยนเส้นทางหลังนอกจากนี้ยังสามารถใช้ในการแสดงคำเตือนและข้อความผิดพลาด

>>> sys.stderr.write('Warning, log file not found starting a new one\n')
Warning, log file not found starting a new one

สคริปต์ส่วนใหญ่จะนำไปยุติการใช้งานของ "sys.exit ()"


การแข่งขันสตริงปกติ

อีกครั้งสำหรับโมดูลการประมวลผลขั้นสูงสตริงมีเครื่องมือแสดงออกปกติ สำหรับการจับคู่ที่ซับซ้อนและการจัดการ, การแสดงออกปกติให้รวบรัดการแก้ปัญหาที่ดีที่สุด:

>>> import re
>>> re.findall(r'\bf[a-z]*', 'which foot or hand fell fastest')
['foot', 'fell', 'fastest']
>>> re.sub(r'(\b[a-z]+) \1', r'\1', 'cat in the the hat')
'cat in the hat'

หากคุณจะต้องฟังก์ชั่นที่เรียบง่ายคุณควรพิจารณาวิธีสตริงเนื่องจากพวกเขาจะง่ายต่อการอ่านและการแก้ปัญหา:

>>> 'tea for too'.replace('too', 'two')
'tea for two'

คณิตศาสตร์

ลอยโมดูลคณิตศาสตร์จุดให้การเข้าถึงห้องสมุด C อ้างอิง:

>>> import math
>>> math.cos(math.pi / 4)
0.70710678118654757
>>> math.log(1024, 2)
10.0

สุ่มมีเครื่องมือสำหรับการสร้างตัวเลขสุ่ม

>>> import random
>>> random.choice(['apple', 'pear', 'banana'])
'apple'
>>> random.sample(range(100), 10)   # sampling without replacement
[30, 83, 16, 4, 8, 81, 41, 50, 18, 33]
>>> random.random()    # random float
0.17970987693706186
>>> random.randrange(6)    # random integer chosen from range(6)
4

อินเทอร์เน็ต

มีหลายโมดูลสำหรับการเข้าถึงอินเทอร์เน็ตและการประมวลผลโปรโตคอลอินเทอร์เน็ต สองที่ง่ายที่สุดคือการประมวลผลข้อมูลที่ได้รับจาก URL และ smtplib urllib.request สำหรับการส่ง E-mail:

>>> from urllib.request import urlopen
>>> for line in urlopen('http://tycho.usno.navy.mil/cgi-bin/timer.pl'):
...     line = line.decode('utf-8')  # Decoding the binary data to text.
...     if 'EST' in line or 'EDT' in line:  # look for Eastern Time
...         print(line)

<BR>Nov. 25, 09:43:32 PM EST

>>> 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()

โปรดทราบว่าตัวอย่างที่สองต้องใช้เซิร์ฟเวอร์อีเมลของท้องถิ่นได้ทำงาน


วันที่และเวลา

โมดูล datetime สำหรับวันที่และเวลาในรูปแบบที่ทั้งง่ายและซับซ้อน

วันที่การสนับสนุนและการคำนวณเวลาขณะที่มุ่งเน้นการสำนึกของการประมวลผลและการจัดรูปแบบการส่งออกมีประสิทธิภาพมากขึ้น

โมดูลยังสนับสนุนหน่วยประมวลผลโซนเวลา:

>>> # dates are easily constructed and formatted
>>> from datetime import date
>>> now = date.today()
>>> now
datetime.date(2003, 12, 2)
>>> now.strftime("%m-%d-%y. %d %b %Y is a %A on the %d day of %B.")
'12-02-03. 02 Dec 2003 is a Tuesday on the 02 day of December.'

>>> # dates support calendar arithmetic
>>> birthday = date(1964, 7, 31)
>>> age = now - birthday
>>> age.days
14368

การบีบอัดข้อมูล

โมดูลดังต่อไปนี้โดยตรงสนับสนุนการเก็บข้อมูลและการบีบอัดข้อมูลทั่วไปรูปแบบ: zlib, gzip, bz2, zipfile และ tarfile

>>> import zlib
>>> s = b'witch which has which witches wrist watch'
>>> len(s)
41
>>> t = zlib.compress(s)
>>> len(t)
37
>>> zlib.decompress(t)
b'witch which has which witches wrist watch'
>>> zlib.crc32(s)
226805979

การวัดประสิทธิภาพ

ประสิทธิภาพของวิธีการที่แตกต่างกันสำหรับผู้ใช้บางที่จะเข้าใจปัญหาเดียวกันท่ามกลางความสนใจมาก งูใหญ่ให้เป็นเครื่องมือวัดที่จะให้คำตอบตรงคำถามเหล่านี้

ตัวอย่างเช่นใช้บรรจุและการเอาออก tuple องค์ประกอบแลกเปลี่ยนดูดีกว่าการใช้วิธีการแบบดั้งเดิมที่น่าสนใจมากขึ้นวิธีการที่ทันสมัย ​​timeit พิสูจน์แล้วว่าได้เร็วขึ้น

>>> from timeit import Timer
>>> Timer('t=a; a=b; b=t', 'a=1; b=2').timeit()
0.57535828626024577
>>> Timer('a,b = b,a', 'a=1; b=2').timeit()
0.54962537085770791

ด้วยความเคารพ timeit เม็ดเล็ก ,: mod: รายละเอียดและ pstats โมดูลให้ตัวชี้วัดของเวลาสำหรับบล็อกขนาดใหญ่ของเครื่องมือรหัส


โมดูลทดสอบ

วิธีหนึ่งคือการพัฒนาการพัฒนาซอฟต์แวร์ที่มีคุณภาพสูงและการทดสอบของรหัสที่ฟังก์ชั่นในแต่ละครั้งและในกระบวนการพัฒนามักจะผ่านการทดสอบ

โมดูล doctest มีเครื่องมือสำหรับการสแกนโมดูลและโปรแกรมการฝังตัวในการทดสอบสตริงเอกสารจะดำเนินการให้สอดคล้องกับ

ทดสอบการก่อสร้างเป็นง่ายๆเป็นผลผลิตของตนตัดและวางลงในสตริงเอกสาร

โดยวิธีการเช่นการให้บริการโดยผู้ใช้ก็ตอกย้ำเอกสารที่ช่วยให้โมดูล doctest เพื่อให้แน่ใจว่ารหัสยังคงเป็นจริงเอกสาร:

def average(values):
    """Computes the arithmetic mean of a list of numbers.

    >>> print(average([20, 30, 70]))
    40.0
    """
    return sum(values) / len(values)

import doctest
doctest.testmod()   # 自动验证嵌入测试

ซึ่งแตกต่างจากโมดูล doctest UnitTest โมดูลเพื่อที่จะใช้งานง่าย แต่ก็สามารถให้ชุดที่ครอบคลุมมากขึ้นของการทดสอบในแฟ้มต่างหาก:

import unittest

class TestStatisticalFunctions(unittest.TestCase):

    def test_average(self):
        self.assertEqual(average([20, 30, 70]), 40.0)
        self.assertEqual(round(average([1, 5, 7]), 1), 4.3)
        self.assertRaises(ZeroDivisionError, average, [])
        self.assertRaises(TypeError, average, 20, 30, 70)

unittest.main() # Calling from the command line invokes all tests