Python-函数
定义函数
def display_message():
print("本章学习了函数")
display_message()
使用关键字def定义函数 定义一冒号结尾 紧跟在冒号后面的所有缩进行构成了函数体
向函数传递信息
def favorite_book(book):
print("\n你最喜欢的图书是 "+book.title())
favorite_book("人民的名义")
在()内添加了book 因此在调用函数时 必须向book提供一个值
实参和形参
例如上面对代码 函数括号内的book就是形参 而调用函数时所给它的“人民的名义”就是实参
传递实参
传递实参的方式有:位置实参 关键字实参
位置实参
def make_shirt(size,logo):
print("你需要一件尺码为 "+size.title()+"所印字样为 "+logo.title())
make_shirt(size='L',logo='VVVVV')
就是在调用函数时 实参与函数中形参的位置一一对应 如果对应位置错误 会导致结果不同
关键字实参
关键字实参是传递给函数的名称-值对 直接在实参中将名称与值关联 因此不会出现位置实参传递时可能出现的错误
def make_shirt(size,logo):
print("你需要一件尺码为 "+size.title()+"所印字样为 "+logo.title())
make_shirt(size='L',logo='VVVVV')
在调用函数时 直接用形参=实参 要注意实参要用引号
默认值
编写函数时 可给每个形参指定默认值 在调用函数中给形参提供了实参时 python将使用指定的实参值;否则 将使用形参的默认值
def make_shirt(size,logo='I love Python'):
print("你需要一件尺码为 "+size.title()+"所印字样为 "+logo.title())
make_shirt(size='L',logo='VVVVV')
make_shirt('XL')
第三行给了指定值 因此函数中的logo将不再使用默认值 第四行只有一个值 因此函数中的logo将使用默认值 注意需要将有默认值的放在后面
返回值
函数并非总是直接显示输出,相反,他可以处理一些数据,并返回一个或一组值、函数返回的值被称为返回值 可使用return语句将值返回到调用函数的代码行
def city_country(city,country):
place=city+country
return place
places=city_country('qing dao','China')
print(places)
调用返回值的函数时 需要提供一个变量 用于储存返回的值 在这了 使用places储存返回值
让实参变成可选的
有时候,需要让实参变成可选的,这样使用函数的人就只需要在必要时才提供额外的信息 可使用默认值让实参变成可选的 为让实参变成可选的 可以给实参指定一个默认值------空字符串(‘ ’)并使用if else 在没有提供这个实参的值时 不使用它
返回字典
def build_person(firstname,lastname):
"返回字典"
person={'first':firstname,'last':lastname}
return person
musician=build_person('jimi','hendrix')
print(musician)
结合使用函数和while循环
当我们需要用户输入一些内容 当输入我们指定的内容时退出 这就可以和while循环结合使用
def make_album(name,album):
albumss={'names':name,'albums':album}
return albumss
while True:
print("请输入歌手名 专辑名 ")
print("输入 quit 退出")
namess=input('name:')
if namess=='quit':
break
a=input('album')
if a=='quit':
break
songs=make_album(namess, a)
print(songs)
在上述代码中需要输入歌手名以及专辑名 当用户输入quit时 则代码自动结束
传递列表
向函数传递列表 函数就能直接访问其内容
def show_magicians(magician):
for magiciaa in magician:
print(magiciaa)
magician=['zhang','zhou','liu']
show_magicians(magician)
在函数中修改列表
在函数中对这个列表所做的任何修改都是永久性的
禁止函数修改列表
有时候我们需要禁止函数修改列表 可以使用列表的副本[:]在函数调用列表时 在列表后加上[:]既是调用列表副本
传递任意数量的实参
def sand_wich(*tooplings):
for toopling in tooplings:
print("\n"+toopling)
sand_wich('piza')
sand_wich('pizi','zhi shi','pengen')
形参名*tooplings中的星号让Python创建一个名为tooplings的空元组,并将所有收到的所有值都封装到这个元组中
结合使用位置实参和任意数量实参
如果要让函数接收不同类型的实参 必须在函数定义中将接纳任意数量实参的形参放在最后 python先匹配位置实参和关键字实参 再将余下的实参都收集到最后一个形参中
使用任意数量的关键字实参
当我们需要接受任意数量的实参,但预先不知道传递给函数的会是怎样的信息 在这种情况下 可将函数编写成能够接受任意数量的键-值对————————刁颖语句提供了多少就接受多少
def build_profile(first,last,**user_info):
profile={}
profile['firstname']=first
profile['last name']=last
for key,value in user_info.items():
profile[key]=value
return profile
user_file=build_profile('shi hao','zhang',
age=99,
postion='qingdao')
print(user_file)
形参**user_info中的两个星号让python创建一个名为user_info的空字典 并将收到的所有名称——值对都封装到这个字典当中
将函数存储在模块中(例子采用pizaa模块中的meke_pizaa函数)
函数的优点之一是:使用他们可以将代码块与主程序分离 将函数存储在被称为模块(.py结尾的文件)的独立文件中,再将模块导入到主程序中。import语句允许在当前运行的程序文件中使用模块中的代码 这样可以隐藏代码的细节 将重点放在程序的高层逻辑上
import pizza pizza.make_pizza(16,'pepperoni')
代码行import pizza让Python打开文件pizza.py 并将其中的函数都复制到这个程序中 要调用呗导入的模块中的函数 可指定导入的模块名称pizza和函数名称make_pizza()并用句点分隔他们
导入特定的函数
from pizza import make_pizza make_pizza(16,'pepperoni')
若使用这种语法 调用函数时就无需使用句点 由于我们在import语句中显式的导入了函数make_pizza()因此调用它时只需指定其名称
使用as给函数指定别名
from pizza import make_pizza as mp mp(16,'pepperoni')
import语句将函数make_pizza()重新命名为mp() 每当调用make_pizza()时都可以简写成mp()
使用as给模块指定别名
import pizza as p p.make_pizza(16,'pepperoni')
import语句给模块pizza指定了别名p 但是该模块中所有函数的名称都没有改变
导入模块中的所有函数
from pizza import * make_pizza(16,'pepperoni')
import语句中的星号让Python将模块pizza中的所有函数都复制到这个程序文件中 可以通过名称来调用所有函数 并且无需使用句点表示法

浙公网安备 33010602011771号