函数基础
函數——function
1. 如何定義一個簡單的函數
定義函數時,使用def(define)進行定義
"""定義了一個簡單的問候用戶的無參函數"""
def greet_user():
print('hello user!')
"""定義一個有參數的函數"""
def greet_user(username):
print('hello' + username.title())
def main():
username = 'zhang3'
greet_user()
greet_user(username)
if __name__ == '__main__':
main()
大家有時候會形參與實參不分,有時候會將函數定義中的變量稱為實參,函數調用的變量稱為形參,不要大驚小怪!
2. 傳遞實參的方式
傳遞實參大致分為三種:位置實參,關鍵字實參,默認實參
def describe_pet(animal_type, pet_name):
print('
I have a ' + animal_type + '.')
print("My " + animal_type + "'s name is" + pet_name.title() + '.')
位置實參(順序很重要)
python在進行函數調用時,會將函數調用的實參一一傳遞給形參,最簡單的調用方式就是基于實參的順序,這種關聯方式稱之為位置實參
describe_pet("dog", "xiao")
關鍵字實參
使用關鍵字實參時,請務必準確的指定函數定義中的形參名
關鍵字實參時傳遞給函數的名稱-值對,無須考慮函數調用的順序,清楚的指出了函數調用中各個值的用途
describe_pet(animal_type="dog", pet_name="xiao")
describe_pet(pet_name="xiao", animal_type="dog")
默認值
使用默認值時,在形參列表中必須先列出無默認值的的形參,再列出有默認值的實參,能夠讓Python正確的解讀位置實參
3. 函數返回值
函數并非總是顯示輸出,相反它可以處理數據,返回一個或一組值,函數返回的值稱為返回值。
在python中使用return語句來完成
返回簡單的值
def formatted_name(first_name, last_name):
"""返回整潔的名字"""
full_name = first_name + " " + last_name
return full_name.title()
def main():
name = formatted_name("s", "zj")
print(name)
if __name__ == '__main__':
main()
讓實參變成可選的
def get_formatted_name(first_name, last_name, middle_name=''):
"""返回整潔的名字"""
if middle_name:
full_name = first_name + ' ' + middle_name + ' ' + last_name
else:
full_name = first_name + ' ' + last_name
return full_name.title()
python將非空字符串解讀為True
返回字典
def bulid_person(first_name, last_name, age=''):
"""用字典返回一個人的數據"""
person = {'first': first_name, 'last': last_name}
if age:
person['age'] = age
return person
4. 傳遞列表
在函數中修改列表
問題:一家3D打印公司,需要將打印的設計存儲在一個列表中,打印后的模型移到另一個列表中,并將打印結果顯示到屏幕
"""定義兩個函數,一個完成打印操作,一個展示已打印的列表"""
def printed_models(unprinted_designs, completed_models):
"""負責完成打印操作"""
while unprinted_designs:
current_design = unprinted_designs.pop()
print('Printing models: ' + current_design)
completed_models.append(current_design)
def show_completed_models(completed_models):
print('
The following models have been pirnted: ')
for completed_model in completed_models:
print(completed_model)
def main():
unprinted_designs = ['iphone case', 'robot pendant', 'dodecahedron']
completed_modles = []
print_models(unprinted_designs, completed_modles)
show_completed_models(completed_modles)
if __name__ == '__main__':
main()
# 運行結果:
"""
Printing design: dodecahedron
Printing design: robot pendant
Printing design: iphone case
The following models have been printed:
dodecahedron
robot pendant
iphone case
"""
禁止在函數中修改列表
function_name(list_name[:])
切片表示法[:],創建列表的副本
5. 傳遞任意數量的實參
形參名 *toppings 中的星號,讓python創建一個空的元組,并將所有的值封裝的元組中,因此可以傳遞任意數量的實參。
def make_pizza(*toppings):
print(toppings)
make_pizza('x')
make_pizza('x', 'y', 'z')
形參名 **user_info中的兩個星號讓python創建一個名為:user_info的空字典,并將受到的鍵-值對封裝起來。
def build_profile(first, last, **user_info):
"""創建一個字典,其中包含我們知道的有關用戶的一切"""
profile = {}
profile['first_name'] = first
profile['last_name'] = last
for key, value in user_info.items():
profile[key] = value
return profile
6. 將函數存儲在模塊中
? 通過將函數存儲在稱為模塊(moudle)的獨立的文件中,隱藏程序代碼的細節,將重點放在程序的高層邏輯上,能夠重用函數,再將模塊導入(import)到程序中。
? 要想讓函數是可導入的,得先創建模塊,模塊是以.py結尾的文件,包含要導入的程序中的代碼。
導入整個模塊
導入模塊的名字,可在程序中使用該模塊的所有函數
? import moudle_name
使用模塊中的函數
? moudle_name.function_name()
導入特定的函數
? from moudle_name import function_name
通過逗號分隔函數名,可根據需要導入任意數量的函數
? from moudle_name import function_0, function_1, function_2,....
使用as給模塊起別名
如果要導入的函數名稱與當前程序中的名稱沖突,或者導入的函數名稱過長,可指定簡短而獨一無二的別名——函數的另一個名稱,類似于外號。
? from moudle_name import function_name as fn
使用as給函數起別名
import moudle_name as mn
導入模塊中所有的函數
使用星號(*****)運算符可讓python導入模塊中的所有函數,最佳的做法是導入你需要的函數,或者導入模塊,再使用句點表示法
? from moudle_name import *
7. 函數編寫指南
編寫函數時,應牢記幾個細節
應給函數指定描述性名稱,做到見名知意,且只在其中使用小寫字母和下劃線
在函數的定義的后面都應有一定的文檔字符串描述性語言,闡述函數的功能,
函數定義中,給形參指定默認值時,等號兩邊不要有空格
函數調用時,使用關鍵字實參時,等號兩邊不要有空格
總結
- 上一篇: 基于浙江线上大学视频秒过分析
- 下一篇: 全民阅读宣传标语文案30句