python(函数)第十四节

(一)函数的定义及调用

代码:

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

  

  

 

猜你喜欢

转载自www.cnblogs.com/abcd8833774477/p/11831467.html