本节将着重介绍Python中的函数部分
目录
一、函数示例
def print_username(username):
print(username)
print('ph')
示例中函数名为print_username,声明时的参数username为形参,调用时的参数ph为实参
二、传递实参
2.1位置实参
传递参数时实参与形参的顺序一一对应
def describe_pet(animal_type, pet_name):
print(animal_type)
print(pet_name)
describe_pet('cat','taohua')
2.2关键字实参
使用关键字将形参与实参一一对应,实参的位置不再严格要求
def describe_pet(animal_type, pet_name):
print(animal_type)
print(pet_name)
describe_pet(pet_name='taohua', animal_type= 'cat')
2.3默认值
编写函数时可以为函数提供默认参数,当没有实参时将使用默认参数(使用时实参仍遵循位置实参或关键字实参的规则,三者可以混合使用)
注:默认形参需要排在形参之后
def describe_pet(pet_name, animal_type='cat'):
print(animal_type)
print(pet_name)
describe_pet(pet_name='taohua')
三、返回值
返回值与c语言中的函数同理,可以是一个值或者一组值。
3.1返回值示例
def get_formatted_name(first_name, last_name):
full_name = f"{first_name} {last_name}"
return full_name.title()
musician=get_formatted_name('jimi','hendrix')
print(musician)
3.2实参可选
使实参之一默认为空,通过条件判断来实现实参可选的方法
注:字符串可用''来代表空,数值变量可用None
函数也可以返回列表或字典
def get_formatted_name(first_name, last_name, middle_name=''):
if middle_name:
full_name = f"{first_name} {middle_name} {last_name}"
else:
full_name= f"{first_name} {last_name}"
return full_name.title()
musician=get_formatted_name('jimi','hendrix','lee')
print(musician)
四、传递列表
可以将列表作为实参传递,函数可以修改作为实参传递过来的列表,如果需要禁止函数修改,则可以将列表的副本作为实参传递。
def print_fun(list):
list[1]='wwes'
print(list)
list=['dsa','sdas','sda']
print_fun(list[:]) #将切片作为副本传递,函数中只会修改切片而不影响原列表
print(list)
五、传递任意数量的实参
1.使用方法
当预先不知道函数需要接受多少个实参时,可以使用下述方法:
def make_pizza(*toppings):
print(toppings)
make_pizza('pepperoni')
make_pizza('mushrooms','green peppers','extra')
原理:函数声明中使用*toppings形参创建了一个空元组,该元组会将所有实参都收入其中,即使用该方法后,所有的实参都按顺序放在元组toppings中。
注:当需要同时使用任意数量实参和必需实参时需要将任意数量实参放在最后
2.使用任意数量的关键字实参
需要接受任意数量的实参,但预先不知道传递给函数的是什么信息,这种情况下可将函数编写成能够接受任意数量的键值对。例:
def build_profile(first, last, **user_info):
user_info['first_name'] = first
user_info['last_name'] = last
return user_info
user_profile = build_profile('p', 'h' ,
location = 'shenyang',
filed = 'physics')
print(user_profile)
**user_info形参创建了一个空字典将后续任意数量的实参存储进入该字典中,可在函数中对该字典进行修改或使用。
六、将函数存储在模块
创建模块需要先在主程序目录下创建一个拓展名为.py的文件,包含要导入到程序中的代码。在下面的例子中创建一个名为pizza的模块,在模块中含有一个名为make_pizza的函数,将模块与主程序放在同一目录下,即可在主程序中使用模块中的函数。
#pizza.py
def make_pizza(size, *toppings):
print(f"{size} {toppings}")
#main_program.py
import pizza
pizza.make_pizza(16,'sad','sae')
也可以只导入特定的函数(此时不需要再加模块名):
#main_program.py
from pizza import make_pizza
make_pizza(16,'sad','sae')
也可以将模块中的函数取别名以防止冲突:
#main_program.py
from pizza import make_pizza as mp
mp(16, 'pepperoni')
可以给模块取别名:
#main_program.py
inmport pizza as p
p.make_pizza(16, 'h')
也可以导入模块中的所有函数:
from pizza import *
make_pizza(16,'h')