Python 函数
传递实参
向函数传递实参的方式有很多,可使用位置实参,这要求实参的顺序与形参的顺序相同;也可使用关键字实参,其中每个实参都由变量名和值组成;还可以使用列表和字典。
位置实参
位置实参的顺序比较重要,否则会得到不符合预期的结果。
def animal(animal_type,animal_name):
"""显示宠物信息"""
print(animal_type+"'s name is "+animal_name.title())
animal('cat','kitty')
程序输出:
cat's name is Kitty
关键字实参
关键字实参是传递给函数的名称-值对。
关键字实参无需考虑函数调用中的实参顺序,还清楚地指出了函数调用中各个的用途。
def animal(animal_type,animal_name):
"""显示宠物信息"""
print(animal_type+"'s name is "+animal_name.title())
animal(animal_name='kitty',animal_type='cat')
程序输出:
cat's name is Kitty
编写函数时,可以给每个形参指定默认值。在调用函数中给形参提供了实参时,Python将使用指定的实参值;否则,将使用形参的默认值。
使用默认值时,在形参列表中必须先列出没有默认值得形参,在列出有默认值的实参。
def animal(animal_name,animal_type='cat'):
"""显示宠物信息"""
print(animal_type+"'s name is "+animal_name.title())
animal('kitty')
程序输出:
cat's name is Kitty
返回值
在函数中,可以使用return语句将值返回到调用函数的代码行。
def get_full_name(first_name,last_name):
"""返回完整姓名"""
full_name=first_name+" "+last_name
return full_name
get_full_name('Li','Ming')
程序输出:
'Li Ming'
返回字典
def get_person(first_name,last_name):
"""返回一个字典"""
person={'first':first_name,'last':'last_name'}
return person
get_person('Li','Ming')
程序输出:
{'first': 'Li', 'last': 'last_name'}
传递列表
def greet_users(names):
"""传递一个列表"""
for name in names:
print("Hello,"+name+"\n")
names=["Jack","Rose","Bob","Jerry"]
greet_users(names)
程序输出:
Hello,Jack
Hello,Rose
Hello,Bob
Hello,Jerry
在函数中修改列表
将列表传递给函数后,函数就可对其进行修改。在函数中对这个列表所做的任何修改都是永久性的。
def print_colors(destination,source):
"""打印颜色模型"""
while source:
color=source.pop()
print("color model:"+color)
destination.append(color)
def show_colors(destination):
"""打印颜色"""
for color in destination:
print("color:"+color)
source=["red","blue","green","yellow"]
destination=[]
print_colors(destination,source)
show_colors(destination)
print(source)
程序输出:
color model:yellow
color model:green
color model:blue
color model:red
color:yellow
color:green
color:blue
color:red
[]
这种方式修改了原始的列表,如果要保存原始的列表,可传递原始列表的副本。
print_colors(destination,source[:])
传递任意数量的实参
星号让Python创建一个名为name的空元组,并将收到的所有值都封装进这个元组中。
def animals(*name):
print(name)
animals('cat')
animals('cat','dog','pig')
程序输出:
('cat',)
('cat', 'dog', 'pig')
结合使用位置实参和任意数量实参
如果让函数接收不同类型的实参,必须在函数定义中将接纳任意数量实参的形参放在最后。Python先匹配位置实参和关键字实参,在将余下的实参都收集到最后一个形参中。
def person(name,age,*fruits):
print(name+","+str(age))
print(name+"'s favorite fruits are :")
for fruit in fruits:
print(fruit)
person("LiMing",18,'apple','pear')
程序输出:
LiMing,18
LiMing's favorite fruits are :
apple
pear
使用任意数量的关键字实参
两个星号让Python创建一个info字典,并将收到的所有名称-值对都封装在这个字典中。
def person(name,sex,**info):
profile={}
profile['name']=name
profile['sex']=sex
for key,value in info.items():
profile[key]=value
return profile
p=person("Bob","man",addr="Beijing",tel="23456")
print(p)
程序输出:
{'name': 'Bob', 'sex': 'man', 'addr': 'Beijing', 'tel': '23456'}
将函数存储在模块中
将函数存储在被陈为模块的独立文件中,再将模块导入到主程序中。import语句允许在当前运行的程序文件中使用模块中的代码。
要调用被导入模块中的函数,可指定导入的模块名称和函数名,并用句点分割它们。`
module_name.function_name()
导入特定的函数:
from model_name import function_name
若要导入多个函数,可用逗号分割函数名
导入特定的函数,在使用时直接使用函数名就可以了。
使用as给函数指定别名
from model_name import function_name as fn
使用as给模块指定别名
import model_name as p
导入模块中的所有函数
使用星号运算符可以让Python导入模块中的所有函数
在使用并非自己编写的大型模块时,最好不要使用这种方法:如果模块中有函数名臣与你的项目中使用的名称相同,可能导致意想不到的结果:Python可能遇到多个名称相同的函数或变量,进而覆盖函数,而不是分别导入所有的函数。
最佳的做法是,要么只导入你需要的函数,要么导入整个模块并使用句点表示法。