一、編碼規範
1、**編排:
1)縮排四個空格,空格與tab不能混用
2)行長80,防止單行邏輯複雜
2、import:
1)不能用 from *** import *
2)順序:標準庫、第三方庫、自定義庫
3)單行不要import多個庫
4)模組內用不到的不要去import
3、空格
1)標點符號後面跟乙個空格,前面不要空格(行尾分號後無空格)
2)運算子前後各乙個空格
3)當 = 用於指示關鍵字引數或預設值時,兩側無空格
4、適當新增空行
1)函式間:頂級函式間空兩行,類的方法之間空1行
2)同一函式內的邏輯塊之間空一行
3)檔案結尾:留乙個空行(unix中\n是檔案結束符)
5、注釋
1)忌:逐行新增注釋、沒有乙個注釋
2)行內注釋:單行邏輯過於複雜時新增
3)塊注釋:一段邏輯開始時新增
4)引入外來演算法或者配置時需在注釋中新增原鏈結,標明出處
5)函式和類盡可能新增docstring
6、命名
1)不要用單字母的變數名
2)包名、模組名、函式名、方法名小寫,單詞間用下劃線連線
3)類名、異常名使用capwords(首字母大寫)的方式,異常名結尾加error或warning字尾
4)全域性變數盡量使用大寫,一組同型別的全域性變數要加統一字首,單詞用下滑線連線
7、字串拼接盡量使用join
速度快,記憶體消耗小
8、語意明確、直白
9、程式的構建
1)乙個函式只能做一件事,並把這件事做好
2)大的功能用小的函式之間的靈活組合來完成
3)避免編寫龐大的程式
10、函式名必須有動詞,最好是do_something形式,或somebody_do_something句式
11、自定義的變數名、函式名不要與標準庫中的名字衝突
12、格式化
alt+shift+f
二. 函式閉包
引用了自由變數的函式即是乙個閉包,這個被引用的自由變數和這個函式一同存在。
def foo():
l =
def bar(i):
return l
return bar
if __name__ == "__main__":
f1 = foo()
print(f1)
#.bar at 0x000000c17df41378>
def foo():
l =
def bar(i):
return l
return bar
if __name__ == "__main__":
f1 = foo()
f2 = foo()
f3 = foo()
print(f1(1))
print(f2(2))
print(f3(3))
"""[1]
[2][3]
"""
def foo():
l =
def bar(i):
return l
return bar
if __name__ == "__main__":
f1 = foo()
f2 = foo()
print(f1(1))
print(f2(2))
print(f2(3))
"""[1]
[2][2, 3]
"""
三、裝飾器
1、最簡裝飾器
def deco(func):
def warp():
print('hahaha')
return warp
@deco
def a():
print('joker')
a()
#hahaha
邏輯:a() -->deco --> func:a --> return warp:warp() --> 「hahaha」
def deco(func):
def warp():
print('hahaha')
func()
return warp
@deco
def a(): #不帶參
return'joker'
print(a()) #被warp捕獲
"""hahaha
none
"""
def deco(func):
def warp():
print('hahaha')
return func()
return warp
@deco
def a():
print('hahaha')
return'joker'
print(a())
"""hahaha
hahaha
joker
"""
2、函式體加引數
def deco(func):
def warp(n):
print('hahaha')
return func(n)
return warp
@deco
def a(name):
print(name)
a('joker')
"""hahaha
joker
"""
def deco(func):
def warp(n):
print('hahaha')
n = 'ok'
return func(n)
return warp
@deco
def a(name): (引數等同於作廢)
print(name)
a('joker')
"""hahaha
ok"""
def deco(func):
def warp(n,n1):
print('hahaha')
n = 'ok'
return func(n,n1)
return warp
@deco
def a(name,name2):
print(name)
print(name2)
a('joker','faker')
"""ok
faker
"""
課堂練習
1)輸入兩個數字,裝飾器的作用是求這兩個數字的和,本函式的作用是列印這兩個數字的和
def deco(func):
def warp(n1,n2):
sum_ = n1 + n2
return func(sum_ ,n2)
return warp
@deco
def a(name1,name2):
print(name1)
a(10,20)
2)流氓驗證碼:(
在使用裝飾器的情況下,無論你輸入什麼驗證碼都返回驗證碼錯誤,如果不使用,該正確就列印正確。)
import random
def deco2(parms):
def deco(func):
def warp(*args,**kwargs):
if parms:
kwargs['n1'] = -1
return func(*args,**kwargs)
return warp
return deco
@deco2(true)
def a(n1,n2):
if n1 == n2:
print('驗證碼正確')
else:
print('驗證碼錯誤')
num = random.randrange(1000,9999)
print('驗證碼是:%d'%num)
num2 = int(input('>>'))
a(n1=num,n2=num2)
l瀏覽網頁
import time
time1 = 0
time2 = 0
def check_ip(func):
def warp(*args,**kwargs):
if round(abs(time2 - time1),3)<0.5:
print('404')
else:
return func(*args,**kwargs)
return warp
@check_ip
def a(ip):
print('進入網業成功')
for _ in range(50):
ip = '127.0.0.1'
time1 = time.time()
a(ip)
time2 = time.time()
time.sleep(1)
Python 執行緒和程序
一 什麼是執行緒 1 執行緒是作業系統能夠進行運算排程的最小單位。它被包含在程序中,是程序中的實際運作單位。一條執行緒指的是程序中乙個單一順序的控制流,乙個程序中可以併發多個執行緒,每條執行緒並行執行不同的任務。每個程序至少包含乙個執行緒.二 什麼是程序 1 乙個程序就是乙個程式的例項,每個程序裡面...
python執行緒和程序
執行緒 計算機能夠進行排程的最小單位 乙個程序可以包含多個執行緒,執行緒共享程序資源 多執行緒併發 上下文程序就像乙個工作的房間 記憶體 以及房間裡工作需要的資源 i o啊,網絡卡啊 執行緒相當於工作的人 所有的在同乙個程序中的執行緒是共享一塊記憶體空間 pid 唯一的程序識別符號 each pro...
python程序和執行緒
爬蟲開發過程中 程序和執行緒的概念是非常重要的 提高爬蟲的 工作效率 打造分布式爬蟲 都離不開程序和執行緒的身影 多程序 多執行緒 協程 分布式程序等四個方面 使用os模組中的fork方法 使用multiprocessing模組 前者僅僅適用unix linux作業系統 對windows不支援 後者...