python·—函数详解(下篇)

Python----函数详解(下篇)

**_上篇文章我们讲了Python中的内置函数,今天我们来讲一下Python中的自定义函数。

顾名思义,所谓自定义函数就是我们为了解决某一具体问题,由程序员自己编写的函数,为了准确地定义函数解决问题,提高程序的运行效率,我们需要准确把握以下几点:

自定义函数的格式:
① 函数代码块以**def**关键字开头**后面接函数名称** 和**圆括号** 

②任何传入参数和自变量必须在圆括号内

③在函数内部的第一行语句可使用**文档字符串对函数的功能加以说明**

④函数体从冒号开始,遵守缩进规则

举栗:

#自定义一个问好函数
def say_hello():
    print("hello, welcome to our school!")


'''
函数定义格式:
def 函数名(参数列表) :
    函数体

'''
自定义函数的调用:

定义好函数后,只需调用就可以用来解决问题

#定义一个求解圆的面积的函数
def Circle_area(radiu):
    area = 3.14*radiu**2
    print("半径为%s的圆的面积为:%f"%(str(radiu), area ))
    return area
Circle_area(2)#函数的调用
'''
运行效果:
半径为2的圆的面积为:12.5600
'''
函数的参数传递

再说参数传递之前,我们先来讲一下Python中的可变对象与不可变对象

注意:在python中,只有对象才有类型,变量没有类型,它仅仅是对象的一个引用(指针)

实例说明:

x = (1, 2, 3,4)
x = 99
'''
(1, 2, 3, 4)是元组类型
99数数值类型(int)
x是变量,它没有类型,它仅仅是对象的一个引用(指针),可以指向某一类型的对象,就好比是一个标签,当x = 99时,就是将x这个标签拴在了99上了,通过这个x,就顺延看到了99,于是在交互模式中,>>> x输出的结果就是99,给人的感觉似乎是x就是99,事实是x这个标签贴在数值99上面。同样的道理,当x = (1,2,3,4)时,标签就换位置了,贴到元组上面。
所以,作用等同于标签的变量x没有类型之说,它不仅可以贴在整数类型的对象上,还能贴在其它类型的对象上,
故在python中,只有对象才有类型,变量没有类型
'''
不可变对象:

python中的不可变对象有,字符串(string)、元组(tuple)、数值类型(number)。

可变对象:

python中可变对象有列表(list)、字典(dict)等等。

不可变对象与可变对象在函数参数传递过程中的区别:

在python的函数参数传递过程中,【不可变对象传递】与C语言中的【值传递类似】,(即在函数内部进行的一些操作不会影响对象本身),实际上,在函数内部修改的只是传递的不可变对象的一个副本

在python函数的参数传递过程中,【可变对象的传递】与C语言中的【引用传递类似】,即将对象本身传递过去,修改后函数外部的该对象的值也会被改变。实际上,在函数内部修改的是传递的可变对象的一个原本

注意:在python中一切皆是对象,严格来讲不能说是值传递或引用传递,应该说传的是 可变对象或不可变对象

实例演示:

def fun(x, lists):
    x+=2
    lists.append("change")
    return
a = 2
lis= [ ]
fun(a, lis)
print("函数调用后\n不可变对象 a= %d\n可变对象lis = %s" % (a, str(lis)))

'''运行结果
函数调用后
不可变对象 a= 2
可变对象lis = ['change']

进程已结束,退出代码0

'''

函数的参数类型:

调用函数时有4种参数类型

必需位置参数:

必需位置参数要求必须以正确的顺序传入参数,并且调用时的数量必须和声明时的一样。

实例说明:

#定义函数打印指定个数的字符
def fun(str, count):
    print(str*count)
    return
fun("%",9)#调用函数打印9个%
fun("#")#会报错少了一个必需位置参数
'''
Traceback (most recent call last):
  File "C:\Users\yuanfang\Desktop\刷题\刷题2", line 4, in <module>
    fun("#")
TypeError: fun() missing 1 required positional argument: 'count'

进程已结束,退出代码1

'''
关键字参数:

关键字参数和函数调用关系密切,函数调用使用关键字参数来确定传入的参数值。需要注意的是,使用关键字参数允许函数调用时参数的顺序与声明时不一致,python解释器会使用参数名与参数值进行匹配

#定义函数打印指定个数的字符
def fun(str, count):
    print(str*count)
    return
fun(str = "%",count = 9)#使用关键字参数调用函数打印9个%
默认参数:

调用函数时,如果没有传递参数进来,就会使用默认参数。#注意:如果函数的参数列表中既有默认参数又有非默认参数,那么非默认参数必须位于默认参数前

#定义函数打印指定个数的字符
def fun(str , count = 9):
    print(str*count)
    return
fun(str = '$')#调用函数打印9个%
不定长参数:

有时需要一个函数能处理比当初声明时更多的参数,这些参数就叫做不定长参数。加了星号的变量名会存放所有未命名的变量参数,如果在函数调用时没有指定参数,那他就是一个空元组。

def fun(arg1, *valtuple):
    print("必需参数的值: ", arg1)
    if len(valtuple)==0:
        print("未传入可变长参数")
    else:
        for val in valtuple:
            print("可变参数为:" ,val)
    return
fun(88)#第一次调用
print("".ljust(50,"#"))
fun(12,12,23,3,4546,666)#第二次调用
'''
运行结果
必需参数的值:  88
未传入可变长参数
##################################################
必需参数的值:  12
可变参数为: 12
可变参数为: 23
可变参数为: 3
可变参数为: 4546
可变参数为: 666

进程已结束,退出代码0
'''
·
匿名函数、

匿名函数就是不再使用def语句这样的标准形式来定义一个函数。在python中使用lambda来创建匿名函数。

匿名函数具有以下几个特点:

1)lambda的主体是一个表达式,而不是一个代码块。只能在lambda表达式中封装有限的逻辑。

2)lambda函数有自己的命名空间,且不能访问自己的参数列表之外或全局命名空间里的参数。

3)lambda函数的语法只包含一个语句。

举例说明:

mylambda = lambda a1, a2, a3 : a1*a2*a3
print("调用匿名函数,并返回结果:",mylambda(2,3,4))

life is short ,you need Python.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

由心同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值