函数的定义及使用
- 在Python中,定义一个函数要使用
def
语句,依次写出函数名、括号、括号中的参数和冒号:
,然后,在缩进块中编写函数体,函数的返回值用return
语句返回。 - 请注意,函数体内部的语句在执行时,一旦执行到
return
时,函数就执行完毕,并将结果返回。 - 如果没有
return
语句,函数执行完毕后也会返回结果,只是结果为None
。return None
可以简写为return
。
>>> def myprint():
... print('Hello!')
...
>>> a=myprint() # 先将 myprint 函数执行一遍,将返回值赋给 a
Hello!
>>> print(a)
None # 没有 return 语句,函数执行完毕后也会返回结果,结果为 None。
- 函数可以同时返回多个值,但其实就是一个tuple。( *b 的用法下文会讲到)
#返回多个值
>>> def many(a,*b):
... return a,b #返回 a,b 的值
...
>>> many(0,1)
(0, (1,))
>>> many(2,3,5)
(2, (3, 5))
1、不带参数的函数
注意:a = myprint( ) 与 b = myprint 的区别
print("1、不带参数的函数")
def myprint(): #定义 myprint 函数
print("Hello!")
return 1
myprint() #调用 myprint 函数
a=myprint() #先将 myprint 函数执行一遍,将返回值赋给a
print("a的值:",a)
print("a的类型",type(a)) #此时返回值为 1,故 a=1,类型为 int
b=myprint #b,即myprint()函数
print("b的值:",b) #<function myprint at 0x00000211D4B81E18>,b 的地址
print("b的类型",type(b)) #b 的类型为 function
运行结果:
1、不带参数的函数
Hello!
Hello!
a的值: 1
a的类型 <class 'int'>
b的值: <function myprint at 0x00000211D4B81E18>
b的类型 <class 'function'>
2、带固定参数的函数
print("2、带固定参数的函数")
def myplus(a,b): #a,b 必须是同一类型的值
return a+b+a #返回 a+b+a
a=myplus(1,2)
print(a) #结果为:4
print(myplus('2','3')) #结果为:232
print(myplus([1,2,3],[4,5])) #结果为:[1,2,3,4,5,1,2,3]
#print(myplus('2',3)) #会报错,因为 a、b 不是同一类型的值
运行结果:
2、带固定参数的函数
4
232
[1, 2, 3, 4, 5, 1, 2, 3]
3、带有可变参数(数量)的函数
print("3、带有可变参数(数量)的函数")
def mysum(*a): #'*' 代表可变,此时 a 是一个元组
print(type(a), a)
return sum(a)
b=mysum(1, 2))
print(b)
print(mysum(1, 2, 3))
运行结果:
3、带有可变参数(数量)的函数
<class 'tuple'> (1, 2) # a 的类型为 tuple, a=(1,2)
3 # sum(a) = 1+2 =3
<class 'tuple'> (1, 2, 3) # a 的类型为 tuple, a=(1,2,3)
6 # sum(a) = 1+2+3 =6
4.带有关键字函数
注意:带有关键字函数的传参规律
print("4、带有关键字函数")
def myfun(a, *b, c=1): # a 的值是必须有的,*b 的值是可有可无的
return a + sum(b)**c # 返回a+sum(b)**c
print(myfun(0, 1, 2)) # 此时 a=1,*b=(1,2),c=1
print(myfun(0, 1, 2, c=2)) # a=1,*b=(1,2),c=2
运行结果如下:
4、带有关键字函数
3 # 0+ sum(1,2)**1 = 3
9 # 0+ sum(1,2)**2 = 9