python語言UI函數(shù),python中ui框架

Python函數(shù)和模塊的定義與使用,包括變量的類型及匿名函數(shù)用法

函數(shù)是組織好,可重復使用的,用來實現(xiàn)相關功能的代碼段

成都創(chuàng)新互聯(lián)公司為企業(yè)級客戶提高一站式互聯(lián)網(wǎng)+設計服務,主要包括網(wǎng)站設計、網(wǎng)站建設、app開發(fā)定制重慶小程序開發(fā)公司、宣傳片制作、LOGO設計等,幫助客戶快速提升營銷能力和企業(yè)形象,創(chuàng)新互聯(lián)各部門都有經(jīng)驗豐富的經(jīng)驗,可以確保每一個作品的質(zhì)量和創(chuàng)作周期,同時每年都有很多新員工加入,為我們帶來大量新的創(chuàng)意。 

函數(shù)提高了代碼的重復利用率和應用的模塊性。

除Python自帶的函數(shù)之外,也可以自己創(chuàng)建函數(shù),叫做自定義函數(shù)

語法:

函數(shù)代碼塊以 def 開頭

參數(shù)為 輸入值 ,放于函數(shù)名后口號里面,

函數(shù)內(nèi)容以冒號:開始,函數(shù)體縮進, return 返回 輸出值

函數(shù)調(diào)用使用關鍵字參數(shù)來確定傳入的參數(shù)值,此時,如果多個函數(shù)則不需要按照指定順序。

在定義函數(shù)時,指定參數(shù)默認值。調(diào)用時如果不傳入?yún)?shù),則使用默認值

不定長部分如果沒有指定參數(shù),傳入是一個空元組

加了 兩個星號 ** 的參數(shù)會以字典的形式導入

/ 用來指明函數(shù)形參必須使用指定位置參數(shù),不能使用關鍵字參數(shù)的形式。

3.8版本之后的才能使用

不使用 def 定義函數(shù),沒有函數(shù)名

lamdba主體時一個表達式,而不是代碼塊,函數(shù)體比def簡單很多

定義在函數(shù)內(nèi)部的為局部變量,僅能在函數(shù)內(nèi)部使用

定義在函數(shù)外部的為全局變量,可在全局使用

模塊是將包含所有定義的函數(shù)和變量的文件,一般將同類功能的函數(shù)組和在一起稱為模塊。

模塊需要導入后,在調(diào)用相應函數(shù)進行使用

模塊導入的方法:

從模塊中導入一個指定的部分

把一個模塊的所有內(nèi)容全都導入

Python其實很簡單 第十二章 函數(shù)與變量的作用域

在前面已經(jīng)多次提到函數(shù)這個概念,之所以沒有解釋什么是函數(shù),是因為程序中的函數(shù)和數(shù)學中的函數(shù)差不多,如input()、range()等都是函數(shù),這些都是Python的標準函數(shù),直接使用就可以了。根據(jù)需要,用戶也可以自定義函數(shù)。

12.1 函數(shù)

函數(shù)的結構:

def 函數(shù)名(參數(shù)):

函數(shù)體

return 返回值

例如:數(shù)學中的函數(shù)f(x)=2x+5在Python中可以定義如下:

def f(x):

y=2*x+5

return(y)

如果x取值為3,可以使用如下語句調(diào)用函數(shù):

f(3)

下面給出完整的程序代碼:

def f(x):

y=2*x+5

return(y)

res=f(3)

print(res)

運行結果:11

如上例中的x是函數(shù)f(x)的參數(shù),有時也被稱為形式參數(shù)(簡稱形參),在函數(shù)被調(diào)用時,x被具體的值3替換y就是函數(shù)的返回值,這個值3也被稱為實際參數(shù)(簡稱實參)。

上例中的y是函數(shù)f(x)的返回值。并不是所有的函數(shù)都有參數(shù)和返回值。如下面的函數(shù):

def func():

print('此為無參數(shù)傳遞、無返回值的函數(shù)')

func()

輸出結果:此為無參數(shù)傳遞、無返回值的函數(shù)

可以看出,該函數(shù)func()無參數(shù),故調(diào)用時不用賦給參數(shù)值。

函數(shù)也可以有多個參數(shù),如f(x,y)=x2+y2,可用Python語言定義如下:

def f(x,y):

z=x**2+y**2

return z

print(f(2,3)) #調(diào)用函數(shù)f(x,y)

輸出結果:13

也可以通過直接給參數(shù)列表中的參數(shù)賦值的方法,為參數(shù)添加默認值,如果用戶賦予參數(shù)值,則按照用戶賦值執(zhí)行,否則使用默認值。例如:

def f(x,y=3):

z=x**2+y**2

return z

若調(diào)用時參數(shù)列表為(2,1),即x賦值為2,y賦值為1:

print(f(2,1))

輸出結果為:5

若調(diào)用時參數(shù)列表為(2),即x賦值為2,y賦值省缺,則y使用默認值:

print(f(2))

輸出結果為:13

回調(diào)函數(shù),又稱函數(shù)回調(diào),是將函數(shù)作為另一函數(shù)的參數(shù)。

例如:

def func(fun,m,n):

fun(m,n)

def f_add(m,n):

print('m+n=',m+n)

def f_mult(m,n):

print('m*n=',m*n)

func(f_add,2,3)

func(f_mult,2,3)

輸出結果:

m+n= 5

m*n= 6

在f_add(m,n)和f_mult(m,n)被定義前,func(fun,m,n)中的fun(m,n)就已經(jīng)調(diào)用了這兩個函數(shù),即“先調(diào)用后定義”,這也是回調(diào)函數(shù)的特點。

如果無法預知參數(shù)的個數(shù),可以在參數(shù)前面加上*號,這種參數(shù)實際上對應元組類型。譬如,參會的人數(shù)事先不能確定,只能根據(jù)與會人員名單輸入:

def func(*names):

print('今天與會人員有:')

for name in names:

print(name)

func('張小兵','陳曉梅','李大海','王長江')

運行后,輸出結果為:

今天與會人員有:

張小兵

陳曉梅

李大海

王長江

參數(shù)為字典類型,需要在參數(shù)前面加上**號。

def func(**kwargs):

for i in kwargs:

print(i,kwargs[i])

func(a='a1',b='b1',c='c1')

輸出結果為:

a a1

b b1

c c1

一個有趣的實例:

def func(x,y,z,*args,**kwargs):

print(x,y,z)

print(args)

print(kwargs)

func('a','b','c','Python','is easy',py='python',j='java',ph='php')

輸出結果:

a b c # 前三個實參賦給前三個形參

('Python', 'is easy') # *args接收元組數(shù)據(jù)

{'py': 'python', 'j': 'java', 'ph': 'php'} # **kwargs接收字典數(shù)據(jù)

12.2 變量的作用域

變量的作用域即變量的有效范圍,可分為全局變量和局部變量。

局部變量

在函數(shù)中定義的變量就是局部變量,局部變量的作用域僅限于函數(shù)內(nèi)部使用。

全局變量

在主程序中定義的變量就是全局變量,但在函數(shù)中用關鍵字global修飾的變量也可以當做全局變量來使用。

全局變量的作用域是整個程序,也就是說,全局變量可以在整個程序中可以訪問。

下面通過實例去討論:

程序1:

a=1 # a為全局變量

def a_add():

print('a的初值:',a) # 在函數(shù)中讀取a的值

a_add() # 調(diào)用函數(shù)a_add()

a+=1 # 主程序語句,a增加1

print('a現(xiàn)在的值是:',a) # 主程序語句,讀取a的值

運行結果:

a的初值: 1

a現(xiàn)在的值是: 2

這個結果和我們想象的一樣,全局變量a既可以在主程序中讀取,也可以在子程序(函數(shù))中讀取。

程序2:

a=1

def a_add():

a+=1

print('a的初值:',a)

a_add()

print('a現(xiàn)在的值是:',a)

運行程序1時出現(xiàn)如下錯誤提示:

UnboundLocalError: local variable 'a' referenced before assignment

意思是:局部變量'a'在賦值之前被引用。

從語法上來講,該程序沒有錯誤。首先定義了一個全局變量a并賦值為1,又定義了一個函數(shù)a_add(),函數(shù)內(nèi)的語句a+=1就是出錯的根源,雖然我們的初衷是想讓全局變量a的值增加1,但從錯誤提示看,這個語句中的a并不是全局變量,而是局部變量??磥?,在函數(shù)中讀取全局變量的值是沒有問題的(在程序1中已經(jīng)得到了驗證),但要在函數(shù)中改變?nèi)肿兞康闹凳遣恍械模ㄔ诔绦?的錯誤提示a+=1中的a 是局部變量,而非全局變量)。

怎樣解決這個問題?

程序3:

a=1

def a_add(x):

x+=1

return x

print('a的初值:',a)

a=a_add(a)

print('a現(xiàn)在的值是:',a)

運行結果:

a的初值: 1

a現(xiàn)在的值是: 2

結果的確是正確的,但在函數(shù)a_add(x)中沒有調(diào)用變量a(沒有出現(xiàn)變量a)。

程序4:

a=1

def a_add(a):

a+=1

return a

print('a的初值:',a)

a=a_add(a)

print('a現(xiàn)在的值是:',a)

運行結果:

a的初值: 1

a現(xiàn)在的值是: 2

對比程序4和程序3不難發(fā)現(xiàn),其實程序4只是簡單的把函數(shù)的參數(shù)x變成了a,這個a的實質(zhì)和程序3中的x還是一樣的。這進一步證實,函數(shù)中的a是局部變量,與主程序的全局變量a有著本質(zhì)的區(qū)別。

程序5:

a=1

def a_add():

global a

a+=1

print('a的初值:',a)

a_add()

print('a現(xiàn)在的值是:',a)

運行結果:

a的初值: 1

a現(xiàn)在的值是: 2

程序5和程序2相比較,僅僅是在函數(shù)中添加了一個定義“global a”,此時的局部變量a就可以當做全局變量使用,由于它和全局變量a同名,自然也就不用區(qū)分a究竟是全局變量還是局部變量了,在主程序和該函數(shù)內(nèi)都可以訪問、修改變量a的值了。

雖然使用global可使變量使用起來非常方便,但也容易引起混淆,故在使用過程中還是謹慎為好。

12.3 函數(shù)的遞歸與嵌套

遞歸,就是函數(shù)調(diào)用它自身。遞歸必須設置停止條件,否則函數(shù)將無法終止,形成死循環(huán)。

以計算階乘為例:

def func(n):

if n==1:

return 1

else:

return n*func(n-1) #func( )調(diào)用func( )

print(func(5))

運行結果為:120

嵌套,指在函數(shù)中調(diào)用另外的函數(shù)。這是程序中常見的一種結構,在此不再贅述。

匿名函數(shù)

Python中可以在參數(shù)前加上關鍵字lambda定義一個匿名函數(shù),這樣的函數(shù)一般都屬于“一次性”的。

例如:

程序1:這是一個常規(guī)的函數(shù)定義和調(diào)用。

def f_add(x,y):

return x+y

print(f_add(2,3))

輸出結果:5

程序2:使用lambda定義匿名函數(shù)。

f_add=lambda x,y:x+y

print(f_add(2,3))

輸出結果:5

從上面的代碼可以看出,使用lambda僅僅減少了一行代碼。f_add=lambda x,y:x+y中的f_add不是變量名,而是函數(shù)名。程序1和程序2的print( )語句中的參數(shù)都是一樣的——調(diào)用函數(shù)f_add( )。所以,匿名函數(shù)并沒有太多的優(yōu)點。

Python的函數(shù)和參數(shù)

parameter 是函數(shù)定義的參數(shù)形式

argument 是函數(shù)調(diào)用時傳入的參數(shù)實體。

對于函數(shù)調(diào)用的傳參模式,一般有兩種:

此外,

也是關鍵字傳參

python的函數(shù)參數(shù)定義一般來說有五種: 位置和關鍵字參數(shù)混合 , 僅位置參數(shù) , 僅關鍵字參數(shù) , 可變位置參數(shù) , 可變關鍵字參數(shù) 。其中僅位置參數(shù)的方式僅僅是一個概念,python語法中暫時沒有這樣的設計。

通常我們見到的函數(shù)是位置和關鍵字混合的方式。

既可以用關鍵字又可以用位置調(diào)用

這種方式的定義只能使用關鍵字傳參的模式

f(*some_list) 與 f(arg1, arg2, ...) (其中some_list = [arg1, arg2, ...])是等價的

網(wǎng)絡模塊request的request方法的設計

多數(shù)的可選參數(shù)被設計成可變關鍵字參數(shù)

有多種方法能夠為函數(shù)定義輸出:

非?;逎?/p>

如果使用可變對象作為函數(shù)的默認參數(shù),會導致默認參數(shù)在所有的函數(shù)調(diào)用中被共享。

例子1:

addItem方法的data設計了一個默認參數(shù),使用不當會造成默認參數(shù)被共享。

python里面,函數(shù)的默認參數(shù)被存在__default__屬性中,這是一個元組類型

例子2:

在例子1中,默認參數(shù)是一個列表,它是mutable的數(shù)據(jù)類型,當它寫進 __defauts__屬性中時,函數(shù)addItem的操作并不會改變它的id,相當于 __defauts__只是保存了data的引用,對于它的內(nèi)存數(shù)據(jù)并不關心,每次調(diào)用addItem,都可以修改 addItem.__defauts__中的數(shù)據(jù),它是一個共享數(shù)據(jù)。

如果默認參數(shù)是一個imutable類型,情況將會不一樣,你無法改變默認參數(shù)第一次存入的值。

例子1中,連續(xù)調(diào)用addItem('world') 的結果會是

而不是期望的

python 函數(shù)參數(shù)類型

python 的函數(shù)參數(shù)類型分為4種:

1.位置參數(shù):調(diào)用函數(shù)時根據(jù)函數(shù)定義的參數(shù)位置來傳遞參數(shù),位置參數(shù)也可以叫做必要參數(shù),函數(shù)調(diào)用時必須要傳的參數(shù)。

當參數(shù)滿足函數(shù)必要參數(shù)傳參的條件,函數(shù)能夠正常執(zhí)行:

add(1,2) #兩個參數(shù)的順序必須一一對應,且少一個參數(shù)都不可以

當我們運行上面的程序,輸出:

當函數(shù)需要兩個必要參數(shù),但是調(diào)用函數(shù)只給了一個參數(shù)時,程序會拋出異常

add(1)

當我們運行上面的程序,輸出:

當函數(shù)需要兩個必要參數(shù),但是調(diào)用函數(shù)只給了三個參數(shù)時,程序會拋出異常

add(1,2,3)

當我們運行上面的程序,輸出

2.關鍵字參數(shù):用于函數(shù)調(diào)用,通過“鍵-值”形式加以指定??梢宰尯瘮?shù)更加清晰、容易使用,同時也清除了參數(shù)的順序需求。

add(1,2) # 這種方式傳參,必須按順序傳參:x對應1,y對應:2

add(y=2,x=1) #以關健字方式傳入?yún)?shù)(可以不按順序)

正確的調(diào)用方式

add(x=1, y=2)

add(y=2, x=1)

add(1, y=2)

以上調(diào)用方式都是允許的,能夠正常執(zhí)行

錯誤的調(diào)用方式

add(x=1, 2)

add(y=2, 1)

以上調(diào)用都會拋出SyntaxError 異常

上面例子可以看出:有位置參數(shù)時,位置參數(shù)必須在關鍵字參數(shù)的前面,但關鍵字參數(shù)之間不存在先后順序的

3.默認參數(shù):用于定義函數(shù),為參數(shù)提供默認值,調(diào)用函數(shù)時可傳可不傳該默認參數(shù)的值,所有位置參數(shù)必須出現(xiàn)在默認參數(shù)前,包括函數(shù)定義和調(diào)用,有多個默認參數(shù)時,調(diào)用的時候,既可以按順序提供默認參數(shù),也可以不按順序提供部分默認參數(shù)。當不按順序提供部分默認參數(shù)時,需要把參數(shù)名寫上

默認參數(shù)的函數(shù)定義

上面示例第一個是正確的定義位置參數(shù)的方式,第二個是錯誤的,因為位置參數(shù)在前,默認參數(shù)在后

def add1(x=1,y) 的定義會拋出如下異常

默認參數(shù)的函數(shù)調(diào)用

注意:定義默認參數(shù)默認參數(shù)最好不要定義為可變對象,容易掉坑

不可變對象:該對象所指向的內(nèi)存中的值不能被改變,int,string,float,tuple

可變對象,該對象所指向的內(nèi)存中的值可以被改變,dict,list

這里只要理解一下這個概念就行或者自行百度,后續(xù)會寫相關的專題文章講解

舉一個簡單示例

4.可變參數(shù)區(qū)別:定義函數(shù)時,有時候我們不確定調(diào)用的時候會多少個參數(shù),j就可以使用可變參數(shù)

可變參數(shù)主要有兩類:

*args: (positional argument) 允許任意數(shù)量的可選位置參數(shù)(參數(shù)),將被分配給一個元組, 參數(shù)名前帶*,args只是約定俗成的變量名,可以替換其他名稱

**kwargs:(keyword argument) 允許任意數(shù)量的可選關鍵字參數(shù),,將被分配給一個字典,參數(shù)名前帶**,kwargs只是約定俗成的變量名,可以替換其他名稱

*args 的用法

args 是用來傳遞一個非鍵值對的可變數(shù)量的參數(shù)列表給函數(shù)

語法是使用 符號的數(shù)量可變的參數(shù); 按照慣例,通常是使用arg這個單詞,args相當于一個變量名,可以自己定義的

在上面的程序中,我們使用* args作為一個可變長度參數(shù)列表傳遞給add()函數(shù)。 在函數(shù)中,我們有一個循環(huán)實現(xiàn)傳遞的參數(shù)計算和輸出結果。

還可以直接傳遞列表或者數(shù)組的方式傳遞參數(shù),以數(shù)組或者列表方式傳遞參數(shù)名前面加(*) 號

理解* * kwargs

**kwargs 允許你將不定長度的鍵值對, 作為參數(shù)傳遞給函數(shù),這些關鍵字參數(shù)在函數(shù)內(nèi)部自動組裝為一個dict

下篇詳細講解 *args, **kwargs 的參數(shù)傳遞和使用敬請關注

當前標題:python語言UI函數(shù),python中ui框架
轉載來于:http://www.muchs.cn/article20/hssjco.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供服務器托管、網(wǎng)站排名、企業(yè)網(wǎng)站制作營銷型網(wǎng)站建設、網(wǎng)站制作、App設計

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運營