一、自定义函数
def 函数名:
函数体
在Python中使用关键字def来定义一个函数,def后面是函数名,只有还有一个冒号,冒号后面的所有缩进行构成了函数体。
def SayHello():
print("Hello!")
SayHello()
'''输出结果:
Hello!
'''
1、向函数传递信息
参数在函数名后定义,并用括号括起来。
def SayHello(name):
print(name+"said: Hello!")
SayHello('Tom')
SayHello('Bob')
'''输出结果:
Tomsaid: Hello!
Bobsaid: Hello!
'''
在SayHell()的定义中,变量name是一个形参——函数完成其工作所需的一项信息。在代码SayHello(‘Tom’)中,'Tom’是一个实参,实参是调用函数是传递给函数的信息。
二、传递实参
向函数传递实参的方式很多,可以使用位置实参,这就要求实参的顺序与形参的顺序也相同;也可以使用关键字实参,其中每个实参都由变量名和值组成;还可以使用列表和字典。
1、位置实参
调用函数时,Python将函数调用中的每个实参都关联到函数定义中的一个形参。这种关联方式成为位置实参。
def SayHello(Name,Somethings):
print(Name+" said: "+Somethings+"!")
SayHello('Tom','Hello')
SayHello('Bob','Hi')
'''输出结果:
Tom said: Hello!
Bob said: Hi!
'''
(1)调用函数多次
(2)位置实参的顺序很重要
2、关键字实参
关键字实参是传递给函数的名称-值对,直接在实参中将名称和值关联起来,因此向函数传递实参时不会混淆。
def SayHello(Name,Somethings):
print(Name+" said: "+Somethings+"!")
SayHello(Name='Tom',Somethings='Hello')
SayHello(Somethings='Hi',Name='Bob',)
'''输出结果:
Tom said: Hello!
Bob said: Hi!
'''
此时,关键字实参的顺序已经无关紧要了。
3、默认值
编写函数时,可以给每个形参指定默认值。
def SayHello(Name,Somethings='Hello'):
print(Name+" said: "+Somethings+"!")
SayHello('Tom')
SayHello('Bob','Hi')
'''输出结果:
Tom said: Hello!
Bob said: Hi!
'''
在使用默认值时,在形参列表中必须先列出没有默认值的形参,再列出有默认值的形参。
4、等效的函数调用
混合使用位置实参、关键字实参和默认值可以混合使用,这样就有多种等效的函数调用方式。
5、避免实参错误
如果遇到实参不匹配错误时,首先检查提供的实参是否多与或少于函数完成其工作所需的信息。
三、返回值
函数并非总是直接显示输出,更多地是处理一些数据,并返回一个或一组值,函数返回的值被称为返回值。在函数中,可使用return语句将值返回到调用函数的代码行。
1、返回简单值
调用返回值的函数时,需要提供一个变量,用于存储返回的值。
def Num_Sum(num1,num2):
return num1+num2
S_Sum=Num_Sum(12,23)
print(S_Sum)
'''输出结果:
35
'''
2、让实参变成可选的
有时候,需要实参变成可选的,这样使用函数的人就只需要在必要时提供额外的信息,可使用默认值来让实参变成可选的。
"计算两个或者三个数的和"
def Num_Sum(num1,num2,num3=0):
if num3:
return num1+num2+num3
else:
return num1+num2
S_Sum=Num_Sum(12,23)
S_Sum1=Num_Sum(12,23,12)
print(S_Sum)
print(S_Sum1)
'''输出结果:
35
47
'''
3、返回字典
函数乐意返回任何类型的值,包括字典和列表等较复杂的数据结构。
def Num_Sum(name,age=0):
Stu={'name':name}
if age:
Stu['age']=age
return Stu
stu=Num_Sum('Tom',23)
print(stu)
'''输出结果:
{'name': 'Tom', 'age': 23}
'''
4、结合使用函数和while循环
def list_Num(num):
i=0
while i<num:
print(i)
i+=1
list_Num(4)
'''输出结果:
0
1
2
3
'''
四、传递列表
1、在函数中修改列表
将列表传递给函数后,函数就可以对其修改,在函数中对这个列表所做的修改是永久性的。
2、禁止函数修改列表
使用切片表示法[:]来创建列表副本。
五、传递任意数量的实参
1、结合使用位置参数和任意数量实参
def my_classes(*myclass):
print('I like :')
for myc in myclass:
print(myc)
my_classes('math')
print('----------------------------')
my_classes('computer','Chinese','Python')
'''输出结果:
I like :
math
----------------------------
I like :
computer
Chinese
Python
'''
形参名*myclass中的星号让Python创建一个名为myclass的空元组,并将收到的所有值都装到这个元组中。
2、使用任意数量的关键字实参
def Stu(name,age,**stu_info):
Student={}
Student['name']=name
Student['age']=age
for key,value in stu_info.items():
Student[key]=value
return Student
stu=Stu('Tom',23,email='160@163.com',Phone='010-6233')
print(stu)
'''输出结果:
{'name': 'Tom', 'age': 23, 'email': '160@163.com', 'Phone': '010-6233'}
'''
六、将函数存储在模块中
1、导入模块
首先得创建模块,模块是拓展名为.py的文件,包含要导入到程序中的代码.
import 模块名 使用:模块名.函数名
2、导入特定的函数
from 模块名 import 函数名
3、使用as给函数指定别名
from 模块名 import 函数名 as 函数别名
4、使用as给模块指定别名
import 模块名 as 模块别名
5、导入模块中的所有函数
使用星号(*)运算符可以让Python导入模块中的所有函数。
文章如有错误,请指正!
|