Pythonæ¯ä¸ç§é¢å对象çç¼ç¨è¯è¨ï¼éé¢å
å«æ丰å¯å¼ºå¤§çåºï¼æ³è¦å¦ä¹ Pythonå¼åï¼é¦å
éè¦å¦ä¹ å¦ä½å¯¼å
¥æ¨¡åæå
ãä¸é¢å°±è·å¤§å®¶ä¸èµ·è®¨è®ºä¸Python导å
¥æ¨¡åçå ç§æ¹æ³ï¼
常è§å¯¼å
¥
æ常ç¨ç导å
¥æ¹å¼ï¼å¤§æ¦æ¯è¿æ ·çï¼
import sys
åªéè¦ä½¿ç¨ import ï¼ç¶åæå®å¸æ导å
¥ç模åæå
å³å¯ãç¨è¿ç§æ¹æ³å¯¼å
¥ç好å¤æ¯å¯ä»¥ä¸æ¬¡æ§å¯¼å
¥å¤ä¸ªå
æ模åï¼
import os, sys, time
è½ç¶è¿èçäºç©ºé´ï¼ä½æ¯å´è¿èäºPythoné£æ ¼æåã Pythoné£æ ¼æå建议å°æ¯ä¸ªå¯¼å
¥è¯å¥åç¬æè¡ ã
ææ¶å¨å¯¼å
¥æ¨¡åæ¶ï¼ä½ æ³è¦éå½åè¿ä¸ªæ¨¡åãè¿ä¸ªåè½å¾å®¹æå®ç°ï¼
import sys as system
print(system.platform)
ä¸é¢ç代ç å°æ们导å
¥ç sys 模åéå½å为 system ãæ们å¯ä»¥æç
§å以åä¸æ ·çæ¹å¼è°ç¨æ¨¡åçæ¹æ³ï¼ä½æ¯å¯ä»¥ç¨ä¸ä¸ªæ°ç模ååãä¹ææäºå模åå¿
é¡»è¦ä½¿ç¨ç¹æ è®°æ³æè½å¯¼å
¥ã
import urllib.error
è¿ä¸ªæ
åµä¸å¸¸è§ï¼ä½æ¯å¯¹æ¤ææäºè§£æ»æ¯æ²¡æåå¤çã
使ç¨fromè¯å¥å¯¼å
¥
ææ¶æ们åªæ³è¦å¯¼å
¥ä¸ä¸ªæ¨¡åæåºä¸çæ个é¨åãé£ä¹Pythonæ¯å¦ä½å®ç°è¿ç¹ï¼
from functools import lru_cache
ä¸é¢è¿è¡ä»£ç å¯ä»¥è®©ä½ ç´æ¥è°ç¨ lru_cache ãå¦ææ常è§æ¹å¼å¯¼å
¥ functools ï¼é£ä¹å°±å¿
é¡»åè¿æ ·è°ç¨ lru_cache ï¼
functools.lru_cache(*args)
æ ¹æ®å®é
ç使ç¨åºæ¯ï¼ä¸é¢çåæ³å¯è½æ¯æ´å¥½çãå¨å¤æç代ç åºä¸ï¼è½å¤çåºæ个å½æ°æ¯ä»åªé导å
¥çè¿ç¹å¾æç¨çãä¸è¿ï¼å¦æä½ ç代ç ç»´æ¤çå¾å¥½ï¼æ¨¡ååç¨åº¦é«ï¼é£ä¹åªä»æ个模åä¸å¯¼å
¥ä¸é¨åå
容ä¹æ¯é常æ¹ä¾¿åç®æ´çã
å½ç¶ï¼ä½ è¿å¯ä»¥ä½¿ç¨fromæ¹æ³å¯¼å
¥æ¨¡åçå
¨é¨å
容ï¼å°±åè¿æ ·ï¼
from os import *
è¿ç§åæ³å¨å°æ°æ
åµä¸æ¯æºæ¹ä¾¿çï¼ä½æ¯è¿æ ·ä¹ä¼æä¹±ä½ çå½å空é´ãé®é¢å¨äºï¼ä½ å¯è½å®ä¹äºä¸ä¸ªä¸å¯¼å
¥æ¨¡åä¸å称ç¸åçåéæå½æ°ï¼è¿æ¶å¦æä½ è¯å¾ä½¿ç¨
os 模åä¸çåååéæå½æ°ï¼å®é
使ç¨çå°æ¯ä½ èªå·±å®ä¹çå
容ãå æ¤ï¼ä½ æåå¯è½ä¼ç¢°å°ä¸ä¸ªç¸å½è®©äººå°æçé»è¾é误ã
æ ååºä¸æå¯ä¸æ¨èå
¨ç导å
¥ç模ååªæTkinter ã
å¦æä½ æ£å¥½è¦åèªå·±ç模åæå
ï¼æ人ä¼å»ºè®®ä½ å¨ __init__.py æ件ä¸å¯¼å
¥ææå
容ï¼è®©æ¨¡åæè
å
使ç¨èµ·æ¥æ´æ¹ä¾¿ãæ个人æ´å欢æ¾ç¤ºå°å¯¼å
¥ï¼èééå¼å°å¯¼å
¥ã
ä½ ä¹å¯ä»¥éåæä¸æ¹æ¡ï¼ä»ä¸ä¸ªå
ä¸å¯¼å
¥å¤ä¸ªé¡¹ï¼
from os import path, walk, unlinkfrom os import uname, remove
å¨ä¸è¿°ä»£ç ä¸ï¼æä»¬ä» os 模åä¸å¯¼å
¥äº5个å½æ°ãä½ å¯è½æ³¨æå°äºï¼æ们æ¯éè¿å¤æ¬¡ä»åä¸ä¸ªæ¨¡åä¸å¯¼å
¥å®ç°çãå½ç¶ï¼å¦æä½ æ¿æçè¯ï¼ä½ ä¹å¯ä»¥ä½¿ç¨åæ¬å·ä¸æ¬¡æ§å¯¼å
¥å¤ä¸ªé¡¹ï¼
from os import (path, walk, unlink, uname,
remove, rename)
è¿æ¯ä¸ä¸ªæç¨çæå·§ï¼ä¸è¿ä½ ä¹å¯ä»¥æ¢ä¸ç§æ¹å¼ï¼
from os import path, walk, unlink, uname, \
remove, rename
ä¸é¢çåææ æ¯Pythonä¸çç»è¡ç¬¦ï¼åè¯è§£éå¨è¿è¡ä»£ç 延ç»è³ä¸ä¸è¡ã
ç¸å¯¹å¯¼å
¥
PEP 328 ä»ç»äºå¼å
¥ç¸å¯¹å¯¼å
¥çåå ï¼ä»¥åéæ©äºåªç§è¯æ³ãå
·ä½æ¥è¯´ï¼æ¯ä½¿ç¨å¥ç¹æ¥å³å®å¦ä½ç¸å¯¹å¯¼å
¥å
¶ä»å
æ模åãè¿ä¹åçåå æ¯ä¸ºäºé¿å
å¶ç¶æ
åµä¸å¯¼å
¥æ ååºä¸ç模å产çå²çªãè¿éæ们以PEP 328ä¸ç»åºçæ件夹ç»æ为ä¾ï¼ççç¸å¯¹å¯¼å
¥æ¯å¦ä½å·¥ä½çï¼
my_package/
__init__.py
subpackage1/
__init__.py
module_x.py
module_y.py
subpackage2/
__init__.py
module_z.py
module_a.py
å¨æ¬å°ç£çä¸æ¾ä¸ªå°æ¹å建ä¸è¿°æ件åæ件夹ãå¨é¡¶å±ç __init__.py æ件ä¸ï¼è¾å
¥ä»¥ä¸ä»£ç ï¼
from . import subpackage1from . import subpackage2
æ¥ä¸æ¥è¿å
¥ subpackage1 æ件夹ï¼ç¼è¾å
¶ä¸ç __init__.py æ件ï¼è¾å
¥ä»¥ä¸ä»£ç ï¼
from . import module_xfrom . import module_y
ç°å¨ç¼è¾ module_x.py æ件ï¼è¾å
¥ä»¥ä¸ä»£ç ï¼
from .module_y import spam as ham
def main():
ham()
æåç¼è¾ module_y.py æ件ï¼è¾å
¥ä»¥ä¸ä»£ç ï¼
def spam():
print('spam ' * 3)
æå¼ç»ç«¯ï¼ cd è³ my_package å
æå¨çæ件夹ï¼ä½ä¸è¦è¿å
¥ my_package ãå¨è¿ä¸ªæ件夹ä¸è¿è¡Python解éå¨ãæ使ç¨çæ¯IPythonï¼å 为å®çèªå¨è¡¥å
¨åè½é常æ¹ä¾¿ï¼
In [1]: import my_package
In [2]: my_package.subpackage1.module_xOut[2]: <module
'my_package.subpackage1.module_x' from
'my_package/subpackage1/module_x.py'>
In [3]: my_package.subpackage1.module_x.main()spam spam spam
ç¸å¯¹å¯¼å
¥éç¨äºä½ æç»è¦æ¾å
¥å
ä¸ç代ç ãå¦æä½ ç¼åäºå¾å¤ç¸å
³æ§å¼ºç代ç ï¼é£ä¹åºè¯¥éç¨è¿ç§å¯¼å
¥æ¹å¼ã
ä½ ä¼åç°PyPIä¸æå¾å¤æµè¡çå
ä¹æ¯éç¨äºç¸å¯¹å¯¼å
¥ ãè¿è¦æ³¨æä¸ç¹ï¼å¦æä½ æ³è¦è·¨è¶å¤ä¸ªæ件å±çº§è¿è¡å¯¼å
¥ï¼åªéè¦ä½¿ç¨å¤ä¸ªå¥ç¹å³å¯ãä¸è¿ï¼ PEP
328建议ç¸å¯¹å¯¼å
¥çå±çº§ä¸è¦è¶
è¿ä¸¤å± ã
è¿è¦æ³¨æä¸ç¹ï¼å¦æä½ å¾ module_x.py æ件ä¸æ·»å äº if __name__ == â__main__â ï¼ç¶åè¯å¾è¿è¡è¿ä¸ªæ件ï¼ä½ ä¼ç¢°å°ä¸ä¸ªå¾é¾ç解çé误ãç¼è¾ä¸ä¸æ件ï¼è¯è¯çå§ï¼
from . module_y import spam as ham
def main():
ham()
if __name__ == '__main__':
# This won't work!
main()
ç°å¨ä»ç»ç«¯è¿å
¥ subpackage1 æ件夹ï¼æ§è¡ä»¥ä¸å½ä»¤ï¼
python module_x.py
å¦æä½ ä½¿ç¨çæ¯Python 2ï¼ä½ åºè¯¥ä¼çå°ä¸é¢çé误信æ¯ï¼
Traceback (most recent call last):
File "module_x.py", line 1, in
from . module_y import spam as hamValueError: Attempted relative import in non-package
å¦æä½ ä½¿ç¨çæ¯Python 3ï¼é误信æ¯å¤§æ¦æ¯è¿æ ·çï¼
Traceback (most recent call last):
File "module_x.py", line 1, in
from . module_y import spam as hamSystemError: Parent module '' not loaded, cannot perform relative import
è¿æçæ¯ï¼ module_x.py æ¯æ个å
ä¸çä¸ä¸ªæ¨¡åï¼èä½ è¯å¾ä»¥èæ¬æ¨¡å¼æ§è¡ï¼ä½æ¯ è¿ç§æ¨¡å¼ä¸æ¯æç¸å¯¹å¯¼å
¥ ã
å¦æä½ æ³å¨èªå·±ç代ç ä¸ä½¿ç¨è¿ä¸ªæ¨¡åï¼é£ä¹ä½ å¿
é¡»å°å
¶æ·»å è³Pythonç导å
¥æ£ç´¢è·¯å¾ï¼import search pathï¼ãæç®åçåæ³å¦ä¸ï¼
import syssys.path.append('/path/to/folder/containing/my_package')import my_package
注æï¼ä½ éè¦æ·»å çæ¯ my_package çä¸ä¸å±æ件夹路å¾ï¼èä¸æ¯ my_package æ¬èº«ãåå æ¯ my_package å°±æ¯æ们æ³è¦ä½¿ç¨çå
ï¼æ以å¦æä½ æ·»å å®çè·¯å¾ï¼é£ä¹å°æ æ³ä½¿ç¨è¿ä¸ªå
ã
æ们æ¥ä¸æ¥è°è°å¯é导å
¥ã
å¯é导å
¥ï¼Optional importsï¼
å¦æä½ å¸æä¼å
使ç¨æ个模åæå
ï¼ä½æ¯åæ¶ä¹æ³å¨æ²¡æè¿ä¸ªæ¨¡åæå
çæ
åµä¸æå¤éï¼ä½ å°±å¯ä»¥ä½¿ç¨å¯é导å
¥è¿ç§æ¹å¼ãè¿æ ·åå¯ä»¥å¯¼å
¥æ¯ææ个软件çå¤ç§çæ¬æè
å®ç°æ§è½æåã以 github2å
ä¸ç代ç 为ä¾ï¼
try:
# For Python 3
from http.client import responsesexcept ImportError: # For Python 2.5-2.7
try:
from httplib import responses # NOQA
except ImportError: # For Python 2.4
from BaseHTTPServer import BaseHTTPRequestHandler as _BHRH
responses = dict([(k, v[0]) for k, v in _BHRH.responses.items()])
lxml å
ä¹æ使ç¨å¯é导å
¥æ¹å¼ï¼
try:
from urlparse import urljoin
from urllib2 import urlopenexcept ImportError:
# Python 3
from urllib.parse import urljoin
from urllib.request import urlopen
æ£å¦ä»¥ä¸ç¤ºä¾æç¤ºï¼ å¯é导å
¥ç使ç¨å¾å¸¸è§ï¼æ¯ä¸ä¸ªå¼å¾ææ¡çæå·§ ã
å±é¨å¯¼å
¥
å½ä½ å¨å±é¨ä½ç¨åä¸å¯¼å
¥æ¨¡åæ¶ï¼ä½ æ§è¡çå°±æ¯å±é¨å¯¼å
¥ãå¦æä½ å¨Pythonèæ¬æ件ç顶é¨å¯¼å
¥ä¸ä¸ªæ¨¡åï¼é£ä¹ä½ å°±æ¯å¨å°è¯¥æ¨¡å导å
¥è³å
¨å±ä½ç¨åï¼è¿æå³çä¹åçä»»ä½å½æ°ææ¹æ³é½å¯è½è®¿é®è¯¥æ¨¡åãä¾å¦ï¼
import sys # global scope
def square_root(a):
# This import is into the square_root functions local scope
import math
return math.sqrt(a)
def my_pow(base_num, power):
return math.pow(base_num, power)
if __name__ == '__main__':
print(square_root(49))
print(my_pow(2, 3))
è¿éï¼æä»¬å° sys 模å导å
¥è³å
¨å±ä½ç¨åï¼ä½æ们并没æ使ç¨è¿ä¸ªæ¨¡åãç¶åï¼å¨ square_root å½æ°ä¸ï¼æä»¬å° math
模å导å
¥è³è¯¥å½æ°çå±é¨ä½ç¨åï¼è¿æå³ç math 模ååªè½å¨ square_root å½æ°å
é¨ä½¿ç¨ãå¦ææ们è¯å¾å¨ my_pow å½æ°ä¸ä½¿ç¨
math ï¼ä¼å¼å NameError ãè¯çæ§è¡è¿ä¸ªèæ¬ï¼ççä¼åçä»ä¹ã
使ç¨å±é¨ä½ç¨åç好å¤ä¹ä¸ï¼æ¯ä½ 使ç¨ç模åå¯è½éè¦å¾é¿æ¶é´æè½å¯¼å
¥ï¼å¦ææ¯è¿æ ·çè¯ï¼å°å
¶æ¾å¨æ个ä¸ç»å¸¸è°ç¨çå½æ°ä¸æ许æ´å åçï¼èä¸æ¯ç´æ¥å¨å
¨å±ä½
ç¨åä¸å¯¼å
¥ãèå®è¯´ï¼æå ä¹ä»æ²¡æ使ç¨è¿å±é¨å¯¼å
¥ï¼ä¸»è¦æ¯å 为å¦æ模åå
é¨å°å¤é½æ导å
¥è¯å¥ï¼ä¼å¾é¾å辨åºè¿æ ·åçåå åç¨éã
æ ¹æ®çº¦å®ï¼ææç导å
¥è¯å¥é½åºè¯¥ä½äºæ¨¡åçé¡¶é¨ ã
导å
¥æ³¨æäºé¡¹
å¨å¯¼å
¥æ¨¡åæ¹é¢ï¼æå 个ç¨åºå常ç¯çé误ãè¿éæ们ä»ç»ä¸¤ä¸ªã
循ç¯å¯¼å
¥ï¼circular importsï¼
è¦ç导å
¥ï¼Shadowed importsï¼ææ¶ç¿»è¯ä¸ºè¦ç导å
¥ï¼
å
æ¥çç循ç¯å¯¼å
¥ã
循ç¯å¯¼å
¥
å¦æä½ å建两个模åï¼äºè
ç¸äºå¯¼å
¥å¯¹æ¹ï¼é£ä¹å°±ä¼åºç°å¾ªç¯å¯¼å
¥ãä¾å¦ï¼
# a.pyimport b
def a_test():
print("in a_test")
b.b_test()
a_test()
ç¶åå¨å个æ件夹ä¸å建å¦ä¸ä¸ªæ¨¡åï¼å°å
¶å½å为 b.py ã
import a
def b_test():
print('In test_b"')
a.a_test()
b_test()
å¦æä½ è¿è¡ä»»æä¸ä¸ªæ¨¡åï¼é½ä¼å¼å AttributeError ãè¿æ¯å 为è¿ä¸¤ä¸ªæ¨¡åé½å¨è¯å¾å¯¼å
¥å¯¹æ¹ãç®åæ¥è¯´ï¼æ¨¡å a æ³è¦å¯¼å
¥æ¨¡å b
ï¼ä½æ¯å 为模å b ä¹å¨è¯å¾å¯¼å
¥æ¨¡å a ï¼è¿æ¶æ£å¨æ§è¡ï¼ï¼æ¨¡å a å°æ æ³å®æ模å b
ç导å
¥ãæçè¿ä¸äºè§£å³è¿ä¸ªé®é¢çç ´è§£æ¹æ³ï¼hackï¼ï¼ä½æ¯ ä¸è¬æ¥è¯´ï¼ä½ åºè¯¥åçæ¯éæ代ç ï¼é¿å
åçè¿ç§æ
åµ ã
è¦ç导å
¥
å½ä½ å建ç模åä¸æ ååºä¸ç模åååæ¶ï¼å¦æä½ å¯¼å
¥è¿ä¸ªæ¨¡åï¼å°±ä¼åºç°è¦ç导å
¥ã举个ä¾åï¼å建ä¸ä¸ªåå« math.py çæ件ï¼å¨å
¶ä¸åå
¥å¦ä¸ä»£ç ï¼
import math
def square_root(number):
return math.sqrt(number)
square_root(72)
ç°å¨æå¼ç»ç«¯ï¼è¯çè¿è¡è¿ä¸ªæ件ï¼ä½ ä¼å¾å°ä»¥ä¸å溯信æ¯ï¼tracebackï¼ï¼
Traceback (most recent call last):
File "math.py", line 1, in
import math
File "/Users/michael/Desktop/math.py", line 6, in
square_root(72)
File "/Users/michael/Desktop/math.py", line 4, in square_root
return math.sqrt(number)AttributeError: module 'math' has no attribute 'sqrt'
è¿å°åºæ¯æä¹åäºï¼å
¶å®ï¼ä½ è¿è¡è¿ä¸ªæ件çæ¶åï¼Python解éå¨é¦å
å¨å½åè¿è¡èæ¬æå¤ççæ件夹ä¸æ¥æ¾åå« math
ç模åãå¨è¿ä¸ªä¾åä¸ï¼è§£éå¨æ¾å°äºæ们æ£å¨æ§è¡ç模åï¼è¯å¾å¯¼å
¥å®ãä½æ¯æ们ç模åä¸å¹¶æ²¡æå« sqrt çå½æ°æå±æ§ï¼æ以就æåºäº
AttributeError ã
温馨提示:答案为网友推荐,仅供参考