1. 程式人生 > 其它 >01 python 函式

01 python 函式

01 python 函式

目錄

1. 函式的定義和常用操作

函式定義:

	函式是組織好的,可重複使用的,用來實現單一,或相關聯功能的程式碼段。函式能提高應用的模組性,和程式碼的重複利用率。Python提供了許多內建函式,比如print()。但你也可以自己建立函式,這被叫做使用者自定義函式。
	
	def 函式名稱():
    程式碼
    returu 需要返回的內容

函式的呼叫

函式名稱()

函式常用操作~舉例說明

#讀取人物名稱
f = open('name.txt',encoding='utf-8')
data = f.read()
print(data.split('|'))
#讀取兵器名稱
f2 = open('weapon.txt',encoding='utf-8')
i = 1
for line in f2.readlines():
    if i % 2 == 1:
        print(line.strip('\n'))
    i +=1
#讀取原著   
f3 = open('sanguo.txt',encoding='utf-8')
print(f3.read().replace('\n',''))

函式舉例01

def func(filename):
    print(open(filename,encoding='utf-8').read())
    print('test func')
func('name.txt')

改寫函式
import re
def find_item( hero ):
    with open('sanguo.txt',encoding='utf-8') as f:
        data = f.read().replace('\n','')
        name_num = re.findall(hero,data) #函式返回包含所有匹配項的列表。返回string中所有與pattern相匹配的全部字串,返回形式為陣列
        print('主角 %s 出現 %s 次' %(hero,len(name_num)))
    return len(name_num)

#讀取人物的資訊
name_dict = {}
with open('name.txt',encoding='utf-8') as f:
    for line in f:
        names = line.split("|")  #split():拆分字串。通過指定分隔符對字串進行切片,並返回分割後的字串列表(list)
        for n in names:
#            print(n)
            name_num = find_item(n)
            name_dict[n] = name_num

name_sorted = sorted(name_dict.items(),key=lambda item: item[1],reverse=True)
# print(name_sorted[0:10])

2. 函式的可變長引數

#原樣長度
def func(a, b, c):
    print('a= %s' %a)
    print('b= %s' %b)
    print('c= %s' %c)
func(1,2,3)
func(1,c=3,b=2)
#可變長,前面增加引數

#取得引數的個數
def howlong(first, *other):
    print( 1 + len(other))

howlong(123,234,456)
#3
howlong(123)
#1

3. 函式的變數作用域

var1 = 123
def func():
    var1 = 456
    print(var1)
func()
print(var1)
#456   函式裡面
#123   函式外面

var1 = 123
def func():
    global  var1  #引入全域性變數global
    var1 = 456
    print(var1)
func()
print(var1)
#456   
#456  

4. 函式的迭代器與生成器

#一
list1 = [1,2,3]
it = iter(list1)
print( next(it))
print( next(it))
print( next(it))
print( next(it))  #error 迭代完了,出現異常

#二
# for i in range(10,20,0.5):
#     print(i)                    #error,只支援int型別

def frange(start, stop, step):
    x = start
    while x < stop:
        yield x     #執行到當前位置暫停記錄當前位置,在返回值;迭代,一次只出現一個值。【print(x) 一次全部輸出】
        x += step
for i in frange(10,20,0.5):
    print(i)


5. python 內建函式

​ 在Python中有兩種函式,一種是def定義的函式,另一種是lambda函式,也就是大家常說的匿名函式。今天我就和大家聊聊lambda函式,在Python程式設計中,大家習慣將其稱為表示式。

#簡化函式
#1 def定義的函式
def true(): return True
#2 lambda函式~匿名函式
lambda : True  #函式名和renturn 關鍵字簡化掉

#pycharm執行
def add(x,y):
     print(x+y)
add(3,5)

#以下在windows python 終端 環境執行
>>>def add(x,y): return x+y
>>>lambda x,y: x+y
>>>add(3,5)
#8

#兩個例子
lambda x:x<= (month,day)
def func1(x):
    return x<= (month,day)

lambda item:item[1]
def func2(item):
    return item[1]
# 以下在windows python 終端 環境執行
>>> def func2(item):
...     return item[1]
...
>>> adict = {'a':'aa','b':'bb'}
>>> for i in adict.items():
...     func2(i)
...
'aa'
'bb'


6. 閉包的定義

7. 裝飾器的定義

8. 裝飾器的使用

9. 自定義上下文管理器

呼叫函式
建立函式
可變長函式
變數的作用域
匿名函式
生成器
迭代器
裝飾器