python 函数

本文详细介绍了Python中的函数,包括函数参数、定义、实参传递方式、返回值、文档字符串、作用域和递归。此外,还探讨了函数式编程概念,如高阶函数、filter、lambda、map、sort和闭包,展示了如何利用这些特性来增强代码的可读性和效率。
摘要由CSDN通过智能技术生成

函数

函数也是一个对象
对象是内存中专门用来存储数据的一块区域,函数可以用来保存一些可执行的代码,并且可以在需要时,对这些语句进行多次的调用
创建函数:

def 函数名([形参1,形参2,…形参n]) :
代码块
函数名必须要符合标识符的规范
(可以包含字母、数字、下划线、但是不能以数字开头)
函数中保存的代码不会立即执行,需要调用函数代码才会执行
-调用函数:
函数对象()
-定义函数一般都是要实现某种功能的

定义函数

def zichuang():
    print('这是一个自创函数!')#定义函数

zichuang()#调用函数
#result
这是一个自创函数!

即zichuang是函数对象,zichuang()是调用函数

函数参数

在定义函数时,可以在函数名后的()中定义数量不等的形参,
多个形参之间使用,隔开
形参(形式参数),定义形参就相当于在函数内部声明了变量,但是并不赋值
实参(实际参数)
如果函数定义时,指定了形参,那么在调用函数时也必须传递实参,
实参将会赋值给对应的形参,简单来说,有几个形参就得传几个实参

def chengji(a, b, c):
    print('三个数的乘积 =', a * b * c)
chengji(1, 3, 4)
#result
三个数的乘积 = 12

练习:定义一个函数,可以根据不同的用户名显示不同的欢迎信息

a = input('请输入您的用户名:')
def yonghu(b):
    print(b, '欢迎使用!')
yonghu(a)
#result
请输入您的用户名:zfd
zfd 欢迎使用!

定义一个函数

定义形参时,可以为形参指定默认值
指定了默认值以后,如果用户传递了参数则默认值没有任何作用
如果用户没有传递,则默认值就会生效

def lianxi (a=1,b=3,c=5):
    print('a=',a)
    print('b=',b)
    print('c=',c)
lianxi(2)
#result
a= 2
b= 3
c= 5

实参的传递方式

位置参数
位置参数就是将对应位置的实参复制给对应位置的形参
第一个实参赋值给第一个形参,第二个实参赋值给第二个形参 。。。

def lianxi(a,b,c):
    print(a,b,c)
lianxi(1,3,4)
#result
1 3 4

关键字参数
关键字参数,可以不按照形参定义的顺序去传递,而直接根据参数名去传递参数
位置参数和关键字参数可以混合使用
混合使用关键字和位置参数时,必须将位置参数写到前面,并且关键字参数不能重复

def lianxi(a,b,c):
    print('a=',a)
    print('b=',b)
    print('c=',c)
#lianxi(1,3,4) 这种是位置参数
lianxi(a=2,c=4,b=3)#这种是关键字参数,即直接将参数赋值
#result
a= 2
b= 3
c= 4

函数在调用时,解析器不会检查实参的类型
实参可以传递任意类型的对象

def hanshu (a):
    print(a,type(a),id(a))
hanshu(1)
hanshu('str')
hanshu(True)
hanshu(input )
#result
1 <class 'int'> 140704112222608
str <class 'str'> 1817487751216
True <class 'bool'> 140704111700304
<built-in function input> <class 'builtin_function_or_method'> 1817458306328

在函数中对形参进行重新赋值,不会影响其他的变量,如果形参执行的是一个对象,当我们通过形参去修改对象时,会影响到所有指向该对象的变量

def hanshu(a,b):
    a=12#这里是对变量重新赋值
    b=[4,5,6]#这里是对变量重新赋值
    print('a=',a,id(a))
    print('b=', b, id(b))
c=10
d=[1,2,3]
hanshu(c,d)
print('c=',c,id(c))
print('d=',d,id(d))
#result
a= 12 140704167994096
b= [4, 5, 6] 2347341599624
c= 10 140704167994032
d= [1, 2, 3] 2347341599112

def hanshu(a,b):
    a=12
    b[0]=110#这里是修改对象,则指向这个对象的变量都会变,即这里修改的是变量b对应的对象,同时变量d也指向这个对象,所以导致变量d也跟着变。
    print('a=',a,id(a))
    print('b=', b, id(b))
c=10
d=[1,2,3]
hanshu(c,d)
print('c=',c,id(c))
print('d=',d,id(d))
#result
a= 12 140704167994096
b= [110, 2, 3] 2375211831688
c= 10 140704167994032
d= [110, 2, 3] 2375211831688

所以如果有形参修改对象的要求并且不希望原变量也跟着变,那么可以传进去一个变量的副本(浅复制)或者切片,对副本进行修改则不会修改对象,也不会影响原来的变量。

def hanshu(a,b,e):
    a[0]=112
    b[0]=110
    e[0]=119
    print('a=',a,id(a))
    print('b=', b, id(b
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值