python3.4:基础语法:函数的编写和调用
1.函数的定义简述:
(1)简单函数定义:
# 定义函数printnumber()
def printnumber():
print(5)
# 调用函数printnumber()
printnumber()
(2)带传参的函数定义:
# 定义函数printnumber(),传入参数num并打印
def printnumber(num):
print(num)
# 调用函数printnumber(),打印传入的参数6
printnumber(6)
(3)带返回值的函数的定义:
# 定义函数printnumber(),打印传入数字,并返回传入参数+2作为返回值
def printnumber(num):
print(num)
return num+2
# 调用函数printnumber()
numreturn = printnumber(6)
# 打印返回值
print(numreturn)
2.函数的传参和返回值:
(1)函数传参:
1)位置实参:
当函数定义的形参数为多个时,需要对对应实参和形参进行关联,实参只给出值而基于实参顺序进行关联的关联方式为位置实参。
# 定义函数printnumber(),形参数为3
def printnumber(num1, num2, num3):
print(num1)
print(num2)
print(num3)
# 调用函数printnumber(),传入实参5、6、7,按位置关系分别与形参num1、num2、num3匹配
printnumber(5, 6, 7)
2)关键字实参:
当调用函数时实参给出名称--值对,直接基于给出参数名称对形参和实参进行关联的关联方式为关键字实参。
# 定义函数
def printnumber(num1, num2, num3):
print(num1)
print(num2)
print(num3)
# 调用函数,使用关键字实参关联方式
printnumber(num1=5, num2=6, num3=7)
# 交换实参位置,再次使用关键字实参调用函数
printnumber(num2=5, num3=6, num1=7)
3)默认值形参:
定义函数时可以给形参指定默认值,当调用时给出实参值时传入给定实参值,当不给出实参值时传入默认形参数值。当使用默认形参值时,在形参列表中必须先列出没有默认值的形参,再列出有默认值的形参。
# 定义函数printnumber(),形参num3设置默认值7
def printnumber(num1, num2, num3=7):
print(num1)
print(num2)
print(num3)
# 调用函数,num3不给出实参
printnumber(5, 6)
# 再次调用,用指定实参覆盖形参默认值
printnumber(5, 6, 8)
4)可选实参:
通过给出空的形参默认值,并在函数体中加入判断来实现可选实参。
# 定义函数,形参num3设置默认值‘’
def printnumber(num1, num2, num3=''):
if num3=='':
print(num1)
print(num2)
else:
print(num1)
print(num2)
print(num3)
# 调用函数,给出2个实参
printnumber(5, 6)
# 再次调用函数,给出3个实参
printnumber(5, 6, 8)
(2)函数返回值:
1)返回简单值:
# 定义函数
def printnumber(num1, num2, num3):
print(num1)
print(num2)
print(num3)
return num1+num2+num3
#调用函数
numreturn = printnumber(5, 6, 8)
print(numreturn)
2)返回字典:
# 定义函数
def printnumber(num1, num2, num3):
dic = {'num1': num1, 'num2': num2, 'num3': num3}
return dic
# 调用函数
dicreturn = printnumber(5, 6, 8)
print(dicreturn)
3.函数传参进阶:
(1)传参列表:
1)传入列表并修改列表:
将列表直接作为实参传入函数,即可以在函数中修改列表。
# 定义函数,在函数中修改列表num2
def printnumber(num1, num2):
for num in num1:
num2.append(num)
# 调用函数
number1 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
number2 = []
printnumber(number1, number2)
# 列表number2已经被修改
print(number2)
2)传参并禁止修改列表:
向函数传入列表的副本,这样函数做出的修改只影响副本,不影响列表本身。
# 定义函数
def printnumber(num1, num2):
for num in num1:
num2.append(num)
# 调用函数,传入列表的副本
number1 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
number2 = []
printnumber(number1[:], number2[:])
# 列表number2未被修改
print(number2)
(2)传递任意数量的实参:
1)传入任意数量实参:
将形参设为*name的形式可以接受任意数量的实参,星号使创建了一个空元组,传入的所有实参都将装入这个元组。当函数除了任意数量实参外还需要接受其他位置实参和关键字实参时,要将接纳任意数量实参的形参放在参数列表的最后。
# 定义函数,num3设为接纳任意数量实参的形参
def printnumber(num1, num2, *num3):
print(num1)
print(num2)
print(num3)
# 调用函数
number1 = 5
number2 = 6
number3 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
printnumber(number1, number2, number3)
2)传入任意数量的关键字实参:
当不确定需要接纳任意数量的实参是什么信息时,需要接纳关键字实参,这种情况下需要使对应的形参可以接纳任意数量的键--值对。
# 定义函数,形参num3用于接纳任意数量的关键字形参
def printnumber(num1, num2, **num3):
print(num1)
print(num2)
print(num3)
# 调用函数,后三个实参为传入num3的关键字形参
number1 = 5
number2 = 6
printnumber(number1, number2, num4=7, num5=8, num6=9)
4.函数的模块化:
(1)函数存储为模块:
模块是扩展名为.py的文件,将函数定义在文件中就形成了一个模块。
(2)导入模块:
1)导入整个模块:
# 导入模块trainmodel
import trainmodel
# 导入模块trainmodel,并将tm作为它的别名
import trainmodel as tm
# 调用已导入模块中函数名为function的函数
tm.function()
2)导入模块中特定的函数:
# 从模块trainmodel中导入指定函数名为function的函数
from trainmodel import function
# 导入多个指定函数
from trainmodel import function1,function2,function3
# 从模块trainmodel中导入指定函数名为function的函数,并将ft作为它的别名
from trainmodel import function as ft
# 导入模块中所有函数
from trainmodel import *