跨文件調(diào)用函數(shù):
#caculate文件:
def caculateNum(num):
'''
計(jì)算1~num之間的累加和
:param num: 累加和的末位
:return: 累加和
'''
# res = 0
# for i in range(1,num+1):
# res += i
# return res
return sum([i for i in range (1, num+1)])
pass
#text1文件:
import caculate
res = caculate.caculateNum(100)
print(res)
必須參數(shù)和關(guān)鍵字參數(shù)
必須參數(shù): 必須嚴(yán)格的遵循正確的順序傳入,調(diào)用的時(shí)候必須和聲明的時(shí)候保持一致
def f(name, age):
print('I am %s , I am %d years old .'%(name, age))
#pass不加也沒問題發(fā)生
f('eric', 18)
關(guān)鍵字參數(shù): 使用關(guān)鍵字參數(shù)可以允許函數(shù)調(diào)用和聲明時(shí)順序不一致
#python 解釋器能夠用參數(shù)名字匹配參數(shù)值
# f(age= 18, name= 'eric')
默認(rèn)參數(shù)
缺省的參數(shù)沒有傳入時(shí),默認(rèn)值會(huì)生效
#與.get()類似
def f(name, age, sex = 'male'):
print('I am %s , I am %d years old .'%(name, age))
print('Sex is %s'%sex)
f(name= '李四', age= 19)
f('張三',88,'female')
#至于是否顯示指定參數(shù),以方便之后閱讀為準(zhǔn)
匿名函數(shù)
語法:
lambda 參數(shù): 表達(dá)式
lambda 參數(shù)1, 參數(shù)2,......(冒號(hào)前的參數(shù)可以有多個(gè))
后面的是表達(dá)式,只能是一個(gè)表達(dá)式,不寫return,返回值就是表達(dá)式的結(jié)果;
優(yōu)點(diǎn):
減少代碼量, 代碼看起來"優(yōu)雅"
def rect(x,y):
return x*y
area = rect(3, 5)
print(area)
#使用lambda表達(dá)式
res = lambda x, y: x*y
print(res(4, 5))
store = ['33',88]
s = "當(dāng)當(dāng)自營" if len(store) == 0 else store[0]
print(s)
def cal(x,y):
if x > y:
return x*y
else:
return x/y
#使用lambda表達(dá)式
calc = lambda x, y:x*y if x>y else x/y
print('使用lambda: ',calc(5, 4))
print('使用lambda: ',calc(2, 4))
- 列表的排序中使用lambda表達(dá)式
stus = [
{'name':'zhangsan','age':33},
{'name':'lisi','age':22},
{'name':'wangwu','age':43},
{'name':'zhaolui','age':18},
{'name':'tangqi','age':9},
]
print('排序前',stus)
#key值是按照哪個(gè)元素為依據(jù)進(jìn)行排序,reverse為True為由大到小
res = sorted(stus,key= lambda x: x['age'], reverse= True)
print('排序前',res)
res = sorted(stus,key= lambda x: x['name'])
print('name排序后',res)
案例 三國小說人物出場詞頻統(tǒng)計(jì)
- 代碼需要jieba和WordCloud
import jieba# 用于分詞
from collections import Counter # 用于統(tǒng)計(jì)
from wordcloud import WordCloud#生成詞云
#jieba分詞
txt = '我來到北京清華大學(xué)'
#將字符串分割成等量的中文
seg_list = jieba.lcut(txt)
print(seg_list)
def parse():
"""三國小說人物出場詞頻統(tǒng)計(jì)"""
#定義無關(guān)詞的集合
excludes = {"將軍","卻說","丞相","二人","不可","荊州","不能","如此","商議",
"如何","主公","軍士","軍馬","左右","次曰","引兵","大喜","天下",
"東吳","于是","今日","不敢","魏兵","陛下","都督","人馬","不知",
"玄德曰","孔明曰","劉備","關(guān)公"}
with open('threekingdom.txt','r',encoding='utf-8')as f:
txt = f.read()
#print(txt)
words = jieba.lcut(txt)
print(words)
#字典內(nèi)容:'曹操':555
counts = {}
for word in words:
if len(word) == 1:
continue
else:
# 往字典里添加元素
# count['key'] = 次數(shù)+1
counts[word] = counts.get(word, 0) + 1
#如果字典中存在值,則加一,如果不存在,則新建并給予默認(rèn)值0,再加一.
print(counts)
#將與有關(guān)詞同義的無關(guān)詞加到有關(guān)詞中
counts['孔明'] = counts.get('孔明') + counts.get('孔明曰')
counts['玄德'] = counts.get('玄德') + counts.get('玄德曰') + counts.get('劉備')
counts['關(guān)公'] = counts.get('關(guān)公') + counts.get('云長')
#刪除無關(guān)詞
for word in excludes:
del counts[word]
#統(tǒng)計(jì)出現(xiàn)頻次最高的前10個(gè)詞(方法一)
items = list(counts.items())
#print('排序前',items)
items.sort(key = lambda x: x[1], reverse=True)
#print('排序后',items)
for i in range(10):
character,count = items[i]
print(character, count)
#統(tǒng)計(jì)出現(xiàn)頻次最高的前10個(gè)詞(方法二)
#需要collections庫文件
# roles = Counter(counts)
# role = roles.most_common(10)
#構(gòu)造詞云字符串
li = []
for i in range(10):
character,count = items[i]
for _ in range(count):
li.append(character)
cloud_txt = ",".join(li)
wc = WordCloud(
background_color = 'white',#背景色
font_path = 'msyh.ttc',#文字編碼格式
#是否包含兩個(gè)詞的搭配,默認(rèn)是T
collocations = False
).generate(cloud_txt)
wc.to_file('三國中出現(xiàn)前十的人物.png')