2019-05-12第三次課(缺課補(bǔ)習(xí))

跨文件調(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')
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容