(一)函数的定义及调用
代码:
def max(x, y): # 定义一个变量z,该变量等于x、y中较大的值 # z = x if x > y else y if(x>y): return(x) else: return(y) a = 478 b = 345657 # 调用my_max()函数,将函数返回值赋值给result变量 result = max(a , b) # ① print("result:", result)
结果:
result: 345657
代码:
def a(love): print('------这是一种神奇的语言-------') return love +'python' a1 = a('我喜欢') print('我说:',a1)
结果:
------这是一种神奇的语言------- 我说: 我喜欢python
(二)值传递和引用传递
根据实际参数的类型不同,函数参数的传递方式可分为 2 种,分别为值传递和引用(地址)传递:
值传递:适用于实参类型为不可变类型(字符串、数字、元组);
引用(地址)传递:适用于实参类型为可变类型(列表,字典);
值传递和引用传递的区别是,函数参数进行值传递后,若形参的值发生改变,不会影响实参的值;而函数参数继续引用传递后,改变形参的值,实参的值也会一同改变。
代码:
def demo(obj): obj += obj print("形参值为:", obj) print("-----------------值传递----------------") #值传递应用类型:字符串、数字、元组等实参不可变 a = "C语言中文网" print("a的值为:", a) #若形参的值发生改变,不会影响实参的值,所以形参叠加,而实参不变 demo(a) print("实参值为:", a) print("-----------------引用传递---------------") #适用于实参类型为可变类型(列表,字典) a = ['0','1','2'] demo(a)#实参随着形参的改变而改变 print("实参值为:", a)
结果:
-----------------值传递---------------- a的值为: C语言中文网 形参值为: C语言中文网C语言中文网 实参值为: C语言中文网 -----------------引用传递--------------- 形参值为: ['0', '1', '2', '0', '1', '2'] 实参值为: ['0', '1', '2', '0', '1', '2']
(三)参数
(1)位置参数
在调用函数,指定的实际参数的数量,必须和形式参数的数量一致(传多传少都不行)。
(2)关键字参数
关键字参数是指使用形式参数的名字来确定输入的参数值。
代码:
def man(sex , name): # print("性别 ", sex) #print("名字 ", name)# 定义一个函数 return '我是'+sex+'\t''爱好女'+'\t'+'名字是:'+name; print(man("男生", '张三')) # 根据关键字参数来传入参数 print(man(sex = '男生', name = '张三')) # 使用关键字参数时可交换位置 print(man(sex = '男生', name = '张三')) # 部分使用关键字参数,部分使用位置参数 # 位置参数必须放在关键字参数之前 print(man('男生', name = '张三')) #print(man('男生', sex = '张三'))报错
结果:
我是男生 爱好女 名字是:张三 我是男生 爱好女 名字是:张三 我是男生 爱好女 名字是:张三 我是男生 爱好女 名字是:张三
(3)默认参数
python允许为参数设置默认值,即在定义函数时,直接给形式参数指定一个默认值。
代码:
#为两个参数指定默认值 def man(name='泰戈尔',book='python'): return name+book; #全部使用默认参数 a=man() print(a) #只有book使用默认值 b=man('仓央嘉措') print(b) #两个参数都不使用默认值 c = man('纳兰容若','人生若只如初见') print(c) #只有name参数使用默认值 d = man(book='飞鸟集') print(d)
结果:
泰戈尔python 仓央嘉措python 纳兰容若人生若只如初见 泰戈尔飞鸟集
(四)逆向参数传递
所谓逆向参数收集,指的是在程序己有列表、元组、字典等对象的前提下,把它们的元素“拆开”后传给函数的参数。逆向参数收集需要在传入的列表、元组参数之前添加一个星号,在字典参数之前添加两个星号。
代码:
def man(name,book): print('名字是:'+name) print('作品是:'+book) a = ['泰戈尔','飞鸟集'] man(*a) b = man('泰戈尔','园丁集')
结果:
名字是:泰戈尔 作品是:飞鸟集 名字是:泰戈尔 作品是:园丁集
(五)函数返回多个值
代码:
def sum_and_avg(list): sum = 0; count = 0; for i in list: if isinstance(i,int) or isinstance(i,float): sum += i count +=1 print(sum) print(sum/count) # 获取sum_and_avg函数返回的多个值,多个返回值被封装成元组 list1 = [2,4,6,7,3,5,6,'g'] sum_and_avg(list1)
结果:
33 4.714285714285714
代码:
def sum_and_avg(list): sum = 0; count = 0; for i in list: if isinstance(i,int) or isinstance(i,float): sum += i count +=1 return sum,sum/count list1 = [2,4,6,7,3,5,6,'g'] a,b= sum_and_avg(list1) # 使用序列解包来获取多个返回值 print(a) print(b)
结果:
33 4.714285714285714