本文实例讲述了Python3.5函数的定义与使用。分享给大家供大家参考,具体如下:
1、函数学习框架
2、函数的定义与格式
(1)定义
(2)函数调用
注:函数名称不能以数字开头,建议函数名称的开头用小写的字母
(3)函数有四种格式,分别是:无参数无返回值,有参数无返回值、无参数有返回值、有参数有返回值
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:ZhengzhengLiu
# 无参数无返回值
def hello():
# 函数体/方法体
print("hello world")
hello()
# 有参数无返回值
def add(x, y):
print(x + y)
add(10, 20)
# 无参数有返回值
def sleep():
return "sleep"
s = sleep()
print(s)
# print(sleep()) 等价于上面两句
# 有参数有返回值
def sub(x, y):
return x * y
res = sub(12, 6)
print(res)
运行结果
hello world
30
sleep
72
3、函数的参数
注:定义再函数体内的参数是形参,调用时传入的参数是实参。
函数参数包括:位置参数、关键字参数和不定个数参数
(1)位置参数、关键字参数
示例代码:
#位置参数
def test(x,y,z):
print(x,y,z)
test(1,2,3)
#关键字参数
def test1(x,y,z=10):
print(x,y,z)
test1(1,2,3)
test1(1,2) #关键字参数,z采用默认的参数值
test1(x=2,z=3,y=1) #调用时的关键字参数
运行结果:
1 2 3
1 2 3
1 2 10
2 1 3
(2)默认参数
注:带有默认值参数的形参必须放在参数的最后面的位置。
(3)不定个数参数,用*args 和 **kwarg
总结:
(1)定义时 *的作用 将位置实参装配成元组
定义时 **的作用 将关键字实参装配成字典
(2)调用时 *作用 将元组或列表打散成位置参数进行参数传递
调用时 **作用 将字典打散成关键字参数进行参数传递
#不定个数参数
def test2(x,y,z,*args):
print(x,y,z,args)
#定义时 *的作用 将位置实参装配成元组
test2(1,2,3,4,6,7,8,9)
def test3(x,y,z,**kwargs):
print(x,y,z,kwargs)
#定义时 **的作用 将关键字实参装配成字典
test3(1,2,3,a=6,b=19,c=8)
def ts(x,*args,**kwargs):
print(x,args,kwargs)
ts(1,2,3,a=6,b=19,c=8)
def test4(x,y,z):
print(x,y,z)
x = [1,2,3]
y = {"x":1,"y":"hello","z":"你好"}
test4(*x) #调用时 *作用 将元组或列表打散成位置参数进行参数传递
test4(**y) #调用时 **作用 将字典打散成关键字参数进行参数传递
运行结果:
1 2 3 (4, 6, 7, 8, 9)
1 2 3 {'b': 19, 'a': 6, 'c': 8}
1 (2, 3) {'b': 19, 'a': 6, 'c': 8}
1 2 3
1 hello 你好
4、函数的传值:基本类型传值调用、非基本类型参数传递调用(强引用与弱引用)
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:ZhengzhengLiu
#基本类型传值调用
def test(x):
print(x)
test(10)
#非基本类型参数传递调用
li = [1,2,3,4]
print(id(li)) #打印传递前的地址
def test1(x):
print(id(x))
x[0] = 2 #修改第一个参数为2
print(x)
test1(li) #强引用(传址调用,列表里面的内容会进行修改)
#test1(list(li)) #弱引用(用list可以消除强引用,不能修改列表里的元素)
for i in li:
print(i)
运行结果:(强引用传址调用)
10
17741864
17741864
[2, 2, 3, 4]
2
2
3
4
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:ZhengzhengLiu
#基本类型传值调用
def test(x):
print(x)
test(10)
#非基本类型参数传递调用
li = [1,2,3,4]
print(id(li)) #打印传递前的地址
def test1(x):
print(id(x))
x[0] = 2 #修改第一个参数为2
print(x)
#tes