Python学习笔记(11)-Python自定义函数

本文详细介绍了Python中的函数定义、参数传递方式、参数类型以及lambda表达式的使用。通过具体示例讲解了值传递与引用传递的区别,并展示了如何利用参数的灵活性进行高效编程。

点此查看 零基础Python全栈文章目录及源码下载

1. 简介

编程语言的函数都可以分为两类:内置函数和自定义函数。在Python语言中,直接可以调用的函数如print()就是内置函数,程序开发者也可以将一些功能写成函数以方便反复使用,自己写函数即自定义函数。

本篇将介绍:

  • 函数定义
  • 函数中的参数传递(值传递、引用传递)
  • 函数参数类型
  • lambda表达式的使用

2. 函数定义

举个简单的例子如下,第一行第二行定义了一个函数,第三行调用函数并将函数的返回值赋给了变量result,最后一行输出result。

def add(num1,num2):
    return num1+num2

result=add(1,2)
print(result)#输出3

由此可见Python函数定义还是比较简单的,注意几个规则即可:

  1. 函数定义的关键字为def
  2. def所在列的最后要加冒号,应该是提示解释器:“哦,后面就是具体函数实现代码了。”
  3. 函数体要换行

需要注意一个有趣的例子如下,如果函数中没有返回值,那么返回值就是空,非常合理!

def test():
    print("这是函数test()");
result=test()
print(result)#输出为None

3. 参数传递(值传递与引用传递)

与C/C++/Java/C#等语言是类似的,Python中对于变量的传递,依然有着值传递和引用传递的区别。

之前也说过,Python中的变量实际保存的是对象的地址,所以变量可以代表任意类型的Python对象。

那么值传递、引用传递的区别就在于,值传递时函数的参数是在一个新的地址上接受了原参数的值,例子如下,可见num的地址和a的地址不同,num只是复制了a的值,改变num的值并不会改变a的值(修改的是不同地址的内容)。

def numAdd(num):
    num=100
    print(id(num))#输出1853276320
a=0;
print(id(a))#输出1853273120
numAdd(a)
print(a)#输出为0

那么引用传递就不一样了,因为引用传递就是传递的地址,所以修改了引用的内容,原来参数的内容也就改变了,例子如下,可见引用传递时两个参数指向同样地址。

def listAdd(tempList):
    tempList.append(-1)
    print(id(tempList))#输出48225224

list1=[1,2,3]
print(id(list1))#输出48225224
listAdd(list1)
print(list1)#输出[1, 2, 3, -1]

OK,一把来说,数字、字符串、元祖这种不能改变内容的对象,是值传递的,其他对象一般是引用传递。

4. 函数参数类型

Python语言作为一种脚本语言,参数的定义非常灵活,需要注意一些语法上的用法,包括:

  1. 参数的顺序
  2. 参数的默认值
  3. 参数的个数

在Python中以上三点都是灵活可变的,用得好了十分犀利,但是也别玩大了用混了就非常麻烦了。

1,参数的顺序问题,在Python中调用函数时可以通过指定参数名来调换参数次序,举个例子就明白了:

def testOrder(param1,param2):
    print("参数1:"+param1)
    print("参数2:"+param2)

testOrder("1","2")#正常顺序
testOrder(param2="2",param1="1")#通过指定参数名更换顺序,效果与上一句一模一样

2,参数的默认值问题。可以通过在函数定义时指定默认值,然后调用时如果不输入该参数的值,则使用默认值,这个功能还是比较实用的,例子如下:

def testOrder(param1,param2="haha"):#默认值"haha"
    print(param1)
    print(param2)
testOrder("1","2")#正常调用,输出1 2
testOrder("1")#参数2使用默认值,输出1 haha

3,还是因为Python是一种脚本语言,决定了Python的灵活性需求,所以在Python中参数的个数都是可以自定义的。举个例子如下,如果参数类型写的是*nums,则nums参数可以接受0,1,2或者更多个参数,就是这么简单而方便,厉害了我的星号哥。

def printAll(* nums):
    for num in nums:
        print(num)

printAll(1,"2",True)#输出1,2,True

5. 锋利的lambda 表达式

在Java和C#都有lambda 表达式的情况下,更加灵活的Python怎么可能落于人后,这个可以有,而且也是必须得有啊。

其实lambda 表达式本质上就是一种简化的函数定义方法,正常情况下函数使用def定义且需要换行,lambda 为了快速方便换了个关键字就是lambda ,然后把换行去掉,完事!

例如:

#正常定义函数
def add(num1,num2):
    return num1+num2
#将def改为lambda,参数列表去掉(),冒号之后不换行,就OK了。
add=lambda num1,num2:num1+num2;
print(add(1,2))

大家可能也看出来了,lambda简单是简单,但是功能有限,因为冒号之后只能写有限的代码,而且只能访问到lambda参数列表中的参数(无法访问全局参数)。

是所谓:尺有所长,寸有所短嘛。

Python学习笔记》是由皮大庆编写的一本关于Python语言学习的教材。在这本书中,作者详细介绍了Python语言的基础知识、语法规则以及常用的编程技巧。 首先,作者简要介绍了Python语言的特点和优势。他提到,Python是一种易于学习和使用的编程语言,受到了广大程序员的喜爱。Python具有简洁、清晰的语法结构,使得代码可读性极高,同时也提供了丰富的库和模块,能够快速实现各种功能。 接着,作者详细讲解了Python的基本语法。他从变量、数据类型、运算符等基础知识开始,逐步介绍了条件语句、循环控制、函数、模块等高级概念。同时,作者通过大量的示例代码和实践案例,帮助读者加深对Python编程的理解和应用。 在书中,作者还特别强调了编写规范和良好的编程习惯。他从命名规范、注释风格、代码缩进等方面指导读者如何写出清晰、可读性强的Python代码。作者认为,良好的编程习惯对于提高代码质量和提高工作效率非常重要。 此外,作者还介绍了Python的常用库和模块。他提到了一些常用的库,如Numpy、Pandas、Matplotlib等。这些库在数据处理、科学计算、可视化等领域有广泛的应用,帮助读者更好地解决实际问题。 总的来说,《Python学习笔记》是一本非常实用和全面的Python学习教材。通过学习这本书,读者可以系统地学习和掌握Python编程的基础知识和高级应用技巧,为以后的编程学习和工作打下坚实的基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

编程副队长

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

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

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

打赏作者

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

抵扣说明:

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

余额充值