一、函数
函数是程序中一个个小小的功能模块,可以有输入和输出,输入过程中通常会将实参值赋给形参,形参在函数体内参与运算
def function_name(parameter1, parameter2):
statement1
statement2
return something_or_nothing
① 传递实参
1. 位置传递
按照函数定义的形参顺序,在调用时依次输入实参变量
def add(number1, number2):
sum = number1 + number2
return sum
a = 3
b = 5
print(add(a, b))
2. 关键词传递
无需按照顺序输入实参变量
def pet(type, whos):
print(type + " is " +whos + "'s pet.")
pet(whos = "Herman", type = "dog")
dog is Herman's pet.
3. 默认值
当为函数形参设置默认值时,可以省略它的实参传递,但是要注意,有默认值的需要放在没有默认值的形参后面,当需要为这个有默认值的形参设置参数时,采用关键词传递方式或位置传递,默认值的函数形参同样遵循位置传递的顺序
def pet(typename, whos="Herman"):
print(typename + " is " + whos + "'s pet.")
pet("dog")
pet(whos="Bob", typename="cat")
dog is Herman's pet.
cat is Bob's pet.
② 传递列表
当传递列表时,同复制列表不可以直接使用list_new = list 一样,因为会使得新旧变量均指向同一个列表,因此当传递列表时,在函数体内对形式列表变量的操作也会影响到实际的列表,当需要保留原列表时,可以使用切片表示法,在向函数传递时,给函数传递一个列表的完全切片(复制品)
function_name(list_name[:])
def juice(food):
while food:
add_in_food = food.pop()
print("Add " + add_in_food + " into juice")
if food:
print(str(food) + " remain in function")
else:
print("nothing in the food")
fruits = ['apple', 'orange', 'banana']
juice(fruits[:])
print(fruits)
③ 传递任意数量的实参
在形参名前加星号,让Python创建一个名为形参名的空元组,并将收到的所有值装入元组(不可修改的列表)
如果某个形参要接纳任意数量的实参,应该将其放在形参顺序的最后,将会在满足完全函数所有的无默认值参数、有默认值参数后,开始将剩下的值填入元组并存于最后一个形参变量中
def food(username, *pet_names):
print(username + " has " + str(pet_names))
food("herman", "tomato", "banana")
herman has ('tomato', 'banana')
④ 使用任意数量的关键词实参
当需要向函数传递不定数量的键-值对时,可以在形参前添加双星号,使这个形参的形式为字典,将会把满足完前面参数剩下的关键词参数名及其对应的值,以键值对的形式存入字典
def person_info(name, **user_infos):
profile = {
}
profile['name'] = name
for key, value in user_infos.items():
profile[key] = value
return profile
herman_profile = person_info("herman", school= "ABC_School", age=18)
print(herman_profile)
{
'name': 'herman', 'school': 'ABC_School', 'age': 18}
二、函数的库(模块)与库的调用
① 函数库的封装
在python中,函数的库以.py文件的形式存储,在函数库文件中只有函数
② 函数库的调用
当目录相同时可以这样调用
1. 调用整个库
import的本质是将代码copy到此处,在使用库内函数时,只需要在函数前加上库名并带一个点
import module_name
module_name.function()
2. 调用库中某些函数
直接调用库内某些函数时,使用函数时无需再带上库名
from module_name import function_name_1, function_name_2
function()
3. 为库指定别名
使用关键字as
import module_name as nickname
nickname.function()
4. 为库内函数指定别名
直接调用库内某些函数时,使用函数时无需再带上库名
from module_name import function_name as fn
fn()
5. 导入模块所有函数
通常不使用,因为容易和本文件内已经命名好的函数重名导致报错
from module_name import *