(一)函数的定义
代码:
1 defmy_max(x, y) :2 #定义一个变量z,该变量等于x、y中较大的值
3 z = x if x > y elsey4 #返回变量z的值
5 returnz6
7 #定义一个函数,声明一个形参
8 defsay_hi(name) :9 print("===正在执行say_hi()函数===")10 return name + ",您好!"
(二)函数的调用
代码:
1 a = 6
2 b = 9
3 #调用my_max()函数,将函数返回值赋值给result变量
4 result = my_max(a , b) #①
5 print("result:", result)6 #调用say_hi()函数,直接输出函数的返回值
7 print(say_hi("孙悟空")) #②
结果:
result: 9
===正在执行say_hi()函数===孙悟空,您好!
(三)值传递和引用传递
Python中,根据实际参数的类型不同,函数参数的传递方式可分为 2 种,分别为值传递和引用(地址)传递:
值传递:适用于实参类型为不可变类型(字符串、数字、元组);
引用(地址)传递:适用于实参类型为可变类型(列表,字典);
值传递和引用传递的区别是,函数参数进行值传递后,若形参的值发生改变,不会影响实参的值;而函数参数继续引用传递后,改变形参的值,实参的值也会一同改变。
代码:
1 defdemo(obj) :2 obj +=obj3 print("形参值为:",obj)4 print("-------值传递-----")5 a = "C语言中文网"
6 print("a的值为:",a)7 demo(a)8 print("实参值为:",a)9 print("-----引用传递-----")10 a = [1,2,3]11 print("a的值为:",a)12 demo(a)13 print("实参值为:",a)
结果:
-------值传递-----a的值为: C语言中文网
形参值为: C语言中文网C语言中文网
实参值为: C语言中文网-----引用传递-----a的值为: [1, 2, 3]
形参值为: [1, 2, 3, 1, 2, 3]
实参值为: [1, 2, 3, 1, 2, 3]
(四)参数
(1)位置参数
在调用函数,指定的实际参数的数量,必须和形式参数的数量一致(传多传少都不行)。
(2)关键字参数
关键字参数是指使用形式参数的名字来确定输入的参数值。
代码:
1 #定义一个函数
2 defgirth(width , height):3 print("width:", width)4 print("height:", height)5 return 2 * (width +height)6 #传统调用函数的方式,根据位置传入参数
7 print(girth(3.5, 4.8))8 #根据关键字参数来传入参数
9 print(girth(width = 3.5, height = 4.8))10 #使用关键字参数时可交换位置
11 print(girth(height = 4.8, width = 3.5))12 #部分使用关键字参数,部分使用位置参数
13 #位置参数必须放在关键字参数之前
14 print(girth(3.5, height = 4.8))
(3)默认参数
python允许为参数设置默认值,即在定义函数时,直接给形式参数指定一个默认值。
代码:
1 #为两个参数指定默认值
2 def say_hi(name = "孙悟空", message = "欢迎来到C语言中文网"):3 print(name, ", 您好")4 print("消息是:", message)5 #全部使用默认参数
6 say_hi()7 #只有message参数使用默认值
8 say_hi("白骨精")9 #两个参数都不使用默认值
10 say_hi("白骨精", "欢迎学习Python")11 #只有name参数使用默认值
12 say_hi(message = "欢迎学习Python")
结果:
孙悟空 , 您好
消息是: 欢迎来到C语言中文网
白骨精 , 您好
消息是: 欢迎来到C语言中文网
白骨精 , 您好
消息是: 欢迎学习Python
孙悟空 , 您好
消息是: 欢迎学习Python
(五)逆向参数传递
所谓逆向参数收集,指的是在程序己有列表、元组、字典等对象的前提下,把它们的元素“拆开”后传给函数的参数。逆向参数收集需要在传入的列表、元组参数之前添加一个星号,在字典参数之前添加两个星号。
代码:
1 deftest(name, message):2 print("用户是:", name)3 print("欢迎消息:", message)4 my_list = ['小明', '欢迎来C语言中文网']5 test(*my_list)
结果:
用户是: 小明
欢迎消息: 欢迎来C语言中文网
(六)函数返回多个值
代码:
1 defsum_and_avg(list):2 sum =03 count =04 for e inlist:5 #如果元素e是数值
6 if isinstance(e, int) orisinstance(e, float):7 count += 1
8 sum +=e9 return sum, sum /count10
11
12 my_list = [20, 15, 2.8, 'a', 35, 5.9, -1.8]13
14 #获取sum_and_avg函数返回的多个值,多个返回值被封装成元组
15 tp = sum_and_avg(my_list) #①
16 print(tp)17
18 #使用序列解包来获取多个返回值
19 s, avg = sum_and_avg(my_list) #②
20 print(s)21 print(avg)
结果:
(76.9, 12.816666666666668)76.9
12.816666666666668