python学习系列13——函数

(一)函数的定义

代码:

 1     def my_max(x, y) :
 2         # 定义一个变量z,该变量等于x、y中较大的值
 3         z = x if x > y else y
 4         # 返回变量z的值
 5         return z
 6 
 7     # 定义一个函数,声明一个形参
 8     def say_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     def demo(obj) :
 2         obj += obj
 3         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     def girth(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     def test(name, message):
2         print("用户是: ", name)
3         print("欢迎消息: ", message)
4     my_list = ['小明', '欢迎来C语言中文网']
5     test(*my_list)

结果:

用户是:  小明
欢迎消息:  欢迎来C语言中文网

 

(六)函数返回多个值

代码:

 1 def sum_and_avg(list):
 2     sum = 0
 3     count = 0
 4     for e in list:
 5         # 如果元素e是数值
 6         if isinstance(e, int) or isinstance(e, float):
 7             count += 1
 8             sum += e
 9     return sum, sum / count
10 
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

 

posted @ 2019-10-11 14:34  蜀山月  阅读(310)  评论(0)    收藏  举报