Python中的Function定義方法第1/2頁
更新時間:2009年09月25日 14:57:30 作者:
Python中,函數(shù)是可被重用的程序段。對于函數(shù)的定義,可以使用def關(guān)鍵字。
下面就先定義一個函數(shù):
def foo():
print('function')
foo()
在上述代碼中,定義了一個名為foo的函數(shù),這個函數(shù)沒有參數(shù)。最后一行代碼的功能是調(diào)用這個函數(shù)。這是一個函數(shù)的最簡單形式。下面來介紹一下有參數(shù)的函數(shù):
def foo():
print('function')
def foo1(a,b):
print(a+b)
foo()
foo1(1,2)
foo1就是一個有參數(shù)的函數(shù),使用foo1(1,2)就可以調(diào)用這個有參的函數(shù)了。
在程序中,有變量存在,就會涉及到變量的作用域的問題。在Python中,變量的作用域分三個等級:global、local和nonlocal。
global:顧名思義,表示全局變量。即這個變量在python中處于最高層次上,也就是這個變量的定義層次最高,而不是在函數(shù)或類中。
local:局部變量,被定義在函數(shù)之中。
nonlocal:這是一個相對的概念。在python中,函數(shù)內(nèi)部可以嵌套定義內(nèi)部函數(shù),這樣函數(shù)內(nèi)部的變量相對于函數(shù)內(nèi)部的內(nèi)嵌函數(shù)來講就是nonlocal的。
下面,給出相關(guān)的程序來說明,首先看一下全局和局部變量:
x = 1
y = 2
def foo(x):
print(x)
print(y)
print('***********')
x = 3
global y
y = 3
print(x)
print(y)
print('***********')
foo(x)
print(x)
print(y)
#************************
#運(yùn)行結(jié)果
1
2
***********
3
3
***********
1
3
在上述程序中,定義了兩個全局變量x和y, 在函數(shù)foo內(nèi)部,也定義了一個局部變量x。根據(jù)運(yùn)行結(jié)果可知,在foo內(nèi)部,變量x是真正的局部變量。因為對其所做的修改并沒有對全局變量x產(chǎn)生影響。另外,如果在foo內(nèi)部需要使用全局變量,則需要使用global關(guān)鍵字。global y的意圖就是聲明變量y為外部聲明過的全局變量y。所以,在foo內(nèi)部對y進(jìn)行修改后,在foo外部仍然有影響。因為foo修改的是全局變量。
再來看一下nonlocal:
def out():
z = 3
def inner():
nonlocal z
z = 4
print('inner function and z = {0}'.format(z))
inner()
print('out function and z = {0}'.format(z))
out()
#**********
#運(yùn)行結(jié)果
inner function and z = 4
out function and z = 4
復(fù)制代碼 代碼如下:
def foo():
print('function')
foo()
在上述代碼中,定義了一個名為foo的函數(shù),這個函數(shù)沒有參數(shù)。最后一行代碼的功能是調(diào)用這個函數(shù)。這是一個函數(shù)的最簡單形式。下面來介紹一下有參數(shù)的函數(shù):
復(fù)制代碼 代碼如下:
def foo():
print('function')
def foo1(a,b):
print(a+b)
foo()
foo1(1,2)
foo1就是一個有參數(shù)的函數(shù),使用foo1(1,2)就可以調(diào)用這個有參的函數(shù)了。
在程序中,有變量存在,就會涉及到變量的作用域的問題。在Python中,變量的作用域分三個等級:global、local和nonlocal。
global:顧名思義,表示全局變量。即這個變量在python中處于最高層次上,也就是這個變量的定義層次最高,而不是在函數(shù)或類中。
local:局部變量,被定義在函數(shù)之中。
nonlocal:這是一個相對的概念。在python中,函數(shù)內(nèi)部可以嵌套定義內(nèi)部函數(shù),這樣函數(shù)內(nèi)部的變量相對于函數(shù)內(nèi)部的內(nèi)嵌函數(shù)來講就是nonlocal的。
下面,給出相關(guān)的程序來說明,首先看一下全局和局部變量:
復(fù)制代碼 代碼如下:
x = 1
y = 2
def foo(x):
print(x)
print(y)
print('***********')
x = 3
global y
y = 3
print(x)
print(y)
print('***********')
foo(x)
print(x)
print(y)
#************************
#運(yùn)行結(jié)果
1
2
***********
3
3
***********
1
3
在上述程序中,定義了兩個全局變量x和y, 在函數(shù)foo內(nèi)部,也定義了一個局部變量x。根據(jù)運(yùn)行結(jié)果可知,在foo內(nèi)部,變量x是真正的局部變量。因為對其所做的修改并沒有對全局變量x產(chǎn)生影響。另外,如果在foo內(nèi)部需要使用全局變量,則需要使用global關(guān)鍵字。global y的意圖就是聲明變量y為外部聲明過的全局變量y。所以,在foo內(nèi)部對y進(jìn)行修改后,在foo外部仍然有影響。因為foo修改的是全局變量。
再來看一下nonlocal:
復(fù)制代碼 代碼如下:
def out():
z = 3
def inner():
nonlocal z
z = 4
print('inner function and z = {0}'.format(z))
inner()
print('out function and z = {0}'.format(z))
out()
#**********
#運(yùn)行結(jié)果
inner function and z = 4
out function and z = 4
您可能感興趣的文章:
相關(guān)文章
flask路由分模塊管理及自定義restful響應(yīng)格式詳解
這篇文章主要為大家介紹了flask路由分模塊管理及自定義restful響應(yīng)格式詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08關(guān)于你不想知道的所有Python3 unicode特性
我的讀者知道我是一個喜歡痛罵Python3 unicode的人。這次也不例外。我將會告訴你用unicode有多痛苦和為什么我不能閉嘴。我花了兩周時間研究Python3,我需要發(fā)泄我的失望。在這些責(zé)罵中,仍然有有用的信息,因為它教我們?nèi)绾蝸硖幚鞵ython3。如果沒有被我煩到,就讀一讀吧2014-11-11Python3.6 + TensorFlow 安裝配置圖文教程(Windows 64 bit)
這篇文章主要介紹了Python3.6 + TensorFlow 安裝配置的教程(Windows 64 bit),本文通過圖文并茂的形式給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下2020-02-02踩坑:pytorch中eval模式下結(jié)果遠(yuǎn)差于train模式介紹
這篇文章主要介紹了踩坑:pytorch中eval模式下結(jié)果遠(yuǎn)差于train模式介紹,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-06-06python腳本執(zhí)行CMD命令并返回結(jié)果的例子
今天小編就為大家分享一篇python腳本執(zhí)行CMD命令并返回結(jié)果的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-08-08CentOS 7下Python 2.7升級至Python3.6.1的實戰(zhàn)教程
Centos是目前最為流行的Linux服務(wù)器系統(tǒng),其默認(rèn)的Python 2.x,這篇文章主要給大家分享了關(guān)于在CentOS 7下Python 2.7升級至Python3.6.1的實戰(zhàn)教程,文中將升級的步驟一步步的介紹的非常詳細(xì),對大家的理解和學(xué)習(xí)具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧。2017-07-07