定义函数1
2
3def greet():
print("hello")
greet()
向函数传递参数1
2
3def greet(name):
print("hello" + name +'!')
greet('xiaoming')
传递实参
位置实参,传递多个参数时,按照形参和实参一一对应依次传递1
2
3def greet(yourname,myname):
print("hello" + yournamename +'!' + "i am " + myname)
greet('xiaoming',"xiaohong")
多次调用函数
1
2greet('xiaoming',"xiaohong")
greet('xiao',"hong")
位置实参的顺序非常重要,必须依次传递,不然会发生奇怪的事情
关键字实参关键字实参 是传递给函数的名称—值对。你直接在实参中将名称和值关联起来了,因此向函数传递实参时不会混淆你无需考虑函数调用中的实参顺序,还清楚地指出了函数调用中各个值的用途。1
2
3def greet(yourname,myname):
print("hello" + yournamename +'!' + "i am " + myname)
greet(yourname = 'xiaoming',myname = "xiaohong")
默认值编写函数时,可给每个形参指定默认值。在调用函数中给形参提供了实参时,Python将使用指定的实参值;否则,将使用形参的默认值。1
2
3def greet(yourname,myname = "xiaoming"):
print("hello" + yournamename +'!' + "i am " + myname)
greet('xiaohong')
等效的函数调用通过不同的函数调用,达到同样的效果
实参传递错误实参和形参的数量对应问题,提供的实参多于或少于函数完成其工作所需的信息时,将出现实参不匹配错误
函数返回值
简单返回值1
2
3
4
5def get_max(a,b):
if a > b:
return a
if a <= b:
return b
让实参变为可选在函数内加入if判断是否传入某个参数,如果为空执行代码段,不为空,执行另一段代码段。1
2
3
4
5
6
7
8
9
10
11def 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()
musician = get_formatted_name('jimi', 'hendrix')
print(musician)
musician = get_formatted_name('john', 'hooker', 'lee')
print(musician)
返回字典1
2
3
4
5def infor(id,name):
s_infor = {'id' : id,'name' :name}
return s_infor
a = infor('01','xiaohong')
print(a)
结合while循环使用函数1
2
3
4
5
6
7
8
9
10
11
12
13
14
15def get_formatted_name(first_name, last_name):
"""返回整洁的姓名"""
full_name = first_name + ' ' + last_name
return full_name.title()
while True:
print("nPlease tell me your name:")
print("(enter 'q' at any time to quit)")
f_name = input("First name: ")
if f_name == 'q':
break
l_name = input("Last name: ")
if l_name == 'q':
break
formatted_name = get_formatted_name(f_name, l_name)
print("nHello, " + formatted_name + "!")
传递列表1
2
3
4
5
6def list_append(List):
for i in range(5):
List.append(i)
a = [1,2,3,4,5,6,7]
list_append(a)
print(a)
在函数中修改列表1
2
3
4
5
6
7
8
9def list_append(List1,List2):
for i in range(5):
List1.append(i)
List2[i] = List1.pop()
a = [1,2,3,4,5,6,7]
b = [2]
list_append(b,a)
print(a)
print(b)
禁止函数修改列表可向函数传递列表的副本而不是原件;这样函数所做的任何修改都只影响副本,而丝毫不影响原件1function_name(list_name[:])
传递任意数量的参数例子1
2
3
4
5def show(*num):
for i in num:
print(i)
show(1,2,3,4)
show(5,6)
结合使用位置实参和任意数量实参1
2
3
4
5
6
7
8def make_pizza(size, *toppings):
"""概述要制作的比萨"""
print("nMaking a " + str(size) +
"-inch pizza with the following toppings:")
for topping in toppings:
print("- " + topping)
make_pizza(16, 'pepperoni')
make_pizza(12, 'mushrooms', 'green peppers', 'extra cheese')
使用任意数量的关键字实参1
2
3
4
5
6
7
8
9
10
11
12def build_profile(first, last, **user_info):
"""创建一个字典,其中包含我们知道的有关用户的一切"""
profile = {}
profile['first_name'] = first
profile['last_name'] = last
for key, value in user_info.items():
profile[key] = value
return profile
user_profile = build_profile('albert', 'einstein',
location='princeton',
field='physics')
print(user_profile)
将函数存储在模块中函数的优点之一是,使用它们可将代码块与主程序分离。通过给函数指定描述性名称,可让主程序容易理解得多。还可以更进一步,将函数存储在被称为模块的独立文件中,再将模块导入到主程序中。import语句允许在当前运行的程序文件中使用模块中的代码。
导入整个模块模块是扩展名为.py的文件,包含要导入到程序中的代码
下面来创建一个包含函数make_pizza() 的模块。
我们在pizza.py所在的目录中创建另一个名为making_pizzas.py的文件,这个文件导入刚创建的模块,再调用make_pizza() 两次
用import pizza 这就是一种导入方法:只需编写一条import语句并在其中指定模块名,就可在程序中使用该模块中的所有函数。如果你使用这种import 语句导入了名为module_name.py 的整个模块,就可使用下面的语法来使用其中任何一个函数
导入特定的函数1from module_name import function_0, function_1, function_2
使用as给函数指定别名1
2
3from pizza import make_pizza as mp
mp(16, 'pepperoni')
mp(12, 'mushrooms', 'green peppers', 'extra cheese')
使用as给模块指定别名1
2
3import pizza as p
p.make_pizza(16, 'pepperoni')
p.make_pizza(12, 'mushrooms', 'green peppers', 'extra cheese')
导入模块中所有函数使用星号(* )运算符可让Python导入模块中的所有函数:
1
2
3from pizza import *
make_pizza(16, 'pepperoni')
make_pizza(12, 'mushrooms', 'green peppers', 'extra cheese')
最好不要采用这种导入方法:如果模块中有函数的名称与你的项目中使用的名称相同,可能导致意想不到的结果
函数编写指南应给函数指定描述性名称,且只在其中使用小写字母和下划线
每个函数都应包含简要地阐述其功能的注释,该注释应紧跟在函数定义后面,并采用文档字符串格式
1
2
3
4
5
6
7
8
9
10def wendang(a):
'''
这是文档
i will help you
:param a: name
:return: None
'''
print("haha:{0}".format(a))
help(wendang)
print(wendang.__doc__)
给形参指定默认值时,或者使用关键字参数时,等号两边不要有空格