Python學(xué)習(xí)筆記之函數(shù)的定義和作用域?qū)嵗斀?/h1>
更新時間:2019年08月13日 11:17:01 作者:Johnny丶me
這篇文章主要介紹了Python學(xué)習(xí)筆記之函數(shù)的定義和作用域,結(jié)合實例形式詳細(xì)分析了Python函數(shù)的定義、參數(shù)使用、變量作用域相關(guān)問題與解決方法,需要的朋友可以參考下
本文實例講述了Python函數(shù)的定義和作用域。分享給大家供大家參考,具體如下:
定義函數(shù)
默認(rèn)參數(shù): 可以向函數(shù)中添加默認(rèn)參數(shù),以便為在函數(shù)調(diào)用中未指定的參數(shù)提供默認(rèn)值
# 如果調(diào)用 cylinder_volume 函數(shù)時,不提供radius參數(shù),那么radius的值為5
def cylinder_volume(height, radius=5):
pi = 3.14159
return height * pi * radius ** 2
向函數(shù)中的參數(shù)傳值的方法:按照位置和按照名稱
cylinder_volume(10, 7) # 1539.3791
cylinder_volume(height=10, radius=7) # 1539.3791
cylinder_volume(radius=7, height=10) # 1539.3791
注意:上述第一種是常用的按照位置傳值,第二種和第三種是按照名稱傳值
定義函數(shù)[相關(guān)練習(xí)]
寫一個名稱為 population_density 的函數(shù),該函數(shù)有兩個參數(shù) population 和 land_area,并根據(jù)這兩個值返回人口密度。
解決方案:
def population_density(population, land_area):
return population / land_area
test1 = population_density(10, 1)
expected_result1 = 10
print("expected result: {}, actual result: {}".format(expected_result1, test1)) # expected result: 10, actual result: 10.0
test2 = population_density(864816, 121.4)
expected_result2 = 7123.6902801
print("expected result: {}, actual result: {}".format(expected_result2, test2)) # expected result: 7123.6902801, actual result: 7123.690280065897
寫一個叫做 readable_timedelta 的函數(shù),該函數(shù)有一個參數(shù):整數(shù) days,并返回一個表示由多少周多少天組成的字符串。例如 readable_timedelta(10) 應(yīng)返回“1 week(s) and 3 day(s).”。
解決方案:
def readable_timedelta(days):
weeks = int(days / 7)
day = days % 7
return str(weeks) + ' week(s) and ' + str(day) + ' day(s).'
print(readable_timedelta(10)) # 1 week(s) and 3 day(s).
函數(shù)中的變量作用域
- 變量作用域是指可以在程序的哪個部分引用或使用某個變量。
- 在函數(shù)中使用變量時,務(wù)必要考慮作用域。如果變量是在函數(shù)內(nèi)創(chuàng)建的,則只能在該函數(shù)內(nèi)使用該變量。你無法從該函數(shù)外面訪問該變量。
錯誤的示例:
# This will result in an error
def some_function():
word = "hello"
print(word)
這意味著你可以為在不同函數(shù)內(nèi)使用的不同變量使用相同的名稱, 正確的示例如下:
def some_function():
word = "hello"
def another_function():
word = "goodbye"
在函數(shù)之外定義的變量依然可以在函數(shù)內(nèi)訪問。
word = "hello"
def some_function():
print(word)
print(word)
Best Practise:建議將變量定義在所需的最小作用域內(nèi)。雖然函數(shù)可以引用在更大的作用域內(nèi)定義的變量,但是通常不建議這么做,因為如果程序有很多變量,你可能不知道你定義了什么變量。
注意:Python 不允許函數(shù)修改不在函數(shù)作用域內(nèi)的變量,執(zhí)行下列代碼,看發(fā)生了什么
egg_count = 0
def buy_eggs():
egg_count += 12 # purchase a dozen eggs
buy_eggs()
此時會發(fā)生錯誤, 導(dǎo)致 UnboundLocalError : 當(dāng)我們嘗試將函數(shù)外的一個變量的值更改或重新賦值為另一個值時,我們將遇到這個錯誤, 但是這個原則僅適用于整數(shù)和字符串, 列表、字典、集合、類中可以在子程序中(子函數(shù))通過修改局部變量達(dá)到修改全局變量的目的。
關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Python函數(shù)使用技巧總結(jié)》、《Python面向?qū)ο蟪绦蛟O(shè)計入門與進(jìn)階教程》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python字符串操作技巧匯總》、《Python編碼操作技巧總結(jié)》及《Python入門與進(jìn)階經(jīng)典教程》
希望本文所述對大家Python程序設(shè)計有所幫助。
相關(guān)文章
-
Python開發(fā)游戲之井字游戲的實戰(zhàn)步驟
最近正在學(xué)習(xí)Python,所以最近做了一個關(guān)于Python的實例,下面這篇文章主要給大家介紹了關(guān)于Python開發(fā)游戲之井字游戲的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下 2023-02-02
-
Python實現(xiàn)一個列表分割成多個列表的四種示例
本文主要介紹了Python實現(xiàn)一個列表分割成多個列表的四種示例,包括使用循環(huán)、切片操作、itertools.groupby()和numpy的array_split(),具有一定的參考價值,感興趣的可以了解一下 2024-12-12
-
如何徹底解決python?NameError:name?'__file__'?is?not?
這篇文章主要給大家介紹了關(guān)于如何徹底解決python?NameError:name?'__file__'?is?not?defined的相關(guān)資料,文中通過圖文將解決的辦法介紹的非常詳細(xì),需要的朋友可以參考下 2023-02-02
-
python編程實現(xiàn)清理微信重復(fù)緩存文件
這篇文章主要為大家介紹了使用python編程來實現(xiàn)清理微信重復(fù)緩存文件的示例代碼過程,有需要的朋友可以借鑒參考下,希望能夠有所幫助 2021-11-11
-
LangChain簡化ChatGPT工程復(fù)雜度使用詳解
這篇文章主要為大家介紹了LangChain簡化ChatGPT工程復(fù)雜度使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪 2023-03-03
-
Python摳圖教程之使用OpenCV實現(xiàn)背景去除
這篇文章主要給大家介紹了關(guān)于Python摳圖教程之使用OpenCV實現(xiàn)背景去除的相關(guān)資料,背景去除是在很多視覺應(yīng)用里的主要預(yù)處理步驟,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下 2023-10-10
-
python GUI庫圖形界面開發(fā)之PyQt5不規(guī)則窗口實現(xiàn)與顯示GIF動畫的詳細(xì)方法與實例
這篇文章主要介紹了python GUI庫圖形界面開發(fā)之PyQt5不規(guī)則窗口與顯示GIF動畫的詳細(xì)方法與實例,需要的朋友可以參考下 2020-03-03
最新評論
本文實例講述了Python函數(shù)的定義和作用域。分享給大家供大家參考,具體如下:
定義函數(shù)
默認(rèn)參數(shù): 可以向函數(shù)中添加默認(rèn)參數(shù),以便為在函數(shù)調(diào)用中未指定的參數(shù)提供默認(rèn)值
# 如果調(diào)用 cylinder_volume 函數(shù)時,不提供radius參數(shù),那么radius的值為5 def cylinder_volume(height, radius=5): pi = 3.14159 return height * pi * radius ** 2
向函數(shù)中的參數(shù)傳值的方法:按照位置和按照名稱
cylinder_volume(10, 7) # 1539.3791 cylinder_volume(height=10, radius=7) # 1539.3791 cylinder_volume(radius=7, height=10) # 1539.3791
注意:上述第一種是常用的按照位置傳值,第二種和第三種是按照名稱傳值
定義函數(shù)[相關(guān)練習(xí)]
寫一個名稱為 population_density 的函數(shù),該函數(shù)有兩個參數(shù) population 和 land_area,并根據(jù)這兩個值返回人口密度。
解決方案:
def population_density(population, land_area):
return population / land_area
test1 = population_density(10, 1)
expected_result1 = 10
print("expected result: {}, actual result: {}".format(expected_result1, test1)) # expected result: 10, actual result: 10.0
test2 = population_density(864816, 121.4)
expected_result2 = 7123.6902801
print("expected result: {}, actual result: {}".format(expected_result2, test2)) # expected result: 7123.6902801, actual result: 7123.690280065897
寫一個叫做 readable_timedelta 的函數(shù),該函數(shù)有一個參數(shù):整數(shù) days,并返回一個表示由多少周多少天組成的字符串。例如 readable_timedelta(10) 應(yīng)返回“1 week(s) and 3 day(s).”。
解決方案:
def readable_timedelta(days): weeks = int(days / 7) day = days % 7 return str(weeks) + ' week(s) and ' + str(day) + ' day(s).' print(readable_timedelta(10)) # 1 week(s) and 3 day(s).
函數(shù)中的變量作用域
- 變量作用域是指可以在程序的哪個部分引用或使用某個變量。
- 在函數(shù)中使用變量時,務(wù)必要考慮作用域。如果變量是在函數(shù)內(nèi)創(chuàng)建的,則只能在該函數(shù)內(nèi)使用該變量。你無法從該函數(shù)外面訪問該變量。
錯誤的示例:
# This will result in an error def some_function(): word = "hello" print(word)
這意味著你可以為在不同函數(shù)內(nèi)使用的不同變量使用相同的名稱, 正確的示例如下:
def some_function(): word = "hello" def another_function(): word = "goodbye"
在函數(shù)之外定義的變量依然可以在函數(shù)內(nèi)訪問。
word = "hello" def some_function(): print(word) print(word)
Best Practise:建議將變量定義在所需的最小作用域內(nèi)。雖然函數(shù)可以引用在更大的作用域內(nèi)定義的變量,但是通常不建議這么做,因為如果程序有很多變量,你可能不知道你定義了什么變量。
注意:Python 不允許函數(shù)修改不在函數(shù)作用域內(nèi)的變量,執(zhí)行下列代碼,看發(fā)生了什么
egg_count = 0 def buy_eggs(): egg_count += 12 # purchase a dozen eggs buy_eggs()
此時會發(fā)生錯誤, 導(dǎo)致 UnboundLocalError : 當(dāng)我們嘗試將函數(shù)外的一個變量的值更改或重新賦值為另一個值時,我們將遇到這個錯誤, 但是這個原則僅適用于整數(shù)和字符串, 列表、字典、集合、類中可以在子程序中(子函數(shù))通過修改局部變量達(dá)到修改全局變量的目的。
關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Python函數(shù)使用技巧總結(jié)》、《Python面向?qū)ο蟪绦蛟O(shè)計入門與進(jìn)階教程》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python字符串操作技巧匯總》、《Python編碼操作技巧總結(jié)》及《Python入門與進(jìn)階經(jīng)典教程》
希望本文所述對大家Python程序設(shè)計有所幫助。
相關(guān)文章
Python開發(fā)游戲之井字游戲的實戰(zhàn)步驟
最近正在學(xué)習(xí)Python,所以最近做了一個關(guān)于Python的實例,下面這篇文章主要給大家介紹了關(guān)于Python開發(fā)游戲之井字游戲的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-02-02
Python實現(xiàn)一個列表分割成多個列表的四種示例
本文主要介紹了Python實現(xiàn)一個列表分割成多個列表的四種示例,包括使用循環(huán)、切片操作、itertools.groupby()和numpy的array_split(),具有一定的參考價值,感興趣的可以了解一下2024-12-12
如何徹底解決python?NameError:name?'__file__'?is?not?
這篇文章主要給大家介紹了關(guān)于如何徹底解決python?NameError:name?'__file__'?is?not?defined的相關(guān)資料,文中通過圖文將解決的辦法介紹的非常詳細(xì),需要的朋友可以參考下2023-02-02
python編程實現(xiàn)清理微信重復(fù)緩存文件
這篇文章主要為大家介紹了使用python編程來實現(xiàn)清理微信重復(fù)緩存文件的示例代碼過程,有需要的朋友可以借鑒參考下,希望能夠有所幫助2021-11-11
LangChain簡化ChatGPT工程復(fù)雜度使用詳解
這篇文章主要為大家介紹了LangChain簡化ChatGPT工程復(fù)雜度使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03
Python摳圖教程之使用OpenCV實現(xiàn)背景去除
這篇文章主要給大家介紹了關(guān)于Python摳圖教程之使用OpenCV實現(xiàn)背景去除的相關(guān)資料,背景去除是在很多視覺應(yīng)用里的主要預(yù)處理步驟,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-10-10
python GUI庫圖形界面開發(fā)之PyQt5不規(guī)則窗口實現(xiàn)與顯示GIF動畫的詳細(xì)方法與實例
這篇文章主要介紹了python GUI庫圖形界面開發(fā)之PyQt5不規(guī)則窗口與顯示GIF動畫的詳細(xì)方法與實例,需要的朋友可以參考下2020-03-03

