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