@本文來源於公衆號:csdn2299,喜歡可以關注公衆號 程序員學府
本文實例講述了Python函數的定義和作用域。分享給大家供大家參考,具體如下:
定義函數
默認參數: 可以向函數中添加默認參數,以便爲在函數調用中未指定的參數提供默認值
# 如果調用 cylinder_volume 函數時,不提供radius參數,那麼radius的值爲5
def cylinder_volume(height, radius=5):
pi = 3.14159
return height * pi * radius ** 2
向函數中的參數傳值的方法:按照位置和按照名稱
cylinder_volume(10, 7) # 1539.3791
cylinder_volume(height=10, radius=7) # 1539.3791
cylinder_volume(radius=7, height=10) # 1539.3791
注意:上述第一種是常用的按照位置傳值,第二種和第三種是按照名稱傳值
定義函數[相關練習]
寫一個名稱爲 population_density 的函數,該函數有兩個參數 population 和 land_area,並根據這兩個值返回人口密度。
解決方案:
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 的函數,該函數有一個參數:整數 days,並返回一個表示由多少周多少天組成的字符串。例如 readable_timedelta(10) 應返回“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).
函數中的變量作用域
變量作用域是指可以在程序的哪個部分引用或使用某個變量。
在函數中使用變量時,務必要考慮作用域。如果變量是在函數內創建的,則只能在該函數內使用該變量。你無法從該函數外面訪問該變量。
錯誤的示例:
# This will result in an error
def some_function():
word = "hello"
print(word)
這意味着你可以爲在不同函數內使用的不同變量使用相同的名稱, 正確的示例如下:
def some_function():
word = "hello"
def another_function():
word = "goodbye"
在函數之外定義的變量依然可以在函數內訪問。
word = "hello"
def some_function():
print(word)
print(word)
Best Practise:建議將變量定義在所需的最小作用域內。雖然函數可以引用在更大的作用域內定義的變量,但是通常不建議這麼做,因爲如果程序有很多變量,你可能不知道你定義了什麼變量。
注意:Python 不允許函數修改不在函數作用域內的變量,執行下列代碼,看發生了什麼
egg_count = 0
def buy_eggs():
egg_count += 12 # purchase a dozen eggs
buy_eggs()
此時會發生錯誤, 導致 UnboundLocalError : 當我們嘗試將函數外的一個變量的值更改或重新賦值爲另一個值時,我們將遇到這個錯誤, 但是這個原則僅適用於整數和字符串, 列表、字典、集合、類中可以在子程序中(子函數)通過修改局部變量達到修改全局變量的目的。
非常感謝你的閱讀
大學的時候選擇了自學python,工作了發現吃了計算機基礎不好的虧,學歷不行這是
沒辦法的事,只能後天彌補,於是在編碼之外開啓了自己的逆襲之路,不斷的學習python核心知識,深
入的研習計算機基礎知識,整理好了,我放在我們的微信公衆號《程序員學府》,如果你也不甘平庸,
那就與我一起在編碼之外,不斷成長吧!
其實這裏不僅有技術,更有那些技術之外的東西,比如,如何
做一個精緻的程序員,而不是“屌絲”,程序員本身就是高貴的一種存在啊,難道不是嗎?點擊加入
想做你自己想成爲高尚人,加油!