python用psf函式 python 函式

2021-10-11 02:02:18 字數 4904 閱讀 1088

6.1 函式介紹

1 為什麼要有函式?沒有函式帶來的困擾?

組織結構不清晰,可讀性差

**冗餘

可擴充套件性差

2 什麼是函式

具備某乙個功能的工具---》函式

事先準備工具-》函式的定義

拿來就用、重複使用-》函式的呼叫

ps:先定義後呼叫

3 函式的分類:

內建函式:len,max(10,11),help(函式名)

自定義函式:def

語法:def 函式名(引數1,引數2,...):

"""注釋"""

函式體6.2 函式的定義

定義函式階段都發生了什麼事:只檢測語法,不執行**

定義階段

***='male'

defauth():

***name=input('name>>:').strip()

password=input('password>>:').strip()if name =='egon' and password == '123':print('login successfull')else:print('user or password err')#呼叫階段

auth()

函式的使用:先定義後呼叫

#定義階段

deffoo():print('from foo')

bar()defbar():print('from bar')#呼叫

foo()

定義函式的三種形式

第一種:無參函式

defauth():

name=input('name>>:').strip()

password=input('password>>:').strip()if name =='egon' and password == '123':print('login successfull')else:print('user or password err')

第二種:有參函式

defauth(name,password):if name =='egon' and password == '123':print('login successfull')else:print('user or password err')definteractive():

name=input('name>>:').strip()

password=input('password>>:').strip()

auth(name,password)

interactive()

第三種:空函式

defauth():pass

defput():pass

6.3 函式的呼叫

函式的呼叫:函式名加括號

1 先找到名字

2 根據名字呼叫**

6.3.1 函式的返回值

return的特點:

1、函式內可以有多個return,但是只能執行一次return

2、執行return函式就立刻結束,並且return的後值當做本次呼叫的結果返回

3、返回的值沒有型別限制

defmy_max(x,y):if x >=y:return x #只能執行一次return

else:return y

return返回值的個數

1: 沒有return:預設返回none

2:return 值:值本身

3:return 多個值:返回乙個元組

6.3.2函式呼叫的三種形式

defmy_max(x,y):if x >=y:returnxelse:return y

1、語句形式

res1=my_max(1,2)

2、表示式形式

res2=my_max(1,2)*10

3、當中另外乙個函式的引數

res3=my_max(my_max(1,2),3)

6.4 函式的引數

函式的引數分類兩種:

形參:在定義階段括號內指定的引數,相當於變數名

實參:在呼叫階段括號內傳入的值稱之為實參,相當於值

#在呼叫階段,實參的值會繫結給形參,在呼叫結束後解除繫結

def foo(x,y): #x=1,y=2

print(x,y)

foo(1,2)

6.4.1 位置引數

位置引數:按照從左到右的順序依次定義的引數

位置形參:必須被傳值,多乙個少乙個都不行

位置實參:與形參一一對應傳值

deffoo(x,y):print(x,y)

foo(2,1)

6.4.2 關鍵字引數

關鍵字引數:在函式呼叫時,按照key=value的形式定義的實參

特點:指名道姓地給形參傳值,不再依賴與位置

foo('egon',18,'male')

foo(***='male',age=18,name='egon') #關鍵字引數

foo('egon',***='male',age=18,name='egon') #關鍵字實參必須在位置實參的後面

注意:1、 關鍵字實參必須在位置實參的後面

2、 不能為同乙個引數賦值多次

6.4.3 預設引數

預設引數:在函式定義階段,就已經為形參賦值了

特點:定義階段已經有值意味著呼叫階段可以不用傳值

位置引數通常用於經常變化的引數,而預設引數指的是大多數情況下都一樣的

def foo(x,y=1): #y有預設值

print(x,y)

foo(1,2) #位置實參

foo(y=3,x=1) #關鍵字引數

foo(111)

foo(x=1111) #為給y傳參

注意:1、預設引數必須放到位置形參的後面

def register(name,***='male',age,): #報錯

print(name,age,***)

2、預設引數的值只在定義時被賦值一次

3、預設的引數的值通常應該是不可變型別

6.4.5 可變長引數

可變長引數:在呼叫函式時,實參值的個數不固定

實參的形式有:位置實參和關鍵字實參,

形參的解決方案:* , **

#*args的用法

def foo(x,y,*args): #z=(3,4,5,6)

print(x,y)print(args)

foo(1,2,3,4,5,6)

foo(1,2,*[3,4,5,6]) #foo(1,2,3,4,5,6)

foo(*[1,2,3,4,5,6]) #foo(1,2,3,4,5,6)

#**kwargs

def foo(x,y,**kwargs): #kwargs=

print(x,y)print(kwargs)

foo(y=2,x=1,a=3,b=4,c=5)

foo(y=2,**) #foo(y=2,a=3,c=5,b=4)

deffoo(name,age):print(name,age)

foo(**)

foo()

6.4.6 命名關鍵字引數

命名關鍵字引數:指的是定義在*後的引數,該引數必須被傳值(除非有它有預設值),而且必須按照key=value的形式傳值

def foo(x,y,*args,m=100000,n):print(x,y)print(args)print(m,n)

foo(1,2,3,n=4,)def foo(x,y,*,m=100000,n):print(x,y)print(args)print(m,n)

foo(1,2,3,n=4,)

6.5 函式物件

函式是第一類物件:指的是函式可以當做資料傳遞

1、可以被引用 x=1,y=x

deffunc(x,y):print(x,y)

f=func #獲得函式名

f(1,2) #呼叫函式

2、可當做函式的引數傳入

deffoo():print('from foo')def bar(func): #函式為引數

#print(func)

func()

bar(foo)

3、可以當做函式的返回值

deffoo():print('from foo')defbar():return foo #返回函式

f=bar()

f()4、可以當做容器型別的元素

deffoo():print('from foo')defbar():returnfoo

l=[foo,bar] #函式為列表元素

print(l)

l[0]()#呼叫函式

利用該特性,取代多分支的if

defget():print('get')defput():print('put')defls():print('ls')defauth():print('auth')

func_dic=#func_dic['put']()

cmd = input('>>:').strip()if cmd infunc_dic:

func_dic[cmd]()

6.6 函式巢狀

6.6.1函式的巢狀呼叫

defmy_max(x,y):if x >=y:returnxelse:returnydefmy_max4(a,b,c,d):

res1=my_max(my_max(a,b),c) #函式巢狀呼叫

res2=my_max(res2,d)return res2

6.6.2函式的巢狀定義

deff1():deff2():print('from f2')deff3():print('from f3')

f3()#print(f2)

f2()

f1()#f2

7 命名空間與作用域、閉包函式、 裝飾器

8 迭代器、 生成器、 面向過程程式設計

9 三元表示式、列表推導式和生成器表示式

10 遞迴呼叫、 二分法

11 匿名函式、內建函式

Linux上用anaconda安裝pytorch

pytorch是乙個非常優雅的深度學習框架。使用anaconda可以非常方便地安裝pytorch。下面我介紹一下用anaconda安裝pytorch的步驟。bash anaconda shconda install pytorch torchvision cuda75 c pytorchcuda8....

不安裝Python的情況下用C 呼叫Python

想在不安裝python的情況下呼叫它,網上說的方法都不太詳細,就連官方給的chm檔案也沒提及怎麼配置,摸索了下,找到了簡單呼叫的辦法。記錄下。msvs 2010 c console程式 python 2.7 include資料夾 libs資料夾 lib資料夾 python27.dll檔案 新建控制台...

C 實現Matlab的psf2otf函式

最近在用c 實現l0smooth的 其中裡面用到了psf2otf這個函式,但是opencv沒有,因此我自寫了乙個。關於這個函式的介紹,你可以參考matlab的官方文件及其源 也可以參考這裡寫的乙個記錄,這裡不做過多介紹了。filename filter.cpp version 0.10 author...