函数
在python中的变量不用声明数据类型,定义函数同理,不用定义函数的数据类型来确定返回的数据
与在其他语言中一样,函数必须先定义再调用,碰到第一个return时结束函数,该return后面的不再执行,用一个return返回多个数据时默认用元组装着传回去
#用def定义函数,记得一定有冒号,缩进表示在同一代码块
def test() :
print('hello world')
位置(必选)参数、默认参数
在定义函数时声明的参数,调用函数时根据位置传入参数。若函数有多个参数,则可以设置右边的参数带有默认值,则在调用的时候只需传入必须参数
必须参数(变化大)在默认参数(变化小)的左边,默认参数必须指向不变的对象,不能是声明一个空列表或者空字典这种
# 定义函数时声明的位置参数
def test(x):
return x+2
test(2) #调用时必须传入
# 定义带多参数的函数
# 必选参数在最左边,右边的参数可设置为默认参数
# 在调用函数时,右边的参数不传入则使用默认值
def student(num, room='first'):
print('number is', num)
print('room is', room)
student(10) # 调用只传入必须参数,class为默认值first
student(11,'two') # 传入了两个参数,按位置传入,num为11,room此时有传入为'two'
可变参数 *参数
即传入的参数是可变的。
定义函数时的 *参数,把位置参数以外的参数组装为一个tuple传入,该tuple可以为空。
调用函数时的 *参数,把一个list或tuple中的元素作为可变元素传入,此时会把元组解包依次传入位置参数(但数量要一致)。
# 定义函数,使用可变参数,调用函数时传入的参数打包为一个tuple并用numbers变量接收
def total(*numbers):
sum = 0
for n in numbers
sum = sum + n
return sum
def total_1(num, score):
print num
print score
total(90, 60, 89) #函数调用,传入的90,60,89被打包为一个tuple
tuple_num = (60, 87, 90) #已有一个tuple
total(*tuple_num) #把tuple_num中所有元素作为可变参数传入
total_1(*tuple_num) #作为可变参数,传入一个没有声明可变参数的函数
# *函数会把该元组解包,依次传入位置参数
关键字参数 **参数
也可以理解为是一种可变参数
定义函数时的**参数,收集未匹配的位置参数,组装为一个dict传入
调用函数时的**参数,对dict的解包,把dict对象中的每个键值对依次转为各组关键字参数传入函数
【*参数必须在**参数前】
全局变量
python中的全局变量和局部变量的定义和其他语言的一样,不同之处在于:在函数中修改全局变量时要先声明global
x = 100 #声明全局变量
def test():
print(x) #直接调用全局变量
x=200 #这里没声明global看作时局部变量x
print('new ',x)
def test_2():
global x #声明这里使用的是全局变量x
x=500
print(x)